Мониторим электрику: modbus PZEM-016(PZEM-004T 3.0)/ESP-32

Тема в разделе "Глядите, что я сделал", создана пользователем ИгорьК, 28 окт 2019.

  1. ИгорьК

    ИгорьК Гуру

    PZEM-016 / PZEM-004T 3.0 Версия показывает напряжение, ток, моментальную и накопленную мощность (электросчетчик) в сети. Для версии PZEM-004T 3.0 модуль rs485 не нужен.

    Вот оно, электрическое электричество перетекает в проводах:

    upload_2019-10-28_16-13-59.png


    upload_2019-10-28_16-14-44.png

    upload_2019-10-28_16-15-37.png

    И это опять Lua, но теперь на ESP32:

    [​IMG]

    А на шине то не одно устройство, а два. Вот еще одно - смотрит за насосом:

    upload_2019-10-28_16-19-47.png

    Железка состоит из двух модулей и много проводов:
    ESP32 (как и PZEM-016 в необходимом количестве) берем на рынке у бабки, а rs485 почти у Ампрерки:

    upload_2019-10-28_16-23-9.png

    Я между ESP32 и rs485 поставил модуль согласования уровней 3.3/5 вольт (ибо там на плате было так сразу, от прошлой железки осталось запаянным), но отчаянные головы могут это не делать и работать только с 3.3 вольтами, вроде фантомная инструкция к rs485 так баловаться разрешает.

    Модуль rs485 подключен к 16 и 17 ногам ESP32, на чем соединения почти исчерпаны.
    Важно! PZEM-016 имеет клеммы +/- 5 вольт. Таки это не вход, а выход напряжения, и его можно применять для запитки ESP32 хорошим, свежим током от PZEM. Ток настолько хорош, что не требует чистки конденсатором по цвету и запаху.

    Устройство читает необходимое количество PZEM-016, делит/складывает и шлет на MQTT брокер JSON посылки с праздничными бантиками такого вида:

    upload_2019-10-28_17-24-25.png

    В общем, устройство не влезает в нормы ардуинокашрута, ибо не на ардуино, не имеет приятного (вообще никакого) веб-интерфейса, работает на непонятном mqtt и шлет проклятый всеми пасторами жысон (json).

    Достоинство у него только одно - оно просто работает.

    Шаг раз.
    Сначала идем сюда, то есть туда, находим там три-файлика в одном зипе bin-прошивки и шьем той программой и по той картинке что есть там.
    Зип-архивов там видимо - невидимо, выбирайте один, тот что больше понравится на вкус и запах. Любой значит. В любом три файла, вот их и катаем.

    Шаг два.
    Любой программой неWord и неБлокнот Выньдовс, правим пару файлов настроек из архива:
    upload_2019-10-28_18-57-15.png

    upload_2019-10-28_18-58-3.png

    Шаг три.
    При помощи программы ESPlorer, да славится великий Интернет с его поиском, грузим файлы в ESP32.

    Шаг четыре.
    Запускаем на исполнение файл wifi32.lua и видим:

    upload_2019-10-28_19-6-32.png

    Шаг пять.
    Перегружаем устройство и жмем кнопку _init.lua

    Видим (продолжение) =>

    Файлики уже в приложении.
     

    Вложения:

    Последнее редактирование: 16 янв 2020
    Un_ka, alp69, Securbond и 8 другим нравится это.
  2. Igor68

    Igor68 Гуру

    ...особенно круто про цвет и запах. Ну тогда и расходы на некую сумму может, коль такая пьянка?:)
     
  3. ИгорьК

    ИгорьК Гуру

    Эммм... Кого-то на Гугле банят, а тебя на Али?
     
  4. ИгорьК

    ИгорьК Гуру

    проДолжение шаг Пять.

    Видим, значит:

    upload_2019-10-28_19-10-30.png

    Что мы видим? Что (2.) устройство установило связь с брокером, и (3.)сделало два запроса Unit 1 и Unit 2, оба из которых провалились.
    Однако сами запросы, те восемь циферок, мы отчетливо различаем.
    Запрос (первый) состоит из:

    Код (C++):
    1 - адрес устройства
    4 - читать байты
    0,0 - читать с нулевого адреса
    0,8 - читать восемь байт
    241, 204 - сумма, что вычислилась без вас
    Отличие второго запроса от первого лишь в первой цифре - адресе, да в самостоятельно вычисляемой контрольной сумме.

    Кстати, а почему там полный провал? Таки я не подключил pzem-016, возможно, у вас уже была бы другая картина, очень похожая на такую:

    [​IMG]

    И вся эта прелесть отправляется на брокер в виде такого json:

    Код (C++):
    {"power":4.6,"current":0.065,"volt":227.1,"heap":188900,"frequency":50,"energy":3153,"unit":2}
    Собственно, тут все абсолютно ясно, кроме того, как вы это будете применять к действительности.

    SmartSelect_20191107-041320_Gallery.jpg

    Шаг шесть. (Шагайте, вы, сами знаете куда... Куда хотите.)

    Как это делаю я. Принимаю и обрабатываю данные в NodeRed:

    upload_2019-10-30_10-13-25.png

    Функция "Make Text" выглядит так:

    Код (Javascript):
    newmsg01 = {}
    newmsg02 = {}
    newmsg03 = {}
    newmsg04 = {}

    function setSvalue(idx, nm){
        return '{"idx":' + idx +',"svalue":"' + nm + '"}';
    }

    function setSvalue2(idx, nm){
        return '{"idx":' + idx +',"nvalue":0,"svalue":"' + nm + '"}';
    }

    if (msg.payload.unit == 1) { // Если это первый pzem-016
        newmsg01.payload = setSvalue(247, msg.payload.current);
        newmsg02.payload = setSvalue(246, msg.payload.volt);
        newmsg03.payload = setSvalue(250, msg.payload.power);
        newmsg04.payload = setSvalue(248, ''+msg.payload.power+';'+msg.payload.energy);
        return [newmsg04, newmsg03, newmsg02, newmsg01];
    }

    else if (msg.payload.unit == 2) { // Если это второй pzem-016
        newmsg01.payload = setSvalue(253, msg.payload.current);
        newmsg03.payload = setSvalue(254, msg.payload.power);
        newmsg04.payload = setSvalue2(252, msg.payload.energy/1000);
        newmsg02.payload = setSvalue(256, ''+msg.payload.power+';'+msg.payload.energy);
        return [newmsg04, newmsg03, newmsg02, newmsg01];
    }
    В Домотикз это ловится четырьмя сенсорами, причем можно и тремя.
    Напряжение и ток - это понятно. Есть еще текущая и накопленная мощность, а есть в Домотикз еще один интересный счетчик:

    upload_2019-10-30_10-31-27.png

    Этот счетчик отражает вместе текущую и накопленную мощность:

    upload_2019-10-30_10-33-45.png

    Причем, разбивает ее по дням, неделям месяцам и считает денежки:
    Здесь текущая потребляемая мощность - 936.5 ватт, а за день сгрызли 9,547 квт.

    Если не промахнуться мимо кнопочки "Log", увидим следующее:
    upload_2019-10-30_10-34-55.png

    upload_2019-10-30_10-35-24.png


    Ну, собственно, на этом все.

    upload_2019-10-30_10-43-36.png



    Почти. Ибо с pzem-016 можно сделать еще две операции - изменить адрес (коль на шине более одного устройства и сбросить накопленную энергию) .

    Если сами не разберетесь (подсказка - работать с файлом _testCallPzem16.lua, посмотрите его комментарии) - объясню.
     
    Последнее редактирование: 15 янв 2020
  5. parovoZZ

    parovoZZ Гуру

    PZEM сильно врет? Сколько сам жрет?
     
  6. Igor68

    Igor68 Гуру

    Да нет, мне просто выражение понравилось(про цвет и запах - наводит на мысли про "это совсем не дым от канифоли, а души умерших транзисторов"). Я не хотел ничего испортить.
    Простите!
     
    ИгорьК нравится это.
  7. ИгорьК

    ИгорьК Гуру

    Да кто ж его знает.

    Класс точности 0.5grade только я не знаю что это.

    HTB1Oi8hdSSD3KVjSZFKq6z10VXa3.jpg

    Сам себя по току/мощности не определяет.
     
    Последнее редактирование: 28 окт 2019
    Igor68 нравится это.
  8. ИгорьК

    ИгорьК Гуру

    :)
     
  9. alp69

    alp69 Форумчанин

    Игорь, можете вкратце плюсы/минусы PZEM 004 и 016 обрисовать? Что удобнее?
    И еще один вопрос. Rs485 для чего здесь употреблен? Из-за того что два PZEM'а работают с одной ESP?
     
  10. ИгорьК

    ИгорьК Гуру

    004 - UART, 016 - rs485.

    Старый 004 работал по своему специфическому протоколу, в теме ОпенХаб у меня есть к нему драйвер, он снят с производства и сейчас 004 v3. работает по modbus, как и 016.

    rs485 позволяет работать со многими 016 на одной шине, с 004 - только один на UART. В остальном разницы быть не должно.

    Удобные железки для контроля расхода электричества и работы устройств, Домотикз добавляет удобства своими отчетами. В общем, удачная железка.
     
    Andrey12 и alp69 нравится это.
  11. alp69

    alp69 Форумчанин

    Завтра на алике пойду затариваться...
     
    ИгорьК нравится это.
  12. ИгорьК

    ИгорьК Гуру

    Берите 016 и тот блочок rs485 что у меня на картинке. Очень качественно изготовлен на вид, работает с 3.3 вольтами. Обычный, простой max485 работает только с 5v, что потребует согласования уровней.

    004 тоже работает лишь с 5v, правда что там с ver.3 точно не скажу.
    В общем, учитывайте вопрос 3.3/5 v
     
    Последнее редактирование: 11 ноя 2019
    alp69 нравится это.
  13. RotaryF

    RotaryF Нерд

    Это класс, но как-то интересно оно протекает на моем PZEM-004T 3.0.
    Подаю на TTL этого модуля 5V, а с выходов RX TX получаю 3,8V и 4,8V соответственно.
    Как такое подключать к ESP?
     
  14. parovoZZ

    parovoZZ Гуру

    Только RX - это вход. TX через тупой резистивный делитель.
     
    RotaryF нравится это.
  15. ИгорьК

    ИгорьК Гуру

    RotaryF нравится это.
  16. RotaryF

    RotaryF Нерд

    ИгорьК, parovoZZ, благодарю.
    Включу мозг, подключу руки :D
     
  17. ИгорьК

    ИгорьК Гуру

    Там ссылка на PZEM-004 первого модельного ряда. У вас то какой? В третьем по аналогии, но надо быть внимательнее. Я его (третью модификацию) в руках не держал, только по даташиту.
     
  18. RotaryF

    RotaryF Нерд

    Третий, буду внимателен
     
  19. first-leon

    first-leon Нуб

    Всем привет!
    Почитал подробно про PZEM-004 - он не умеет определять направление потребления.
    У меня есть GRID-TIE инвертор, который умеет отдавать излишки солнечной энергии в общую сеть. Хотелось бы мониторить - сколько электроэнергии я отдал в сеть, а сколько потребил.
    Может кто встречал электросчетчики подобные PZEM-004, но умеющие определать - в какую сторону идет электроэнергия?
     
  20. parovoZZ

    parovoZZ Гуру

    А самому сваять?