LoRaWan – Interruptor temporizado. Gateway y Broker

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/