# System Tools

The Syrus 4 system tools are applications that are in charge of enabling/disabling and resetting specific hardware functionalities. They can also be used to interact with some Linux applications such as hostapd which is used for bringing up a hotspot. And finally the tools serve as a way to create functionalities such as tracking criterias, geofences and more, which is useful for fleet management.

These applications are accessed via the shell with apx- as a command prefix.

The standard response of these system tool command is JSON, thus you may find it useful to use jq to get a specific result.

# returns the last gps point
$ sudo apx-gps state | jq .LATEST_POINT
{"lat":25.945318,"lon":-80.452825,"alt":12.492,"speed":0.019,"heading":0,"epoch":1607006801}

# returns the first 5 geofences in the namespace applications
$ sudo apx-geofences getstatus applications | jq '.[0:5]'

# returns the name of all the geofences in the namespace applications
$ sudo apx-geofences getstatus applications | jq '.[] | {name: .geo_name}'

Result codes

They can be consulted by echoing the Linux exit status code $?. The most common result codes are:

  • 0: Action executed
  • 1: Catchall for general errors
  • 2: Misuse of shell builtins (according to bash documentation)
  • 22: Invalid argument
  • 90: Response too long
  • 126: Command invoked cannot execute
  • 127: Command not found
  • 128: Invalid argument to exit
  • 128+n: Fatal error signal “n”
  • 130: Script terminated by Control-C
  • 255+: Exit status out of range

Note that the sudo must always be in front of the apx command you want to send

# Accelerometer / Microcontroller

# apx-imu

Inertial measurement unit manager for the accelerometer and device's gyroscope. Allows you to set thresholds related to the accelerometer.

$ sudo apx-imu [option]
$ sudo apx-imu [parameter] [value]
[option] description
self_test Starts the accelerometer self-test. If the second parameter is not used it returns the motion state. It forces some of the events (motion, collision, hard_braking, etc) to be triggered.
self_alignment Get/set the state of the self-alignment proccess. Take into account that the vehicle must be stopped/stationary on a level surface when starting this process.
config_list Returns the list with all the configured parameters.
events Returns the list with the last 25 acceleration events.
help Prints this help message.

Use the following options to set/get the different parameters related to the accelerometer. If the second argument is not specified, it returns the value configured

[parameter] description
MOTION_THRESHOLD From 10 to 500, Default: 30 (30*1 milli-g = 30 milli-g)
CFG_FORWARD_COLLISION From -1000 to -15000, Default: -2000 milli-g
CFG_BACKWARD_COLLISION From 1000 to 15000, Default: 2000 milli-g
CFG_LAT_COLLISION_FROM_RIGHT From -1000 to -15000, Default: -2000 milli-g
CFG_LAT_COLLISION_FROM_LEFT From 1000 to 15000, Default: 2000 milli-g
CFG_HARSH_FWD_ACCELERATION From 200 to 600, Default: 260 milli-g
CFG_HARD_BRAKING From -200 to -600, Default: -260 milli-g
CFG_CORNERING_RIGHT From -200 to -600, Default: -400 milli-g
CFG_CORNERING_LEFT From 200 to 600, Default: 400 milli-g

The alignment process can be summarized as follow:

  • Make sure the Syrus 4 is installed securely inside the vehicle
  • Find an open area where the vehicle can travel in a straight line up to 500 meters
  • Put the car in park and send the sudo apx-imu self_alignment true to start the alignment process
  • Accelerate slowly until the car reaches 30kph, keep it at this speed for 3 seconds
  • Slow down normal until you come to a stop 0kph
  • Once stopped stay in the same position for up to 30 seconds until the process says DONE

This process is required to trigger any of the acceleration signals that SyrusJS can trigger.

To get the status of the alignment process you can query:

sudo apx-imu self_alignment

The device will return one of these states

ALIGNMENT_CURRENT_STATE % completed description
1 1% Deleting previous alignment data
2 10% Waiting for GNSS signal
3 30% Running initial stage. Computing recorded data
4 50% Running second stage. Waiting for GNSS signal
5 70% Waiting for vehicle speed to go over 30kph
6 80% Waiting for a valid braking event
7 90% Braking event detected. Computing recorded data
8 100% Alignment process done

# Examples:

# Start the self alignment process:
$ sudo apx-imu self_alignment true

# Set the motion threshold to 40 milli-g:
$ sudo apx-imu MOTION_THRESHOLD 40

# Read the value of the harsh forward acceleration threshold:
$ sudo apx-imu CFG_HARSH_FWD_ACCELERATION

# Read the list of parameters configured:
$ sudo apx-imu config_list
{"MOTION_THRESHOLD":30,"CFG_FORWARD_COLLISION":-2000,"CFG_BACKWARD_COLLISION":2000,"CFG_LAT_COLLISION_FROM_RIGHT":-2000,"CFG_LAT_COLLISION_FROM_LEFT":2000,"CFG_HARSH_FWD_ACCELERATION":260,"CFG_HARD_BRAKING":-260,"CFG_CORNERING_RIGHT":-350,"CFG_CORNERING_LEFT":350}

# apx-uchip

Tool to manage the microcontroller of the device. Note that this is done automatically after an apx-os-update

$ sudo apx-uchip [option]
[option] description
update Starts the updating of the microcontroller that it is in charge of controlling peripherals and power-saving mode
version It returns the current version of microcontroller application
check_update It returns "Update available" or "Updated" depending on if the microcontroller is updated or not

# Example:

# Starts microchip update
$ sudo apx-uchip update

# Checks the version of the microcontroller
$ sudo apx-uchip version

# Applications

# syrus-apps-manager

Install, run, and manage applications on the device.

$ syrus-apps-manager [option] [argument_1] [argument_2] [argument_3]
                                           [option] description
help Prints this help message
install-app install an app from .zip file on the device, makes it available to create instances, takes as argument_1 the path where the zip file exists
update-app · download-app download a new version of the app from the repository declared for the app, takes as argument_1 the name of the app and argument_2 the new version to download, if argument_2 is omitted it will try to download the stable version if available
list-apps list the available apps installed on the device
delete-app delete an app on a specific version, takes as argument_1 the app and argument_2 the version of the app
check-updates checks for updates on every app thats exposes a repository on the manifest
list-instances list all the instances of apps running on the device
create-instance create an instance from a previously installed app on the device, argument_1 is the name of the instance, argument_2 the name of the app, and the argument_3 the version
update-instance update an instance to a different version, takes as argument_1 the name of the instance and argument_2 as the version
delete-instance delete an instance, takes as argument_1 the name of the instance
start · stop · restart start,stop or restart one instance, takes as argument_1 the name of the instance
get-running return a list of only running instances
status return the status of one instance, takes as argument_1 the name of the instance

Note that instances must start with lowercase, and contain no spaces or special characters

# Examples:

Manual application installation from source

$ cd /data/downloads
$ wget https://server.com/applications/customApp/1.0.0.zip
$ syrus-apps-manager install-app customApp /data/downloads/1.0.0.zip

Example using syrusjs

$ wget https://syrus4.dctserver.com/apex/applications/syrusjs/1.29.1.zip -O /data/downloads/1.29.1.zip
$ syrus-apps-manager install-app /data/downloads/1.29.1.zip
$ syrus-apps-manager create-instance test_instance syrusjs 1.29.1
$ syrus-apps-manager start test_instance
# Update syrusjs application 
$ syrus-apps-manager update-app syrusjs 1.29.1</span></b></p>

# Update an instance of syrusjs
$ syrus-apps-manager update-instance syrusjs 1.29.1</span></b></p>

# apx-buffer manager

Buffer manager application for storing event messages for an application using a message broker. By default up to 200 files, each with 100 events can be stored per application, with a maximum of 20 applications. After the buffer is full the oldest messages are deleted.

$ apx-buffer-manager [action] 
$ apx-buffer-manager [action] [instance_name] 
$ apx-buffer-manager [action] [instance_name] [event_data]
[action] description
add Must be followed by instance_name AND event_data. Stores the events in REDIS or in files when there's more than 100 events stored.
delete Must be followed by instance_name to delete an application buffer OR instance_name AND event_data to delete the first event in REDIS list.
delete_all Delete all applications buffer.
status If it's not followed by anything this returns the status of all applications OR if it's followed by the instance_name it returns the status of the application specified

Where:

  • total_apps: the number of applications using the buffer manager
  • g_size: the size of the complete buffer in KB
  • available: The data partition available size in KB
  • buffer: list of applications and their buffer
  • app_name: the instance_name
  • size: Max amount of items that can be stored
  • buffered: Number of items in the memory
  • oldest: The oldest item
  • newest: The newest item
  • files: The number of files in the instance_name folder
  • folder_size: The size in KB of the instance_name folder

# Examples:

# Add events to instance called instance_name
$ sudo apx-buffer-manager add instance_name event_test_x
$ sudo apx-buffer-manager add instance_name "event test y"

# Check the buffer manager status
$ sudo apx-buffer-manager status
{"total_apps":1,"g_size":8,"available":199992,"buffer":[{"app_name":"instance_name","size":20100,"buffered":1,"oldest":"event_test_x","newest":"event test y","files":0,"folder_size":0}]}

# Audio

# apx-tts

Tool to convert text to speech in different languages. Use the apx-bt tool to pair to a compatible bluetooth device first.

$ sudo apx-tts [language] [message]
[language] description
en-US English
en-GB Great Britain
de-DE German
es-ES Spanish
fr-FR France
it-IT Italian

[message] is the actual message to say

# Examples

$ sudo apx-tts en-US 'Testing text to speech'

$ sudo apx-tts es-ES 'Una prueba de texto a voz'

# Bluetooth

# apx-bt

Bluetooth tool with BLE functions and pairing with compatible with bluetooth headsets. If you're looking for the text to speech function, check out the apx-tts tool.

$ sudo apx-bt [action] [option]

# Actions

[action] description
help Prints this help message.
on Will enable the Bluetooth module.
off Will disable the Bluetooth module.
status Will display core application version, prioritized audio, device MAC, device name, and the mode configured.
scan Followed by time in seconds. Application will scan for nearby devices for up to 30 seconds.
pair Followed by address. Will begin the pairing process with the device address. Device needs to have been previously scanned.
pair_forced Followed by address. Will force a pair process with the address.
connect Followed by address. Attempt a connection with a previously paired device
unpair Followed by address. Will unpair a previously paired device.
disconnect Followed by address. Will disconnect a previously connected device.
switch_audio Followed by address. Will declare the device to be the main source of audio.
info Followed by address. Will display information about the device.
info_all This will display information about all of the recently discovered devices, if those devices are paired, or if they are paired and connected.
history This will display information about all of the devices that were discovered by the scanning process since last activation of the Bluetooth module
list_discovered Returns the list of all the devices that have been discovered by the scanning process. Note: A device might be scanned and added to the list of paired devices but not appear in the list of discovered devices. Recommended to check both lists.
list_paired Returns the list of all the paired devices.
list_connected Returns the list of all paired and connected devices.
restart This will restart the application module.
reset This command resets everything regarding the application. All information about the devices, connections, and pairs will be lost.
routed_audio This will display the address of the device producing audio.
soc_audio Routes prioritized audio device to allow audio from SOC.
mdm_audio Routes prioritized audio device to allow audio from MDM.
[option] description
device_address Device MAC address. A single string of hexadecimal is expected for the device_address
time_in_seconds Time in seconds.

Note that the switch_audio option is only relevant when you have multiple compatible speakers paired to the Syrus, and you want to switch which speaker to use to playback the audio without having to disconnect them.

# Examples:
# Start a scan for nearby bluetooth devices for 15 seconds.
$ sudo apx-bt scan 15

# List discovered Bluetooth devices after scanning
$ sudo apx-bt list_discovered
{"C83432DA6A1C":"Family Room TV","000664EDF530":"CricutAIR2-F530","E8ABFB463615":"Boltune BT-BH010","84A444220FA2":"[TV]Samsung LED55"}

# Pair to a discovered bluetooth device with the MAC address: 02:06:EF:66:43:0A
$ sudo apx-bt pair E8ABFB463615

# BLE Functions

$ sudo apx-bt advertising [mode,flag,duration]
$ sudo apx-bt auth [argument_1]
$ sudo apx-bt change_auth [argument_1] [argument_2]
$ sudo apx-bt send [argument_1] [argument_2]
[action] description
advertising Followed by desired parameters to enable or disable advertising, which type of advertising to do, and for how long to advertise. All of these values are separated by commas: mode,flag,duration. Refer to Advertising Table to configure which type of advertising to use. If not followed by anything shows parameters used.
auth Followed by the password. Only usuable from the BLE device that is connected.
change_auth Takes two arguments. The old password and the new password that BLE devices must use for authentication. Passwords must be of 1 to 30 characters long and cannot contain spaces. Only 0-9,a-z,and A-Z characters are allowed.
send Followed characteristic and message. This command takes two arguments where the first argument is the characteristic to notify and the second argument is the message to send to the device that is subscribed for notifications. The message can be any NULL terminated string. Refer to Valid Characteristics.
ping Used for maintaining a keep alive communication between a BLE device and this unit. Will return "pong".
# Advertising
[mode,flag,duration] description
mode Either 0 or 1 for disable and enable respectively.
flag To get the desired on state flag, simply add the hex numbers from Number.
duration A value in seconds between 30 to 300 seconds. A number more than 300 will force advertising duration to be 600 which means advertising is continuous, meaning advertising will always be on.
Number Not added Added
0x001 Local Random Address Local Public Address
0x002 Non Discoverable Discoverable
0x004 Non Connectable Connectable
0x010 Advertise Name Off Advertise Name
0x020 Advertise Tx Pwr Off Advertise Tx Pwr
0x040 No Appearance Advertise Appearance
0x100 Peer Random Address Peer Public Address
characteristic Description
events To be used for events that occurred
u_console To be used by internal user applications that wish to communicate with external user applications.
# Examples:
# Advertising is enabled, discoverable (`0x002`), connectable (`0x004`), and the name is advertised (`0x010`) for 200 seconds.
$ sudo apx-bt advertising 1,0x16,200

# Send a json string to the events 
$ sudo apx-bt send events {"len":5,"value":"hello"}

# Counters

# apx-counter

Start device counters for ignition, distance and other metrics.

$ sudo apx-counter [action] [namespace]
$ sudo apx-counter [action] [namespace] [key] [value]
[action] description
start Must be followed by namespace. Will start the desired namespace. Creates it if it doesn't exist.
stop Must be followed by namespace. Will stop the desired namespace.
reset Must be followed by namespace. Will stop the desired namespace and resets the counter key values.
resetall Same as above only that thresholds are reset to default values.
set Must be followed by namespace key value. Key has its value set to value.
get Must be followed by namespace key. Will return the value of the key.
getall Must be followed by namespace. Will return the value of all of the keys.
delete Must be followed by namespace. Will delete the namespace.
list Not followed by anything. Will list information about all known counters.
help Prints this help message
[key] description
ODOMETER Distance traveled in meters with ignition on.
IGNITION_TIME Total time ignition has been on in seconds.
IDLE_TIME Total time ignition has been on in seconds with no distance traveled after the time defined in BEGIN_IDLE_TIME.
OVER_SPEED Total time in seconds that the speed has exceeded the threshold value defined in SPEED_THRESHOLD
OVER_RPM Total time in seconds that the RPM has exceeded the threshold value defined in RPM_THRESHOLD
HARD_BRAKES Total number of hard brakes produced.
HARSH_FWD_ACCELERATION Total number of harsh accelerations produced.
DISTANCE The distance traveled in meters with no ignition.
RPM_THRESHOLD Key to define an RPM value that the vehicle must exceed to begin incrementing OVER_RPM
SPEED_THRESHOLD Key to define a speed value (km/h) that the vehicle must exceed to begin incrementing OVER_SPEED
BEGIN_IDLE_TIME Key to define how long to wait in minutes before incrementing IDLE_TIME.

The namespace can be up to 50 characters long with no spaces. We recommend you define a schema: type:name:counter like driver:john:0

# Examples:

# start custom counter
$ sudo apx-counter start custom1

# set the speed threshold to 100km/h for custom1
$ sudo apx-counter set custom1 SPEED_THRESHOLD 100

# get all the values of custom1 counters
$ sudo apx-counter getall custom1

# ECU

# apx-ecu

Tool to configure and read data from a vehicle's onboard computer using the CAN Bus.

$ sudo apx-ecu [action] [argument_1] [argument_2] [argument_3]
[action] description
configure Followed by argument_1 and argument_2. Will configure the interface in argument_1 to the mode in argument_2; this will make the configuration section from ecumonitor.conf obsolete. If there are no arguments, this command will return a json object of the ECU Monitor configuration used.
clear Not followed by any arguments. This will clear the list of parameters read.
listen_mode Followed by argument_1. Will force the ECU Monitor to use the listen mode specified in argument_1; this will make the configuration section from ecumonitor.conf obsolete. If no argument is specified, this command will return a json object of the listen mode used.
list_parameters Not followed by any arguments. Returns a json of all the parameters read with the unique id and value.
log Followed by argument_1, argument_2, and argument_3. Where argument_1 is the time in seconds starting from 1 second up to 40 seconds to save to the log file in argument_3. Log file name for argument_3 is a relative file path name. Only letters and numbers are allowed for the file name. All log files are saved in /data/users/syrus4g/ecumonitor/ecu_logs/. Lastly, argument_2 is the desired interface whence the log file will record the data.
stop Not followed by any arguments. Halts operation of ECU Monitor until it is reconfigured; this will make the configuration section from ecumonitor.conf obsolete.
restart Not followed by any arguments. Restarts the ECU Monitor.
version Not followed by any arguments. Will return the version of this tool and the version of the ecumonitor core application.
accessory_map Followed by argument_1 and argument_2. Will save a user defined accessory map with device type name found in argument_1 and its ID in argument_2. The ID must greater than 99 and the name must be at most 19 characters long.
decode Followed by argument_1 and argument_2. This decodes the data in argument_2 for the unique id from argument_1. This returns a different JSON based on the unique id to decode. If no arguments are passed then the list of valid unique ids will be printed
help Prints this help message

Valid Interfaces PRIMARY_CAN, SECONDARY_CAN

CAN Modes J1939_250KHZ, J1939_500KHZ, ACCESSORIES_XXXXYHZ, DISABLED

Note: Where XXXX is the baud rate, and Y is either K (Kilo) or M (Mega).

Valid Listen Modes NONE, PRIMARY_CAN, SECONDARY_CAN, PRIMARY_N_SECONDARY, ALL

# Examples:

# Configure the primary ECU cables to work with J1939 @ 250KHz 
$ sudo apx-ecu configure PRIMARY_CAN J1939_250KHZ

# Set the listen only mode for SECONDARY CAN 
$ sudo apx-ecu listen_mode SECONDARY_CAN

# Decode a J1939 data trouble code*
$ sudo apx-ecu decode feca_3-6 2114126001
{"spn":177,"fmi":3,"cm":0,"oc":126}
# Note this requires the definition of PGN: `feca` start_position: `3-6` in your ecumonitor.conf

# Perform a candump for 40 seconds from 2 CAN interfaces
$ sudo apx-ecu restart
$ sudo apx-ecu clear
$ sudo apx-ecu configure PRIMARY_CAN J1939_500KHZ
$ sudo apx-ecu configure SECONDARY_CAN J1939_250KHZ
$ sudo apx-ecu log 40 PRIMARY_CAN logTruck500.log
$ sudo apx-ecu log 40 SECONDARY_CAN logTruck250.log
$ sudo apx-ecu list_parameters
# Note that underscores are not allowed for the name of the log file

# Ethernet

# apx-ethernet

Manage the ethernet interface on the device. Allows you to configure DHCP mode or other network configuration.

$ sudo apx-ethernet [action]
$ sudo apx-ethernet config [dhcp_mode] [ip/mask] [gateway] [dns] [dhcp_enabled]
[action] description
on Power on the ethernet interface
off Power off the ethernet interface. It helps to save energy
reset Executes a transition in the reset pin of the LAN controller
state Returns the interface state, MAC, IP, Broadcast, MASK, RX bytes and TX bytes
config With this option you can configure DHCP mode, IP/MASK, Gateway, DNS, and DHCP Server mode
route Use this option for forwarding the ethernet traffic to another interface, it allows you to have internet access by specifying the output interface. Valid modes are: wlan0, ppp0, both and none.
help Prints this help message

# Examples:

# Configure the ethernet in DHCP mode
$ sudo apx-ethernet config dhcp

# Set the IP address of the ethernet interface
$ sudo apx-ethernet config 192.168.5.5/24

# Configure the ethernet network with dhcp enabled
$ sudo apx-ethernet config 192.168.5.5/24 192.168.5.255 8.8.8.8 yes
# Where: 192.168.5.5/24 = Device IP/Mask
#        192.168.5.255  = Gateway address
#        8.8.8.8        = DNS
#        yes            = DHCP server enabled

# Route ethernet traffic to both wlan0 and ppp0 interface
$ sudo apx-ethernet route both

# Check the ethernet state
$ sudo apx-ethernet state
{"state":"Enabled","mac":"9C:1D:58:3D:5A:90","ip":"","bcast":"","mask":"","rx_bytes":"0","tx_bytes":"0","routing":"both"}

# Geofences

# apx-geofences

Tool that adds and removes geofences on the device. Note that a maximum of 3000 geofences can be saved as of apex version 20.12

Add a geofence

# sudo apx-geofences add [namespace] [group] [type] [name] [radius] lon,lat [...]
$ sudo apx-geofences add places parks circular country_village_park 100 -80.305340,25.943784
parameters description
[namespace] Name of the namespace. If no namespace, specify an empty string "". Max 30 characters
[group] Name of the group. If no group, specify an empty string "". Max 30 characters, min 3 characters
[type] Type of geofence. Must be circular or poly
[name] Name of the geofence. Max 50 characters
[radius] Optional Radius of the geofence in meters, required for circular geofences. Min 50 meters. Max 20000 meters.
[lon,lat] Longitude and latitude coordinates in the format decimal degrees: -80.3471745,25.917071. Max 500 pairs of coordinates. Minimum of 3 pairs of coordinates for a poly type geofence

Remove a geofence

# sudo apx-geofences remove [namespace] [group] [name]
$ sudo apx-geofences remove places parks country_village_park

Remove all geofences of a namespace

# sudo apx-geofences remove [namespace]
$ sudo apx-geofences remove places

Get a list of all namespaces that exist

$ sudo apx-geofences getns
["places","shopping_malls"]

To get all the information of the geofences of a specific namespace

# sudo apx-geofences getall [namespace]
$ sudo apx-geofences getall places
[{"namespace":"places","group":"group","geo_name":"norman_jean","type":"poly","n_vertices":4,"vertices":["-80.33352400,25.93546900","-80.32843900,25.93494800","-80.32832100,25.93337500","-80.33331000,25.93355800"]}]

where:

  • namespace: Name of the namespace
  • group: Name of the group
  • geo_name: Name of the geofence
  • type: poly or circular
  • radius: Radius of circular geofence in meters
  • n_vertices: Number of lon,lat pairs in the geofence
  • vertices: Lon,lat pairs

To count the number of geofences that exist in namespace[s]

# sudo apx-geofences count [namespace]
$ sudo apx-geofences count places
4

To get the current state of each geofence of a specific namespace

# sudo apx-geofences getstatus [namespace]
$ sudo apx-geofences getstatus places
[{"group":"parks","geo_name":"country_village_park","is_inside":false,"time":1623959290}]

where:

  • group: Name of group
  • geo_name: Name of geofence
  • is_inside: True if device is currently inside the geofence

To get the current version of the tool

$ sudo apx-geofences version
{"version": "0.0.5"}
RETURN_CODES description
0 OK
22 Invalid argument
80 Max number of geofences reached
81 Geofence not found
82 Missing parameter
127 Unknown command

# Example:

# Create a polygonal geofence around 25.935469,-80.333524 25.934948,-80.328439 25.933375,-80.328321 25.933558,-80.333310
$ sudo apx-geofences add places parks poly park_norman_jean -80.333524,25.935469 -80.328439,25.934948 -80.328321,25.933375 -80.333310,25.933558

# Print the geofences that are in the namespace places
$ sudo apx-geofences getall places
[{"namespace":"places","group":"parks","geo_name":"park_norman_jean","type":"poly","n_vertices":4,"vertices":["-80.33352400,25.93546900","-80.32843900,25.93494800","-80.32832100,25.93337500","-80.33331000,25.93355800"]}]

# apx-geofences-manager

Tool to import and export geofences massively on the device.

$ sudo apx-geofences-manager [option] [arguments]
[option] description
import Create geofences in batch using syruslang scripting command, the tool requires arguments: namespace and path.
export Export geofences to a single file. Accepts arguments: format, namespace, and file.
              [arguments] description
--remove Remove all geofences in the namespace before start importing
--dry-run Run command to proccess without creating geofences
--format | -f Format to be exported, accepted values are: syruslang,geojson
--namespace | -n Namespace to be export or imported
--path | -p Path to file destination where import geofences or path where to export destination. Must be a syrus.conf and contains syruslang script language or a .geojson with valid geojson data
# Import geofences from '/data/downloads/geofences.syrus.conf' with the namespace 'sample_geo' to the device.
$ sudo apx-geofences-manager import -p /data/downloads/geofences.syrus.conf -n sample_geo

# Export geofences on the device from the namespace: 'sample_geo' into Syruslang format with the name: '/data/downloads/geofences_applications.syrus.conf'
$ sudo apx-geofences-manager export -f syruslang -n sample_geo -p /data/users/syrus4g/geofences_applications.syrus.conf
{"results":"ok","geofences":10}

# GNSS/GPS

# apx-gps

Allows you to control the GNSS/GPS interface on the device.

$ sudo apx-gps [option]
       [option]        description
antenna Power on/off the GPS antenna. When powering on, 3.3 Volts are placed on GPS antenna connector
cold-start Use this option to execute a gps cold start. It depends on the gps engine selected
engine Use this option to select between xm1110 or quectel. If second argument is not used it returns the gps engine selected
filter Use this option to configure the gps anti-drift filter, it receives as parameters the HDOP, motion and speed(km/h). Valid range: 1.0 <= HDOP <= 5.0; Motion true/false; 0 <= speed < 100
help Prints this help message
hot-start Use this option to execute a gps hot start. It depends on the gps engine selected
nmea Use this option to configure the gps nmea output. It depends on the gps engine selected
position Use this option to consult the current GPS position
power Power on/off/reset the XM1110 or Quectel GPS interface. It depends on the gps engine selected
state Use this option to consult the current state of GPS
update-rate Use this option to chage the gps nmea sentece output frequency. It depends on the gps engine selected. Valid options are 1, 5 and 10 Hz
warm-start Use this option to execute a gps warm start. It depends on the gps engine selected

# Examples:

# Get the gps state
$ sudo apx-gps state
{"TIME":"2021-06-17T20:26:35Z","ENGINE":"xm1110","VERSION":"1.3.1","FIX":3,"LATEST_POINT":{"lat":25.783475,"lon":-80.293563,"alt":17.040,"speed":0.963,"heading":115.27,"epoch":1623959390}}
# Where: TIME           = GMT Timestamp in ISOFORMAT
#        ENGINE         = GPS chip
#        VERSION        = GPS version
#        FIX            = Fix quality, 1: 'Fix not available', 2: '2D', 3: '3D' (http://aprs.gids.nl/nmea/)
#        LATEST_POINT
#            lat        = Latitude
#            lon        = Longitude
#            alt        = Altitude in meters above mean sea level
#            speed      = Speed in km/h
#            heading    = Heading in degrees from North, increasing eastwardly
#            epoch      = GPS epoch timestamp

# Perform a warm-start on the GPS module
$ sudo apx-gps warm-start

# Update the GPS frequency to report 5 times a second
$ sudo apx-gps frequency 5

# Turn on the gps antenna
$ sudo apx-gps antenna on

# Change the GPS anti-drift filter to hdop of 2.0, movement detected, with speed of 5 km/h
$ sudo apx-gps filter 2.0 true 5

# Get the latest location
$ sudo apx-gps position
"http://maps.google.com/maps?q=25.783560,-80.293480"

# Inputs/Outputs

# apx-io

Tool that manages the device's general purpose inputs and outputs.

$ sudo apx-io [action] [key] [value]
[action] description
set Must be followed by key and value. Will set desired output for the device.
get Must be followed by key. Will obtain the value of the desired key
getall Must be followed by key. Will obtain all of the values for the desired key
help Prints all the usages

set

[key]: OUT1, OUT2, OUT3, and OUT4

[value]: true or false

get

[key]: OUT1, OUT2, OUT3, OUT4, IGN, IN1, IN2, IN3, IN4, IN5, IN6, IN7, PWR, MOT, SO1, SO2, SO3, SO4, TIG, AN1, AN2, DAN, BAT

getall

[key]: outputs, inputs, analogs

# Examples:

# Get the value of all the analog inputs:
$ sudo apx-io getall analogs
{"BAT":4.047,"DAN":11,"AN1":0,"AN2":0}

# Activate output 2:
$ sudo apx-io set OUT2 true

# LTE-Modem

# apx-mdm

Tool to manage the LTE module of the device. Allows you to configure the APN and other configuration related parameters as well as perform actions like sending an SMS, enabling airplane mode, or converting text to speech.

$ sudo apx-mdm [option]
$ sudo apx-mdm [parameter] [value]
$ sudo apx-mdm [action] [value]
[option] description
on Power on the LTE module by using the driver circuit
off Power off the LTE module by using the driver circuit
reset Applies a pulse in the reset pin of the LTE module. It is an electrical reset.
help Prints this help message

Use the following keys to set/get a parameter. If second argument is not present, it returns the parameter value.

[parameter] description
apn The access point name.
pin The SIM card PIN
user The username for the apn
pass The password to acess the apn
sim_sw_interval The time interval in hours for changing from external SIM to embedded when no data connection is reached (default: 8)
sim_priority With this parameter, you can specify the sim card to use: e-sim (default) or sim-card
keep_alive The time interval in minutes to check the data connection
call_validation Use 'true' for validating the phone number before answering the call, it depends on the authorized phone list added with phone_book option. By default, the device validates the phone number before answering the call
sms_validation Use 'true' for validating the phone number before processing the incoming sms, it depends on the authorized phone list added with phone_book option. By default, the device validates the phone number before processing the incoming sms
phone_book Use this option to add, remove and consult the authorized phone book list
state Use this option to consult the current state of the LTE modem device. It returns a json object that shows information about the network registration and configuration parameters

Use the following keys to execute some actions in the LTE modem device. These actions are executed by the syrus-mdm application.

[action] description
airplane_mode Use true for entering in airplane mode and false for returning to normal mode.
restart Use this option for executing a software reset that is controlled by the modem application.
send_sms Use this option for sending an SMS.
start_call Use this option for starting a voice call.
end_call Use this option for ending an established voice call.
tts Text to speech. Use this option to turn text into speech by using the Bluetooth speaker connected.

# Examples:

# Set the APN of the regular SIM card (not embedded)
$ sudo apx-mdm apn mycarrierapn.com

# Set the priority of the SIM card used to the regular SIM (not embedded):
$ sudo apx-mdm sim_priority sim-card

# Add phone number to the phone book:
$ sudo apx-mdm phone_book add 3013333333

# Send an SMS to 3013333333
$ sudo apx-mdm send_sms 3013333333 'Testing Syrus4 SMS'

# Start a call with the number: 3013333333
$ sudo apx-mdm start_call '3013333333'

# Speak command
$ sudo apx-mdm tts 'Testing text to speech'

# Get the state of the LTE modem
$ sudo apx-mdm state
{"manufacturer":"Quectel","revision":"EG25GGBR07A06M2G","model":"EG25","imei":"867698040023056","sim_imsi":"732123200007701","sim_state":"Not in Use","sim_type":"EMBEDDED","sim_id":"89883234500011949724","gsm_reg":1,"modem_state":"ON","gprs_reg":1,"rat":"FDD LTE","mcc_mnc":310260,"band":"LTE BAND 2","operator":"Wireless","esim_state":"READY","ip":"25.130.16.168","esim_imsi":"310260859157280","esim_id":"8901260852391572807F","rssi":15,"no_conn_time":0,"lac":8181,"cid":"24A8F0E","sim_sw_interval":8,"keep_alive":15,"sim_priority":"e-sim","apn":"super"}

# apx-ppp

Manages the ppp connection to the internet with the specified profile.

$ sudo apx-ppp [option] profile
[option] description
start Starts the pppd deamon with the profile specified
stop Stops the pppd process
state Returns 0 if daemon is running and ppp0 interface has an IP, 1 otherwise
help Prints this help message

# Example:

$ sudo apx-ppp start default

# Onewire

Manage devices that communicate via the 1-wire bus system like temperature probes and IButtons.

# apx-onewire

Use this Apex tool to add/remove onewire devices to or from the whitelists found in /data/users/syrus4g/onewire/. This tool also allows to get information about the onewire devices connected.

sudo apx-onewire [type] [action]
sudo apx-onewire [type] [action] [argument_1] [argument_2] ... [argument_n]
[type]
ibutton
temperature
[action] description
add Followed by argument_1 and argument_2. Will add the alias found in argument_1 with the onewire id number found in argument_2 to the white list based on the valid type. Alias cannot be empty, must be of 50 characters or less, and cannot contain the character ':'. The onewire id must be exactly 16 characters long.
remove Followed by argument_1. The argument_1 can be either the alias or the onewire id which will be removed from the white list based on the valid type.
remove_all Not followed by any arguments. Will remove all of the onewire devices based on the type specified from the corresponding white list.
get Followed by argument_1. The argument_1 can be either the alias or the onewire id. Returns an object with information about the onewire device based on the type given.
get_all Not followed by any arguments, returns an array of objects for all the onewire devices based on the type specified.
get_last Not followed by any arguments, returns an object of the last onewire device that was connected based on the type specified.
restart Not followed by any arguments, not preceded by a type, will restart the onewire application.
reset Not followed by any arguments, not preceded by a type, will reset the onewire application. Deleting all white list files as well as previous information about past onewire devices.
help Not followed by any arguments, not preceded by a type, will print this message.
version Not followed by any arguments, not preceded by a type, will return the core and the tool version.
status Not followed by any arguments, not preceded by a type, will return the status of the onewire bus. 0 meaning operation is normal. -1 meaning that there is a fault in the onewire bus.

# Examples:

# add ibutton with alias: 'driver 1'
$ sudo apx-onewire ibutton add 'driver 1' 0123456789123401

# read all ibuttons
$ sudo apx-onewire ibutton get_all
{"ibuttons":[{"alias":"driver 1","id":"0012331241412401","whitelisted":true,"connected":false,"conn_epoch":null,"disc_epoch":null}]}

# add temperature alias for room1
$ sudo apx-onewire temperature add room1 3501144D2797AA28

# read all temperatures
$ sudo apx-onewire temperature get_all
{"temperatures":[{"alias":"room1","id":"3501144d2797aa28","value":null,"connected":false,"epoch":1619786506}]}

# Power Save

# apx-psm

Tool to manage the device's power save mode. The power save mode is ON by default where the device goes into a low power consumption mode after 5 minutes without the ignition wire detected. This behavior can be overwritten with this tool. Syrus 4 consumes ~200mA when using GNSS, modem and wifi, thus it's recommended to always have a power save mode configured, to avoid any issues with a car's battery for example.

Default PSM_STRING: IGN:0,SLP:300;IGN,MIN:720;300

$ sudo apx-psm [action] [PSM_string]
[action] description
immediate This action is not followed by PSM_string, instead it orders the device to enter Power Save Mode with the previously loaded configuration. When a previous PSM doesn't exist the device will use the default PSM.
mode Must be followed by PSM_string and the only valid format is sleep_condition;wakeup_condition;wait_time. Signals for the conditions are separated by commas (,) and conditions are separated by semicolons (;). All of the sleep_condition signals must have a valid value of 0 or 1 and the colon (:) character must be used to separate between signal and value. Note: MIN is the only signal for wakeup_condition that has a value. SLP signal cannot exist without a MIN signal and vice versa. Be sure to encapsulate PSM_string with "Quotation Marks"
help Prints this message.
guide Guides the user on how to properly create a Power Save Mode string. Note The device will be configured with the results of this guide.

Configuration of the [PSM_string] First enter the sleep_condition. This is the condition the device must meet so that it will go into Power Save Mode. This condition is broken into signal:value separated by commas where only the valid signals below are allowed and the only valid values are 0 (inactive) or 1 (active)

sleep_condition signals description
IGN Ignition state.
IN1 Input 1 state.
IN2 Input 2 state.
IN3 Input 3 state.
IN4 Input 4 state.
IN5 Input 5 state.
IN6 Input 6 state.
IN7 Input 7 state.
PWR External power state.
MOT Motion state.
SO1 Short-circuit on output 1.
SO2 Short-circuit on output 2.
SO3 Short-circuit on output 3.
SO4 Short-circuit on output 4.
TIG Ignition from main power supply state.
SLP Time to wait for the device to go back into sleep mode in seconds (300 - 65535 seconds)

Next enter the wakeup_condition. This is the condition that lets the device know how it should return from the Power Save Mode. The device will wake up upon any of the given wake up signals being met. Only use the valid wake up condition signals described below. The only signal that uses a value is 'MIN' and this signal lets the device know how often to wake up. Example: MIN:10 will wake up every 10 minutes.

wakeup_condition signals description
IN1 Will wake up based any change detected in input 1.
IN2 Will wake up based any change detected in input 2.
IN3 Will wake up based any change detected in input 3.
IN4 Will wake up based any change detected in input 4.
IN5 Will wake up based any change detected in input 5.
IN6 Will wake up based any change detected in input 6.
IN7 Will wake up based any change detected in input 7.
IGN Will wake up upon ignition signal change.
PWR Will wake up upon external power source signal change.
SO1 Wake up due to a short in output 1.
SO2 Wake up due to a short in output 2.
SO3 Wake up due to a short in output 3.
SO4 Wake up due to a short in output 4.
MOT Will let the device wake up upon motion being detected.
MIN Lets the device know how often, in minutes, to wake up. 1 - 65536 (note this needs a value)

Lastly, enter the wait_time. This is the time the sleep condition must be met and sustained before the device will into Power Save Mode. This number is defined in seconds. The wait time must be between 300 seconds (5 minutes) or 65536 seconds (18 hours) inclusive.

Note that there is no way to remove the power save mode, however you can configure it in a way that it never falls asleep

# Examples:

# Set the power save mode to go to sleep after 240 seconds (4min) (240) of no ignition detected (IGN:0), wake up for 5 minutes (SLP:300) every 10 minutes (MIN:10) or end the power save mode when motion is detected (MOT).
$ sudo apx-psm mode "IGN:0,SLP:300;MOT,MIN:10;240"

# Set the power save mode to go to sleep after 300 seconds (300) of no movement detected (MOT:0), and wake up only when input1 is detected (IN1).
$ sudo apx-psm mode "MOT:0;IN1;300"

# Set the power save mode to go to sleep after 5 minutes (300) of no movement or ignition (MOT:0,IGN:0), wake up every 2 hours (MIN:120) for 3 minutes (SLP:180) or end the power save mode when INPUT 1, or IGNITION, or MOTION is detected (IN1,IGN,MOT).
$ sudo apx-psm mode "MOT:0,IGN:0,SLP:180;IN1,IGN,MOT,MIN:120;300"

# Serial Interface

Manage the serial RS-232 interface of the device to communicate with accessories via the serial port.

# apx-serial

Configures the RS-232 serial interface in different modes for communication with serial accessories such as Satcom & Sigfox communicator, fatigue sensor, or a mobile data terminal.

$ sudo apx-serial [option]
$ sudo apx-serial mode [argument_1]
$ sudo apx-serial console [command]
$ sudo apx-serial modem [argument_1] [argument_2]
$ sudo apx-serial fatigue_sensor [argument_1]
$ sudo apx-serial mdt [argument_1]
$ sudo apx-serial mdt settings [argument_n] 
[option] description
mode Use this option to select the mode in which the user serial port will be used. By default the serial port is in console mode. If argument_1 is not found it returns the current mode.

Selecting the mode

[argument_1] description
console When the device is in console mode, you can use apx commands for interacting with the syrus device, for example, you can consult the state of the device inputs by sending apx-io getall inputs through a serial terminal at 115200 8 n 1
modem Used when Satcom or Sigfox accessories are connected. In modem mode you can use the following options: state, send
fatigue_sensor Used when communicating with a fatigue sensor accessory. In this mode you can use the following options: state,list,sensitivity,min_speed,speeding,max_photos,speaker_volume,auto_upload,upload,capture_photo,delete_photos
mdt When the device is in MDT mode you can use the following options: state,send,settings

# Console mode

$ sudo apx-serial mode console

# sudo apx-serial console [command]
$ sudo apx-serial console apx-gps position

Send apex commands to the device and receive a response via the serial interface

[command] description
apx- apex commnd to send to the device

# Modem mode

$ sudo apx-serial mode modem

# sudo apx-serial modem [argument_1] [argument_2]

Used to communicate with other serial capable modem devices/accessories like the Syrus Satcom and Sigfox Communicator.

[argument_1] description
state Use this option to consult the current state of the serial modem device
send Use this option to send data through the serial modem device, max 340 characters with the serial-modem satcom.
buffer_size Followed by argument_2 to configure the size of serial modem buffer. Range from 10 to 500. Default 100. If no argument provided it returns the current value.
clear_buffer Use this option to to clear the serial modem buffer.
# Modem Examples:
# Configure the serial port in modem mode
$ sudo apx-serial mode modem

# Configure the serial port in modem mode, which is used when Satcom or Sigfox accessories are connected, in the example below, 50 is an optional parameter for configuring the size of the buffer for the serial modem.
# The range of the buffer is from 10 to 500. Default is 100.
$ sudo apx-serial modem buffer_size 50

# Consult the current state of the serial modem device.
$ sudo apx-serial modem state
{"state":"connected","type":"satcom","id":"300234062206840","signal":3,"version":15,"buff_size":50,"buff_count":1}

# To send a message
$ sudo apx-serial modem send ">REV331852148....;ID=35...<"
# Note that it returns an error if the modem mode is not active. and if the message length is greater than 340 characters

# Fatigue Sensor mode

$ sudo apx-serial mode fatigue_sensor

# sudo apx-serial fatigue_sensor [argument_1]

Used to communicate with a fatigue sensor. The photos captured by the fatigue sensor are automatically stored in: /data/users/syrus4g/fatigue_sensor.

[argument_1] description
state Use this option to consult the current state of the sensor
list It returns the list of the photos stored in the device memory
sensitivity Use this option to consult/configure the sensor sensitivity. Range 2-11. Default 3. If no argument provided it returns the current value.
min_speed Use this option to consult/configure the warning start-up speed. Range 10-60. Default 10 km/h. If no argument provided it returns the current value.
speeding Use this option to consult/configure the sensor speed alarm rate. Range 50-150. Default 50 kph. If no argument provided it returns the current value.
max_photos Use this option to consult/configure the max number of photos that can be stored in the device memory. Range 10-100. Default 25. If no argument provided it returns the current value.
speaker_volume Use this option to consult/configure the sensor speaker volume. Range 0-2. Default 2. If no argument provided it returns the current value.
auto_upload Use this option to consult/configure the auto_upload mode, when enabled, the application will automatically upload the photos to the syrus4 server. 0: disabled, 1: enabled. Default disabled
upload Use this option to upload the photos to the syrus4 server
capture_photo Use this option to capture a photo
delete_photos Use this option to delete all the photos stored
sensitivity approximate delay time in seconds to alarm
2 2.2 seconds
3 2.9 seconds
4 3.7 seconds
5 4.5 seconds
6 5.3 seconds
7 6.1 seconds
8 6.9 seconds
9 7.7 seconds
10 8.5 seconds
11 15 seconds
speaker_volume volume equivalent
0 Speaker Off
1 Low
2 High

Auto-upload

The auto-upload feature is used to automatically upload photos to DCT's server. In a future release we'll provide access to download the photos from DCT's server, if you're using Syruslang

Note that the photos captured by the fatigue sensor use the following format:

epoch-photo_description.jpeg

Where photo description can be any of the following:

  • fatigue_alarm: driver fatigue detected
  • fatigue_remind: driver fatigue reminder
  • fatigue_warning: driver fatigue warning
  • distraction: driver distracted
  • no_portrait: driver not detected
  • photo: regular photo captured with fatigue sensor
# Fatigue Sensor Examples:
# To change the sensitivity so it's more sensitive
$ sudo apx-serial fatigue_sensor sensitivity 2

# To change the minimum speed used to trigger warnings to 25kph
$ sudo apx-serial fatigue_sensor min_speed 25

# To check the state of the fatigue sensor
$ sudo apx-serial fatigue_sensor state
{"state":"connected","sensitivity":3,"speaker_volume":2,"min_speed":10,"speeding":50,"max_photos":10,"nbr_photos":10,"latest_photo":"1616001062-photo.jpeg"}

# To list photos captured by fatigue sensor
$ sudo apx-serial fatigue_sensor list
["1615580038-distraction.jpeg","1615580071-fatigue_alarm.jpeg","1615580119-distraction.jpeg","1615580207-fatigue_alarm.jpeg","1615580231-distraction.jpeg","1615580295-photo.jpeg","1615580324-photo.jpeg","1615580361-distraction.jpeg","1615997099-photo.jpeg","1616001062-photo.jpeg"]

# MDT mode

$ sudo apx-serial mode mdt

# sudo apx-serial mdt [argument_1]
# sudo apx-serial mdt settings [baudrate] [type] [timeout] [max_size] [header] [tail] [mask] [offset]

Places the device in an MDT mode, which allows you to receive and send data via the serial interface in a packaged format based on different criterias such as the size, time, and header among others.

[argument_1] description
state Returns a json with the current state and configuration parameters
send For sending data to the serial port
settings For setting up the mdt mode

MDT Settings

[argument_n] description
baudrate The serial port baud rate. Valid values are 1200, 4800, 9600, 19200, 38400, 57600 and 115200
type For this version only x is supported (hexadecimal mode)
timeout It is the time that the application waits before sending the packed data when at least one byte has been received. Range 0-900s. Use 0 to ignore this setting
max_size When this limit is reached the application sends the packed data. Range 0-1024. Use 0 for ignoring this setting
header The protocol head, up to 4 bytes, for example 0x0b0c. Up to 4 hexadecimal bytes. Use 0 for ignoring this setting
tail The protocol tail, up to 4 bytes, for example 0x0d0a. Up to 4 hexadecimal bytes. Use 0 for ignoring this setting
mask The mask used, up to 4 bytes. Use the mask for filtering the data, depending on it, the application only packages the data if the corresponding byte array changes. The mask is only applied if the header and offset are configured. Use 0 for ignoring this setting.
offset The number of bytes after the last byte of the header for applying the mask configured. Range 0-1024. Use 0 for ignoring this setting

Note that if only the tail is configured, the application will package the data every time the tail is received.

For scenarios walking you through some sample MDT configurations refer to the connect section.

# MDT mode examples
# For setting the serial mode to mdt
$ sudo apx-serial mode mdt

# To set the mdt mode with
# baudrate of 115200, in HEX mode, a timeout of 10 seconds, 
# max size of 20 bytes, a header of 0x0A, tail of 0x0B, 
# a mask of 0x01, and an offset of 5
$ sudo apx-serial mdt settings 115200 x 10 20 0a 0b 01 5

# For getting the state of the serial mode
$ sudo apx-serial mode mdt
{"mode":"enabled","baudrate":115200,"type":"x","timeout":10,"max_size":20,"header":"0a","tail":"0b","mask":"01","offset":5}

# To send a message with '3132330D0A' to the serial port
$ sudo apx-serial mdt send '3132330d0a'

# apx-serial-slctr

Manages the input serial interface of the device. You can only select between one of RS-232, J1708, or RS485.

$ sudo apx-serial-slctr [option]
[option] description
0 RS232. It is the default option
1 J1708 bus
2 RS485
help Prints this help message

# Example:

# Send the following command to enable the J1708 bus as the input serial interface.
$ sudo apx-serial-slctr 1

# System

# apx-about

Information about the system and it's resources.

$ sudo apx-about
{"ram":{"total":506084,"used":107824,"free":229732,"available":404616},"cpu":{"currF":1000,"usage":19.1926,"governor":"ondemand","stats":{"300":1319.28,"600":16152.25,"720":132.79,"800":52.43,"1000":299.93}},"rootfs":{"total":444018,"free":187666},"datafs":{"total":2255680,"free":2078392},"uptime":17958,"loadAvg":[1.83,1.71,1.65],"apexVersion":"apex-20.22-rc.8","releaseDate":"20200604000110","kernelVersion":"5.4.20-g738552d0b0","hostname":"syrusrouter"}

# apx-core

Apex package manager for installing and removing software packages.

# sudo apx-core [option]
[option] description
list List the DCT-Apex packages installed
update Downloads the package list from the DCT repository. It gets the list of the newest packages with its dependencies and returns the list of the DCT packages available for updating
recover Allows to recover from broken packages when installing doesn't finish correctly
install Install one or several packages at a time by providing their names
remove Removes a software package from apex system
reinstall Removes the package and reinstall it
add_dev_repo Adds the DCT developer repository to the package manager. It enables some linux packages to be installed. To get the list of the available packages, please consult https://apex.digitalcomtech.com/dev-packages.txt
rm_dev_repo Removes the DCT developer repository
help Prints the help message

# Example:

# list dct-apex packages installed
$ sudo apx-core list

# install latest versions of syrus-gps and syrus-ecu packages
$ sudo apx-core install syrus-gps syrus-ecu

# install specific version of syrus-gps
$ sudo apx-core install syrus-gps=1.0-r0.1

# apx-leds

Tool that manages the device's LEDs.

# sudo apx-leds [color] [mode]

[color] = red, green, yellow, or blue

[mode] description
on Color led fully on. This option is not valid for red led
off Color led fully off. This option is not valid for red led
heartbeat Color led simulates a heart beat thump-thump-pause
onebeat 50ms on - 1000ms off
high_freq 10Hz, 50ms on - 50ms off
low_freq 1Hz, 500ms on - 500ms off
flash 10ms on - 5000ms off

# Examples:

$ sudo apx-leds blue high_freq

$ sudo apx-leds red heartbeat

# apx-logger

Tool for communicating with the SyrusCloud remote diagnostic application.

# sudo apx-logger [action]
# sudo apx-logger [level] [value]
[level] description
crit Critical level message
error Error level message
warn Warning level message
info Info level message
  • crit, error, warn - types are sent to the syrus-cloud as soon as network connection be ready
  • info - these messages are queued into the syrus-cloud's buffer and when a new connection is established they are transmitted
[value] description
message The message that is going to be sent to the syrus-cloud, enclosed in "quotes"

# Examples:

$ sudo apx-logger info "This is an information message for the cloud, it will be queued"

$ sudo apx-logger crit "This is a critical message for the cloud, it will be sent immediately"

# apx-os-update

Tool that updates the device's operating system. Careful when forcing the update of the OS over the air as it can consume a lot of data.

# sudo apx-os-update [option]
[option] description
check Check if an update is available in the dctserver
start Start the update by using the dctserver or by specifying the location
force The same as start but without checking the network interface
state Return the state of the current update process
help Prints the help message

# Examples:

sudo apx-os-update check
{"mess":"Update available"}
# if in progress...
{"mess":"Update in progress. This will take a few minutes"}

# start an upgrade to the latest stable version
$ sudo apx-os-update start

# update from an SD card mounted on the device
$ sudo apx-os-update start /media/usdp2/apex-20.10

# apx-system

Tool to check general system information of the device, and reboot/restart it.

# sudo apx-system [option]
[option] description
about It returns a json object with general information about the system
reboot Use this option for rebooting/restarting the apex OS
full_state It returns the full state of the system depending on the epoch received
set_name Use this option for changing the system name, it is highly recommended to use a name that starts with syrus. Remember that the user session needs to be restarted in order for the change to be applied
restart Use this option for restarting syrus running services.
set_data_files Use this option to set syrus4g as the owner of /data applications and configuration files
help Prints the help message

# Examples:

# Will return a json object with all the information available
$ sudo apx-system full_state 0
{"system":{"apex":{"version":"20.35-rc.1","date":"20200911213938","kernel":"5.4.20-g738552d0b0","epoch":1601657925},"ram":{"total":506084,"epoch":1601657925},"dataFs":{"total":2255680,"epoch":1601657925},"rootFs":{"total":444018,"epoch":1601657925},"uptime":{"since":"2020-10-02_14:59:58","epoch":1601657925},"epoch":1601657925},"gps":{"engine":{"name":"","epoch":1601657925},"filter":{"hdop":,"motion":,"speed":,"epoch":1601657925},"epoch":1601657925},"mobile":{"sim":{"type":"e-sim","swInterval":8,"epoch":1601657925},"gnss":{"state":"","epoch":1601657925},"rf":{"apn":"","keepAlive":15,"epoch":1601657925},"nbrAuth":{"call":,"sms":,"epoch":1601657925},"epoch":1601657925},"core":{"apex":{"bist":"0.0.12-r0.0","rules":"1.0.0-r0","start":"1.0.3-r0.1","tools":"1.0.9-r0.0","uchip":"1.0.3-r0.2","epoch":1601657925},"syrus":{"api":"1.5.2-r0.1","bt":"0.0.5-r0.0","bt-tools":"1.0.0-r0","counters":"1.0.3-r0.1","ecu":"1.0.1-r0.1","geofences":"0.0.5-r0.0","gps":"1.1.1-r0.0","imu":"1.0.9-r0.0","interface":"1.0.3-r0.0","mdm":"1.1.1-r0.3","ui":"0.10.1-r0.0","watcher":"0.0.3-r0.1","epoch":1601657925},"epoch":1601657925},"epoch":1601657925}

# Will return a json object with information that has a timestamp newer than the reference
$ sudo apx-system full_state 1599573699

# Restart the gps module
$ sudo apx-system restart syrus-gps

# apx-user

$ sudo apx-user [option] [argument_1] [argument_2] [argument_3]
[option] description
checkuser It returns "Valid User" if the user's password validation is successful, receives username as [argument_1] and password as [argument_2]
changepass It returns "Password Updated" if password has been successfully changed, receives username as [argument_1], the current password as [argument_2], and the new password as [argument_3]
help Prints the help message

Note that passwords must be between 6 to 63 characters long

# Examples:

$ sudo apx-user changepass syrus4g 123456 mynewpass

# apx-watcher

Used to manage the keep-alive messages with syrus cloud remote management interface.

# sudo apx-watcher [option] 
# sudo apx-watcher conn_time [argument_1]
[option] description
conn_time Time in minutes used for sending the keep alive message to the syrus cloud. The default value is 480 minutes = 8 hours. Use 0 for disabling the syrus-watcher task, if this task is disabled the device will not connect with the syrus-cloud. If argument_1 is not present it returns the current value.

# Example:

# To change the keep-alive message with Syrus Cloud (https://cloud.digitalcomtech.com) to every 10 minutes:
sudo apx-watcher conn_time 10

# Tracking

# apx-tracking

Tool that's used to manage tracking criterias' on the device. The tracking notification will trigger whenever any one of the criteria is met. Heading and distance notifications depend on valid GPS.

Create or edit a tracking criteria

# sudo apx-tracking set [namespace] [heading] [time] [distance]
parameters description
[namespace] The name used as a reference to identify the tracking criteria. Max 60 characters.
[heading] The heading delta threshold for triggering notifications based on heading changes. Use 0 to disable. Range (0-180)
[time] The time limit in seconds for triggering tracking notifications. Use 0 to disable. Range (0-86400)
[distance] The distance threshold in meters for triggering tracking notifications based on the traveled distance. Use 0 to disable. Range (0-100000)

Get tracking resolutions for namespace

If namespace is not specified, it returns a list with all the tracking criteria configured.

# sudo apx-tracking get [namespace]
option description
[namespace] The name used as a reference to identify the tracking criteria. Max 30 characters.

Get all tracking resolutions defined

$ sudo apx-tracking getall

Delete a namespace

# sudo apx-tracking delete [namespace]
option description
[namespace] The name used as a reference to identify the tracking criteria. Max 30 characters.

# Examples:

# To set a tracking criteria for triggering notifications every 30 minutes
$ sudo apx-tracking set 0 1800 0

# To set a tracking criteria for triggering notifications every 35°, or 60 seconds, or 500 meters.
$ sudo apx-tracking set 35 60 500

# Return all tracking criterias configured
$ sudo apx-tracking getall
{"syrusjs_parked":[0,0,0],"syrusjs_still":[0,15,0]}

# µSD Card

# apx-usd-pwr

Tool to manage the microSD card interface of the device. Turning it off helps conserver power.

$ sudo apx-usd-pwr [action]
[action] description
on Power on the µSD card interface
off Power off the µSD card interface. It helps to save energy

# Example:

$ sudo apx-usd-pwr off

# Video

This tool configures the actions to be carried out in the processing of video files.

# apx-video

# sudo apx-video <command> [<args=value>]
# sudo apx-video <command> [--status=<value>] [--camera=<value>]
# sudo apx-video <command> [--name=<value>] [--camera=<value>] [--time_win=<value>]
     <command> description
set Set the general configurations (destination and reserved space)
add_camera Add a new camera to the configuration file video.conf
record Start or stop the video recording for a specified camera or all cameras stored in the configuration file.
stream Start or stop the video streaming for a specified camera or all cameras stored in the configuration file.
create_clip Find the video files from history location in a specified time window for one camera or all cameras stored in the configuration file and creates a video clip
     <command> [OPTIONS]
set [--destination] [--reserved_space]
add_camera [--ip] [--port] [--user] [--pass] [--camera_name] [--destination]
record [--status] [--camera] [--destination]
stream [--status] [--camera]
create_clip [--name] [--camera] [--time_win]
                    FORMATS description
[time_win] -time_backward,+time_forward in seconds. e.g --time_win=-60,+30. Max time -60sec backwards, +30sec forward.
[reserved_space] reserved space in memory defined in megabytes. e.g --reserved_space=5000 (5,000 Mb or 5Gb)
[resolution] Preferred resolution in the output videos. Default resolution HD -> 720p. e.g --resolution=HD
[resolution] description
FHD for 1080p
HD for 720p
SD for 480p

# Example:

# Set the destination of video recording to an SD card mounted on the Syrus4 with a max space of 2000MB
$ sudo apx-video set --destination=/media/sd_name --reserved_space=2000

# Add a camera named 'cam_1'
$ sudo apx-video add_camera --ip=192.168.0.52 --user=admin --pass=admin --camera_name=cam_1 --resolution=FHD

# Start recording on all cameras
$ sudo apx-video record --status=start

# Stop recording for a particular camera
$ sudo apx-video record --status=stop --camera=front_cam

# Start a video stream for a particular camera
$ sudo apx-video stream --status=start --camera=back_cam

# Create a video clip called 'epoch_crash' from the last 30seconds and next 60 seconds
$ sudo apx-video create_clip --name=epoch_crash --camera=back_cam --time_win=-30,+60

# Create a video clip called 'epoch_crash' from the last 30seconds
$ sudo apx-video create_clip --name=epoch_crash --camera=back_cam --time_win=-30

# WIFI-BT

# apx-wl-pwr

Tool to manage the wifi bluetooth module. Turning it off can help conserve power.

$ sudo apx-wl-pwr [action]
[action] description
on Power on the wl1835 MOD
off Power off the wl1835 MOD. WL1835 is a non-removable device, so it cannot be turned off. This option was preserved for compatibility issues

# Example:

# Power on wifi/bluetooth module
$ sudo apx-wl-pwr on

# apx-hotspot

Manages the hotspot functionality on the device. Allows you to configure the SSID and password when enabling the hotspot. The password is protected with WPA2-PSK security.

$ sudo apx-hotspot [action]
$ sudo apx-hotspot [option] [value]
[action] description
start It starts the udhcpd and hostapd services used by hotspot app
stop It stops the hotspot services
reset It executes a stop-start in the same call
list It returns the list of the connected clients to the hotspot
state Returns status: Enabled/Disabled and other info
help Prints this help message
[option] description
route Use this option for forwarding the wlan traffic to another interface, it allows you to have internet access by specifying the output interface, available values: ppp0, eth0
ssid Use this option for changing the network identifier
pass Use this option for changing the hotspot password (minimum of 8 characters)
country Use this option for changing the country_code (2-letter ISO Code)

# Example:

# To set or change the ssid:
$ sudo apx-hotspot ssid mySSID

# To set or change the passphrase used for authentication:
$ sudo apx-hotspot pass myNewPass1234

# To restart the hotspot service:
$ sudo apx-hotspot reset

# To get the state of the hotspot:
$ sudo apx-hotspot state
{"state":"Enabled","ssid":"mySSID","pass":"myPassword","country":"US","routing":"ppp0"}

# To list the client devices connected to the hotspot:
$ sudo apx-hotspot list
{"stations":[{"mac":"96:f5:bc:51:62:de","rx_bytes":"155189","tx_bytes":"18752","uptime":"79"}]}

# To give internet access using the eth0 as the output interface:
$ sudo apx-hotspot route eth0

# To set the country to Argentina:
$ sudo apx-hotspot country AR

# apx-wifi

Tool to manage the wifi interface of the device. Allows you to connect to a wireless network.

$ sudo apx-wifi [option]
[option] description
scan It starts a WIFI scan and returns a list of SSIDs
start It enables the WIFI interface and starts the service for connecting with preconfigured networks
stop It stops the WIFI service and disables the interface
reset It executes a stop-start in the same call
add It adds a new network to the WIFI configuration file, in this case you have to include the SSID and psk as parameters
remove It removes a network from the WIFI configuration file, in this case you have to include the SSID as parameter
list It returns the list of networks configured
state Returns the state of the WIFI connection
help Prints this help message

# Example:

# To scan the WIFI network and get the list of SSIDs:
$ sudo apx-wifi scan

# To add a new network to the configuration file:
$ sudo apx-wifi add myNet myPass

# To remove a network from the configuration file:
$ sudo apx-wifi remove myNet

# Wi-Fi state
$ sudo apx-wifi state
{"state":"Completed","ssid":"MyAwesomeWifi","signal":"-17","key_mgmt":"WPA2-PSK","mac":"50:33:8B:DD:1E:43","ip":"192.168.1.28","rx_bytes":"871399","tx_bytes":"178166"}
Last Updated: 6/17/2021, 5:39:59 PM