In order to provide a universal communication protocol between petroleum dispensers and Broadsign Player, the Dispenser Independent API (DIAPI) provides a native integration for third-party software to communicate the different stages of a fueling transaction to the player so it plays content accordingly.
For example, whether a fuel pump is closed, fueling or idle, you can condition content to appear accordingly. You create an experience that accompanies the customer through the payment process.
Participants
For DIAPI configurations, three participants are involved:
- The Broadsign Player: Responsible for playing content based on the events communicated.
- Third party software: Middleware responsible for implementing the DIAPI interface — not provided by Broadsign.
- Dispenser: The fuel dispenser’s internal software and hardware
Communication Flow
All communication between the Broadsign Player and the middleware will be over standard TCP/IP over a configurable port. The communication between the middleware and the dispenser will have to be achieved via existing proprietary APIs.
There are a number of features specific to the Dispenser Independent API protocol:
- XML over TCP/IP: The DIAPI protocol consists of a series of UTF-8 encoded XML messages sent and received over a standard TCP/IP connection. Each XML message is followed by a null byte (“”). The default TCP port for a DIAPI connection is 10999 and can be configured to any port over which the middleware and Player will be listening and connecting. In a similar fashion, by default the host to connect to is localhost and can be configured to any other host.
- Authentication/Encryption: The DIAPI protocol does not implement any form of authentication or encryption.
- Event Types: The following event types are supported by the DIAPI:
DISPENSER_STATE
: This event is sent every time the state of the dispenser changes, e.g.,CAR_PRESENT
,FUELING
.GRADE_SELECTED
: This event is sent when a fuel grade is selected.DISPENSER_DATA
: This event is sent when the dispensing operation begins. It carries information about pricing, currencies and units of measure.TRANSACTION_DATA
: This event is sent at a high frequency as the dispensing occurs. It is primarily responsible for transmitting the volume of fuel dispensed.ERROR_DATA
: This event is sent when any error occurs within the dispenser or with the connection between the middleware and dispenser.HEARTBEAT
: This event is sent by the middleware at regular intervals to inform clients that it is still operational.
- Implementation Specifics:
- monitor_diapi: The Broadsign player implements a new monitor called
monitor_diapi
. It is responsible for establishing a TCP connection, issuingSubscribeRequests
and interpreting the received messages. - Self Healing: If the TCP connection is impossible to establish or is severed, the Broadsign Player will retry every 15 seconds until established.
- Error handling and reporting: If the connection fails after 8 attempts (2 min), an incident will be reported to the Broadsign Server. Once reestablished, the incident will get automatically resolved. Likewise, if an
ERROR_DATA
is received by the Player, an incident will be reported and resolved when aDISPENSER_STATE
event is received. Finally, if aHEARTBEAT
event is not received after 95 seconds (3 missed heartbeats + 5 sec buffer), an incident will be opened, the current connection will be dropped and a re-connect will be initiated.
- monitor_diapi: The Broadsign player implements a new monitor called
The following XML samples indicate how to use the DIAPI:
- Subscribe Request:
<SubscribeRequest> <event type="DISPENSER_STATE"/> <event type="TRANSACTION_DATA"/> <event type="HEARTBEAT"/> </SubscribeRequest >
- Subscribe Response:
<SubscribeResponse> <event type="DISPENSER_STATE"/> <event type="TRANSACTION_DATA"/> <event type="HEARTBEAT"/> </SubscribeResponse >
- DISPENSER_STATE event:
<Event type = "DISPENSER_STATE"> <state name="IDLE"/> </Event>
- GRADE_SELECTED event:
<Event type = "GRADE_SELECTED"> <grade id="1"/> </Event>
- DISPENSER_DATA event:
<Event type = "DISPENSER_DATA"> <dispenser_data pump_number="4" currency=" €" volume_unit="L" /> <grades> <grade id="1" price="1,398" /> <grade id="1" price="1,398" /> <grade id="3" price="1" /> </grades> </Event>
- TRANSACTION_DATA event:
<Event type = "ERROR_DATA"> <error id="1">Connection with calculator lost</error> </Event>
- ERROR_DATA event:
<Event type = "ERROR_DATA"> <error id="1">Connection with calculator lost</error> </Event>
- HEARTBEAT event:
<Event type = "HEARTBEAT"/>
You can remotely configure the following items:
- Enabling/disabling the DIAPI integration (disabled by default).
- The hostname and port to connect to (default localhost:10999).
- Conditions and triggers to set when a
GRADE_SELECTED
event is received. - Conditions and triggers to set when a
DISPENSER_STATE
is received. - Trigger: Will immediately change the loop (potentially truncating content).
- Play Next Trigger: Will wait for the current content to end before changing the loop.
- Interrupt: When this option is enabled, the loop will be interrupted. A set of frame criteria must be selected to indicate on which frame the interrupt should be applied.
- Alternating conditions: A list of conditions that will alternate each time that type is received.
- Reset loop when dispenser state changes: If enabled, this will reset the loop to the beginning each time the dispenser state changes. Useful if a specific play order is desired each time instead of resuming where it last left off.
- Edit: Edit the conditions and triggers for the selected grade or state.
- Remove: Clear the conditions and triggers for the selected grade or state. If remove is clicked a second time once all the conditions and triggers have been cleared, the user will be prompted “Are you sure to wish to remove [$string]?” where
$string
is the selected grade or state. If confirmed, it is removed from the list of grades and states. - Define New: When clicked, allows the user to define a new, arbitrary grade or dispenser state.