PiggyMeter
Тази статия ви показва как да изградите устройство за дистанционно четене на данни от електромер (или всяко устройство с подходящ интерфейс).
Използва широко достъпни компоненти, софтуер с отворен код и е съвместим с популярния софтуер за домашна автоматизация, Home Assistant.
INFO
Комплект за сглобяване на функционално устройство е наличен за покупка на Tindie: PiggyMeter KIT.
Характеристики
- Поддържа протоколи на базата на IEC62056-21
- Поддържа пасивен SML протокол с използване на ESPHome native компонент
- Множество измервателни уреди: енергия, вода, топлинна и други
- Използва софтуер с отворен код ESPHome
- Безжична комуникация чрез Wi-Fi
- Интеграция с Home Assistant
- Опционален уеб сървър
- Евтин хардуер ESP32-C3 или ESP32-S2
- Дизайн на корпус наличен за 3D печат
Поддържа измервателни уреди, съвместими със стандарта IEC62056-21, който работи в режими A, B, C, D (но не и E). За подробности вижте IEC 62056-21 компонент.
Имайте предвид, че има много вариации на протокола. Въпреки че измервателният уред може да използва същия оптичен интерфейс, форматът на данните може да бъде различен.
Освен това, поддържа измервателни уреди, които използват SML (Smart Message Language) протокол с използване на ESPHome SML компонент.
WARNING
Стандартите DLMS, M-Bus и ANSI C12.18/19 не се поддържат от софтуера.
Как да проверите дали измервателният уред е поддържан?
Терминът IEC 62056-21 се използва за множество протоколи (със същия хардуерен слой, но различно кодиране на данни). Устройството поддържа измервателни уреди, които предоставят ASCII-кодирани данни, нещо като това:
console
1-0:15.8.1(00000009999.567*kWh)
1-0:15.8.2(00000000000.000*kWh)
1-0:15.8.3(00000000000.000*kWh)
1-0:15.8.4(00000000000.000*kWh)
Измервателният уред трябва да е съвместим с Международен стандарт IEC 62056-21:2002.
За SML протокол, потърсете SML лого на измервателния уред или проверете ръководството. Компонентът на ESPHome поддържа само пасивен режим, не изпраща никакви заявки към измервателния уред. В този режим, измервателният уред изпраща данни на всеки няколко секунди.
Електромери, за които е докладвано, че работят с PiggyMeter
Списъкът е създаден въз основа на доклади от потребители. Няма гаранция, че е точен.
- Apator Norax 3
- Apator Norax 1
- Apator Norax 1D чрез SML компонент
- Pafal 12EA5
- Iskra MT372
- Iskra ME162
- Kastrup 382
- Landis+Gyr E350 ZMF110
- ZPA ZE110.D0
INFO
Чувствайте се свободни да изпратите имейл на info@aquaticus.info, ако знаете електромер, който работи с PiggyMeter, но не е изброен по-горе.
Алтернативен софтуер
Хардуерът на PiggyMeter може да работи с много различни електромери, които използват оптичен интерфейс. Въпреки това, софтуерът в момента поддържа само един стандарт, което на практика ограничава обхвата на поддържаните електромери.
Можете да опитате да използвате алтернативен софтуер, който може да добави поддръжка за различни електромери. Важно е да се отбележи, че няма гаранция, че ще функционира безпроблемно с PiggyMeter. За поддръжка, моля, свържете се с оригиналния автор.
- DLMS/COSEM Esphome модул https://github.com/viric/esphome-ziv
Списък на материалите
Част | Описание |
---|---|
CPU | Wemos C3 или S2 Mini https://www.wemos.cc/en/latest/ |
Оптичен интерфейс | PiggyMeter PCB https://www.tindie.com/products/32082/ |
2×пинов хедър 1×4 | 2.54mm растер; пластмасовата част трябва да е с височина 8.5 мм |
Пръстен магнит | ⌀30/⌀15×2mm |
Кутия | 3D принтирана кутия https://github.com/aquaticus/piggymeter_case |
Шайба | 3D принтирана шайба https://github.com/aquaticus/piggymeter_case |
Капак | 3D принтиран заден капак https://github.com/aquaticus/piggymeter_case |
CPU платка
Трябва ви платка с инсталиран чип на Espressif и съвместим Wemos/Lolin пинов извод. Ключовият фактор е разположението на 4 пина: GND
, VCC
, TX
и RX
.
Размерът на печатната платка също е критичен. 3D отпечатаната кутия съвпада само с платките (или техните клонинги), изброени по-долу:
- Lolin/Wemos S2 mini
- Lolin/Wemos C3 mini
Теоретично, можете да използвате всяка друга CPU платка със съвместим пинов извод, като ESP32 и ESP8266 D1 mini. Но в този случай трябва да проектирате своя собствена кутия и да модифицирате малко конфигурационните файлове (тип платка и серийни порт пинове).
Оптичен интерфейс
Един метър използва оптичен интерфейс, съвместим със стандарта IEC62056-21, комуникиращ с проба чрез инфрачервен диод и фототранзистор.
Интерфейсът е свързан към един от серийните портове на CPU платката. Разбира се, ви трябват и VCC и GND.
Запоете 2 пинови хедъра. Трябва да използвате пинов хедър с височина 8.5 мм. Дизайнът на кутията съответства на тази височина, осигурявайки правилно прилягане. Ако височината надвишава това измерение, затварянето на капака може да представлява предизвикателство.
Кутия
Изтеглете файлове за 3D принтер от https://github.com/aquaticus/piggymeter_case. Използвайте версия V5 за най-новия дизайн.
Кутията се състои от три компонента:
- основната кутия,
- шайба,
- и капак.
Има три отделни STL файла, налични за всеки компонент, или алтернативно, един 3fm файл, включващ и трите елемента.
Кутията отговаря на изискванията на стандарта IEC62056-21 за Оптична проба>.
INFO
Кутията има малка закопчалка. За да я затворите или отворите, трябва да приложите малко сила.
Препоръчителни настройки за 3D печат
- Материал: PLA
- Слой: 0.2 мм
- Без поддръжка
Сглобяване
Подредете компонентите в кутията в следния ред:
- Магнит
- Шайба
- Оптичен интерфейс
- CPU платка
- Капак
INFO
Гледайте сглобяването в Youtube https://youtu.be/fM2LyJJWQHA?si=dyY4r7zMSMfbwQtm
Програмиране за IEC62056-21 измервателни уреди
Започнете с инсталирането на ESPHome.
Въз основа на вашата CPU платка, изберете подходящия конфигурационен файл. Допълнително направете ръчни настройки на определени параметри, като например паролата за WiFi.
Получаване на конфигурационни файлове
Клонирайте git хранилището с конфигурационни файлове:
bash
git clone https://github.com/aquaticus/piggymeter_esphome_yaml
Създаване на файл secrets.yaml
Създайте файл secrets.yaml
в директорията, където се намират конфигурационните файлове. Този файл ще съдържа името на WiFi мрежата и съответната й парола.
yaml
# Home Assistant API encryption key
api_key: my_home_assistant_encryption_key
# OTA password
ota_pass: my_ota_password
# WiFi network name
wifi_ssid: my_network
# WiFi network password
wifi_pass: my_password
Промяна на конфигурацията на проекта
Конфигурацията идва предварително зададена със стандартни данни за електромер.
Чувствайте се свободни да коригирате списъка, особено ако вашият измервателен уред се различава от типа електромер. Обърнете се към IEC 62056-21 компонент за повече информация.
yaml
sensor:
- platform: iec62056
obis: 1-0:15.8.0
name: Absolute active energy total
unit_of_measurement: kWh
accuracy_decimals: 3
device_class: energy
state_class: total_increasing
Създаване и флашване на фърмуера
bash
esphome run piggymeter-s2-iec62056-21.yaml
Горната команда флашва фърмуера и показва изхода на монитора. По подразбиране, интерфейсът чете данни от измервателен уред на всеки 1 минута.
TIP
За платка ESP32-S2 трябва да натиснете бутона BOOT и след това бутона RESET на PCB, за да влезете в режим на програмиране. Освен това, може да видите съобщение за грешка след флашването -- просто го игнорирайте.
log
[12:21:27][D][iec62056.component:232]: Connection start
[12:21:27][D][binary_sensor:036]: 'Meter Connection Status': Sending state ON
[12:21:28][D][switch:013]: 'Internal LED' Turning ON.
[12:21:28][D][switch:056]: 'Internal LED': Sending state ON
[12:21:28][D][iec62056.component:174]: Meter identification: '/XXX6\2YYYYY'
[12:21:28][D][iec62056.component:407]: Meter reported protocol: C
[12:21:28][D][iec62056.component:410]: Meter reported max baud rate: 19200 bps ('6')
[12:21:28][D][iec62056.component:438]: Using negotiated baud rate 9600 bps.
[12:21:29][D][iec62056.component:470]: Switching to new baud rate 9600 bps ('5')
[12:21:29][D][iec62056.component:482]: Meter started readout transmission
[12:21:29][D][iec62056.component:524]: Data: 0-0:C.1.0(12345678)
[12:21:29][D][iec62056.component:524]: Data: 0-0:1.0.0(2000-01-01 20:10:30)
[12:21:29][D][iec62056.component:524]: Data: 1-0:15.8.0(00000001000.657*kWh)
[12:21:29][D][iec62056.component:620]: Set sensor 'Absolute active energy total' for OBIS '1-0:15.8.0'. Value: 1000.656982
[12:21:29][D][iec62056.component:524]: Data: 1-0:15.8.1(00000002000.657*kWh)
[12:21:29][D][iec62056.component:524]: Data: 1-0:15.8.2(00000003000.000*kWh)
[12:21:29][D][iec62056.component:524]: Data: 1-0:15.8.3(00000004000.000*kWh)
[12:21:29][D][iec62056.component:524]: Data: 1-0:15.8.4(00000005000.000*kWh)
[12:21:29][D][iec62056.component:524]: Data: 1-0:15.6.0(00000006000.385*kW)(2000-01-01 20:10:01)
Програмиране за SML измервателни уреди
Първите стъпки са идентични с тези за IEC62056-21 измервателни уреди.
След клонирането на хранилището и създаването на файл secrets.yaml
, използвайте конфигурационни файлове за SML измервателни уреди.
bash
esphome run piggymeter-s2-sml.yaml
Най-вероятно ще трябва да настроите конфигурационния файл, за да съответства на предаваните от измервателния уред данни. Също така е добре да проверите скоростта на предаване и битовете на данните на серийния порт.
Home Assistant
Устройството трябва да бъде автоматично открито от Home Assistant. Ако не е, можете да го добавите ръчно, като кликнете върху Add Integration и изберете интеграцията ESPHome.
PiggyMeter излага три групи елементи:
Задействане на отчитане
Този тригер принуждава PiggyMeter да чете данни от измервателен уред извън графика.
Състояние на връзката с измервателния уред
Статусът Connected показва, че интерфейсът обменя данни с измервателния уред.
Сензори
Това е списък на сензорите, дефинирани в конфигурационния файл.
Самостоятелен режим
PiggyMeter може да работи независимо от Home Assistant, предлагайки възможността да активира уеб сървър. Този сървър показва данните директно в уеб браузър и предлага прост REST API.
За да активирате уеб сървъра, включете следните редове в конфигурационния файл:
yaml
web_server:
port: 80
Повече информация за уеб сървъра може да бъде намерена в документацията на ESPHome.
Промени
По подразбиране устройството извлича данни всяка минута, а вътрешният LED е осветен по време на предаване.
Само ограничен брой OBIS кодове са дефинирани в конфигурационния yaml файл. Силно се препоръчва да модифицирате списъка със сензори, за да съответства на измервателния уред.
Въпреки че OBIS кодовете са стандартизирани, измервателните уреди могат да предават различен брой кодове. За да установите поддържаните кодове за вашия измервателен уред, активирайте DEBUG
логването за компонента IEC62056-21 и анализирайте изхода на логовете.
Диагностика и проблеми IEC62056-21
Този раздел е само за измервателни уреди IEC62056-21 (не SML).
След като фърмуерът бъде флашнат, устройството ще се опита да чете данни от измервателен уред след приблизително 15 секунди. Ако предаването се провали, ще опита отново два пъти на всеки 15 секунди.
Можете да настроите тези параметри, като конфигурирате съответните токени. Консултирайте се с документацията на IEC62056-21 компонент за повече подробности.
Препоръчително е да смените нивото на логване по подразбиране от DEBUG
на INFO
, след като устройството е потвърдено, че работи правилно.
По-долу са изброени често срещани проблеми и съответните им решения.
TIP
Уверете се, че пробата е здраво прикрепена към измервателния уред, като стрелката на пробата е насочена нагоре.
Няма предаване от измервателния уред
log
[E][iec62056.component:268]: No transmission from meter.
Това може да означава:
- Най-често интерфейсът не е прикрепен към измервателен уред.
- Интерфейсът не е правилно подравнен с оптичния интерфейс на измервателния уред.
- Измервателният уред не е съвместим.
Уверете се, че оптичният интерфейс е позициониран паралелно на предната повърхност на корпуса. Ако устройството работи, когато е прикрепено към измервателния уред без корпуса, но не работи след като е поставено в корпуса, това може да е проблемът. В такъв случай, може също да обмислите увеличаване на двете дупки в корпуса.
Не всички сензори получиха данни
log
[E][iec62056.component:644]: Not all sensors received data from the meter. The first one: OBIS '1-0:72.7.0'. Verify sensor is defined with valid OBIS code.
Това може да означава два проблема:
- Измервателният уред не поддържа OBIS кода, който сте конфигурирали в yaml файла. Просто премахнете сензора със специфичния OBIS код от конфигурацията.
- Може да има печатна грешка или неправилна дефиниция на OBIS кода за сензора в конфигурационния файл. Проверете кода отново.
Измервателният уред предава данни автоматично, но устройството не получава нищо
Това показва, че измервателният уред поддържа режим D на IEC62056-21. В този режим, измервателният уред автоматично предава данни на всеки няколко секунди без необходимост от специфично запитване. Уверете се, че серийният порт е конфигуриран да съответства на формата на предаване на измервателния уред, обикновено настроен на 9600 7E1 или 2400 7E1 в повечето случаи.
yaml
# 9600bps for mode D
uart:
rx_pin: GPIO21
tx_pin: GPIO22
baud_rate: 9600
data_bits: 7
parity: EVEN
stop_bits: 1
Освен това, режим D трябва да бъде ръчно активиран чрез задаване на mode_d=True
в конфигурацията на платформата.
yaml
# Активиране на режим D
iec62056:
mode_d: True
Грешки при проверка на контролната сума
log
[E][iec62056.component:504]: BCC проверката не успя. Очаквано 0x6b, получено 0x14
Тази грешка предполага проблеми с предаването.
Обикновено скоростта на предаване е прекалено висока. Намаляването на максималната скорост на предаване трябва да помогне.
yaml
iec62056:
baud_rate_max : 4800
Получена идентификация на електромера, но без предаване
log
[D][iec62056.component:174]: Идентификация на електромера: '/XXX6\2YYYYYYY'
[D][iec62056.component:252]: Електромерът показва режим E, който не се поддържа. Опит за режим C. Това ще работи за електромери, които поддържат и двата режима E и C.
[E][iec62056.component:268]: Няма предаване от електромера.
Стрингът за идентификация на електромера е успешно получен, но няма предаване на данни. Освен това, в лога се показва съобщение, че "Електромерът показва режим E."
Електромерът работи изключително в режим E, който PiggyMeter не поддържа. В резултат на това, софтуерът се опитва да превключи електромера в режим C, но този опит не успява.
Ако електромерът поддържа и двата режима E и C, системата трябва да функционира правилно.