Gateway ChirpStack
La función Encode se encarga de preparar los valores para ser enviados por la red LoRaWan. El ejemplo muestra el uso de las variables estado y duración:
// Encode encodes the given object into an array of bytes. // - fPort contains the LoRaWAN fPort number // - obj is an object, e.g. {"temperature": 22.5} // - variables contains the device variables e.g. {"calibration": "3.5"} (both the key / value are of type string) // The function must return an array of bytes, e.g. [225, 230, 255, 0] function Encode(fPort, obj, variables) { var estado = obj["estado"]; var duracion = obj["duracion"]; var mensaje = [50,20]; if (estado == "ON") { mensaje = [49,duracion]; } if (estado == "OFF") { mensaje = [50,20]; } return mensaje; }
Mensaje MQTT
El mensaje Mqtt que activa la instrucción tiene un formato que requiere para el tema o tópico: identificador de aplicación del ChirpStack, deviceEUI,
el mensaje contiene si se confirma la trama, el puerto de la aplicación y un diccionario «object» con las variables sus valores correspondientes en texto o numérico.
El ejemplo de la instruccion para el dispositivo es:
mosquitto_pub -h "localhost" -u "usuarioprueba" -P "usuarioclave" -t "application/3/device/bc55318912bfd090/command/down" -m '{"confirmed":true,"fPort":3,"object":{"estado":"ON","duracion":46}}'
Para observar el estado en mqtt para probar el envio del mensase se usa la instrucción de suscripción:
mosquitto_sub -h "localhost" -u "usuarioprueba" -P "usuarioclave" -t "application/3/device/bc55318912bfd090/command/down"
Home Assitant – configuración
Se realiza combinando una variable numérica (input_number) para la duración en segundos, y se envía como una instrucción de control usando una plantilla de foco dim (light).
light: - platform: mqtt schema: template name: 'RegarPlanta' state_topic: "application/3/device/bc55318912bfd090/estado" command_topic: "application/3/device/bc55318912bfd090/command/down" command_on_template: '{"confirmed":true,"fPort":3,"object":{"estado":"ON","duracion":{{states("input_number.regar_seg") | int}}}}' command_off_template: '{"confirmed":true,"fPort":3,"object":{"estado":"OFF","duracion":0}}' input_number: regar_seg: name: regar_segundos initial: 10 min: 0 max: 254 step: 1 mode: box icon: mdi:timer-outline unit_of_measurement: "s"
Referencia: Send JSON command with MQTT?, https://community.home-assistant.io/t/send-json-command-with-mqtt/37663
Input Number, https://www.home-assistant.io/integrations/input_number
MQTT Light, https://www.home-assistant.io/integrations/light.mqtt/