Novedad: el cortafuegos de IA supervisa toda la plataforma y explica cada incidente con palabras sencillas. Vea cómo funciona

Respuesta: Cambiar un relé Wi-Fi desde mis propios scripts de Python a través del endpoint de commands

Traducido del English por IA ·

Bien, esa es la misma configuración que usamos para unas cuantas lámparas de señalización. Tres partes:

  1. Perfil de dispositivo del relé, pestaña Commands: añadir un comando light.set, nivel Basic, un parámetro on de tipo Yes / no. El nivel importa, porque una clave API solo puede enviar métodos que estén en el catálogo del perfil.
  2. Firmware: suscribirse a v1/rpc/req/+, conmutar GPIO12 (el relé de la Basic R2), responder con el mismo id e informar del nuevo estado.
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. Tu script: una clave API desde API Keys (menú Developer) con solo lo que necesite. La ruta de envío requiere iot_rpc.read más el permiso del nivel, así que marca esos dos y nada más, rellena la lista de IP permitidas con la dirección del PC del laboratorio y mantén la caducidad de 90 días.
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"])

Un comando bidireccional con un timeout de 30 s o menos espera y devuelve 200 con SUCCESSFUL. Referencia: Commands APIEl ESP8266 maneja TLS, pero la memoria es escasa; usa BearSSL con buffers más pequeños si la conexión falla.

Solución aceptada♥ 4