Это старая версия документа!
В качестве примера, перешьем самую простую WiFi розетку Sonoff-S26
В Интернете масса руководств, как перешить такую розетку под Tasmota или ESPEASY. Тут не буду описывать, как подключить или подпаять к Sonoff TTL-UART - это сделано сотни раз. Просто посмотрите - точно так же зашивается прошивка LightHub.
У нас более интересная задача - сделать гидростат с PID регулятором влажности, поддерживающий влажность в помещении при помощи парового увлажнителя (который многим хорош, но способен сделать из помещения баню, если его не контролировать)
(Точно также можно сделать на базе такой розетки и калорифера очень точный термостат)
Устройство должно регулировать влажность абсолютно автономно, но дополнительно, хочется управлять этим из привычного HomeAssistant
Прошивка LightHub позволяет это сделать «в розетке» ровно так же, как и на любом другом совместимом железе. С одним лишь ограничением - розетка ограничена по ресурсам и очень мало пинов выведено с платы контроллера.
Мой Sonoff содержит контроллер ESP8266EX и всего 1МБ флэш памяти. Для того, чтобы не разбирая устройство, можно было обновлять прошивку по воздуху, нам надо уместиться в 50% флеш памяти, доступной для кода. Ну и оставить что-то под хранение небольшого файла конфигурации.
Скомпилированную прошивку берем отсюда: https://github.com/anklimov/lighthub/blob/master/compiled/esp8266-wifi/firmware.bin (она уже собрана с опциями, приведенными ниже)
Для тех, кто хочет компилировать самостоятельно при помощи PlatformIO - надо создать дополнительный файл в директории проекта: lighthub\custom-build-flags\build_flags_esp8266-wifi
со следующим содержимым:
#Disabling debug log and move I2C to 1-3 pins -DnoSerial -D TWI_SCL=1 -D TWI_SDA=3 #Slimming firmware to fit 50% of 1m flash -DDMX_DISABLE -DMODBUS_DISABLE -DMBUS_DISABLE -DOWIRE_DISABLE -DCOUNTER_DISABLE -DNO_HOMIE -DAC_DISABLE -DSYSLOG_ENABLE -DOTA -DMOTOR_DISABLE -DMULTIVENT_DISABLE -DHSV_DISABLE -UMCP23017 -UARTNET_ENABLE -D BEARSSL_SSL_BASIC
После чего, надо пересобрать проект, выбрав environment esp8266-wifi
Данные настройки отключают то, что заведомо не требуется розетке. И убирают debug логгирование c Serial порта, выведенного на ноги 1 и 3 процессора. Теперь эти ноги, которые я ранее вывел на разьем, для того, чтобы была возможность заливать прошивку на ESP можно использовать для чего-то более полезного, пока не заливается эта самая прошивка
Например, I2C. (И настроить прошивку на работу с сенсорами ccs811+hdc1080) Или как в примере настройки ниже, для подключения сенсора температуры и влажности DHT22 к ноге 3 (RX)
После заливки прошивки, как обычно, подключаемся к появившейся точке доступа и настраиваем подключение к WiFi (если после подключения к точке, не открылась страница в браузере, заходим на http://192.168.4.1)
После перезапуска, прошивка будет пытаться загрузить конфиг с макадресом контроллера с портала. Проще всего создать его там.
Либо можно поискать новое устройство в сети при помощи любого браузера MDNS (Bonjour search, MDNS discovery, плагин для браузера) и отредактировать конфиг непосредственно на устройстве (скорректировав адрес MQTT брокера на свой)
{
"syslog":["95.31.43.9"],
"items": {
"ledhum":[6,-13],
"reghum": [13, [
[50, 10, 0, 60, 250, 200], [{"item": "relayhum"}, {"item":"ledhum"}]
], 30, 12],
"relayhum": [16, [12, 1200], 255, 2]
},
"in":{
"0":{"T":0,
"click":{ "item":"reghum","icmd":"TOGGLE"},
"dclick":{ "emit":"myhome/light-d2/light","ecmd":"TOGGLE"}
},
"3":{"T":4,
"temp":{"emit":"plugtemp"},
"hum":{"item":"reghum/val","emit":"plughum"}
}
},
"mqtt":["plug00","192.168.88.2"]
}
Основные объекты, которые мы настроили: * PID регулятор reghum. Он получает настройки влажности через топик reghum/set, а текущие показания с сенсора через топик reghum/val, его выход заведен на канал ШИМ реле (relayhum) и LED синего цвета (ledhum). В настройке заданы параметры P,I,D,dT,время перехода регулятора в режим аварии при отсутствии измерения влажности (250 сек) и значение, которое выдаст регулятор на свой выход (200) в режиме аварии * ШИМ реле relayhum - в зависимости от значения на входе (relayhum/set) включает реле (pin 12) на время 0-1200 секунд в интервале 1200 секунд * собственно, сенсор DHT22, передающий значения температуры и влажности в топики mqtt, значение влажности в PID регулятор * кнопка на корпусе, включающая-выключающая PID регулятор. (для фана, двойной клик на эту кнопку включает-выключает свет в доме)
Теперь как это настроить в HomeAssistant (configuration.yaml)
humidifier:
- platform: mqtt
name: "Увлажнитель пар"
command_topic: "myhome/plug00/reghum/cmd"
state_topic: "myhome/s_out/reghum/cmd"
target_humidity_command_topic: "myhome/plug00/reghum/set"
target_humidity_state_topic: "myhome/s_out/reghum/set"
max_humidity: 60
min_humidity: 20
sensor:
- platform: mqtt
name: "Влажность пар"
icon: "mdi:water-percent"
expire_after: 600
state_topic: "myhome/s_out/plughum"
unit_of_measurement: '%'
- platform: mqtt
name: "Температура пар"
icon: "mdi:thermometer"
expire_after: 600
state_topic: "myhome/s_out/plugtemp"
unit_of_measurement: '°C'
После чего, увлажнитель и сенсоры добавляются в панель управления
Осталось только разместить сенсор и подключить его к PIN3, земле и питанию 3.3 В Внутри розетки сенсор нагревается от реле и сильно занижает значение влажности. Лучше выводить наружу
Профит