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/

