Mises à jour du micrologiciel (OTA)
Téléversez une version de micrologiciel vers un type d'appareil, puis envoyez-la par voie hertzienne à un appareil ou à tous les appareils de ce type dans un registre. Fundamentum suit la mise à jour d'un parc appareil par appareil, et vous permet de l'annuler ou de la relancer en un seul appel.
Avant de commencer
- Vous avez la CLI
funconnectée, ou un jeton pour la Public API. Consultez Authentification. - Vous connaissez votre
<project-id>, votre<registry-id>et le<device-type-id>des appareils à mettre à jour. - Vos appareils prennent en charge la commande de mise à jour du micrologiciel. Le daemon Linux et la bibliothèque MCU exposent tous deux un point d'ancrage de mise à jour du micrologiciel que votre code implémente.
Fonctionnement
Une mise à jour du micrologiciel est l'une des commandes intégrées de la plateforme, identifiée par le nom court firmware-update. Le micrologiciel est stocké sous forme de versions d'un type d'appareil. Lorsque vous envoyez la commande, l'appareil reçoit le name, l'identifier et la configuration de la version, ainsi qu'une URL de téléchargement présignée pour chacun de ses fichiers. Il télécharge les fichiers, les installe et signale sa progression.
Une commande unique cible un appareil. Un lot en cible plusieurs : une liste d'appareils, ou tous les appareils d'un type dans un registre. Chaque appareil d'un lot a l'un des six statuts suivants :
| Statut | Signification |
|---|---|
unassigned |
Créée, pas encore transmise à l'appareil |
pending |
En attente de livraison |
ongoing |
L'appareil est en cours d'installation |
success |
L'appareil a signalé un succès |
failure |
L'appareil a signalé un échec |
cancel |
Annulée avant la fin |
1. Créer une version de micrologiciel
Une version possède un name d'affichage et un identifier unique au sein du type d'appareil. configuration est un JSON libre facultatif que l'appareil reçoit avec la mise à jour.
fun api v1 device-type store-version \
--project-id <project-id> --device-type-id <device-type-id> \
--body '{"name": "Firmware 2.4.0", "identifier": "2.4.0", "configuration": {"channel": "stable"}}'
Conservez l'id de la réponse : c'est votre <version-id>.
2. Téléverser les fichiers du micrologiciel
Demandez une URL de téléversement pour chaque fichier, puis téléversez-y le fichier :
fun api v1 device-type store-version-file \
--project-id <project-id> --device-type-id <device-type-id> --version-id <version-id> \
--body '{"file_name": "firmware-2.4.0.bin"}' --data-only
curl --upload-file firmware-2.4.0.bin "<upload_url>"
Pour vérifier ce que les appareils recevront, lisez la charge utile d'action de la version. Son tableau configuration_file_url contient une URL de téléchargement présignée pour chaque fichier :
fun api v1 device-type get-v1-projects-by-project-id-device-types-by-device-type-id-versions-by-version-id-action-payload \
--project-id <project-id> --device-type-id <device-type-id> --version-id <version-id>
3. Mettre à jour un appareil
Demandez à Fundamentum de préparer la commande pour un appareil. La réponse contient la command (avec son id), les versions disponibles pour cet appareil et, lorsque l'appareil est joint via une passerelle, les gateways qui peuvent le relayer :
fun api v1 commands create-device-commands \
--project-id <project-id> --short-name firmware-update --device-id <device-id>
Envoyez-la ensuite, en utilisant l'id de la commande et la version cible :
fun api v1 commands store-device-commands \
--project-id <project-id> --short-name firmware-update --device-id <device-id> \
--body '{"device_id": <device-id>, "command_id": <command-id>, "version_id": <version-id>}'
Ajoutez "gateway_id": <gateway-id> pour un appareil joint via une passerelle. Consultez Passerelles et sous-appareils. Suivez la commande avec fun api v1 commands list-device-commands --project-id <project-id> --device-id <device-id>.
4. Mettre à jour l'ensemble du parc
Envoyez la commande à tous les appareils d'un type dans un registre :
fun api v1 commands store-batch-command-by-device-type \
--project-id <project-id> --registry-id <registry-id> \
--short-name firmware-update --device-type-id <device-type-id> \
--body '{"parameters": {"command_id": <command-id>, "version_id": <version-id>}}'
Pour cibler plutôt une sélection, utilisez store-batch-command-by-device-ids avec {"device_ids": [...], "parameters": {...}}.
5. Suivre le lot
# All batches of the registry: batch_id, command, commands_count, last_update
fun api v1 commands list-batch-commands --project-id <project-id> --registry-id <registry-id>
# Number of devices in each status
fun api v1 commands batch-command-report-report \
--project-id <project-id> --registry-id <registry-id> --batch-id <batch-id>
# Per-device detail
fun api v1 commands list-batch-command-device-commands \
--project-id <project-id> --registry-id <registry-id> --batch-id <batch-id>
Dans le Hub, la vue du lot affiche le même rapport sous forme de graphique et s'actualise automatiquement.
6. Annuler ou relancer
Les opérations par lot s'appliquent à tous les appareils se trouvant actuellement dans un statut donné. Le statut dans le chemin sélectionne les appareils, et le status dans le corps correspond à ce que vous voulez faire avec eux.
Annulez tout ce qui n'a pas démarré (exécutez-la une fois pour unassigned et une fois pour pending) :
fun api v1 commands update-batch-command-by-status \
--project-id <project-id> --registry-id <registry-id> --batch-id <batch-id> --status pending \
--body '{"command_name": "firmware-update", "status": "cancel", "message": "Cancelled by operator."}'
Relancez chaque appareil en échec :
fun api v1 commands update-batch-command-by-status \
--project-id <project-id> --registry-id <registry-id> --batch-id <batch-id> --status failure \
--body '{"command_name": "firmware-update", "status": "retry", "message": "Retried by operator."}'
Une nouvelle tentative génère de nouvelles URL de téléchargement. Pour effacer les entrées terminées du lot, utilisez delete-batch-command-by-status avec --status cancel ou --status failure. Les boutons Cancel all, Retry all et Clear all du Hub effectuent les mêmes appels.
Étapes suivantes
- Référence de l'API dans Swagger UI : Commands, Device Type
- Actions et encodeurs personnalisés : envoyez vos propres opérations, avec délais d'expiration, nouvelles tentatives et priorité.
- Transferts de fichiers : envoyez un fichier de configuration sans mise à jour complète du micrologiciel.
- Topics MQTT et formats de messages : ce que l'appareil reçoit.
- Public API