Работа с MQTT топиками, пришедшими извне

Здравствуйте, вопрос как работать с mqtt топиками приходящими на брокер с других устройств.
В частности есть NVR frigate, он шлёт сообщения на брокер, через MQTT explorer их видно, но в веб интерфейсе wirenboard их нет.
Собственно вопрос, как с такими топиками работать в wb rules?
Схема топиков ниже:
image

Отвечу для себя:
нужны виртуальные девайсы и функции publish(topic, payload, [QoS [, retain]]) и trackMqtt(topic, callback())
Пример скрипта

// Создание виртуального переключателя отвечающего за наличие движения на кухне
defineVirtualDevice("frigate_motion", {
  cells: {
     kitchen: {
      title: "Наличие движения на кухне",
      type: "switch",
      value: false,
      readonly: true
    },
    bell: {
      title: "Наличие движения во дворе",
      type: "switch",
      value: false,
      readonly: true
    },
    koridor: {
      title: "Наличие движения в коридоре",
      type: "switch",
      value: false,
      readonly: true
    },
  }
});


trackMqtt("frigate/Kitchen/motion", function(message) {
  log.info("name: {}, value: {}".format(message.topic, message.value));
  	if(message.value == "ON"){
    dev["frigate_motion/kitchen"] = true
    }
   if(message.value == "OFF") {
     dev["frigate_motion/kitchen"] = false
   }    
  });

trackMqtt("frigate/bell/motion", function(message) {
  log.info("name: {}, value: {}".format(message.topic, message.value));
  	if(message.value == "ON"){
    dev["frigate_motion/bell"] = true
    }
   if(message.value == "OFF")  {
     dev["frigate_motion/bell"] = false
   }    
  });

trackMqtt("frigate/Koridor/motion", function(message) {
  log.info("name: {}, value: {}".format(message.topic, message.value));
  	if(message.value == "ON"){
    dev["frigate_motion/koridor"] = true
    }
   if(message.value == "OFF")  {
     dev["frigate_motion/koridor"] = false
   }    
  });
1 Like

Добрый день, прошу уточнить, удалось ли решить вопрос?

Спасибо, да

1 Like