Python Development
Description
Apex has integrated python 3.7 with which you can integrate your own applications.
# Example:
syrus4g@syrus-867698040023502 ~
$ python3
Python 3.7.7 (default, Mar 7 2022, 21:29:46)
[GCC 8.3.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import os
>>> print ( os.getcwd() )
/data/users/syrus4g
>>> exit()
syrus4g@syrus-867698040023502 ~
Package Installation
To start using Python to develop applications you'll want to add pip to install python packages. To do this you need to add the 'dev_repo' on the device using the apx-core tool.
sudo apx-core add_dev_repo
And then install the python package installer, this will take a few minutes
Once that's done you can install packages with the following command:
pip3 install <PACKAGE_NAME> --user
Example use of requests package:
# Example
pip3 install requests --user
# Example
$ python3
>>> import requests
>>> x = requests.get('https://w3schools.com/python/demopage.htm')
>>> print(x.text)
<!DOCTYPE html>
<html>
<body>
<h1>This is a Test Page</h1>
</body>
</html>
>>>
Apex Message Broker & Database
Apex runs two Redis instances that can be used as message brokers or databases, the first one (User Application Redis) runs on the default port 6379 and the second one (System/Core Redis) is dedicated to Apex core applications and runs on port 7480.
Usage
# Example
pip3 install redis --user
System-Core Instance
This is a simple example of how to use the System-Core Redis instance to work with the database (GET, HGET, HGETALL, LRANGE) or the message broker (PSUBSCRIBE, SUBSCRIBE, MONITOR) for consults in your applications.
You can download and run some examples from here: Apex Core Python Examples
To see what data is available in APEX for your request, please go to Apex Message Broker & Database
Database consult example:
import redis
# Create a connection to the Redis server
redis_host = 'localhost'
redis_port = 7480
redis_password = None
# Create a Redis client
redis_client = redis.StrictRedis(host=redis_host, port=redis_port, password=redis_password, decode_responses=True)
# Testing GET command:
# GET: Retrieve and print the value of previous key
value = redis_client.get('network_interface')
print(f"Network Interface: {value}")
Message Broker listener example:
import redis
from time import sleep
# Create a connection to the Redis server
redis_host = 'localhost'
redis_port = 7480
redis_password = None
# Initialize redis connection
r = redis.StrictRedis(host=redis_host, port=redis_port, password=redis_password)
p = r.pubsub()
# To subscribe to one o multiple channels.
# In this case we will to subscribe to the interface pattern channel here you will receive
# all related to the I/O's
p.psubscribe("interface/*")
# Main loop function.
while True:
message = p.get_message()
if message:
print(f"Channel: {message['channel']}, Received message: {message['data']}")
sleep(0.01)
User Instance
This is a simple example of how to use the User Redis instance to work with the database (GET, SET, HGET,...) or the message broker (PUBLISH, PSUBSCRIBE,...) in your applications.
You can download and run some examples from here: Apex User Python Examples
Database consult example:
import redis
from time import time
# Create a connection to the Redis server
redis_host = 'localhost'
redis_port = 6379
redis_password = None
# Create a Redis client
redis_client = redis.StrictRedis(host=redis_host, port=redis_port, password=redis_password, decode_responses=True)
# Testing SET & GET commands:
# SET
current_time = str(int(time()))
redis_client.set('last_request_time', current_time)
# GET: Retrieve and print the value of previous key
value = redis_client.get('last_request_time')
print(f"Storing last request time: {value}")
Message Broker publish example:
import redis
from time import sleep, time
# Create a connection to the Redis server
redis_host = 'localhost'
redis_port = 6379
redis_password = None
# Create a Redis client for publishing
redis_publisher = redis.StrictRedis(host=redis_host, port=redis_port, password=redis_password)
# Publish messages to the channel
channel = 'notification/request'
for x in range(3):
current_time = str(int(time()))
message = "New request at " + current_time
print(f"Publish: {message}")
redis_publisher.publish(channel, message)
sleep(2)
Build APEX Application
To build an application to be executed in apex you must create a compressed file as .zip in which you must add the following files, the binary or executable of your application, in the case the .py, a package.json file with the description of the application and an init.sh file that will have the definition of how your application will be executed.
Example s4test_app.zip content:
- init.sh
- package.json
- myapp.py
The following is a basic example of the content that these files should contain:
init.sh
python3 test.py
package.json
{
"name": "myapp",
"version": "0.1.1",
"description": "My App application",
"icon": "https://myicons.com/logo.png",
"minApexVersion": "23.11.1",
"repository": "https://myrepo.com/applications/mmyApp/",
"author": "[email protected]"
}
test.py
print("Hello World")
Check applications state
If you need to consult if your app is running, installed, within an instance run any of this command from cloud or console.
Running apps
syrus-apps-manager get-running
Installed apps
syrus-apps-manager list-apps
App within an instance
syrus-apps-manager list-instances
Install & Run your Applications
To install and run your applications you need to use the apex tool syrus-apps-manager or the Management Tool as follows:
Option 1: Syrus Cloud (Recomended)
Once you are logged in the Syrus Cloud go to Applications -> Applications Tap
Click on Define Instance
Click on Application File and upload your myapp.zip
Change the instance name and complete the other fields if you want (Optional).
Add the devices to this instance and save, the application will run automatically.
Option 2: syrus-apps-manager
Copy your "myapp.zip" file to the Syrus4G device using SSH or Syrus Cloud.
Run
syrus-apps-manager install path_to_your_app
# Example
syrus-apps-manager install /data/users/syrus4g/myapps/myapp.zip
Run
syrus-apps-manager create-instance instace_name app_name app_version
# Example
syrus-apps-manager create-instance myinstace myapp 1.0.0
Run
syrus-apps-manager start instace_name
# Example
syrus-apps-manager start myinstace
Option 2: Management Tool
Once logged into the Management Tool go to Applications Manager

Click on ADD NEW APP and browse for the .zip file on your computer.

Click on INSTALL

Click on the installed app and click on create instance and set the instance name.

Once the instance is created click on the three points icon and start the instance.
Updated about 2 months ago