Release Notes

Syrus Cloud

Version 0.8.5



  • Added, A friendly message to advise invalid IMEI or serial format on Device Search actions (Devices and All Devices views), and other errors on these sections.
  • Added, the Apex OS beta versions chart in the dashboard organization and group.
  • Added, the list of available geofences in App Configuration within the Syrusjs app.
  • Added, a link to the Syrus Cloud Documentation.
  • Added, a devices filter panel in Dashboard Devices, Summary, Diagnostics, Commands, Videos, Accelerometer, Applications Overview, and Profiles Overview.
  • Added, support for inserting new devices to the Syrus Cloud from QCstatus pass-tests reports.
  • Added, a support to new inc-update of video diagnostics.


  • Support better stability in the connection of the camera(s)
  • Made more readable the clip's diagnostics.
  • Sorting of the files list on the tree view.
  • Detect paths according to the config type of files that are being uploaded (command "Upload File")
  • Updated information showed in desktop to mobile view on Summary, Diagnostics, and Videos views.


  • Fixed, missing tooltip in some device's state icons.
  • Fixed, the color of the device's old connection according to its status.
  • Fixed, the alignment of the items in the details right sidebar.
  • Fixed, the amount of data displayed in the dashboard charts (more readable).
  • Fixed, align the calendar in the Device Video Filter.
  • Fixed, the size of the data table in the profiles section.
  • Fixed, the inclusion of all filters in the reset function on the Device Video Filters.
  • Fixed, the linear loading progress on all-devices section.

Version 0.8.4



  • Added, show Cipia-config column on the summary table.
  • Added, show PSM stats in the Dashboards into online Devices Graphs.
  • Added, a new dashboard card for syrusJs versions.
  • Added, the number of devices in the Organization and Groups dashboards
  • Added, downloading profile's devices list button.
  • Added, the last media-event-info into the device's state.
  • Added, a column for the latest video's info on summary and video overview tables.


  • Changed, the style of the Group selector, adding underlining and highlighting hover.
  • Removed, the progress bar on the dashboard's cards.
  • Changed, the font size on the dashboard cards.
  • Changed, the warnings card to a pie chart instead of a list.
  • In the single-device dashboard, the warning message is hidden if the external memory is formatted.
  • Changed way to differentiate loading and updating state on tables where update-led works.


  • Fixed, show all pie categories details on dashboard cards.
  • Fixed, the device map dialog is updated with the latest positions.
  • Fixed, hide "searchText" prop on views and downloaded JSONs.

Version 0.8.3



  • Added, show the Device tag in breadcrumbs on mobile.
  • Added, the Organization dashboard with all the graphic information.
  • Added, a new filter to identify valid or corrupted videos on the device videos section with the following conditions:
    • Filter by Cipia videos (excluding images).
    • Success: All videos generated by the Cipia that are working.
    • Corrupted: All corrupted Cipia videos.
  • Last connection column on the videos overview.
  • Connected cameras column on the videos overview.


  • Accelerometer dialog configuration works even when the device is offline, leaving the command in a queue.
  • Disabled the sim-priority options from the devices section to avoid config errors.
  • Dashboard tabs are now in this order: Organization, Group, and Device.


  • Fixed, linear progress activated on all data tables according to each use case.
  • Fixed, showing the streaming state as active when it’s not.
  • Fixed, Hide the live button when it doesn’t apply (Movon & Cipia).

Version 0.8.2



  • Added, support for ecu-imports file on ecu profiles install/update.
  • Added, cipia information in Summary data tables.
  • Added, a switch on the 'Add devices' dialog in applications and profiles looking for filter-disabled devices.
  • Added, support for cipia configs on download-command shortcuts.
  • Added, allow sorting by Name and Online State on devices dashboard
  • Added, speed on maps location title.
  • Added, play-and-pause live table sorting button and update-led in mobile view.


  • Shared-components updated to 0.3.1 and 0.3.4
  • Mobile view in Management Applications and Profiles views.
  • A snackbar is shown when there is no information in the editor config on device calibration.
  • Changed, the way to show updated information, warnings, and errors in the single device dashboard. Now these actions are confirmed.
  • On the single-device dashboard, empty states are now better handled.
  • Data tables with device tags, had changed to export in CSV, adding Conn, Name, IMEI, and serial columns.
  • On the device sidebar, was added copy IMEI or serial function.


  • Fixed, editing an instance does not let's create a new instance's file.
  • Fixed, a bug in the editor dialog on the device dashboard. This dialog used to crash when a user selects "view file" in accelerometer single dashboard.
  • Fixed, not auto-checking devices when added to some new profiles.
  • Fixed, profile-copy does not copy config-file contents on some profile types.
  • Fixed, video tree updates with multiple events files, for instance, snapshot + video

Version 0.8.0



  • Added, a button to freeze information in data tables.
  • Added, support and pretty format for new videos in diagnostics messages.
  • Added, automatic creation of devices in Syrus-Cloud from Syrprod reports (factory QC report)


  • Images no longer need to be downloaded to view their content, now they can be viewed from the application.
  • Next to the freeze button, there is a badge that lights up when the table is updating data.
  • App now detects when a video is no longer available on the device.
  • The following views had been updated in mobile: Summary, Diagnostics, Commands, Videos, Accelerometer, Applications - Overview, Profiles - Overview, Users, Devices, Organizations, all devices and Admins.
  • Support updating the videos-list with incremental changes instead of triggering a list-videos command on new video-event.
  • Shared components updated to version 0.3.0


  • Fixed, state of icons from syrus lite, now is clear these devices are using SIM cards.
  • Restored showing versions on device's summary info panel
  • Fixed, sometimes not reading the min Apex Version requirement when editing instance
  • Fixed, installed instances of the device now show up correctly in sync, because previously they would show out of sync when they were not.
  • Fixed, a bug on warranty start detection.
  • Fixed, a batch correction of some devices that were assigned a wrong warranty start date.
  • Fixed, a bug when selecting predefined paths for file download.

Version 0.7.0


Dashboard with all devices view with the following features:

  • Added, a filter to find a device by name, IMEI or serial number.

  • Added, button to show or hide maps for all devices.

  • Added, button to maximize map for each device.

  • Added, in action button an option to copy IMEI or serial number to clipboard.

  • Added, a row with icons showing the information of the device, just let the mouse over the icon to see the information.

Summary side bar has the following features:

  • Added, a section in the sidebar with the name and model of device (requires latest ApexOS version)
  • Added, a diagnostics section reports last three errors or warnings occurred in the last two weeks.
  • Added, an instances section to show all instances of the selected device.
  • Added, an accelerometer section to show calibration status and settings.
    Other views:
  • Added, copy and download button in command response side bar.
  • Added, copy and download button in advanced options on summary and diagnostics side bar.

  • Added, Number of devices per group in management group section.

  • Added, Status icons for each device showing errors or warnings.

Created a new Dashboard for each device with the following features:

  • Added, Summary Card with the main information of the device.
  • Added, Accessory Card with the information of the accessories linked to the device.
  • Added, Accelerometer card that displays the calibration status and settings.
  • Added, Profiles and Instances cards giving information about configuration profiles and instances.
  • Added, Diagnostic Information, Diagnostic Warnings, Diagnostic Errors cards that show last three messages of each type occurred in the last two weeks.
  • Added, Warranty information card that shows the warranty information of the device.
  • Added, Mobile card with all the information related with mobile and network status of the device.
  • Added, Video and Location cards that reports the last video, with a button to go to the video panel and the last location of the device.


  • Commands and diagnostics tables of the device view was moved to a new tab called "COMM".


  • Fixed, sizing of device tables to give a better view.


This version requires the latest APEX beta release or the latest syrus-gps, syrus-bt and syrus-bbs packages


  • Malformed taip messages - Included a safe method to identify, log and remove malformed messages
  • Don't execute a commands if IMEI doesn't match with the device IMEI
  • MQTT repeated messages - Added a way to enforce secuential transmissions
  • Future timestamp improvements - Changed $gnss.timestamp source to gps epoch and added $gnss.time


  • Added OPTIONAL MQTT settings for fine tunning as in node-mqtt library and a secuential flag to enforce secuential transmission (reduces duplications)
define destination mqttmet json mqtt:// subscribe="subs/channel" publish="pub/channel" 
    # Subscription related

		# Publish related (defaults)

		# Basic settings (defaults)

		# Advanced settings (defaults)
  • Added suppor for Cipia driver recognition
###################### Driver identification as Ibutton Example ###########################
define fieldset default fields=$io,$fatigue_sensor,IB:$variables.driver_id
set variable driver_id 0

# Action
define action ac_set_ibutton_id trigger=@fatigue_sensor.driver_identified
    set variable driver_id {{$fatigue_sensor.driver_name}}01

# Signals
define signal cipia_driver $fatigue_sensor.driver_name == "180066003"

# Events
define event ev_driver_id group=tracking fieldset=default ack=seq label=default code=22 trigger=cipia_driver

  • Added support for double technoton fuel sensors
- Signals for single sensor
@fuel.event							[true|false]			Triggered when any fuel event is detected	
@fuel.state							[true|false]			Triggered when a state arrives	
@fuel.fueling						[true|false]			Triggered when a fueling notification arrives	
@fuel.warning						[true|false]			Triggered when a discharge warning notification arrives	
@fuel.connected					[true|false]			Triggered when a transition from disconnected to connected is detected	
@fuel.disconnected			[true|false]			Triggered when a transition from connected to disconnected is detected	

- States for single sensor
$fuel.connected				  [true|false]			Stores the last connected state	
$fuel.level							[0|9999]					Stores the last fuel level 	deciliters
$fuel.temperature				[0|9999]					Stores the last temperature level	°C
$fuel.frequency					[0|9999]					Stores the last frequency	hertz
$fuel.timestamp					[0|9999]					Stores the last notification timestamp	seconds
$fuel.event							[fueling|warning]	Stores the last event	

- Signals for double sensor
@fuel.alias.event	  			[true|false]			Triggered when any fuel signal is detected	
@fuel.alias.state 				[true|false]			Triggered when a state arrives	
@fuel.alias.fueling	  		[true|false]			Triggered when a fueling notification arrives	
@fuel.alias.warning				[true|false]			Triggered when a discharge warning notification arrives	
@fuel.alias.connected			[true|false]			Triggered when a transition from disconnected to connected is detected	
@fuel.alias.disconnected	[true|false]			Triggered when a transition from connected to disconnected is detected	

- States for double sensor
$fuel.alias.connected			[true|false]			Stores the last connected state of tank named alias	
$fuel.alias.level					[0|9999]					Stores the last fuel level of tank named alias	deciliters
$fuel.alias.temperature		[0|9999]					Stores the last temperature level of tank named alias	°C
$fuel.alias.frequency			[0|9999]					Stores the last frequency of tank named alias	hertz
$fuel.alias.timestamp			[0|9999]					Stores the last notification timestamp of tank named alias	seconds
$fuel.alias.event	  			[fueling|warning]	Stores the last event of  tank named alias	


  • Fixed IX taip tag for extended outputs


  [email protected]             - Triggered when any ble event arrives
  -$ble.ALIAS.rpm         - The rpm value [revolutions per minute]
  -$ble.ALIAS.temperature - The temperature value [°C]
  -$ble.ALIAS.battery     - The battey value [%]
  -$ble                   - Fieldset key name

#####################  Blazon DRS Example ######################
## Enable the ble service 
## apx-bbs enable 
## Add the desired BLE device and assign an alias
## apx-bbs add --mac=AABBCCDDEEFF --alias=BlazonDRS
## Enable BLE service and set scanning time
## apx-bbs set --scan_time=60 --enabled=true

define fieldset default fields=CV01:$ble.BlazonDRS.rpm,CV02:$ble.BlazonDRS.temperature,CV03:$ble.BlazonDRS.battery

# - Signals
define signal sg_stopped $ble.BlazonDRS.rpm == 0
define signal sg_mixing $ble.BlazonDRS.rpm > 0
define signal sg_pouring $ble.BlazonDRS.rpm < 0
define signal sg_lowbat $ble.BlazonDRS.battery < 20
define signal sg_fullbat $ble.BlazonDRS.battery > 90
define signal sg_hightemp $ble.BlazonDRS.temperature > 30
define signal sg_lowtemp $ble.BlazonDRS.temperature < 10

# - Events
define event ev_stop group=tracking fieldset=default label=stop code=70 trigger=sg_stopped
define event event ev_mixing group=tracking fieldset=default label=mixing code=71 trigger=sg_mixing
define event ev_pouring group=tracking fieldset=default label=pouring code=72 trigger=sg_pouring
define event ev_lowbat group=tracking fieldset=default label=lowbat code=73 trigger=sg_lowbat
define event ev_fullbat group=tracking fieldset=default label=fullbat code=74 trigger=sg_fullbat
define event ev_hightemp group=tracking fieldset=default label=hightemp code=75 trigger=sg_hightemp
define event ev_lowtemp group=tracking fieldset=default label=lowtemp code=76 trigger=sg_lowtemp
  [email protected]         - Triggered when any pulse event arrives
  -$pulse.count         - The pulse count [number]
  -$pulse.value         - The pulse value [number]
  -$pulse               - Fieldset key name                                                      
 #####################  Pulse Counter Example ######################
# - Signals
define signal sg_threshold_up $pulse.value > 100
define signal sg_threshold_down $pulse.value < 20

# - Events
define event ev_pulse group=tracking fieldset=default ack=seq label=pulse code=80 [email protected]
define event ev_up group=tracking fieldset=default ack=seq label=up code=81 trigger=sg_threshold_up
define event ev_down group=tracking fieldset=default ack=seq label=down code=82 trigger=sg_threshold_down
  • Added IMU feature for raw accelerometer data
 - @imu.event            - Triggered when any accelerometer event arrives
 - @imu.periodic         - Triggered when a specific event arrives

 - $imu.motion           - Movement of the vehicule detected [true|false]
 - $imu.value            - Magnitude of movement RMS [number]
 - $imu.event            - The detected ever [hard_braking | periodic | ...]
 - $imu.x                - X-axis raw acceleration value [number]
 - $imu.y                - Y-axis raw acceleration value [number]
 - $imu.z                - Z-axis raw acceleration value [number]

 - $imu                  - Fieldset key name
  - @iox.event            - Triggered when any IO Expander event arrives 
  - @iox.connected        - Triggered when a IO expander is connected

  - $iox.state            - State of IO Expander [connected | disconnected]
  - $iox.connected        - State of connected [true | false]
  - $               - Onewire identification [1b0000160f183929]
  - $iox.alias            - Assigned alias string [iosexpander]
  - $iox.epoch            - Last connected state epoch [1710169042]
  - $iox.in1 - $iox.in4   - Input state [true | false]
  - $iox.out1 - $iox.out4 - Output state [true | false]

	- $iox                  - Fieldset key name

########################  IO Expander Example ############################
# - Signals
define signal sg_iox_connected $iox.connected == true
define signal sg_iox_disconnected $iox.connected == false
define signal sg_iox_in1_true $iox.in1 == true
define signal sg_iox_out1_true $iox.out1 == true

# - Events
define event ev_iox_conn group=tracking fieldset=default label=ioxcon code=90 trigger=sg_iox_connected
define event ev_iox_disc group=tracking fieldset=default label=ioxdis code=91 trigger=sg_iox_disconnected
define event ev_iox_in1 group=tracking fieldset=default label=ioxdis code=92 trigger=sg_iox_in1_true
define event ev_iox_out1 group=tracking fieldset=default label=ioxdis code=92 trigger=sg_iox_out1_true

# - Actions - Activate expanded out1 when in1 true
define action ac_iox_out1 trigger=sg_iox_in1_true
    sudo apx-onewire iosexpander set OUT1 true


  • Fixed $fuel connected status
  • Fixed Events raters not working


  • Added Movon9 ADAS error signals
    - @adas.camera_blocked
    - @adas.low_visibility
  • Added taip IMU tag and $imu fieldset.
  • Added blackbox database feature (apx-db)

This feature creates an SQL database to backup relevant information second by second.
Lets the user retrieve 10min segments of that information and send it to the requested destination point.
Offers aditional backup for crash scenarios where the physical evidence may be extracted as an SD Card.
Gives an easy way to access and copy the blackbox data.


  1. Define a new database destination indicating the path to the database and desired protocol.
define destination database_taip taip apx-db:///media/mmcblk0p1/blackbox.db
  1. Define any number of fieldsets to be stored into the database and set a timer to write every second.
# -- Group and fieldsets
define group blackbox
define fieldset default fields=$io,$gnss,$net,$ecu

# -- Signals
define signal sg_ign_on $io.ign 

# -- Timer
define timer tm_bbox duration=1sec enabled=true repeat=true

# -- Events
define event ev_write_db group=blackbox fieldset=default label=bbox code=90 [email protected]_bbox,sg_ign_on,and

# -- Destinations
set destinations group=blackbox database_taip

To retrieve a range of the stored information use one of the following methods:

  • Send the pegasus QDB command using the following format.
# -- Format >QDB{protocol},{destination},{from_epoch},{to_epoch}<
  • Send the following command from cloud, selecting the protocol and destination to send.
syrus-apps-manager send-message __cloud_syrusjs_instance "upload blackbox protocol=taip destination=my_server from=1708963644 to=1708963654"
  • Use the apx-db tool to read the interval or send it to a file for download, make sure to enter the path of the database and use the desired protocol as the table argument.
# -- To send the result to a file add the ' > filename.txt' to the end of the following script 
sudo apx-db read --database=/media/mmcblk0p1/blackbox.db --table=taip --from=1708700962 --to=1708701562


  • Due to memory size only use an external SDcard to store the database.
  • Limited to one month second by second recording or 2.5 Million registers per protocol
  • Retrieval range limited to 10 minutes.
  • Make sure to use Apex 24.08.1 or superior.



  • Added Movon9 serial ADAS support.
    - $adas.connected                         - Connected state boolean [true | false]
    - $adas.state                             - Connected state string [connected | disconnected]
    - $adas.event                             - Event arrived as shown in signals [left_turn | brake | ...]
    - $adas.event_state                       - Event state [ready | recognized]
    - $adas.speed                             - Speed [km/h] 
    - $adas.rpm                               - Motor revolutions per minute [rpm]
    - $adas.left_distance                     - Distance to objects on the left [cm]
    - $adas.right_distance                    - Distance to objects on the right [cm]
    - $adas.time_to_collision                 - Time to front collision [s]
    - $adas.record                            - Recording state [on_with_audio | on_without_audio | disabled]

    - @adas.event                             - Triggered when any adas event arrives
    - @adas.left_lane_departure_warning       - Triggered when the vehicle passes the left lane
    - @adas.right_lane_departure_warning      - Triggered when the vehicle passes the right lane
    - @adas.safety_distance_alert             - Triggered when vehicle breaks the safety distance
    - @adas.front_vehicle_start_alarm         - Triggered when the fornt vehicle starts to move 
    - @adas.front_proximity_warning           - Triggered when the vehicle slowly approaches to front car
    - @adas.forward_collision_warning         - Triggered when the vehicle is close to a front collision
    - @adas.pedestrian_collision_warning      - Triggered when a pedestrian is detected
    - @adas.left_turn                         - Triggered on left turn
    - @adas.right_turn                        - Triggered on right turn
    - @adas.brake                             - Triggered when brakes are pressed

ADAS implementation example

define signal sg_adas_connected $adas.connected == true
define signal sg_adas_disconnected $adas.connected == false

define event ev_adas_any group=tracking fieldset=default ack=seq label=any code=10 [email protected]
define event ev_left_lane group=tracking fieldset=default ack=seq label=left_lane code=11 [email protected]_lane_departure_warning
define event ev_right_lane group=tracking fieldset=default ack=seq label=right_lane code=12 [email protected]_lane_departure_warning
define event ev_distance_alert group=tracking fieldset=default ack=seq label=safety_distance code=13 [email protected]_distance_alert
define event ev_front_vehicle group=tracking fieldset=default ack=seq label=front_vehicle code=14 [email protected]_vehicle_start_alarm
define event ev_front_proximity group=tracking fieldset=default ack=seq label=proximity code=15 [email protected]_proximity_warning
define event ev_forward_warning group=tracking fieldset=default ack=seq label=collision code=16 [email protected]_collision_warning
define event ev_pedestrian_warning group=tracking fieldset=default ack=seq label=pedestrian code=17 [email protected]_collision_warning
define event ev_left_turn group=tracking fieldset=default ack=seq label=left_turn code=18 [email protected]_turn
define event ev_right_turn group=tracking fieldset=default ack=seq label=right_turn code=19 [email protected]_turn
define event ev_brake group=tracking fieldset=default ack=seq label=brake code=20 [email protected]



  • Added RFID from onewire
  • Fixed $flow_meter undefined fields
  • Fixed $fuel sensor undefined fields
  • Extracted taip tag "AD" from base taip, now only available using fieldset $ad
  • Improved $standard taip tags definition


  • Added automatic CSV headers for log rotation
define destination csvlog csv file:///data/logs/gps_data.csv ack=disabled rotate=5D auto_headers=true
  • Improved support for speed limits in geofences
  - @geofences.GROUP_NAME.*.*.speeding    - Triggers when vehicle exceeds the speed limit inside any geofence in the GROUP_NAME group 
  - @geofences.*.GEONAME.*.speeding       - Triggers when vehicle exceeds the speed limit inside any geofence named GEONAME
  - @geofences.*.*.ALIAS.speeding       	- Triggers when vehicle exceeds the speed limit inside any geofence with limit named SPEED_ALIAS
  - @geofences.*.*.*.speeding             - Triggers when vehicle exceeds any speed limit 
  - $geospeed.warning                     - Speed in geofence warning  [true | false]  
  - $geospeed.epoch                       - Timestamp of speeding event in seconds  
  - $geospeed.type                        - Type of warning [speeding]  
  - $geospeed.state                       - Current state [in_progress | finished_by_speed | finished_by_geofence | finished_by_gps]  
  - $geospeed.namespace                   - Namespace of geofence definitions  
  - $                       - Geofence group  
  - $                        - Defined name of geofence  
  - $geospeed.elapsed_time                - Elapsed time speeding inside the geofence  
  - $geospeed.elapsed_distance            - Elapsed distance speeding inside the geofence 
  - $geospeed.threshold_alias             - Defined Alias for the speed limit
  - $geospeed.threshold_min_heading       - Defined minimum degree heading
  - $geospeed.threshold_max_heading       - Defined maximum degree heading
  - $geospeed.threshold_speed             - Defined speed threshold

  - $geospeed.start_speed                 - Speed at start of speed limit
  - $geospeed.start_heading               - Heading at start of speed limit
  - $geospeed.start_lon                   - Longitude coordinate at start of speed limit
  - $geospeed.start_lat                   - Latitude coordinate at start of speed limit

  - $geospeed.end_speed                   - Finishing speed [m/s]
  - $geospeed.end_heading                 - Finishing heading [degrees]
  - $geospeed.end_lon                     - Finishing longitude
  - $geospeed.end_lat                     - Finishing latitude 

  - $geospeed.max_speed                   - Maximum speed inside reached 
  - $geospeed.max_heading                 - Heading at the maximum speed
  - $geospeed.max_lon                     - Longitude coordinate at maximum speed
  - $geospeed.max_lat                     - Latitude cordinate at maximum speed

Speed limits in geofences example

define fieldset geospd fields=$geospeed

define event spd_any_speeding fieldset=geospd group=tracking ack=seq label=spd_test_all code=15 trigger=@geofences.*.*.*.speeding
define event spd_any_group fieldset=geospd group=tracking ack=seq label=spd_any_nmsp code=16 trigger=@geofences.*.NAME.ALIAS.speeding
define event spd_any_name fieldset=geospd group=tracking ack=seq label=spd_any_grp code=17 [email protected].*.ALIAS.speeding
define event spd_any_alias fieldset=geospd group=tracking ack=seq label=spd_any_al code=18 [email protected].*.speeding

define signal sg_init_geospeed $geospeed.warning == true
define signal sg_finish_geospeed $geospeed.warning == false

define event geo_speed_init fieldset=geospd group=tracking ack=seq label=spd_init code=19 trigger=sg_init_geospeed
define event geo_speed_finish fieldset=geospd group=tracking ack=seq label=spd_finish code=20 trigger=sg_finish_geospeed

define signal sg_inside $geofences.GEOFENCE_NAME.inside == true
define signal sg_outside $geofences.GEOFENCE_NAME.inside == false

define event geo_in fieldset=geospd group=tracking ack=seq label=geo_in code=21 trigger=sg_inside
define event geo_out fieldset=geospd group=tracking ack=seq label=geo_out code=22 trigger=sg_outside



  • Improved buffer - Now capable to handle x10 more speed transmission with less cpu usage
  • Fixed order of ESPD in taip


  • Added $gnss.acceleration.mphs and update tag AC when gps change arrives
  • Added CSV headers for file destination, requires apx-logrotate v1.1.0 or latest apex release.
# Add the desired columns definition in the destination.syrus.conf file, the order should be the same as in the fieldset definition
define destination csvlog csv file:///data/logs/gps_data.csv ack=disabled rotate=5D headers='timestamp,date_time,event_label,event_code,gnss_timestamp,speed,latitude,...'
  • Added flow meter taip tags and events, use the $flow_meter fieldset.
  - @flow_meter.signal                        - Triggered when any flow meter event arrives.
  - $flow_meter.state                         - Conection state [connected | disconnected]   
  - $flow_meter.display_state                 - Show display state
  - $flow_meter.flow                          - Flow rate [liters/minute]
  - $flow_meter.pwr_disconnections            - Number of power lost
  - $flow_meter.sensor_disconnections         - Number of disconnections
  - $flow_meter.calibration                   - Calibration pattern, value in cm3/pulse * 100
  - $flow_meter.liters_dispatched             - Total liters * 100
  - $flow_meter.cumulative_liters             - Cumulative liters * 10
  - $flow_meter.timestamp                     - Last reading epoch
  • Added accelerometer taip tag, use the $accelerometer fieldset
  -$accelerometer.value                       - Show the last value of accelerometer in millig
  • Added sim-card remove and insertion event
  - @modem.sim_inserted       - Triggered when sim inserted
  - @modem.sim_removed        - Triggered when sim removed
  - $modem.sim_inserted       - Keeps true if sim card present, false if removed.



  • Added modem temperature tag TS
  • Added AWS destination channel for connection with AWS IoT Core
####################### AWS IoT Core  ##############################
1. Create a device in AWS IoT core console.
2. Download the given certificates
3. Update the device connection policy
4. Upload the private key, certificate and RootCA certificates into the syrus4g path /data/app_data/INSTANCE_NAME
5. Define the destination into the destinations.syrus.conf file, use the following parameters
   - host: 					AWS endpoint in the format \*
   - client_id: 		The id of the created device
   - key_name: 			Private key file name (usually ends with private.key)
   - cert_name: 		Certification file name (usally ends with .pem)
   - ca_name: 			Root Certificate Authority file name (usually ends with .pem) - Can be Downloaded from AWS as RootCA.pem
   - publish: 			Output topic, events will be sent to this topic
   - subscribe: 		Input topic event will be recieved in this topic
   - commands_sub: (optional) Input topic, this recieves from aws (used for commands)
   - commands_pub: (optional) Output topic, this send the command response

# In the destination.syrus.conf file add the aws destination definition
define destination awsmqtt json aws:// client_id="syrus-867698041103352" publish="events/pub" subscribe="events/sub" commands_pub="commands/pub" commands_sub="commands/sub" key_name="nodejs_demo_thing.private.key" cert_name="nodejs_demo_thing.cert.pem" ca_name="AWSRootCA1.pem" 



  • Fixed MDT serial callback for sending data to pegasus.


  • Added support for modem temperature in $modem.temperature and TS taip tag.
  • Added Support for speed limits in Geofences
    - @geofences.*.*.*.speeding                 - Triggers a speeding signal when devices enters any group, any geofence with any speed limit alias
    - @geofences.sites.*.entry.speeding         - Triggers a speeding signal when device surpass the entry speed limit in any geofence of the "sites" group
    -      - Only triggers a speeding signal when devices enters the specified group, geofence and speed limit alias

    - $                - State of the last geofence warning type (for now only speeding)   
    - $              - Status of the last geofence warning (active = true means outside speed limit)
    - $               - Speed limit alias of the last geofence warning (alias, km/h, heading start, heading end)
    - $               - Current speed of device
    - $             - Current heading of device
    - $               - Timestamp of geofence warning

Here's an example script for speed limits in geofences

  ################ Speed warning definitions ########################
  # Inside the geofences profile file 
  # Normal geofence
  define geofence privet_drive group=potter radius=100mts -89.718662,20.990475

  # Geofence with speed limits
  define geofence privet_drive group=potter radius=100mts speed_limits="uphill,20,90,270 downhill,80,271,91" -89.718662,20.990475

  ################ Speed warnings in geofences ######################
  define event all group=tracking ack=seq label=speeding code=21 trigger=@geofences.*.*.*.speeding

  define event only_group group=tracking ack=seq label=speeding code=22 [email protected].*.*.speeding
  define event geo_speeding group=tracking ack=seq label=geospeed code=23 [email protected].*.speeding

  define event uphill group=tracking ack=seq label=uphill code=24 [email protected].*.full.speeding
  define event downhill group=tracking ack=seq label=downhill code=25 [email protected].*.empty.speeding

  define signal sg_speeding $ == true
  define signal sg_notspeeding $ == false

  define event start group=tracking ack=seq label=started code=26 trigger=sg_speeding
  define event end group=tracking ack=seq label=finished code=27 trigger=sg_notspeeding



  • Fixed the device model for Syrus Lite devices



  • Removed the EcuImports.json download mechanism, handed responsability to APEX.



  • Added the $standard fieldsets to support S3 TAIP compatibility for 3rd parties platforms.
# Fieldsets add the following to add the desired tags. 
  - $standard  - REV202271319465+2099024-0897188000000032;
  - $label     - EVLBL=trckpnt; 
  - $io        - IO=314;
  - $dop       - DOP=110,80,80;
  - $battery   - BL=4058;
  - $analogs   - AW=0,0,,,,,,,0,,,,,,,;
  - $gnss      - SV=11;AC=0;SPD=0.12;
  • Added user signals for interaction with Pegasus console.
# Signals
  - $user_signal_{xx}     - From 00 to 99 triggered when an activate command arrives.

To activate the user signals send the following command from Pegasus console (last digit indicates active or inactive).
- Activate user signal #3: >SSSU031<
- Deactivate user signal #3: >SSSU030<

define signal usig3 $user_signal_03

define event ev_user_3 group=tracking fieldset=default ack=seq label=user3true code=48 trigger=usig3

define action ac_user_3_on trigger=usig3
    exec apx-io set OUT2 true

define action ac_user_3_off trigger=usig3,not
    exec apx-io set OUT2 false


  • Fixed serial destination buffering when an error in serial occurred.
  • Fixed EcuImports automatic download failing.


  • Improved ECU automatic download.



  • Fixed some issues on serial interface


  • Added support for 82 ECU OBD2 standard parameters
  • Added Taip tag JO for jamming detection
  • Added support for >STX< command to send data from and to Pegasus
  • Added the following signals and states to interact with the serial interface
# Signals
  - @serial.event         - Triggered when any data arrives to serial port
  - @serial.message       - Triggered when a message arrives in console mode
  - @mdt.message          -  Triggered when a mesage arrives in mdt mode

# States
  - $serial.mode          - The serial mode [ mdt | modem | console ]
  - $serial.message       - The last arrived console message in string
  - $mdt.message          - The mdt message string in hexadecimal or asci


  • Removed the Unmanaged serial mode
  • Console serial mode now supports Taip and syrus-apps-manager commands

Serial interface usage instructions

Make sure to use the latest apx-serial an syrus-serial packages using apx-core install syrus-serial

Serial as destination point

Use this feature to send Taip events to the serial port

# In destinations.syrus.conf add the following destination
define destination serial_destination taip serial://_._ ack=disabled

# Add the serial destination in the configurations.syrus.conf file
set destinations group=tracking pegasus,serial_destination

Send plain data from serial to Pegasus using an event

  1. Define only one of the following events depending on the serial mode
  define event incoming_mdt group=tracking fieldset=default code=91 [email protected]
  define event incoming_console group=tracking fieldset=default code=90 [email protected]  
  1. Send some data over the serial interface hellopegasus
  2. Watch it arrive to the Pegasus console "hellopegasus"

Taip over serial

  1. Enable serial console mode using apx-serial set --mode=console
  2. Send taip commands and watch the response >QPV<

Send data to pegasus using STX

  1. Use the command STX to send data >STXsomedata<
  2. Watch it arrive on the pegasus mdt console and rawdata "somedata"


  • CV fieldsets not showing if value = 0


  • Added a way to use the serial interface as destination point
  • Added support for TAIP commands over the serial interface


  • Bundled again version using esbuild


  • Unified MDT, Serial modem and Console callbacks.

Serial interface usage instructions

Make sure to use the lastest apx-serial an syrus-serial packages using apx-core install syrus-serial

Serial as destination point

  1. Use the following script in destinations.syrus.conf: define destination serial_destination taip serial://_._ ack=disabled
  2. And add it in configuration.syrus.conf: set destinations group=tracking pegasus,serial_destination
  3. Enable the unmanaged serial interface mode apx-serial set --mode=unmanaged
  4. See the TAIP events arrive to the serial terminal and send TAIP querys from the terminal >QPV<

To use the serial as MDT

  1. Enable the mdt mode apx-serial set --mode=mdt
  2. Set a for ascii or x for hexadecimal apx-serial-mdt set --type=a

To use the serial as a Satcom Modem

  1. Set the satcom destinations.syrus.conf: define destination satcom_destination taip satcom://_:_ ack=disable
  2. And add it in configuration.syrus.conf: set destinations group=tracking pegasus,satcom_destination
  3. Enable the modem mode apx-serial set --mode=modem

To use the serial to send data to the serial but not from the destination

  1. Enable the user mode apx-serial set --mode=user
  2. Send data apx-serial-user send --msg="somedata"

  • Minimum Apex Version: 22.44.1


  • Fixed TCP acks disabled bug (v1.50.0)
  • Fixed a bug with the definition of global counters (v1.49.2)
  • Fixed a bug with the unit conversion when setting a counter value (v1.49.2)
  • Fixed MQTT transmission error (v1.47.3)
  • Fixed caredrive not uploading photo bug (v1.47.3)
  • Fixed ble negative temperature bug (v1.47.3)


  • Added command for querying the FTP destination (>QXAFSA<) (v1.50.0)
  • Added support for TAIP user signals >SSSU0XY< (v1.50.0)
    • X: User signal number 0-5
    • Y: Desired state 1 = true, 0 = false
    • when true is sent, it sets $variables.user_signal_X = true
  • virtual ignition support (v1.48.1)
  • jamming detection (v1.48.1)
  • temperature value from modem (v1.48.1)
  • Bluetooth beacons docs (v1.48.1)
  • Added bluetooth status update (v1.47.3)
  • Added gnss.acceleration.mphs (v1.47.3)
  • Added support for ECU warnings (v1.47.3)
  • Added Support for BLE Gateway mode (v1.47.3)


  • Improved the application bundle to be lighter and more optimized
  • Improved the geofence state synchronization at startup (v1.50.0)


  • outputs are activated in sequence (v1.48.1)

Added Set/Update commands for counters

# Change/set thresholds settings
set counters globals speed_threshold=30
set counters globals begin_idle_time=2min
set counters globals rpm_threshold=700

# Change counter value 
set counters globals odometer=0
set counters globals ignition_time=0
set counters globals idle_time=0
set counters globals over_speed=0
set counters globals hard_brakes=0
set counters globals harsh_fwd_acceleration=0
set counters globals over_rpm=0
set counters globals distance=0

Added BLE Gateway (v1.47.1)

   - @ble.event                                   - Triggered at any ble event
   - @ble.(MAC or ALIAS).temperature.change       - Triggered when a change in temperature is detected
   - $ble.(MAC_ADDRESS or ALIAS).mac              - Device mac address
   - $ble.(MAC_ADDRESS or ALIAS).name             - Advertised name
   - $ble.(MAC_ADDRESS or ALIAS).alias            - Assigned alias
   - $ble.(MAC_ADDRESS or ALIAS).timestamp        - Scanned time
   - $ble.(MAC_ADDRESS or ALIAS).temperature      - Reported temperature value in degrees celsius
   - $ble.(MAC_ADDRESS or ALIAS).humidity         - Reported humidity value in percentage
   - $ble.(MAC_ADDRESS or ALIAS).movement         - Reported number of movements detected
###### BLE GATEWAY  ######

# -- Use apx-ble to add the desired BLE devices and enable continous scanning
# apx-ble add --mac=MAC_ADDRESS --alias=cooler
# apx-ble set --scan_time=60 --enabled=true

# -- Variables definitions
define variable movement
set variable movement 0

define variable temperature 
set variable temperature 0

# -- Fieldsets
define fieldset default fields=$io,$ble

# -- Signals - Used previously defined alias "cooler"
define signal sg_hightemp $ble.cooler.temperature > 20 
define signal sg_lowtemp  $ble.cooler.temperature <= 20
define signal sg_movement $ble.E7973F682A94.movement > movement

# -- Events - trigger only used on the action
define event ev_hightemp group=tracking ack=seq label=hitemp code=70 fieldset=tracking
define event ev_lowtemp group=tracking ack=seq label=lotemp code=71 fieldset=tracking
define event ev_movement group=tracking ack=seq label=mvnt code=72 fieldset=tracking

# -- Actions
define action ac_hightemp trigger=sg_hightemp
  set variable temperature {{$ble.cooler.temperature}}
  send event ev_hightemp
  speak "High temperature detected at {{$variables.cooler.temperature}}"

define action ac_lowtemp trigger=sg_lowtemp
  set variable temperature {{$ble.cooler.temperature}}
  send event ev_lowtemp
  speak "Low temperature detected at {{$variables.cooler.temperature}}"  

define action ac_movement trigger=sg_movement
  set variable movement {{$ble.E7973F682A94.movement}}
  send event ev_movement
  speak "Movement detected at {{$variables.E7973F682A94.movement}}"  


Added ECU Warnings (v1.47.1)

  - @ecu_warning.event                      - Triggered at any ecu warning event
  - @ecu_warning.(ECU_ID).(ECU_INTERVAL)    - Triggered only when the specified interval is reached 
##### ECU WARNINGS #####

# -- Signal Use the full description to assign to a signal name
define signal fuel_warning

# -- Event Use the signal name as trigger
define event ev_fuel_warning group=tracking fieldset=default ack=seq label=flwrng code=90 trigger=fuel_warning



  • Fixed, engine tire values reported when there's only 1 tire present
  • Fixed, queue and repeated tx bug
  • Fixed, mqtt transmission error



  • Changed taip acceleration transmitted from kph/s to mph/s

People counting camera

Added in SyrusJS v1.45.2, requires Apex: 22.43.0

Develop - Syruslang
Develop - System tool


Events (oneshot)

  • @people.adult_enter
  • @people.adult_exit
  • @people.children_enter
  • @people.children_exit
  • @people.requested
  • @people.start
  • @people.stop
  • @people.restarted
  • @people.cam_connected
  • @people.cam_disconnected
  • @people.daily_report
  • @people.weekly_report


  • $people.event
  • $
  • $
  • $people.children.enter
  • $people.children.exit
  • $people.adults_inside
  • $people.children_inside
  • $people.global_adult.enter
  • $people.global_adult.exit
  • $people.global_children.enter
  • $people.global_children.exit

define signal sg_pc_max $people.adults_inside >= 20

define event ev_pc_enter group=tracking fieldset=default 
	ack=seq label=pcenter code=60 
	[email protected]_enter

define event ev_pc_exit group=tracking fieldset=default 
	ack=seq label=pcexit code=61 
	[email protected]_exit

define event ev_pc_max group=tracking fieldset=default 
	ack=seq label=pcmax code=62 


Cipia signals for tampering

Added in SyrusJS v1.43.7, requires Apex: 22.38.1

  • Fixed Queue and repeated tx bug
  • Expanded Cipia fatigue sensor signals and events
  • Requires updated Cipia and ndm >= 0.4.4 (Cipia or newer & latest apex)

Develop - Syruslang


Events (Oneshot booleans)

  • @dms.cipia.event Triggered when any cipia event is detected.
  • @dms.cipia.fatigue_warning
  • @dms.cipia.fatigue_alarm
  • @dms.cipia.driver_changed
  • @dms.cipia.driver_missing
  • @dms.cipia.distraction
  • @dms.cipia.driver_identified
  • @dms.cipia.ignition_off
  • @dms.cipia.ignition_on
  • @dms.cipia.smoking
  • @dms.cipia.seatbelt
  • @dms.cipia.seatbelt_off
  • @dms.cipia.unknown_driver
  • @dms.cipia.tamper_alert
  • @dms.cipia.system_boot
  • @dms.cipia.system_boot_failure
  • @dms.cipia.system_ok
  • @dms.cipia.system_reset
  • @dms.cipia.system_error.event Triggered when any error event is reported.
  • @dms.cipia.system_error.emmc_failed
  • @dms.cipia.system_error.over_exposure
  • @dms.cipia.system_error.blurred_image
  • @dms.cipia.system_error.device_not_calibrated
  • @dms.cipia.system_error.power_lost
  • @dms.cipia.system_error.mcu_upgrade_ok
  • @dms.cipia.system_error.device_shifted
  • @dms.cipia.system_error.cable_disconected
  • @dms.cipia.system_error.overheat
  • @dms.cipia.system_error.gps_loss
  • @dms.cipia.system_error.sdcard_hw_malfunction


  • $
  • $
  • $fatigue_sensor.epoch
  • $fatigue_sensor.event
  • $
  • $
  • $
  • $
  • $
  • $

Time windows

Added in SyrusJS v1.44.0, requires Apex: 22.38.1


Events (Oneshot booleans)



  • $
  • $
######   TIME WINDOWS CONFIG   ######

define time_window working_hours 
	start=01/09/2022 end=30/09/2022
	from=08:00:00 to=17:05:30
	enabled=true state=false tz=America/NewYork

# -- Events
define event ev_start group=tracking fieldset=default 
	ack=seq label=started code=10

define event ev_stop group=tracking fieldset=default 
	ack=seq label=stopped code=11

define event ev_test group=tracking fieldset=default 
	ack=seq label=test code=12

# -- Actions
# (Driver state: Working) Wroking shift started  
define action start_working [email protected]_hours.start
	speak "Working hours started"
	send event ev_start

# (Driver state: Resting) Wroking shift ended  
define action stop_working [email protected]_hours.end
	speak "Working hours stopped"
	send event ev_stop

# (Driver state: TestButton) Test current shift time  
define action test_hours trigger=$io.in1
	speak "Testing time window {{$window.working_hours.state}}"
	send event ev_test


Video snapshots

Added in SyrusJS v1.45.3, requires Apex: 22.43.0


# -- Video events (same event different options)
define event ev_tamper group=tracking ack=seq label=tamper code=13 fieldset=tracking

# -- Video recording action @dms.cipia.tamper_alert
define action ac_braking_video trigger=sg_test
	set variable braking_video {{$gnss.timestamp}}-braking
	create video --name={{$variables.braking_video}} --time_win=-5,+5 --with_snapshot
	send event ev_tamper


Safely immobilize the engine

Added in SyrusJS v1.45.0, requires Apex: 22.39.0


Events (Oneshot booleans)

  • @seco.event Trigger when any seco event arrives
  • @seco.enabled Trigger when the feature mode in enabled (powered ON)
  • Trigger when the feature is waiting for correct moment to realize the engine cut off.
  • @seco.idle
  • @seco.canceled User canceled the activation
  • @seco.power_restored Output has been deactivated or the engine power restored
  • @seco.deactivated Output has been deactivated or the engine power restored
  • @seco.power_suspended Output has been activated or the engine power suspended
  • @seco.activated Output has been activated or the engine power suspended
  • @seco.activating Waiting for conditions to suspend the engine power (speed < 10kph for 20s)
  • @seco.waiting_no_motion Waiting for conditions to suspend the engine power (no motion for 5 min)
  • @seco.waiting_for_gps Safe conditions not met, either motion was detected or vehicle speed is above 10kph
  • @seco.periodic_report Periodic report, the SECO mechanism is running but waiting for safety conditions


  • $seco.enabled Safe engine cut off module enabled
  • $ Safe engine cut off feature actived
  • $seco.state Number of the current state (see apx-seco help)


  • enable seco Enables the safe engine module
  • disable seco Disables the safe engine module
  • start seco Start safe engine cut off, waiting for conditions for tunrn off motor
  • stop seco Stop safe engine cut off, enables the motor again

# (Driver state: Cutting motor)
define action test_seco_on trigger=sg_ign_on
	speak "Stopping Motor Safetly"
	exec apx-seco set --mode=enable
	exec apx-seco set --trigger=enable
	send event ev_seco_on

# (Driver state: Cutting motor)
define action test_seco_off trigger=sg_ign_off
	speak "Starting Again Motor"
	exec apx-seco set --trigger=disable
	send event ev_seco_off

# (Seco event arrived)
define action test_seco_ev [email protected]
	set variable eventNumber {{$seco.state}}
	speak "Seco event received {{$variables.eventNumber}}"



  • Added support for lazy videos
  • Fix for GPS Source & Age in TAIP messages
  • CSV (feature) - Added support for values with commas like BTT or BTP tags
  • Destinations (feature) - Added shortcut path to file destination, use $MEDIA_PATH or $USER_PATH to indicate /media/mmcblk0p1 or /data/users/syrus4g
  • Tracking (bug) - Fixed when setting tracking_resolution
  • Counters (feature) - Added support for counters based on any signal (count, elapsed time, and traveled distance)
  • Variables (feature) - Added support for increment and decrement variables

Expanded Counters Implementation

This feature gives the user a set of variables that accumulate when a certain signal stays true. So far is possible to get:

  • Number of times the signal occurred
  • Accumulated time (total time) in seconds
  • The difference in time since last event
  • Traveled distance (total distance) in meters
  • The traveled distance since the last event



  • $ Stores number of times a signal becomes true
  • $ Stores the total time a signal stays true, stops counting when false
  • $ Stores the time passed while a signal is true, reset count when false
  • $ Stores the total distance traveled while a signal is true, stops counting when false
  • $ Stores the distance traveled while a signal is true, reset count when false
  • $ Stores the counter state (true when counting)


  • start counters name Start/enable the counting function and listen for change in the selected signals
  • stop counters name Stop/disable the counting function, any change in the signals will be ignored
  • reset counters name Reset/restart the states values, like total_count, total_time, etc ...

# -- Definition     -  In the definition we relate any signal with the counter name, and start watching the signal (optional)
define counters name signal=sg_in1_on start=true

# -- Fieldsets
define fieldset default fields=$io,$gnss,CV01:$,CV02:$,CV03:$

# -- Signals
#    The signal to keep the count 
define signal sg_in1_on $io.in1
define signal sg_in1_off $io.in1 == false
define signal sg_limit $ >= 60

#    Reset when a minute active has passed 
# define action ac_stop_ign trigger=sg_limit reset counters name

# -- Event
define event ev_count_begin group=tracking fieldset=default 
	ack=seq label=cnt_begin code=200 trigger=sg_in1_on

define event ev_count_end group=tracking fieldset=default 
	ack=seq label=cnt_end code=201 trigger=sg_in1_off


Increment and decrement variables
This feature gives a way to increment or decrement a numeric variable, this is useful if we are just interested in the number of times a certain condition happens, or when we need to create logic for a number of retries



  • $ Stores the variable value


  • set variable name increment Increments the variable value by 1
  • set variable name decrement Decrement the variable value by 1
  • set variable name reset Set the variable value to 0
# -- Definition  - Create the variable and initialize it
define variable count
set variable count 0

# -- Signal
define signal sg_in1 $io.in1
define signal count_over $variables.count >= 10

# -- Actions
define action ac_increment trigger=sg_in1 set variable count increment
define action ac_reset trigger=count_over set variable count reset

# -- Event
define event ev_count group=default fieldset=fields label=resttart code=20 trigger=count_over



  • CSV protocol support
  • Stores in CSV format any fieldset
  • Automatic log rotation
  • Just create a destination and select protocol "csv"
  • define destination log csv file:///media/mmcblk0p1/file_csv

This feature prints into the file those fieldsets that contains data, then starts saving the events. So far, default extra values include "timestamp", "event_label" and "event_code".

define group accelerations
# -- Fieldsets
define fieldset default fields=$io,$gnss,$ecu,VO:$counters.globals.odometer,CE:$counters.globals.ignition_time

# -- Events
define event ev_accelog group=accelerations fieldset=default ack=seq label=accelev code=21 [email protected]

# -- Destination
set destinations group=accelerations log

# -- In destinations.syurs.conf select csv protocol ( default compress and rotate every day)
define destination log csv file:///media/mmcblk0p1/file_csv

#####  END CSV LOG CONFIG #####


Added black box gps event logging
Any file:/// type destination will now automatically log files on a folder that is autorotated and can be compressed based on configuration of the destination.

define destination logs taip file:///media/mmcblk0p1/gps_logs ack=disabled rotate=5D size=10MB compress=true


  • Fixed, bluetooth restarting syrusjs bug due a bad json
  • Fixed, backlog requesting acknowledgement from file destination
  • Added support for serial RFID reader
  • Added support for serial fuel sensor

RFID Reader


Events (Oneshot booleans)

  • @rfid.event Triggered when any rfid event is detected.
  • @rfid.change Triggered when the id changed.
  • Triggered when a card aproach the reader, even if it's the same id.
  • @rfid.authorized Triggered when the id is whitelisted.
  • @rfid.unauthorized Triggered when the id is not whitelisted.


  • $ Stores the last id.

  • $rfid.last.alias Stores the last alias.

  • $rfid.last.whitelisted Stores the last whitelisted state (boolean).

  • $rfid.last.conn_epoch Stores the last connection timestamp.

  • $ Stores the last authorized id.

  • $rfid.authorized.last.alias Stores the last authorized alias.

  • $rfid.authorized.last.whitelisted Stores the last authorized whitelisted state.

  • $rfid.authorized.last.conn_epoch Stores the last authorized connection timestamp.

    # Example of event whenever a card is aproached to the reader
    define fieldset default fields=RI:$
    define event ev_rfid group=tracking fieldset=default ack=seq label=rfid [email protected]

    TAIP - Extended tag

Serial Fuel Sensor


Events (Oneshot booleans)

  • @fuel.event Triggered when any fuel event is detected.
  • @fuel.state Triggered when a state arrives.
  • @fuel.fuelling or @fuel.fueling Triggered when a fuelling notification arrives.
  • @fuel.warning Triggered when a discharge warning notification arrives.
  • @fuel.connected Triggered when a transition from disconnected to connected is detected.
  • @fuel.disconnected Triggered when a transition from connected to disconnected is detected.​


  • $fuel.connected Stores the last connected state (boolean).

  • $fuel.level Stores the last fuel level (number).

  • $fuel.temperature Stores the last temperature level (number).

  • $fuel.frequency Stores the last frequency (number).

  • $fuel.timestamp Stores the last notification timestamp (epoch).

  • $fuel.event Stores the last event (string).

    # Example of event whenever a card is aproached to the reader
    define fieldset default fields=$fuel
    define signal sg_fuel_over $fuel.level > 100
    define signal sg_fuel_under $fuel.level < 10 
    define event ev_fuel group=tracking fieldset=default ack=seq label=over trigger=sg_fuel_over
    define event ev_fuel group=tracking fieldset=default ack=seq label=over trigger=sg_fuel_under

    TAIP - Extended tag
    ;FF added when fields=$fuel

v1.36.0 Latest

Compatible apx core versions

  Applications              (apps): 0.0.4-r0.1
  Bluetooth                   (bt): 1.1.9-r0.0
  Counters              (counters): 1.0.6-r0.0
  Disk Cleaner              (disk): 0.0.3-r0.0
  ECU                        (ecu): 2.0.4-r0.0
  Geofences            (geofences): 1.0.2-r0.2
  GNSS                       (gps): 1.4.3-r0.0
  Interial Measurement Unit  (imu): 1.1.2-r0.0
  Interface            (interface): 1.0.9-r0.1
  Modem                      (mdm): 1.5.3-r0.0
  Net Devices Manager        (ndm): 0.1.5-r0.0
  Onewire                (onewire): 1.0.2-r0.0
  Serial                  (serial): 0.2.3-r0.0
  Video                    (video): 0.4.2-r0.1
  Watcher                (watcher): 0.2.5-r0.5

Safe Engine Immobilization

  • added variable $safe_immo that is set to true automatically whenever Syrus4 receives the Safe Engine Immobilization command from Pegasus App. You could define a signal based on this variable and trigger your own logic
define signal safe_immo $variables.safe_immo

GPS Backlog

  • added support for GPS backlog (second by second event data recording)


Bug fixes

  • fixed a bug with the speak instruction, to make it compatible with other Languages rather than English
  • fixed a bug with the definition of variables that are not just strings


  • removed verbose logging for tpms tire parameters
  • defaults amount of GPS Satellites to 0 instead of leaving value empty

v1.34.1 Latest

Changes that bump up the Apex version

Compatible apx core versions

Applications              (apps): 0.0.2
Bluetooth                   (bt): 1.1.8
Counters              (counters): 1.0.6
ECU                        (ecu): 2.0.3
Geofences            (geofences): 1.0.2
GNSS                       (gps): 1.3.1
Inertial Measurement Unit  (imu): 1.1.1
Interface            (interface): 1.0.8
Modem                      (mdm): 1.3.5-r0.1
Net Devices Manager        (ndm): 0.0.8
Onewire                (onewire): 1.0.2
Serial                  (serial): 0.2.2
Video                    (video): 0.3.18
Watcher                (watcher): 0.2.5


  • Updated codebase to use new ECU.d structure, fixes an error with taip value for ecu_distance, tag ;OD
  • Support for mdsm7 fatigue signals (prefix with @fatigue_sensor. or @mdsm7.fatigue_sensor.)
  • camera_blocked
  • distraction
  • fatigue_alarm
  • fatigue_warning
  • phone
  • smoking
# either signal will work
define event fatigue_distraction fieldset=default ack=seq group=fatigue label=distract [email protected]_sensor.distraction
define event fatigue_distraction fieldset=default ack=seq group=fatigue label=distract trigger=@fatigue_sensor.distraction


  • BT destination point support define destination bluetooth_d taip bluetooth://_:_ ack=disabled
  • BT call button signals @bluetooth.button.call_2x @bluetooth.button.signal
  • BT destination points retry indefinitely until apx-bt returns successful, and messages are acknowledged where applicable

Signal, variable and value improvements

set [variable|value] [name] [value] infers type (true, false, number, string)

set variable new_var "lorem" or set variable new_var lorem

{{$variables.new_var}} = 'lorem'

set variable new_var "lorem ipsum"

{{$variables.new_var}} = 'lorem ipsum'

set value $gnss.latitude == 25.123456 (works for any non internal signal (non @ signals))

fire signal signal_name does not require @ as prefix


  • ;IB | ;IS: iButton Syrus 3 compatibility fix
  • ;EA: tag temperature field no separator
  • ;AW: tag sends empty value for analog input values instead of *, changed reported position of differential input1/2 in taip ;AW tag to position 9
  • >SSL... | >SXAEC::...: do not requiere an ;ID or ;SI when sent remotely to the device
  • >QSSIP#< fixed response
>SSLget events<
>SXAEC::apx-gps state<


  • http destinations respect url schema
  • long commands can be split into multiple lines
  • removed verbose logging for tpms tire parameters
define counters globals speed_threshold=100kph

define fieldset default

define action ac_start_ign_on trigger=sg_ign_on
	set tracking_resolution move 3min 35deg

define action ac_start_ign_off trigger=sg_ign_off
	set tracking_resolution stop 12hr
  • actions can have multiple commands (requires indentation)
define action ac_my_action trigger=ignitionOn
	set variable driver "john smith"
	set output2 on
	create video --name={{$gnss.timestamp}}_cornering_left --time_win=-30,+10



  • Improved ack support for TAIP/tcp, supported modes are imei(default), disabled and seq
  • ECU Errors, SPI, FMI, OC, SM and MIL supported
  • ECU events supports signals, see the respective pgn in the SDK ECU.d
  • ECU distance taip tag added missing multiplier
  • ECU added taip_multiplier to engine pressure values reported as kPa to convert to PSI
  • MOVON and Mobileye support, loaded from internal json files.
  • Fixed, queues are loaded in proper order
  • Improved callbacks for TCP


Fatigue Sensor support


  • @fatigue_sensor.fatigue_remind
  • @fatigue_sensor.fatigue_warning
  • @fatigue_sensor.fatigue_alarm
  • @fatigue_sensor.distraction
  • @fatigue_sensor.no_portrait
define event fatigue_remind fieldset=defeault ack=seq group=fatigue photo=fatigue_sensor.fatigue_remind label=remind trigger=@fatigue_sensor.fatigue_remind
define event fatigue_warning fieldset=defeault ack=seq group=fatigue photo=fatigue_sensor.fatigue_warning label=warning trigger=@fatigue_sensor.fatigue_warning
define event fatigue_alarm fieldset=defeault ack=seq group=fatigue photo=fatigue_sensor.fatigue_alarm label=alarm trigger=@fatigue_sensor.fatigue_alarm
define event fatigue_distraction fieldset=defeault ack=seq group=fatigue photo=fatigue_sensor.distraction label=distract trigger=@fatigue_sensor.distraction
define event fatigue_no_driver fieldset=defeault ack=seq group=fatigue photo=fatigue_sensor.no_portrait label=no_driver trigger=@fatigue_sensor.no_portrait
define event fatigue_photo_captured fieldset=defeault ack=seq group=fatigue label=photo

MDT support

  • @mdt.message signal is required on the trigger to use the message, it's recommended that you do not mix this with other signals
define event mdt group=mdt fieldset=default code=0 [email protected]
  • TAIP: STX is now reserved for MDT, use SSL for sending syruslang commands


  • false|true|Number are parsed as their respective types, not as strings (eg repeated=false)
  • min_duration improvements
  • improved signal propagation


TPMS support

Signals supported

  • @tpms.alarm_ok
  • @tpms.sensor_mute
  • @tpms.sensor_defective
  • @tpms.tire_leak
  • @tpms.temperature_warning
  • @tpms.over_inflation_critical
  • @tpms.over_inflation_warning
  • @tpms.under_inflation_warning
  • @tpms.under_inflation_critical