A Workflow of Auto Executing Services on SUSI.AI Smart Speaker
As we plan to create a headless client on RaspberryPi, the requirement was that the SUSI.AI programs should run automatically. To do so, we had to figure out a way to boot up various scripts on startup.
We had the following options to execute the scripts on startup:
- Editing Rc.local file
- Systemd Rules
- Crontab
We decided to proceed with Systemd Rules because using Rc.local and Crontab requires modifying the default system files which in case of any error would make the os functionalities to crash very soon.
We then created the SystemD rules for the following services:
1.factory-daemon.service
2. python-flask.service
3. susi-server.service
4. update-daemon.service
5. susi-linux.service
Now I’ll demonstrate the working and the functionality of each service being implemented.
1. Factory-Daemon Service
This service initiates the factory daemon with the raspberry Pi startup and then keeps it running continuously looking for any input from the GPiO port.
[Unit] Description=SUSI Linux Factory Daemon After=multi-user.target [Service] Type=simple ExecStart=/usr/bin/python3 /home/pi/SUSI.AI/susi_linux/factory_reset/factory_reset.py [Install] WantedBy=multi-user.target |
2. Python-Flask Service
This service starts a python Server to allow handshake between mobile apps and the Smart Speaker which will allow the user to configure SUSI Smart Speaker accordingly.
[Unit] Description=Python Server for SUSI Linux After=multi-user.target [Service] Type=simple ExecStart=/usr/bin/python3 /home/pi/SUSI.AI/susi_linux/access_point/server/server.py [Install] WantedBy=multi-user.target |
3.SUSI-Server Service
This service starts the Local SUSI Server as soon as the Raspberry Pi starts up which in turn allows the SUSI Linux programs to fetch responses of queries very quickly.
[Unit] Description=Starting SUSI Server for SUSI Linux After=multi-user.target [Service] Type=oneshot ExecStart=/home/pi/SUSI.AI/susi_linux/susi_server/susi_server/bin/restart.sh [Install] WantedBy=multi-user.target |
4. Update-Daemon Service
This Service creates a Daemon which starts with the Raspberry Pi and fetches the latest updates from the repository from the upstream branch.
[Unit] Description=Update Check- SUSI Linux Wants=network-online.target After=network-online.target [Service] Type=oneshot ExecStart=/home/pi/SUSI.AI/susi_linux/update_daemon/update_check.sh [Install] WantedBy=multi-user.target |
5. SUSI-Linux Service
This Service finally runs the main SUSI Linux software after everything has started.
[Unit] Description=Starting SUSI Linux Wants=network-online.target After=network-online.target [Service] Type=idle WorkingDirectory=/home/pi/SUSI.AI/susi_linux/ ExecStart=/usr/bin/python3 -m main [Install] WantedBy=multi-user.target |
This blog gives a brief workflow of auto-executing services on SUSI Smart Speaker.
Resources
- Systemd Documentation: https://coreos.com/os/docs/latest/using-systemd-and-udev-rules.html
- Crontab Documentation: http://man7.org/linux/man-pages/man5/crontab.5.html
- RC.Local Documentation: https://www.raspberrypi.org/documentation/linux/usage/rc-local.md
You must be logged in to post a comment.