Nouveau : le pare-feu IA surveille toute la plateforme et explique chaque incident en termes simples. Découvrez comment ça marche

Commander un relais Wi-Fi depuis mes scripts Python via l'endpoint commands

Commander un relais Wi-Fi depuis mes scripts Python via l'endpoint commands

Résolu 5 3

Traduit de English par IA ·

Je suis analyste de données, alors soyez indulgents avec moi sur l’électronique.Notre laboratoire d’essais dispose d’une lampe au-dessus du banc d’endurance, que les opérateurs veulent allumée pendant qu’un test est en cours. Les essais sont lancés depuis mes scripts Python, j’aimerais donc que le script commande aussi la lampe. J’ai acheté un relais Wi-Fi Sonoff Basic R2, mais à sa sortie de boîte il ne fonctionne qu’avec son application téléphone, et je ne trouve aucune API documentée pour lui.Nous utilisons déjà Hermetry pour les capteurs du banc (un ESP32 qui envoie vibrations et températures via MQTT, ça fonctionne bien). Idéalement, mon script parlerait à Hermetry, et Hermetry parlerait au relais, ainsi je n’aurais rien à ouvrir sur le réseau du laboratoire et les opérateurs verraient l’état de la lampe sur le même tableau.Est-ce une configuration correcte ? Si oui, quel endpoint dois-je appeler, et comment le relais « entend »-il la commande ? J’ai trouvé /api/iot/devices/{deviceId}/rpc dans la documentation de l’API, mais je ne suis pas sûr de ce qui doit exister côté appareil.

♥ 1

Traduit de English par IA ·

Le Sonoff Basic embarque un ESP8266. Vous pouvez y flasher votre propre sketch via le connecteur 4 broches avec un adaptateur USB-série (3.3 V, pas 5 V !). Ensuite, ce n’est plus qu’un appareil Hermetry comme les autres.

Ask me about 4–20 mA.
♥ 0

Traduit de English par IA ·

Je l’ai flashé avec un adaptateur FTDI emprunté, il m’a fallu trois essais pour le mettre en mode boot (maintenir le bouton enfoncé pendant le branchement). Il se connecte maintenant à Hermetry avec son propre jeton d’accès et envoie {"relay": 0} toutes les minutes. La partie envoi est donc terminée. Et pour le commuter ?

♥ 1

Traduit de English par IA ·

Bien, c’est la même configuration que nous utilisons pour quelques lampes de signalisation. Trois éléments :

  1. Profil d’appareil du relais, onglet Commands : ajouter une commande light.set, niveau Basic, un paramètre on de type Yes / no. Le niveau est important, car une clé API ne peut envoyer que les méthodes présentes dans le catalogue du profil.
  2. Firmware : s’abonner à v1/rpc/req/+, commuter GPIO12 (le relais de la Basic R2), répondre avec le même identifiant et signaler le nouvel état.
void onMsg(char* topic, byte* p, unsigned int n) {
  // topic: v1/rpc/req/42
  String id = String(topic).substring(11);
  StaticJsonDocument<128> d; deserializeJson(d, p, n);
  bool on = d["params"]["on"];
  digitalWrite(12, on ? HIGH : LOW);
  mqtt.publish(("v1/rpc/res/" + id).c_str(), "{"ok":true}");
  mqtt.publish("v1/telemetry", on ? "{"relay":1}" : "{"relay":0}");
}
  1. Votre script : une clé API depuis API Keys (menu Developer) avec uniquement ce dont elle a besoin. La route d’envoi demande iot_rpc.read ainsi que la permission du niveau ; cochez ces deux-là et rien d’autre, renseignez la liste d’adresses IP autorisées avec l’adresse du PC du laboratoire et conservez l’expiration à 90 jours.
import requests
r = requests.post(
    f"https://{HOST}/tenant/{TENANT}/api/iot/devices/{DEVICE}/rpc",
    headers={"Authorization": f"Bearer {KEY}"},
    json={"method": "light.set", "params": {"on": True}, "timeoutMs": 10000},
)
print(r.status_code, r.json()["rpc"]["status"])

Une commande bidirectionnelle avec un délai d’attente de 30 s ou moins attend et renvoie 200 avec SUCCESSFUL. Référence : Commands APIL’ESP8266 gère le TLS, mais la mémoire est limitée ; utilisez BearSSL avec des tampons plus petits si la connexion échoue.

Solution acceptée♥ 4

Traduit de English par IA ·

Ça fonctionne. Le premier appel a renvoyé 403 parce que j’avais seulement coché la permission d’envoi et pas iot_rpc.read. Après l’avoir ajoutée, le voyant clique et l’appel renvoie 200 / SUCCESSFUL en environ 300 ms. J’ai aussi placé une carte Switch sur le tableau des opérateurs, liée à relay, pour qu’ils voient l’état. Merci à vous deux.

♥ 1

Traduit de English par IA ·

Super ! Il y a du secteur sur cette carte, alors remets-la dans son boîtier avant que quelqu’un n’y touche 😄

Ask me about 4–20 mA.
♥ 0
6 sujets de 1 à 6 (sur un total de 6)
  • 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.

Partager