Добрый день. Вопрос - довольно обширный, начну по порядку.
Да, можно. В этом собственно смысл веб-интерфейса и заключается. Для того чтобы он, веб-интерфейс что-то показал в MQTT должны быть нужные топики.
То есть сам веб-интерфейс только и делает что просто отображает MQTT.
Создать топики можно парой способов.
- Сделать виртуальное устройство. Описано, напимер тут:
Движок правил wb-rules — Wiren Board
Для примера, напишем переключатель и текстовое поле:
//08_12_test_01.js
defineVirtualDevice("pythonTest", {
title: "Test for Python",
cells: {
"testSwitch": {
type: "switch",
value: false
},
"testText": {
type: "text",
value: "",
readonly: false
}
}
});
Наблюдаем:
- Но скрипт выше просто создал топики в 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 перескочил вниз.
Ну и соответственно - в топики можно писать, значения отображаются.
Ну, все ж разработка “на котроллере” - это не совсем верный путь. Для дома - еще нормально, но для продакшена обычно готовят пакет.
Все способы хороши. Подключения к брокеру - они его, брокер не нагружают.
Можно:
- вообще вызывать скрипт из скрипта wb-rules, пример запуска “внешнего”: Скрипт для пингования хоста и (или) выводить данные для публикации в stdout и рабирать-обновлять в топиках средствами wb-rules, через dev=
- использовать “паузу” внутри python-скрипта
- и по крону - тоже можно.
Если на что-то не ответил - спрашивайте, не стесняйтесь.