8000 GitHub - Bagunda/energomera_ce307: Считывание показаний счётчика Энергомера CE307 R33.145.0A.N
[go: up one dir, main page]
More Web Proxy on the site http://driver.im/
Skip to content

Bagunda/energomera_ce307

Repository files navigation

energomera_ce307

Считывание показаний счётчика Энергомера CE307 R33.145.0A.N.

Программа подключается к локальному MQTT брокеру и публикует сообщения для AutoDiscovery. И устройство с сущностями автоматически появляются в Home Assistant под именем "Электросчётчик Energomera CE307 011791165813462" с сенсорами с именами "Сумма T1+T2+T3", "Тариф T1", "Тариф T2", "Тариф T3". Потом считывает показания со счётчика и публикует эти данные в соответствующие MQTT топики.

image

Программа после считывания показаний со счётчика и публикации этих данных в MQTT завершает своё выполнение и выгружается. Поэтому в Cron надо добавить время когда надо запускать эту программу. Правильнее было бы сделать, чтобы программа постоянно работала, но я пока не умею делать так, чтобы считывание происходило в другом треде и следить за тем, что тот тред дошёл до конца и завершать тред, если до конца не дошло. Просто иногда бывает, что от счётчика приходят не те данные, которые ожидаются и программа не доходит до завершения. Поэтому каждый раз заново запуская программу получается более гарантированно, что всё отработает как надо.

Этот счётчик из полезных данных может выдавать только текущие показания киловатт*часов: суммарное, тариф1, тариф2, тариф3 (смотря сколько тарифов ночных, дневных и т.п.). Больше с него ничего не снять толкового!

Сверху на электросчётчике есть крышечка. У меня правый болтик опломбирован и он как раз нам не нужен.

Откручиваем левый болтик и за этот же край тянем и крышка открывается. И там нам доступны болтовые клемы для подключения по RS485.

Подключаем RS485 к клемам 12 (А) и 13 (В).

Подключаем питание 12В и не меньше 100мА к клемам 14 (GND) и 15 (+12В).

Внутри витой пары 4 пары скрученных проводочков. RS485 А и В должны идти по одной паре скрученных проводочков. Не добавляйте соседние проводочки на линию А и В! Иначе увеличивается площадь ловли помех и наводок. Например антенна 1кв.м. ловит 1дБ помех. А антенна 2кв.м. ловит 2дБ помех.

Переходник USB - RS485 можно купить на али за пару сотен. У меня такой:

USB RS485

Потом лично я вставил этот переходник в Onion Omega2, который работает на линуксе и установил туда python3-lite. Но другие скорее всего будут втыкать этот USB/RS485 в Raspberry pi, что более правильно и дешевле. Но я хотел по WiFi передавать данные, чтобы малинка не была привязана проводами.

Из минусов.

  1. Пакеты данных и запросов и ответов обрамлены байтом 0xC0. То есть 0xC0 стоит и вначале пакета и в конце. Если в теле пакета встречается 0xC0, то его надо заменить 0xDB, 0xDC, но я это не делал. В пакете нет обычного окончания строки EOL типа \n и т.п. Поэтому не возможно воспользоваться функцией (readline). Читаем каждый пришедший байт, накапливаем и если пришёл 0xC0 и кол-во байт 16 и первая часть пакета равно C0 48 FD 00 96 34 57 01 30 00, то считываем значения киловатт
  2. В ответе нет идентификации на какой запрос или на какой тариф пришёл ответ. Поэтому введены таймеры и запрашиваем по порядку потихоньку. И запрашиваем 2 раза для проверки.
  3. В AdminTools (когда подключаешь USB-RS485 переходник к компьютеру), не вчитываясь внимательно в руководства - выбираешь канал связи "RS232 (CE30x)", что как бы логично. А надо выбирать "RS232 (CE102)". И нужно указать в программе "Адрес устройства". Это пять последних цифр серийного номера счётчика.

Подключение надо настроить на скорость 9600 8N1.

Получив все данные я посылаю их по HTTP GET JSON в Home Assistant. И программа закрывается.

В crontab -e я настроил расписание, чтобы программа запускалась каждый день в 23:59: 59 23 * * * /usr/bin/python3 /root/schetchik.py

В описание протокола можно не вчитываться. Можно в AdminTools посмотреть запросы и ответы и скопировать запросы.

У меня пакеты такие:

Запрос суммарного значения: C0 48 96 34 FD 00 00 00 00 00 D2 01 30 00 00 40 C0

Запрос значения по тарифу 1: C0 48 96 34 FD 00 00 00 00 00 D2 01 30 00 01 F5 C0

Запрос значения по тарифу 2: C0 48 96 34 FD 00 00 00 00 00 D2 01 30 00 02 9F C0

Запрос значения по тарифу 3: C0 48 96 34 FD 00 00 00 00 00 D2 01 30 00 03 2A C0

Но! 96 и 34 вы должны заменить на своё.

У меня серийный номер счётчика заканчивается на 13462, что в hex = 0x34 0x96. И вот эти 34 96 надо поменять местами: 96 34. И вы у себя это проделайте! И предпоследний байт (который перед C0) - нужно вычислить CRC8 с полиномом 0xB5. Это можно сделать на странице: http://www.sunshine2k.de/coding/javascript/crc/crc_js.html

CRC8

Получаем ответ: C0 48 FD 00 96 34 57 01 30 00 09 22 EC 8B 04 00 1B C0 . Где EC 8B 04 00 - нужное нам значение. Надо переставить байты в обратной последовательности: 00 04 8B EC и получится в dec число 297964. Это число надо разделить на 100. И получится 2979,64. Ровно столько потреблённых киловатт отображается и на дисплее электросчётчика на определённом тарифе.

Программа публикует всё в локальный MQTT брокер. Чтобы Home Assistant видел эти сообщения, надо на машине с Home Assistant чтобы был установлен и настроен MQTT брокер (например как дополнение в Home Assistant) и MQTT клиент в "Устройства и службы". И нужно настроить MQTT бридж между этим MQTT брокером и MQTT брокером, который на машине, отвечающей за считывание показаний со счётчика.

Принцип работы и настройки MQTT бриджа можно изучить по ссылке: https://www.youtube.com/watch?v=-dEGtIDfi78.

Кратко:

В Home Assistant в Дополнениях в настройках "File editor" выключаем пункт "Enforce Basepath", чтобы можно было редактировать файлы, которые находятся выше папки "config". Через "File editor" создаём файл /share/mosquitto/mosquitto.conf и добавляем туда данные:

connection bridge-01
address 192.168.1.123:1883
topic # in 0
remote_username MQTTuser
remote_password MQTTpass

В настройках MQTT брокера в Home Assistant нужно прописать active: true. image

После таких изменений надо перезагрузить дополнение MQTT в Home Assistant! Лично у меня иногда приходится ещё и перезагрузить Zigbee2mqtt дополнение, потому что Zigbee2mqtt зависит от этого MQTT дополнения. Но такое происходит не всегда. Можно просто перезагружать весь Home Assistant, только не через "Быстрая перезагрузка".

В этих данных topic # in 0 означает, что все сообщения с MQTT брокера машины на котором находится программа считывания данных со счётчика - будут публиковаться в MQTT брокер на Home Assistant. В обратную сторону не будут, потому что не добавлена строчка topic # out 0, потому что в данном случае это не нужно.

Чтобы добавить программу в автозагрузку/автозапуск/как сервис для linux (проверял на debian):

  1. Поместите файл energomera_ce307_linux в папку /etc/init.d/ и переименуйте его в energomera_ce307
  2. Надо указать, что файл может выполняться: chmod +x /etc/init.d/energomera_ce307
  3. Показываем системе, что мы добавили новый сервис update-rc.d -f energomera_ce307 defaults
  4. Запускаем программу выполняться в фоне: service energomera_ce307 start

Чтобы добавить программу в автозагрузку/автозапуск/как сервис для OpenWRT (проверял на Onion Omega2p):

  1. Поместите файл energomera_ce307_openwrt в папку /etc/init.d/ и переименуйте его в energomera_ce307
  2. Надо указать, что файл может выполняться: chmod +x /etc/init.d/energomera_ce307
  3. Показываем системе, что мы добавили новый сервис /etc/init.d/energomera_ce307 enable
  4. Запускаем программу выполняться в фоне: /etc/init.d/energomera_ce307 start

Могу помочь с внедрением программы. Или могу разработать программу для другого счётчика. За оплату. https://wa.me/+79802616369

About

Считывание показаний счётчика Энергомера CE307 R33.145.0A.N

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published
0