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

Cambiar el relé de las luces de la oficina desde una terminal en mi escritorio Ubuntu

Cambiar el relé de las luces de la oficina desde una terminal en mi escritorio Ubuntu

Resuelto 8 7

Traducido del English por IA ·

vale, esto es mitad comodidad y mitad ganas de aprender la API.Nuestra oficina de analítica y las luces del muelle de al lado se controlan con una placa de relés ESP32 que informa a Hermetry por MQTT. Hay un panel con una tarjeta de interruptores y funciona bien desde el navegador. Pero paso todo el día en una terminal en Ubuntu y quiero un atajo de teclado que alterne las luces de la oficina sin abrir el panel.Lo que probé: tomé el token de acceso del dispositivo desde el cajón Credentials y envié un POST al endpoint HTTP del dispositivo:

curl -X POST "https://<device host>/api/v1/telemetry" 
  -H "Authorization: Bearer <ACCESS_TOKEN>" 
  -H "Content-Type: application/json" 
  -d '{"light": false}'

Responde 200 y durante un momento la tarjeta de interruptores muestra Off, pero las luces siguen encendidas y unos segundos después la tarjeta vuelve a On cuando el ESP32 vuelve a informar. Así que claramente estoy hablando con lo equivocado. ¿Qué endpoint es el correcto para que el dispositivo realmente haga algo?

♥ 0

Traducido del English por IA ·

Enviar telemetría con el token del dispositivo equivale a hacerse pasar por el dispositivo. Hermetry solo almacena lo que dice «el dispositivo». Lo que necesitas es un comando en sentido contrario.

♥ 0

Traducido del English por IA ·

Vale, eso explica que la tarjeta vuelva atrás. ¿Entonces es /api/v1/rpc? La página HTTP del dispositivo lista ese

♥ 1

Traducido del English por IA ·

Eso es para el lado del dispositivo, que espera comandos. Creo que necesitas una clave de API en lugar del token del dispositivo; hace un tiempo hice algo parecido con python requests, pero no recuerdo la ruta.

QoS 1 and a lot of patience.
♥ 1

Traducido del English por IA ·

Hacemos exactamente esto para las luces de línea de nuestra planta, desde un pequeño script en el PC del supervisor. Es la API de Commands con una clave de API.Su tarjeta de conmutación ya envía un comando, y las placas solo pueden enviar comandos que estén en el catálogo Commands del perfil del dispositivo en el nivel Basic. Así que el método existe. Para ver su nombre exacto y sus parámetros, consulte la API con la misma clave que va a crear: GET /tenant/<tenantId>/api/iot/devices/<deviceId>/rpc-commands lista lo que un control puede enviar a ese dispositivo.Cree la clave en API Keys: concédale el permiso para enviar comandos básicos y leer comandos, añada la dirección de su escritorio a la lista de IP permitidas y elija una caducidad. Después:

#!/bin/sh
# ~/bin/office-lights  (chmod 700)
KEY=$(cat ~/.config/hermetry/key)
curl -s -X POST "https://<your host>/tenant/<tenantId>/api/iot/devices/<deviceId>/rpc" 
  -H "Authorization: Bearer $KEY" 
  -H "Content-Type: application/json" 
  -d "{"method":"light.set","params":{"on":$1},"timeoutMs":10000}"

Un comando bidireccional con un tiempo de espera de 30 segundos o menos espera y responde 200 con el estado, así que verá SUCCESSFUL o el error en el terminal. Asigne office-lights true y office-lights false a dos atajos y listo. Una clave de API solo puede enviar métodos que estén en el catálogo, que es justo lo que se quiere aquí.Documentación: Commands API.

Ground loops are my cardio.
Solución aceptada♥ 9

Traducido del English por IA ·

Las claves caducan a los 90 días por defecto (un año como máximo), así que pon un recordatorio en algún sitio o tu atajo dejará de funcionar sin avisar en tres meses. Y mantén el archivo de claves con chmod 600, no en tu repositorio de dotfiles.

♥ 0

Traducido del English por IA ·

Funciona. Mi único problema: el catálogo no tiene light.set; nuestro integrador lo llamó relay.set con un parámetro llamado state (0 o 1). La llamada rpc-commands lo mostró de inmediato. El primer atajo fue Super+L, que por supuesto bloquea la pantalla; ahora está en Super+F9.

♥ 0

Traducido del English por IA ·

+1, guardando esto para la puerta del garaje de casa

♥ 0

Traducido del English por IA ·

Genial. Añadimos un aviso de «¿seguro?» a las nuestras, para las luces del muelle, después de que alguien las apagara mientras un conductor aún daba marcha atrás.

♥ 0
Viendo 9 entradas – de la 1 a la 9 (de un total de 9)
  • 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