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

Encender un relé Wi-Fi desde mis scripts de Python a través del endpoint de comandos

Encender un relé Wi-Fi desde mis scripts de Python a través del endpoint de comandos

Resuelto 5 3

Traducido del English por IA ·

Soy analista de datos, así que sed comprensivos conmigo con la electrónica.Nuestro laboratorio de pruebas tiene una lámpara sobre el banco de resistencia que los operarios quieren encendida mientras se realiza una prueba. Las pruebas se inician desde mis scripts de Python, así que me gustaría que el script también encienda la lámpara. Compré un relé Wi-Fi Sonoff Basic R2, pero de fábrica solo funciona con su propia aplicación para el teléfono y no encuentro ninguna API documentada para él.Ya usamos Hermetry para los sensores del banco (un ESP32 que envía vibración y temperatura por MQTT, funciona bien). Idealmente, mi script hablaría con Hermetry y Hermetry hablaría con el relé, así no tendría que abrir nada en la red del laboratorio y los operarios verían el estado de la lámpara en el mismo panel.¿Es una configuración sensata? Si lo es, ¿qué endpoint llamo y cómo “escucha” el relé la orden? Encontré /api/iot/devices/{deviceId}/rpc en la documentación de la API, pero no estoy seguro de qué tiene que existir en el lado del dispositivo.

♥ 1

Traducido del English por IA ·

El Sonoff Basic lleva un ESP8266 dentro. Puedes grabarle tu propio sketch a través del conector de 4 pines con un adaptador USB-serie (3.3 V, ¡no 5 V!). Después, es solo otro dispositivo Hermetry.

Ask me about 4–20 mA.
♥ 0

Traducido del English por IA ·

Lo flasheé con un adaptador FTDI prestado; me costó tres intentos ponerlo en modo boot (mantener pulsado el botón mientras lo conectaba). Ahora se conecta a Hermetry con su propio token de acceso y envía {"relay": 0} cada minuto. Así que la parte de envío está lista. ¿Y cómo lo cambio?

♥ 1

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

Traducido del English por IA ·

Funciona. La primera llamada devolvió 403 porque solo había marcado el permiso de envío y no iot_rpc.read. Después de añadirlo, la lámpara hace clic y la llamada devuelve 200 / SUCCESSFUL en unos 300 ms. También puse una tarjeta Switch en el panel de los operadores, vinculada a relay, para que vean el estado. Gracias a los dos.

♥ 1

Traducido del English por IA ·

¡Genial! Esa placa tiene tensión de red, así que vuélvela a meter en su caja antes de que alguien la toque 😄

Ask me about 4–20 mA.
♥ 0
Viendo 6 entradas – de la 1 a la 6 (de un total de 6)
  • Debes estar registrado para responder a este debate.

Únete a la conversación

Inicia sesión para preguntar y responder, dar me gusta a las publicaciones útiles y marcar la respuesta que resolvió tu problema. Cada aportación suma puntos y niveles.

Compartir