Пока модуль PZEM-004T v3 до меня едет для экспериментов … попробуем прошить его на альтернативную прошивку ESPHome. Я это никогда не делал … так как был фанатом Tasmota. Есть еще прошивки от ESPEasy, но там тестовый вариант работы с PZEM-004T данными был. У меня стоит задача также добавить все сенсоры мониторинга PZEM-004T в HomeAssistant через MQTT брокер, либо через API. Прошивать будем через аддон Home Assistant (ESPHome). Установить его не проблема … поэтому детально его рассматривать нет необходимости.
Запускаем плагин и открываем его домашнюю страницу. При первом запуске он предложит нам создать ноду (назовем ее попроще: конфигурацию какой-то отдельной железки) для конткретного устройства. У меня такое устройство NodeMCU ESP8266MOD.
WIFI-SSID: это SSID нашей домашней сети Wifi
На этом завершена 1ая часть. Устройство пока у нас Offline, так как физически к Raspberry мы еще ничего не подключили. Далее создаем конфигурацию в ESPHome для нашего модуля wifi ESP8266MOD (я привожу полный конфиг), которую запишем с прошивкой. В данном случае я буду подключать данные (PZEM) с ESP8266MOD в HomeAsisitant через MQTT брокер (через API у меня не получилось, об этом читайте в конце). Конфиг для MQTT
esphome: name: pzem platform: ESP8266 board: nodemcuv2 uart: id: PZEM rx_pin: D1 tx_pin: D2 baud_rate: 9600 stop_bits: 1 # Enable logging logger: mqtt: broker: 192.168.1.30 username: "ha" password: "password" ota: password: "72206ae32a16d6963bafd08afba6d99b" wifi: ssid: "INHIBITZ-NET" password: "password" # Enable fallback hotspot (captive portal) in case wifi connection fails ap: ssid: "Pzem AP Hotspot" password: "pass123456" captive_portal: web_server: port: 80 sensor: - platform: pzemac current: name: "PZEM-004T 220V Current" voltage: name: "PZEM-004T 220V Voltage" energy: name: "PZEM-004T 220V Energy" power: name: "PZEM-004T 220V Power" id: power_monitor frequency: name: "PZEM-004T 220V Frequency" power_factor: name: "PZEM-004T 220V Power Factor" update_interval: 10s # address: 1 - platform: total_daily_energy name: "PZEM-004T 220V Total Daily Energy" power_id: power_monitor filters: - multiply: 0.001 accuracy_decimals: 2 unit_of_measurement: kW icon: mdi:counter - platform: integration name: "PZEM-004T 220V Energy Meter" sensor: power_monitor time_unit: h filters: # Multiplication factor from W to kW is 0.001 - lambda: return x * (0.001); unit_of_measurement: kWh icon: mdi:counter restore: true switch: - platform: uart uart_id: PZEM name: "PZEM-004T 220V Energy Reset" data: [0x01, 0x42, 0x80, 0x11] time: - platform: homeassistant id: hass_time
контакты D1/D2 резервируем на модуле ESP8266, куда будем подключать данные с PZEM-004T (TX/RX), можно выбирать и другие D3/D4 … все равно.
Теперь что касается физики. Подключать мы будем старым провереннем способом через USB-прошиватель на чипе CH340. Что это за прошиватель … гуглим постами ранее.
Т.е. сначала подключаем все проводки от ESP8266 к CH340, далее CH340 вставляем в USB порт нашего Raspberry. Схема следующая : (все контакты не модулях подписаны и ошибиться сложно)
ESP8266MOD | USB CH340 | |
3V3 | 3V3 | |
GND | GND | |
TX | RX | |
RX | TX |
Далее вставляем в порт USB Raspberry наш прошивальщик., и выполняем команду в Linux
pi@ihome:~ $ lsusb Bus 002 Device 002: ID 174c:55aa ASMedia Technology Inc. Name: ASM1051E SATA 6Gb/s bridge, ASM1053E SATA 6Gb/s bridge, ASM1153 SATA 3Gb/s bridge, ASM1153E SATA 6Gb/s bridge Bus 002 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hub Bus 001 Device 004: ID 0665:5161 Cypress Semiconductor USB to Serial Bus 001 Device 005: ID 1a86:7523 QinHeng Electronics HL-340 USB-Serial adapter Bus 001 Device 007: ID 1a86:7523 QinHeng Electronics HL-340 USB-Serial adapter Bus 001 Device 002: ID 2109:3431 VIA Labs, Inc. Hub Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
ну в системе у меня оказалось для USB чипа 340 идентичных … у вас скорее он будет один.
Начинается самое интересное. Выходим на рубеж в ESPHome страницу и выполняем нажатие VALIDATE (проверка конфигурации)
проверяем безошибочность нашей конфигурации. Конфигурация должны быть без ошибок (INFO Configuration is valid!)
Если все правильно подключили то статус OFFLINE смениться на ONLINE
если нет … не так страшно (никаких драйверов устанавливать не надо). Выбираем LOG
далее должны увидеть список всех устройство USB в нашей системе Raspberry. У меня это USB1 это прошивальщик, а USB0 как оказалось USB стик Zigbee
Ну что начинаем прошивать. Процесс прошивки простой. Выключаем модуль ESP8266MOD от сети (можно просто тупо снять проводок питания с 3.3V). Далее на модуле ESP8266MOD нажимаем на кнопку Flash и подключаем питание красного кабеля к 3.3V и уже в самом интерфейсе ESPHome нажимает на INSTALL
далее выбираем наше ttyUSB1 устройство (у вас оно может быть другим)
и начинается сам процесс прошивки
окончанием процесса является строка
на этом все остановится. далее нужно нажать 1 раз на кнопку Reset на нашем модуле ESP8266MOD
ну на этом все. Осталось понять … что у нас получилось. 🙂 У нас должны быть в MQTT куча сенсоров, должен быть Web портал счетчика с данными.
Web морда (данных пока так как нет самого PZEM-004T у меня)
в HomeAssistant наши сенсоры
Теперь о проблемах.
ОШИБКА 1
В какой-то момент я решил полностью отказаться от подключения по API к HA, так как каждые 15 минут модуль перезагружался (ну так заложено … что поделаешь) и получил ошибку
Component time.homeassistant requires component api. platform: homeassistant id: hass_time
Что-ж это хреново … так как у нас планируется отключение синхронизации времени с HA и модулем ESP … а этого нам не надо для показаний счетчиков. Будем копать далее …
смотрим в документацию
reboot_timeout (Optional, time): The amount of time to wait before rebooting when no client connects to the API. This is needed because sometimes the low level ESP functions report that the ESP is connected to the network, when in fact it is not - only a full reboot fixes it. Can be disabled by setting this to 0s. Defaults to 15min.
дополняем конфиг
# Enable Home Assistant API api: password: password reboot_timeout: 0s
прошиваем по новой и видим в VALIDATE reboot_timeout: 0s, то что нужно. Конфиг исправен.
ОШИБКА 2
Собственно это и связано с тем, что я не мог подключиться по API (пока не покурил документацию). Для подключения к данным ESP8266 через HA по API необходимо войти в Home Assistant -> Intergration и найти интеграцию pzem (ESPHOME), здесь будут собираться все сенсоры от ESP’шек наших конфигураций … Вообщем стандартный сценарий активации интеграций, Семён Семёныч 🙂
Необходимо будет ввести пароль указанный в конфигурации прошивки ESP8266MOD (параметр api_password: password), и подключиться с Home Assistant к модулю ESP8266MOD (к сожалению здесь я скринов не сделал). Результат таков после ввода пароля :
Таким образом появились следующие сущности (они все идут с индексом _2 так как ранее выше мы с вами подключали такие же сенсоры через MQTT, вообщем выбирайте либо сенсоры через API, либо через MQTT конфигурацию)
Ну на этом все … будет что-то новое … материал дополню. 🙂
Рабочий конфиг получился следующим
esphome: name: pzem platform: ESP8266 board: nodemcuv2 uart: id: PZEM rx_pin: D1 tx_pin: D2 baud_rate: 9600 stop_bits: 1 # Enable logging logger: # level: VERBOSE # Enable Home Assistant API api: password: password reboot_timeout: 0s # раскомментируйте если хотите данные брать через MQTT #mqtt: # broker: 192.168.1.30 # username: "ha" # password: "password" ota: password: "72206ae32a16d6963bafd08afba6d99b" wifi: ssid: "INHIBITZ-NET" password: "klkm34n116" reboot_timeout: 0s # Enable fallback hotspot (captive portal) in case wifi connection fails ap: ssid: "Pzem AP Hotspot" password: "pass1234567" captive_portal: web_server: port: 80 sensor: - platform: pzemac current: name: "PZEM-004T 220V Current" voltage: name: "PZEM-004T 220V Voltage" energy: name: "PZEM-004T 220V Energy" power: name: "PZEM-004T 220V Power" id: power_monitor frequency: name: "PZEM-004T 220V Frequency" power_factor: name: "PZEM-004T 220V Power Factor" update_interval: 10s # address: 1 - platform: total_daily_energy name: "PZEM-004T 220V Total Daily Energy" power_id: power_monitor filters: - multiply: 0.001 accuracy_decimals: 2 unit_of_measurement: kW icon: mdi:counter - platform: integration name: "PZEM-004T 220V Energy Meter" sensor: power_monitor time_unit: h filters: # Multiplication factor from W to kW is 0.001 - lambda: return x * (0.001); unit_of_measurement: kWh icon: mdi:counter restore: true switch: - platform: uart uart_id: PZEM name: "PZEM-004T 220V Energy Reset" data: [0x01, 0x42, 0x80, 0x11] time: - platform: homeassistant id: hass_time
Ну я парочку девайсов делал на есхоум, но на кой нужен “через USB-прошиватель на чипе CH340″ если МСЮ сама прошивает, а в ЄСПХоум нужно просто скачать “мануюал истал” бинарник и прошить например через ESP-Flasher-Windows-x64