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

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

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