Software Updates
Executing a Software Update
Here is an example of a firmware update. It consists of a firmware binary and a script to install it:
Create a software update
POST /software_updates
{
"name": "network-firmware-update",
"device_type_id": "5c0feaee693d3f0001150285",
"type": "bash_script",
"script": "./install.sh"
}
Upload files
Software updates may be associated with multiple files. There is a 100MB limit on the size each file.
POST /software_updates/{id}/files
file=firmware.bin
POST /software_updates/{id}/files
file=install.sh
Contents of install.sh
URL=$1
TEMP_DIR=/tmp
echo "Downloading firmware file...\n"
wget $URL -O $TEMP_DIR/firmware.bin
if [ $? -ne 0 ]; then
echo "Error downloading firmware file\n"
exit 1
fi
echo "Verifying firmware file...\n"
sysupgrade -v -T $TEMP_DIR/firmware.bin
if [ $? -ne 0 ]; then
echo "Error verifying firmware file\n"
exit 1
fi
echo "Starting firmware update..."
sysupgrade -v -c $TEMP_DIR/firmware.bin
if [ $? -ne 0 ]; then
echo "Error starting firmware update\n"
exit 1
fi
exit 0
Execute the gateway command
POST /devices/{device_id}/gateway_commands
{
"command_type": "software_update",
"software_update_id": "5c0feb9a693d3f000115028c"
}
Response:
{
"_id": "5c26658fcd55d5000169eb8b",
"origin": "cloud",
"created_at": "2018-12-28T18:03:59.5588456Z",
"updated_at": "2018-12-28T18:03:59.5588456Z",
"company_id": "machineshop",
"user_id": "5bb3e6d773c6b700018695fa",
"command_type": "software_update",
"payload": {
"name": "network-firmware-update",
"files": [
{
"name": "firmware.bin",
"link": "https://s3.amazonaws.com/machineshop-files-dev/machineshop/machineshop/software-update-device/5c0feb9a693d3f000115028c/firmware.bin"
},
{
"name": "install.sh",
"link": "https://s3.amazonaws.com/machineshop-files-dev/machineshop/machineshop/software-update-device/5c0feb9a693d3f000115028c/install.sh"
}
],
"script": "./install.sh",
"reboot": false
},
"statuses": {
"example-network-device": {
"status": "sent",
"status_message": ""
}
},
"device_id": "5c0feb7f693d3f000115028a",
"device_type_id": "5c0feaee693d3f0001150285"
}
Monitor status of gateway command
You can use the _id
returned from the creation of the gateway command to track the status of the update. The statuses
of each targeted device(sent
in this example) will be updated after the command is processed. For more information on possible statuses see Gateway Commands.
Updated almost 3 years ago