Commander le relais des lumières du bureau depuis un terminal sur mon bureau Ubuntu
Traduit de English par IA ·
Alors, c’est à moitié une question de confort et à moitié l’envie d’apprendre l’API.Notre bureau d’analytique et les lumières du quai à côté sont commutés par une carte relais ESP32 qui remonte vers Hermetry via MQTT. Il y a un tableau avec une carte d’interrupteur, et ça fonctionne bien depuis le navigateur. Mais je passe toute la journée dans un terminal sous Ubuntu et je voudrais un raccourci clavier qui bascule les lumières du bureau sans ouvrir le tableau.Ce que j’ai essayé : j’ai pris le jeton d’accès de l’appareil dans le tiroir Credentials et j’ai envoyé une requête à l’endpoint HTTP de l’appareil :
curl -X POST "https://<device host>/api/v1/telemetry"
-H "Authorization: Bearer <ACCESS_TOKEN>"
-H "Content-Type: application/json"
-d '{"light": false}'
Ça répond 200, et pendant un instant la carte d’interrupteur affiche Off, mais les lumières restent allumées et quelques secondes plus tard la carte repasse sur On lorsque l’ESP32 renvoie son état. Je m’adresse donc manifestement à la mauvaise chose. Quel endpoint faut-il utiliser pour que l’appareil fasse réellement quelque chose ?
ok so this is half a convenience thing and half me wanting to learn the API.
Our analytics office and the dock lights next to it are switched by an ESP32 relay board that reports to Hermetry over MQTT. There’s a board with a switch card on it and that works fine from the browser. I spend the whole day in a terminal on Ubuntu though and I want a keyboard shortcut that toggles the office lights without opening the board.
What I tried: I took the device’s access token from the Credentials drawer and posted to the device HTTP endpoint:
curl -X POST "https://<device host>/api/v1/telemetry"
-H "Authorization: Bearer <ACCESS_TOKEN>"
-H "Content-Type: application/json"
-d '{"light": false}'
It answers 200, and for a moment the switch card shows Off, but the lights stay on and a few seconds later the card flips back to On when the ESP32 reports again. So I’m clearly talking to the wrong thing. Which endpoint is the right one to make the device actually do something?
Traduit de English par IA ·
Publier de la télémétrie avec le jeton de l’appareil revient à vous faire passer pour l’appareil. Hermetry se contente d’enregistrer ce que « l’appareil » envoie. Vous avez besoin d’une commande dans le sens inverse.
Posting telemetry with the device token is you pretending to be the device. Hermetry just stores what « the device » says. You want a command going the other way.
Traduit de English par IA ·
Ok, ça explique le retour en arrière de la carte. Donc c’est /api/v1/rpc ? La page HTTP de l’appareil liste celui-là
right, that explains the card flipping back. so is it /api/v1/rpc? the device HTTP page lists that one
Traduit de English par IA ·
Celui-là concerne le côté appareil, il attend des commandes. Je pense qu’il te faut une clé API à la place du jeton de l’appareil ; j’ai fait quelque chose de similaire avec python requests il y a quelque temps, mais je ne me souviens plus du chemin.
That one is for the device side, it waits for commands. I think you need an API key instead of the device token, I did something like this with python requests a while ago but I don’t remember the path.
Traduit de English par IA ·
Nous faisons exactement cela pour l’éclairage des lignes de notre usine, à partir d’un petit script sur le PC du superviseur. C’est l’API Commands avec une clé d’API.Votre carte de commutation envoie déjà une commande, et les cartes ne peuvent envoyer que les commandes présentes dans le catalogue Commands du profil d’appareil au niveau Basic. La méthode existe donc. Pour voir son nom exact et ses paramètres, interrogez l’API avec la même clé que vous allez créer : GET /tenant/<tenantId>/api/iot/devices/<deviceId>/rpc-commands liste ce qu’une commande peut envoyer à cet appareil.Créez la clé sous API Keys : accordez-lui la permission d’envoyer des commandes de base et de lire les commandes, ajoutez l’adresse de votre bureau à la liste d’adresses IP autorisées, puis choisissez une date d’expiration. Ensuite :
#!/bin/sh
# ~/bin/office-lights (chmod 700)
KEY=$(cat ~/.config/hermetry/key)
curl -s -X POST "https://<your host>/tenant/<tenantId>/api/iot/devices/<deviceId>/rpc"
-H "Authorization: Bearer $KEY"
-H "Content-Type: application/json"
-d "{"method":"light.set","params":{"on":$1},"timeoutMs":10000}"
Une commande bidirectionnelle avec un délai d’expiration de 30 secondes ou moins attend et répond 200 avec le statut, vous voyez donc SUCCESSFUL ou l’erreur dans le terminal. Associez office-lights true et office-lights false à deux raccourcis et c’est terminé. Une clé d’API ne peut envoyer que les méthodes présentes dans le catalogue, ce qui est d’ailleurs ce que vous voulez ici.Documentation : Commands API.
We do exactly this for the line lights at our plant, from a little script on the supervisor’s PC. It’s the Commands API with an API key.
Your switch card already sends a command, and boards can only send commands that are in the device profile’s Commands catalogue at the Basic tier. So the method exists. To see its exact name and params, ask the API with the same key you’re about to create: GET /tenant/<tenantId>/api/iot/devices/<deviceId>/rpc-commands lists what a control may send to that device.
Create the key under API Keys: give it the permission to send basic commands and to read commands, put your desktop’s address in the IP allowlist, and pick an expiry. Then:
#!/bin/sh
# ~/bin/office-lights (chmod 700)
KEY=$(cat ~/.config/hermetry/key)
curl -s -X POST "https://<your host>/tenant/<tenantId>/api/iot/devices/<deviceId>/rpc"
-H "Authorization: Bearer $KEY"
-H "Content-Type: application/json"
-d "{"method":"light.set","params":{"on":$1},"timeoutMs":10000}"
A two-way command with a timeout of 30 seconds or less waits and answers 200 with the status, so you see SUCCESSFUL or the error in the terminal. Bind office-lights true and office-lights false to two shortcuts and you’re done. An API key can only send methods that are in the catalogue, which is what you want here anyway.
Docs: Commands API.
Traduit de English par IA ·
Les clés expirent par défaut après 90 jours (un an au maximum), alors notez quelque part un rappel, sinon votre raccourci cessera discrètement de fonctionner au bout de trois mois. Et gardez le fichier de clé en chmod 600, pas dans votre dépôt de dotfiles.
Keys expire after 90 days by default (a year at most), so put a reminder somewhere or your shortcut dies quietly in three months. And keep the key file chmod 600, not in your dotfiles repo.
Traduit de English par IA ·
Ça marche. Mon seul souci : le catalogue ne contient pas light.set, notre intégrateur l’a appelé relay.set avec un paramètre state (0 ou 1). L’appel rpc-commands l’a tout de suite affiché. Le premier raccourci était Super+L, qui bien sûr verrouille l’écran ; il est maintenant sur Super+F9.
Works. My only snag: the catalogue doesn’t have light.set, our integrator called it relay.set with a param called state (0 or 1). The rpc-commands call showed it straight away. First binding was Super+L which of course locks the screen, it’s on Super+F9 now.
Traduit de English par IA ·
+1, je garde ça pour la porte de garage à la maison
+1, saving this for the garage door at home
Traduit de English par IA ·
Super. Nous avons ajouté une invite « Êtes-vous sûr ? » à la nôtre pour les lumières du quai, après que quelqu’un les a éteintes alors qu’un chauffeur faisait encore marche arrière.
Nice. We added an « are you sure » prompt to ours for the dock lights after someone switched them off with a driver still reversing in.
- Vous devez être connecté pour répondre à ce sujet.
Rejoignez la discussion
Connectez-vous pour poser et répondre à des questions, aimer les messages utiles et marquer la réponse qui a résolu votre problème. Chaque contribution rapporte des points et des niveaux.

