Больше месяца проработал Хаб, полагаю можно выпускать его за пределы моей дачи.
В предыдущем сообщении рассказано, как залить Lua прошивку в ESP32, и без повторения нам не обойтись, после чего продолжим изготовление этого устройства:

Опыт эксплуатации показал устойчивость и безглючность этого устройства, чего не скажешь о ESP32 в целом, ибо при разработке в двух случаях ловились Guru Meditation Error и их пришлось программно обходить. Кто слегка понимает Lua кодинге, наверняка заметит некоторые странности, вдобавок к сгенерированному мной индусскому коду 🙂
Это устройство вобрало весь предыдущий опыт, включая такой, как оказалось, популярный вопрос «световой будильник». Таким образом, все что написано мной ранее на тему nooLite находится в этой железке.
Итак, устройство работает в двух режимах.
В ручном режиме вы запускаете на исполнение всего один файл ‘__testMTRF.lua‘, который предназначен для неспешной ручной привязки и отвязки всех устройств nooLite. После запуска скрипта вы увидите картинку, которая поясняет ваши возможности.

Привязка/отвязка устройств от модуля, перевод блоков F в релейный режим или режим управления яркостью, проверка привязки силовых блоков — эти главные функции реализованы для обеспечения работы с устройствами nooLite.

- В левом окне ESPlorer набираем команду (здесь привязка блока старого типа к ячейке 2);
- кнопкой Line отправляем ее на исполнение;
- в правом окне видим отчет о том, что операция прошла успешно.
Теперь все что есть у вас в хозяйстве железного будет связано с MTRF64 и готово для дальнейшей работы. Посоветую скрупулезно записывать и сохранять свои действия на будущее, ибо не существует способа узнать у MTRF64 где и что к нему привязано. Я такие записи делал плохо, и, в конце концов, потерял информацию о том, к чему привязан один из релейных выходов SR-2-1000, который длительное время не был задействован.
Для поиска таких «потерянных» силовых блоков я сделал скрипт __testMTRFCellsOnOff.lua, однако работа с ним грустна и тягуча, ибо он последовательно, от 0 до 63 перебирает ячейки, выводя в ESPlorer номер текущей, включая и выключая привязки к ним на 3 секунды, а вам надо сидеть и пялиться на «потерянную» железку, в ожидании момента, когда она включится. (Именно так я делал, сидя на чердаке с ноутбуком, в ожидании срабатывания силового блока 🙂 )
Переходим к работе с хабом. По ссылке лежат все файлы проекта, которые надо закатать в ESP32. Или они же на GitHub.
Перед загрузкой следует уточнить, в соответствии с вашими условиями, два файла.
wifi32.lua:

_setuser.lua:

Загрузив файлы в ESP32, исполняем wifi32.lua и видим:

Далее ПЕРЕГРУЖАЕМ модуль, исполняем файл _init.lua и наблюдаем установление связи с вашим брокером:

Все готово для работы.
С брокером устройство обменивается информацией двумя «потоками». Каждая итерация вызывает отправку модулем на брокер отчет в, условно, raw — формате, когда модуль шлет копию общения по UART без первого и двух последних байт, как незначащих, а также отчет о состоянии управляемого железа nooLite в json формате:

Для разных типов модулей nooLite json слегка различается, но, надеюсь, там все логично, и понимание не вызовет затруднений. Датчики температуры, температуры и влажности:

Управление силовыми блоками через брокер осуществляется типовой парой топик/сообщение, где топик будет иметь вид:
Имя_Вашего_Устройства/com/номер_ячейки,
а данные — json, который выглядит:
{«switchf»:»Off»}
Выключение блока нового типа, привязанного к ячейке 0:

Типы команд, которые поддерживает устройство:

После проверки работоспособности, понимания того, как все работает, остается лишь запустить железку в самостоятельную работу. Нажимаете на кнопку, с названием (1.) «_renameinit.lua» и наблюдаете следующее:

(2.) Вам дается 15 секунд на «передумать», (3.) устройство перезагружается, (4.) входит в сеть, подключается к брокеру.
Кнопка «_renameinit.lua» — волшебная кнопка. Если нажать ее еще раз, она запретит устройству автоматическую загрузку, перезагрузит его и дальше вы сможете работать с ним в ручном режиме.
Видимо, на этом стоит завершить. В этот раз я не стал детально объяснять код скриптов — мало кому это требуется.
Замечу, что не имея всех модулей nooLite, я не смог проверить его работоспособность полностью. По этой же причине не реализована работа с блоком управления цветной лентой — у меня его просто нет.
Вместе с тем, на том железе, что применяю я, устройство показало отличные результаты. Желаю и вам приятной работы с ним, в особенности приятного кодинга вашей системы умного дома, в целях парсинга и выдачи именно того формата сообщений, который реализован здесь. У меня, в частности, устройство работает в связке NodeRed/Domoticz. Всем удачи!
UPD15.03.2022
Соединение с брокером wqtt.ru:


Что следует уточнить для соединения с брокером.
Файле «_setuser.lua» сделать в соответствии со своими данными:
timezone = 'EST-3' --- mqtt --- dat.clnt = 'mtrf64' print('\nMQTT Client Name: '..dat.clnt) dat.brk = 'm4.wqtt.ru' dat.port = 4841 dat.user = 'u_9T9H2H' dat.passwd = 'M2j47QlD'
Файл "mqttset.lua" будет:
do if not killtop then killtop = {} end if not dat then dat = { brk = 'iot.eclipse.org', port = 1883, clnt = 'nooliteMTRF', user = 'userr', passwd = 'passwdd' } end local brk = dat.brk dat.brk = nil local port = dat.port dat.port = nil local user = dat.user dat.user = nil local passwd = dat.passwd dat.passwd = nil local subscribe, merror, newm, mconnect function subscribe(con) print("connected") dat.broker = true con:subscribe(dat.clnt.."/com/#", 0) con:publish(dat.clnt..'/state', "ON", 0, 1) print("Subscribed") end function merror(con) con = nil m = nil tmr.create():alarm(5000, tmr.ALARM_SINGLE, function() mconnect(newm()) end) end function newm() m = mqtt.Client(dat.clnt, 25, user, passwd) m:lwt(dat.clnt..'/state', "OFF", 0, 1) m:on("offline", function(con) con:close() dat.broker = false print("offline") merror(con) end) m:on("message", function(con, top, dt) killtop[1] = tonumber(string.match(top, "/(%w+)$")) or 65 if killtop[1] ~= 65 then killtop[2], killtop[3] = string.match(dt, '{"(%w+)":"?(%w+)"?}') print('MQTT Got:', killtop[1], killtop[2], killtop[3]) if file.exists('run.lua') then dofile('run.lua') end end end) return m end function mconnect(con) con:connect(brk, port, 0, 0, subscribe, merror) end mconnect(newm()) end
Не нашёл, другого способа, как с вами можно связаться для консультации. Спасибо вам за отличный проект и за то, что Вы им поделились! Всё поднял по вашим инструкциям на ESP32. Казалось бы — вот оно счастье… Но по какой-то причине каждый 1-1.5 дня ESP32 перестаёт отзываться по MQTT и присылать данные ( вижу по статистике получения данных от датчика температуры NooLite в Domoticz и переставшие поступать данные от датчика открытия дверей). На отправку сообщений в сторону MQTT брокера, которые адресованы nooliteMTRF тоже перестаёт хоть как-то отзываться. К сети он точно подключен (в интерфейсе роутера соединение видно). Выключение/включение питания и всё снова работает на очередные 1-1,5 дня. Идеи, что ещё можно проверить, заканчиваются. 😦 Буду очень благодарен, если подскажете в какую сторону копать.
НравитсяНравится
Копать в сторону брокера и сети. Взаимодействие может останавливаться, если брокер не подтверждает получение очередного сообщения или оно не доходит до устройства. При этом обмен служебными сообщениями худо-бедно происходит.
Такие вещи случались, когда работал с публичным брокером. С собственным брокером этого не происходит.
Глубоко в кухне взаимодействия подписчик/брокер я не разбирался, потому что у нас нет иных инструментов для восстановления работоспособности, кроме как уничтожить соединение и восстановить его вновь через некоторое время.
Тогда (публичный брокер), вместе с отправкой сообщения брокеру, я запускал таймер, который должен быть уничтожен callback(ом) успеха передачи. Если этого не происходило, то таймер совершал определенные действия от принудительного разрыва соединения с брокером до перезагрузки устройства.
В итоге, что можно посоветовать. Ну если с брокером ничего не поделать, то код надо допиливать в соответствии с вашими условиями. Таймер как я предложил.
НравитсяНравится
может вопрос глупый но как подключится к mqtt брокеру с авторизацией
timezone = ‘EST-3’
— mqtt —
dat.clnt = ‘nooliteMTRF’
dat.brk = ‘iot.eclipse.org’
dat.port = 1883
где тут задать логин и пароль ?
НравитсяНравится
Чет мне кажется сейчас адрес Брокера «mqtt.eclipse.org»
Пробуйте. Пароль/логин не нужны И имя клиента поменяйте на что-то более уникальное.
НравитсяНравится
mqtt explorer на Брокера «mqtt.eclipse.org» сейчас отказывается подключаться (((
есть интересный брокер https://www.wqtt.ru/ через корявый можно работать с Алисой
но он требует логин и пароль
может подскажите как и где модифицировать чтобы был доступ по логину и паролю
НравитсяНравится
https://github.com/igorkkk/nooLite_ESP32_mqtt_hub
Внес изменения, но, к сожалению, не могу проверить работоспособность. Обычно я так не делаю, но доступ к железу будет нескоро.
Изменения касаются файлов _setuser.lua и mqttset.lua.
Не исключено, что открытые брокеры работают не только по доступу логин/пароль, но и с шифрованием. Шифрования в этом устройстве нет и не предвидится — у меня все работает в домашней сетке и по мосту через VPN между квартирой и дачей.
Пожалуйста, напишите о работоспособности изменений.
НравитсяНравится
к сожаление нет конекта (( пробовал и по имени и по ip
к серверу подключаюсь без шифрования и сертификатов
dat.clnt = ‘nooliteMTRF’
dat.brk = ‘m9.wqtt.ru’
dat.port = 10352
очень благодарен за помощь может подскажите где смотреть логи
возможно удобней будет связаться Telegram @kurs75
НравитсяНравится
Ок, завтра я попробую в железе соединиться с этим брокером, тогда отвечу конкретнее.
НравитсяНравится
Прошу прощения, сегодня нет возможности совсем. В среду.
НравитсяНравится
я тоже пока плавно разбираюсь и прописываю модули
если получится с этим брокером то Алиса должна работать без дополнительного оборудования
а голосовое управление это основная задача
НравитсяНравится
Таки коннект с этим брокером есть.
НравитсяНравится
полностью перепрошил модуль и все прекрасно заработало
теперь чтобы управлять светом через Алис использую Ваше решение и http://www.wqtt.ru и за 300 руб в год это прекрасно ) Большая вам благодарность за помощь
НравитсяНравится
Спасибо!
У меня все работает на внутреннем брокере, а поддержка Алисы крутится на NodeRed, что стоит на том же железе, что и брокер. Так мне кажется безопаснее: все не выходит за пределы домашней сетки и канала VPN, по которому постоянно связаны дача и дом. В этом канале — мост между домашним и дачным брокером.
НравитсяНравится