Neu: Die KI-Firewall überwacht die gesamte Plattform und erklärt jeden Vorfall in einfachen Worten. So funktioniert es

Wi-Fi-Relais aus meinen Python-Skripten über den Commands-Endpunkt schalten

Wi-Fi-Relais aus meinen Python-Skripten über den Commands-Endpunkt schalten

Gelöst 5 3

Von English mit KI übersetzt ·

Ich bin Datenanalyst, also bitte etwas Nachsicht bei der Elektronik.In unserem Testlabor hängt über dem Dauerprüfstand eine Lampe, die die Bediener während eines Tests eingeschaltet haben möchten. Die Testläufe starte ich aus meinen Python-Skripten, deshalb möchte ich, dass das Skript die Lampe ebenfalls schaltet. Ich habe ein Sonoff Basic R2 Wi-Fi-Relais gekauft, aber im Auslieferungszustand funktioniert es nur mit der eigenen Smartphone-App, und ich finde keine dokumentierte API dafür.Für die Sensoren des Prüfstands nutzen wir bereits Hermetry (ein ESP32, der Vibration und Temperatur über MQTT sendet, funktioniert einwandfrei). Idealerweise würde mein Skript mit Hermetry sprechen und Hermetry mit dem Relais, sodass ich im Labornetzwerk nichts öffnen muss und die Bediener den Lampenstatus auf demselben Board sehen.Ist das ein sinnvoller Aufbau? Wenn ja, welchen Endpunkt rufe ich auf, und wie „hört“ das Relais den Befehl? Ich habe /api/iot/devices/{deviceId}/rpc in der API-Dokumentation gefunden, bin mir aber nicht sicher, was auf Geräteseite vorhanden sein muss.

♥ 1

Von English mit KI übersetzt ·

Der Sonoff Basic enthält einen ESP8266. Du kannst darauf über die 4-polige Stiftleiste mit einem USB-Seriell-Adapter (3.3 V, nicht 5 V!) deinen eigenen Sketch flashen. Danach ist er einfach ein weiteres Hermetry-Gerät.

Ask me about 4–20 mA.
♥ 0

Von English mit KI übersetzt ·

Ich habe es mit einem geliehenen FTDI-Adapter geflasht, bis ich es nach drei Versuchen in den Boot-Modus bekommen habe (Taste beim Einstecken gedrückt halten). Es verbindet sich jetzt mit Hermetry über ein eigenes Zugriffstoken und sendet jede Minute {"relay": 0}. Der Sendeteil ist also erledigt. Und wie schalte ich es?

♥ 1

Von English mit KI übersetzt ·

Gut, das ist dasselbe Setup, das wir für einige Signallampen verwenden. Drei Teile:

  1. Gerätprofil des Relais, Reiter Commands: den Befehl light.set hinzufügen, Stufe Basic, ein Parameter on vom Typ Yes / no. Die Stufe ist wichtig, da ein API-Schlüssel nur Methoden senden kann, die im Katalog des Profils enthalten sind.
  2. Firmware: v1/rpc/req/+ abonnieren, GPIO12 schalten (das Relais auf dem Basic R2), mit derselben ID antworten und den neuen Zustand melden.
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. Dein Skript: ein API-Schlüssel unter API Keys (Menü Developer) mit nur den nötigen Rechten. Die Sende-Route benötigt iot_rpc.read plus die Berechtigung der Stufe, also genau diese beiden ankreuzen und nichts weiter, die IP-Allowlist mit der Adresse des Labor-PCs füllen und das 90-Tage-Ablaufdatum beibehalten.
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"])

Ein zweiseitiger Befehl mit einem Timeout von 30 s oder weniger wartet und kommt mit 200 und SUCCESSFUL zurück. Referenz: Commands APIDer ESP8266 unterstützt TLS, aber der Speicher ist knapp; verwende BearSSL mit kleineren Puffern, falls der Verbindungsaufbau fehlschlägt.

Akzeptierte Lösung♥ 4

Von English mit KI übersetzt ·

Funktioniert. Der erste Aufruf lieferte 403, weil ich nur die Sendeberechtigung aktiviert und iot_rpc.read nicht gesetzt hatte. Nach dem Hinzufügen klickt die Lampe, und der Aufruf liefert in etwa 300 ms 200 / SUCCESSFUL zurück. Außerdem habe ich auf dem Bedienerboard eine Switch-Karte angelegt, die an relay gebunden ist, damit die Bediener den Zustand sehen. Danke euch beiden.

♥ 1

Von English mit KI übersetzt ·

Super! Auf dieser Platine liegt Netzspannung, also steck sie zurück in ihr Gehäuse, bevor sie jemand anfasst 😄

Ask me about 4–20 mA.
♥ 0
Ansicht von 6 Beiträgen – 1 bis 6 (von insgesamt 6)
  • Du musst angemeldet sein, um auf dieses Thema antworten zu können.

Mitdiskutieren

Melde dich an, um Fragen zu stellen und zu beantworten, hilfreiche Beiträge mit „Gefällt mir“ zu markieren und die Antwort zu kennzeichnen, die dein Problem gelöst hat. Jeder Beitrag bringt Punkte und Stufen.

Teilen