Добавить данные из Mqtt в webUI

Добрый день. Вопрос - довольно обширный, начну по порядку.

Да, можно. В этом собственно смысл веб-интерфейса и заключается. Для того чтобы он, веб-интерфейс что-то показал в MQTT должны быть нужные топики.
То есть сам веб-интерфейс только и делает что просто отображает MQTT.
Создать топики можно парой способов.

//08_12_test_01.js

defineVirtualDevice("pythonTest", {
  title: "Test for  Python",
  cells: {
    "testSwitch": {
    type: "switch",
    value: false
    },
    "testText": {
    type: "text",
    value: "",
    readonly: false
    }
  }
});

Наблюдаем:
Screenshot from 2021-08-12 12-35-48

  • Но скрипт выше просто создал топики в MQTT:
mosquitto_sub -v -t /devices/pythonTest/#
/devices/pythonTest/meta/name Test for  Python
/devices/pythonTest/meta/driver wb-rules
/devices/pythonTest/controls/testSwitch 0
/devices/pythonTest/controls/testSwitch/meta/type switch
/devices/pythonTest/controls/testSwitch/meta/order 1
/devices/pythonTest/controls/testSwitch/meta/readonly 0
/devices/pythonTest/controls/testText/meta/type text
/devices/pythonTest/controls/testText/meta/order 2
/devices/pythonTest/controls/testText/meta/readonly 0

Если те же топики создать откуда угодно, хоть с помощью mosquitto_pub - то веб-интерфейс их обработает и отобразит. Ну и начнет работать.
Для интереса - можно поменять значения /devices/pythonTest/controls/testSwitch/meta/order с “1” на “3”

mosquitto_pub -t /devices/pythonTest/controls/testSwitch/meta/order -m 3

и увидеть что switch перескочил вниз. :wink:
Ну и соответственно - в топики можно писать, значения отображаются.

Ну, все ж разработка “на котроллере” - это не совсем верный путь. Для дома - еще нормально, но для продакшена обычно готовят пакет.

Все способы хороши. Подключения к брокеру - они его, брокер не нагружают.
Можно:

  • вообще вызывать скрипт из скрипта wb-rules, пример запуска “внешнего”: Скрипт для пингования хоста и (или) выводить данные для публикации в stdout и рабирать-обновлять в топиках средствами wb-rules, через dev=
  • использовать “паузу” внутри python-скрипта
  • и по крону - тоже можно.

Если на что-то не ответил - спрашивайте, не стесняйтесь.

2 лайка