Think Different - Dhiraj Patra
5 min readJun 13, 2023
Photo by Markus Winkler on Unsplash

Often you need to implement Machine Learning application into the EDGE devices. So IoT devices running your machine learning or other artificial intelligence application required updates time to time when you update ML models or back end application or some other part of the application running on IoT.

Over-the-Air (OTA) updates for IoT devices running machine learning applications refer to the capability of remotely updating the software and machine learning models deployed on IoT devices. This enables device manufacturers and developers to deliver bug fixes, security patches, feature enhancements, and even model updates to deployed devices without physically accessing or manually updating each device.

Implementing OTA for IoT devices running machine learning applications involves the following key steps:

1. Remote Software Management: OTA updates require a robust infrastructure to remotely manage and distribute software updates to IoT devices. This typically involves a cloud-based server or platform that maintains a repository of updates and communicates with the devices.

2. Update Packaging: The updates, including new software versions, bug fixes, security patches, or model updates, need to be packaged appropriately for efficient delivery. The packages may include the updated machine learning models, libraries, configuration files, or any other relevant software components.

3. Secure Communication: OTA updates should be transmitted securely to prevent unauthorized access or tampering. Encryption protocols such as Transport Layer Security (TLS) can be used to establish secure communication channels between the server and the devices.

4. Device Compatibility and Verification: The OTA system should handle device-specific variations in terms of hardware, firmware, and software versions. Compatibility checks should be performed before initiating updates to ensure that the updates are applicable to the target device.

5. Rollback and Redundancy: To handle potential issues or failures during the update process, an OTA system should have mechanisms for rollback or redundancy. This allows devices to revert to the previous working state in case of update failures or unexpected behavior.

6. User Consent and Control: Users may need to be informed and given control over the OTA update process. Devices should provide options to schedule updates, delay them, or manually trigger updates based on user preferences.

7. Monitoring and Analytics: OTA systems can incorporate monitoring and analytics capabilities to track the success of updates, detect anomalies, and gather data for future improvements.

Implementing OTA updates for IoT devices running machine learning applications helps ensure that devices remain up-to-date, secure, and optimized for improved performance. It enables developers to continuously improve the machine learning models deployed on the devices and provide a seamless user experience without the need for physical intervention.

Basic steps you can follow to do the automated OTA.

  1. Create a .service file which will eventually run the flask REST server application.
  2. Create one shell script which will check and fetch the latest code from github. And replace the old code with latest code. Then restart the service file.
  3. In that case, you can set up a cron job to execute the shell script at a specific interval.

Here’s an example of how you can configure a cron job to run the OTA model update script:

1. Open your terminal and run the following command to edit the cron jobs:


crontab -e


2. In the cron file, add a new entry to specify the schedule and command for the OTA model update script. For example, to run the script every day at 2:00 AM, add the following line:


0 2 * * * /bin/bash /path/to/ota_model_update.sh >> /path/to/logfile.log 2>&1


Make sure to replace `/path/to/ota_model_update.sh` with the actual path to your OTA model update shell script. The `>> /path/to/logfile.log 2>&1` part redirects the script output to a log file.

3. Save and exit the file.

The cron job is now configured to execute the OTA model update shell script at the specified interval. The script will run automatically without any manual intervention, allowing you to perform regular updates to your IoT device’s model.

Note: Ensure that the shell script (`ota_model_update.sh`) has the correct file paths and necessary permissions to execute. You may need to modify the script to include any additional steps required for updating the model from the zip file in the Git repository.

Create update shell script to fetch the model from a GitHub repository and then restart the `.service` file, you can modify the OTA model update shell script as follows:



# Script for OTA Model Update

# Variables

DEVICE_IP=”" # IP address of the IoT device

REMOTE_DIR=”/path/to/remote/directory” # Directory on the IoT device where the model is stored

BACKUP_DIR=”/path/to/backup/directory” # Directory to store backup of the previous model

GITHUB_REPO=”https://github.com/your_username/your_repository.git" # URL of the GitHub repository

# Backup existing model

ssh user@$DEVICE_IP “cp $REMOTE_DIR/model.pkl $BACKUP_DIR/$(date +%Y%m%d%H%M%S)_model.pkl”

# Clone the latest model from the GitHub repository

git clone $GITHUB_REPO /tmp/latest_model

# Move the latest model to the remote directory

scp /tmp/latest_model/model.pkl user@$DEVICE_IP:$REMOTE_DIR/model.pkl

# Restart the .service file (replace with your specific command)

ssh user@$DEVICE_IP “systemctl restart your_service.service”


In this updated script, the following changes have been made:

1. Added the `GITHUB_REPO` variable to specify the URL of the GitHub repository where the latest model is stored.

2. Added the backup step to copy the existing model to the backup directory using the current date and time as part of the backup file name.

3. Cloned the latest model from the specified GitHub repository to the local `/tmp/latest_model` directory.

4. Used `scp` to copy the latest model to the remote directory on the IoT device.

5. Restarted the `.service` file on the IoT device. Replace `your_service.service` with the actual name of the service file that needs to be restarted.

Ensure that you have the necessary SSH access and permissions set up for executing these commands remotely on the IoT device. Customize the script according to your specific requirements, such as file paths and service names.

After modifying the shell script, you can schedule the updated script as a cron job, as mentioned in the previous instructions, to automatically fetch the latest model from the GitHub repository and restart the `.service` file on your desired schedule.



Think Different - Dhiraj Patra

I am a Software architect for AI, ML, IoT microservices cloud applications. Love to learn and share. https://dhirajpatra.github.io