Element Path: <cwt><ARTICLE><deliverables><ioPortDeliverable>
This is the basic CWT I/O output functions using the outlets on the AVE board itself.
For EC7 platform only! |
Different output functions can be triggered from several parts in purchase flow by using <deliverables> under an <article>. Different articles can activate the same or other output functions.
An output can be assigned to a physical space by using PayBySpace and configure one or several outputs with the same space number.
Activation of an output is called a TriggerAction and an output function is called an OutputDelivery.Different output functions, (called I/O Deliverables), can be trigged, (called Trigger Actions), from various parts in the purchase flow. Trigger actions and I/O deliverables are configured in the article-tag as an I/O Port Deliverable. One or more I/O Port Deliverables can be configured per article.
I/O Port Deliverable can be assigned to a physical space by using PayBySpace configuration and configure one or several outputs with the same space number.
The output handling separates pulses that are shorter and longer than 60 seconds. Shorter pulses are executed directly in the application purchase flow. While longer pulses are handled by the application scheduler. The schedulers time resolution is one minute and trigged by RTC clock pulses.
Long-time pulses will keep its state if the terminal enters sleep mode. Active short time pulses won’t allow the terminal to enter sleep mode.
Known limitations:
• | Current implementation: I/O is for EC7 only |
• | When the deliverable is a pulse train or a pulse under 1 minute, the CWT is ‘locked’ until the pulse train is finished (i.e. nothing can be done on the terminal while the pulses are ongoing) |
• | When the deliverable pulse is over 60 seconds, the CWT is not ‘locked’. But an ongoing I/O operation can be aborted by a new purchase that activates/deactivates the same I/O output. (i.e. there is no blocking of already activated I/O operations.) |
• | If the deliverable “DeliveryAsOnePulseBeforeExpiryTime” is trigged with a pulse time longer than the purchased time, the pulse will be enabled longer than the expiry of the purchased time. |
• | General limitations: |
o | Timing accuracy, due to messages and processes delays in the system exact timing won’t be meet. |
o | No support in Post-payment. |
Attributes
Range: |
Description: |
ioPortName
Range: | IoOutput0-7 |
Description: | I/O ouput name, connected to a physical outlet in <CORE> <outlets> |
Same ioPortName can be used in same or other articles. (But be sure to not activate them at the same time).
outputDelivery
Range: | DeliveryAsOnePulse DeliveryUnitsAsPulses DeliveryUnitsAsActivationTime DeliveryAsOnePulseBeforeExpiryTime DeliveryDeactivateOutput |
Description: | Defines the behaviour of an output. |
parkingSpaceId
Range: | Space number in string format |
Description: | The Space id is used to connect a output/output function to a space. |
pulseTimeDelayInMs
Range: | 0 - 2147483647mS |
Description: | 0 – no delay |
pulseTimeOffInMs
Range: | 0 - 2147483647mS |
Description: | 0 – not deactivated |
pulseTimeOnInMs
Range: | 0 - 2147483647mS |
Description: | Defines how long time the outlet is on, in milliseconds. The value is multiplied with the scaling attribute to get the total activation time. 0 – not activated. |
scaling
Range: | String format 0.0 to very big number. |
Description: | Decimal with double precision. Scales number of units, number of pulses or pulse on time depending on outputDelivery. |
triggerAction
Range: | TriggerAcceptButtonBeforeCardValidation TriggerAfterCardValidation TriggerAfterCompletedPurchase TriggerAfterCompletedPurchaseConfirmed TriggerAfterCompletedPurchaseDeclined TriggerAfterTicketPrintedBeforeRemoval TriggerAfterTicketRemoval TriggerAfterRejectedPurchase TriggerFromUI |
Description: | Defines which purchase state function that will trig an output function. |
See triggerAction Details for a description of each triggerAction
outputDelivery Details.
DeliveryAsOnePulse
Description: | The output is activated a fixed time defined in config. |
Application example; activation signal to barriers or 3:rd part systems that need a short trigger pulse.
Details: | Pulse On Time: pulseOnTimeInMs x scaling |
Pulse Off Time: not needed. (set internal to 1 ms )
Delay Time: pulseDelayTimeInMs
DeliveryAsOnePulseBeforeExpiryTime
Description: | The output is activated a fixed time before the expiry time of a purchase. |
Application example: electric engine warmer. Ex. The user pays for 8h of parking and gets 30 minutes of electric engine warmer before the expiry time.
Details: | Pulse On Time: pulseOnTimeInMs x scaling |
Pulse Off Time: not needed. (set internal to 1 ms )
Pulse Start Time: Expiry Time - Pulse On Time
Pulse Stop Time: Pulse Start Time + Pulse On Time
If Pulse On Time is longer than purchased time, the Pulse is turned on direct. The pulse will be turned on during the whole Pulse On Time, even if it will end after the purchased expiry time.
DeliveryDeactivateOutput
Description: | The output is turned off. |
DeliveryUnitsAsActivationTime
Description: | The output is activated for x seconds per purchased unit, multiplied with the scaling factor in config. |
Application example; electrical car charging
Details: | Pulse On Time: purchased units x scaling |
Pulse Off Time: not needed. (set internal to 1 ms )
Delay Time: pulseDelayTimeInMs
DeliveryUnitsAsPulses
Description: | The output is pulsed for the number of purchased units multiplied with a scaling factor in config. |
Application example; “Space wash” were the pulses are related to the tariff. 1unit is one pulse etc.
Details: | Pulse On Time: pulseOnTimeInMs |
Pulse Off Time: pulseOffTimeInMs
DelayTime: pulseDelayTimeInMs
Number of pulses: Units x scaling
Example: 1: Engage a barrier after purchase is completed
Outlet function 0 is activated for 700mS after the purchase is completed.
<ARTICLE articleId="1" name="Parking" useCommonTariffs="false" autoSelectTariff="true" defaultTariffId="1" VATCategory="1" purchaseCategory="10">
<paymentService id="1" />
<deliverables>
<ioPortDeliverable ioPortName="IoOutput1" triggerAction="TriggerAfterCompletedPurchase" outputDelivery="DeliveryUnitsAsActivationTime" scaling="60.0" />
<!-- Units as active time: scaling gives 1 minute per purchased unit -->
</deliverables>
</ARTICLE>
Example: 2: Electric car charging
Output delivery, units as activation time: each purchased unit is 60 seconds, Space 1 = Output 1, Space 2 = Output 2, etc…
<ARTICLE articleId="1" name="Parking" useCommonTariffs="false" autoSelectTariff="true" defaultTariffId="1" VATCategory="1" purchaseCategory="10">
<paymentService id="1" />
<deliverables>
<ioPortDeliverable ioPortName="IoOutput1" parkingSpaceId="1" triggerAction="TriggerAfterCompletedPurchase" outputDelivery="DeliveryUnitsAsActivationTime" scaling="60.0" />
<ioPortDeliverable ioPortName="IoOutput2" parkingSpaceId="2" triggerAction="TriggerAfterCompletedPurchase" outputDelivery="DeliveryUnitsAsActivationTime" scaling="60.0" />
<ioPortDeliverable ioPortName="IoOutput3" parkingSpaceId="3" triggerAction="TriggerAfterCompletedPurchase" outputDelivery="DeliveryUnitsAsActivationTime" scaling="60.0" />
<ioPortDeliverable ioPortName="IoOutput4" parkingSpaceId="4" triggerAction="TriggerAfterCompletedPurchase" outputDelivery="DeliveryUnitsAsActivationTime" scaling="60.0" />
<ioPortDeliverable ioPortName="IoOutput5" parkingSpaceId="5" triggerAction="TriggerAfterCompletedPurchase" outputDelivery="DeliveryUnitsAsActivationTime" scaling="60.0" />
<!-- Units as active time: scaling gives 1 minute per purchased unit -->
</deliverables>
</ARTICLE>
Example: 3: Space Wash
Space wash with 3 different programs selected by entering different number using PayBySpace. Same output is activated but with different number of pulses.
<ARTICLE articleId="1" name="SpaceWashProgram 1" useCommonTariffs="false" autoSelectTariff="true" defaultTariffId="1" VATCategory="1" purchaseCategory="10">
<paymentService id="1" />
<deliverables>
<ioPortDeliverable ioPortName="IoOutput0" triggerAction="TriggerAfterCompletedPurchase" outputDelivery="DeliveryUnitsAsPulses" parkingSpaceId="1" pulseTimeOnInMs="500" pulseTimeOffInMs="500" pulseTimeDelayInMs="1000" scaling="1.0" />
<!-- 1 unit is purchased for ex 100kr. 1 pulse 1 second pulse duty cycle 50%, 1second delay, scaling, activated at ticket removal. -->
</deliverables>
</ARTICLE>
<ARTICLE articleId="2" name="SpaceWashProgram 2" useCommonTariffs="false" autoSelectTariff="true" defaultTariffId="1" VATCategory="1" purchaseCategory="10">
<paymentService id="1" />
<deliverables>
<ioPortDeliverable ioPortName="IoOutput0" triggerAction="TriggerAfterCompletedPurchase" outputDelivery="DeliveryUnitsAsPulses" parkingSpaceId="2" pulseTimeOnInMs="500" pulseTimeOffInMs="500" pulseTimeDelayInMs="1000" scaling="2.0" />
<!-- 1 unit is purchased for ex 150kr. 2 pulses 1 second pulse duty cycle 50%, 1second delay, scaling, activated at ticket removal. -->
</deliverables>
</ARTICLE>
<ARTICLE articleId="3" name="SpaceWashProgram 3" useCommonTariffs="false" autoSelectTariff="true" defaultTariffId="1" VATCategory="1" purchaseCategory="10">
<paymentService id="1" />
<deliverables>
<ioPortDeliverable ioPortName="IoOutput0" triggerAction="TriggerAfterCompletedPurchase" outputDelivery="DeliveryUnitsAsPulses" parkingSpaceId="3" pulseTimeOnInMs="500" pulseTimeOffInMs="500" pulseTimeDelayInMs="1000" scaling="3.0" />
<!-- 1 unit is purchased for ex 200kr. 3 pulses 1 second pulse duty cycle 50%, 1second delay, scaling, activated at ticket removal. -->
</deliverables>
</ARTICLE>
Example: 4: Configuration to use output for electrical engine warmer.
Space 1-8 activates outlet function 0-7. Activation is done 30 minutes before expiry time.
<ARTICLE articleId="3" name="ParkAndWarm" useCommonTariffs="false" autoSelectTariff="true" defaultTariffId="3" VATCategory="1" purchaseCategory="10">
<paymentService id="1" />
<deliverables>
<ioPortDeliverable ioPortName="IoOutput0" triggerAction="TriggerAfterCompletedPurchase" outputDelivery=" DeliveryAsOnePulseBeforeExpiryTime" parkingSpaceId="1" pulseTimeOnInMs="60000" scaling="30.0" />
<ioPortDeliverable ioPortName="IoOutput1" triggerAction="TriggerAfterCompletedPurchase" outputDelivery=" DeliveryAsOnePulseBeforeExpiryTime" parkingSpaceId="2" pulseTimeOnInMs="60000" scaling="30.0" />
<ioPortDeliverable ioPortName="IoOutput2" triggerAction="TriggerAfterCompletedPurchase" outputDelivery=" DeliveryAsOnePulseBeforeExpiryTime" parkingSpaceId="3" pulseTimeOnInMs="60000" scaling="30.0" />
<ioPortDeliverable ioPortName="IoOutput3" triggerAction="TriggerAfterCompletedPurchase" outputDelivery=" DeliveryAsOnePulseBeforeExpiryTime" parkingSpaceId="4" pulseTimeOnInMs="60000" scaling="30.0" />
<ioPortDeliverable ioPortName="IoOutput4" triggerAction="TriggerAfterCompletedPurchase" outputDelivery=" DeliveryAsOnePulseBeforeExpiryTime" parkingSpaceId="5" pulseTimeOnInMs="60000" scaling="30.0" />
<ioPortDeliverable ioPortName="IoOutput5" triggerAction="TriggerAfterCompletedPurchase" outputDelivery=" DeliveryAsOnePulseBeforeExpiryTime" parkingSpaceId="6" pulseTimeOnInMs="60000" scaling="30.0" />
<ioPortDeliverable ioPortName="IoOutput6" triggerAction="TriggerAfterCompletedPurchase" outputDelivery=" DeliveryAsOnePulseBeforeExpiryTime" parkingSpaceId="7" pulseTimeOnInMs="60000" scaling="30.0" />
<ioPortDeliverable ioPortName="IoOutput7" triggerAction="TriggerAfterCompletedPurchase" outputDelivery=" DeliveryAsOnePulseBeforeExpiryTime" parkingSpaceId="8" pulseTimeOnInMs="60000" scaling="30.0" />
</deliverables>
</ARTICLE>
Example: 5: Configuration of mapping IoOutputs to outlets.
<outlets>
<outlet name="12V_1" mode="IoOutput7" />
<outlet name="5V_COM_1" mode="IoOutput4" />
<outlet name="5V_COM_3" mode="IoOutput0" />
<outlet name="5V_COM_4" mode="IoOutput1" />
<outlet name="12V_2" mode="IoOutput6" />
<outlet name="12V_MDB" mode="IoOutput5" />
</outlets>