PiggyMeter
Šiame straipsnyje parodoma, kaip sukurti įrenginį, skirtą nuotoliniu būdu nuskaityti duomenis iš elektros skaitiklio (ar bet kurio įrenginio su suderinama sąsaja).
Jis naudoja plačiai prieinamus komponentus, atvirojo kodo programinę įrangą ir yra suderinamas su populiaria namų automatizavimo programine įranga, Home Assistant.
INFO
Rinkinys, skirtas funkcionaliam įrenginiui surinkti, yra parduodamas Tindie: PiggyMeter KIT.
Funkcijos
- Palaiko IEC62056-21 pagrįstus protokolus
- Palaiko pasyvų SML protokolą naudojant ESPHome natūralų komponentą
- Daugybė skaitiklių: energijos, vandens, šilumos ir daugiau
- Naudoja atvirojo kodo ESPHome
- Belaidis ryšys per Wi-Fi
- Integruojasi su Home Assistant
- Pasirinktinai interneto serveris
- Pigus aparatinis ESP32-C3 arba ESP32-S2
- Korpuso dizainas prieinamas 3D spausdinimui
Jis palaiko skaitiklius, suderinamus su IEC62056-21 standartu, kuris veikia A, B, C, D režimais (bet ne E). Daugiau informacijos rasite IEC 62056-21 komponentas.
Atkreipkite dėmesį, kad yra daug protokolo variacijų. Nors skaitiklis gali naudoti tą pačią optinę sąsają, duomenų rėmelio formatas gali skirtis.
Be to, jis palaiko skaitiklius, kurie naudoja SML (Smart Message Language) protokolą naudojant ESPHome SML komponentą.
WARNING
DLMS, M-Bus ir ANSI C12.18/19 standartai nėra palaikomi programinės įrangos.
Kaip patikrinti, ar skaitiklis yra palaikomas?
IEC 62056-21 terminas naudojamas keliems protokolams (su ta pačia aparatinės įrangos sluoksniu, bet skirtingu duomenų kodavimu). Įrenginys palaiko skaitiklius, kurie teikia ASCII koduotus duomenis, kažką panašaus į tai:
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)
Skaitiklis turi būti suderinamas su Tarptautiniu standartu IEC 62056-21:2002.
Dėl SML protokolo ieškokite SML logotipo ant skaitiklio arba patikrinkite vadovą. ESPHome komponentas palaiko tik pasyvų režimą, jis nesiunčia jokių užklausų skaitikliui. Tame režime skaitiklis siunčia duomenis kas kelias sekundes.
Skaitikliai, kurie, kaip pranešama, veikia su PiggyMeter
Sąrašas sudarytas remiantis vartotojų pranešimais. Nėra garantijos, kad jis yra tikslus.
- Apator Norax 3
- Apator Norax 1
- Apator Norax 1D per SML komponentą
- Pafal 12EA5
- Iskra MT372
- Iskra ME162
- Kastrup 382
- Landis+Gyr E350 ZMF110
- ZPA ZE110.D0
INFO
Jei žinote skaitiklį, kuris veikia su PiggyMeter, bet nėra išvardytas aukščiau, nedvejodami siųskite el. laišką adresu info@aquaticus.info.
Alternatyvi programinė įranga
PiggyMeter aparatinė įranga gali veikti su daugeliu skirtingų skaitiklių, kurie naudoja optinę sąsają. Tačiau programinė įranga šiuo metu palaiko tik vieną standartą, praktiškai apribodama palaikomų skaitiklių asortimentą.
Galite pabandyti naudoti alternatyvią programinę įrangą, kuri gali pridėti palaikymą skirtingiems skaitikliams. Svarbu pažymėti, kad nėra garantijos, jog ji veiks sklandžiai su PiggyMeter. Dėl palaikymo kreipkitės į originalų autorių.
- DLMS/COSEM Esphome modulis https://github.com/viric/esphome-ziv
Medžiagų sąrašas
Dalys | Aprašymas |
---|---|
CPU | Wemos C3 arba S2 Mini https://www.wemos.cc/en/latest/ |
Optinė sąsaja | PiggyMeter PCB https://www.tindie.com/products/32082/ |
2×pin header 1×4 | 2.54mm rastras; plastikinė dalis turi būti 8.5 mm aukščio |
Žiedinis magnetas | ⌀30/⌀15×2mm |
Dėklas | 3D spausdintas dėklas https://github.com/aquaticus/piggymeter_case |
Tarpinė | 3D spausdinta tarpinė https://github.com/aquaticus/piggymeter_case |
Dangtis | 3D spausdintas galinis dangtis https://github.com/aquaticus/piggymeter_case |
CPU plokštė
Jums reikia plokštės su Espressif lustu ir suderinamu Wemos/Lolin išdėstymu. Pagrindinis veiksnys yra 4 kontaktų vieta: GND
, VCC
, TX
ir RX
.
PCB dydis taip pat yra kritinis. 3D spausdintas dėklas tinka tik žemiau išvardytoms plokštėms (ar jų klonams):
- Lolin/Wemos S2 mini
- Lolin/Wemos C3 mini
Teoriškai galite naudoti bet kurią kitą CPU plokštę su suderinamu išdėstymu, ypač ESP32 ir ESP8266 D1 mini. Tačiau tokiu atveju turite sukurti savo dėklą ir šiek tiek pakeisti konfigūracijos failus (plokštės tipą ir nuosekliųjų prievadų kontaktus).
Optinė sąsaja
Skaitiklis naudoja optinę sąsają, suderinamą su IEC62056-21 standartu, bendraujančią su zonde per infraraudonųjų spindulių diodą ir fototransistorių.
Sąsaja prijungiama prie vieno iš nuosekliųjų prievadų CPU plokštėje. Žinoma, jums taip pat reikia VCC ir GND.
Lituokite 2 kontaktų jungtis. Turite naudoti 8.5 mm aukščio kontaktų jungtį. Dėklo dizainas atitinka šį aukštį, užtikrinant tinkamą pritaikymą. Jei aukštis viršija šį matmenį, gali kilti problemų uždarant dangtelį.
Dėklas
Atsisiųskite failus 3D spausdintuvui iš https://github.com/aquaticus/piggymeter_case. Naudokite V5 versiją naujausiam dizainui.
Dėklą sudaro trys komponentai:
- pagrindinis dėklas,
- tarpinė,
- ir dangtelis.
Yra trys atskiri STL failai kiekvienam komponentui arba alternatyviai vienas 3fm failas, apimantis visus tris elementus.
Dėklas atitinka IEC62056-21 standarto optinės zondos reikalavimus.
INFO
Dėklas turi mažą užraktą. Norint jį uždaryti ar atidaryti, reikia šiek tiek jėgos.
Rekomenduojami 3D spausdinimo nustatymai
- Medžiaga: PLA
- Sluoksnis: 0,2 mm
- Be atramų
Surinkimas
Išdėstykite komponentus dėkle šia tvarka:
- Magnetas
- Poveržlė
- Optinė sąsaja
- CPU plokštė
- Dangtis
INFO
Žiūrėkite surinkimą Youtube https://youtu.be/fM2LyJJWQHA?si=dyY4r7zMSMfbwQtm
Programavimas IEC62056-21 skaitikliams
Pradėkite įdiegdami ESPHome.
Remdamiesi savo CPU plokšte, pasirinkite tinkamą konfigūracijos failą. Be to, rankiniu būdu pakeiskite tam tikrus parametrus, tokius kaip WiFi slaptažodis.
Gaukite konfigūracijos failus
Klonuokite git saugyklą su konfigūracijos failais:
bash
git clone https://github.com/aquaticus/piggymeter_esphome_yaml
Sukurkite secrets.yaml failą
Sukurkite secrets.yaml
failą kataloge, kuriame yra konfigūracijos failai. Šiame faile bus saugomas WiFi tinklo pavadinimas ir atitinkamas slaptažodis.
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
Pakeiskite projekto konfigūraciją
Konfigūracija iš anksto nustatyta su standartiniais duomenų taškais elektros skaitikliui.
Drąsiai koreguokite sąrašą, ypač jei jūsų skaitiklis skiriasi nuo elektros skaitiklio tipo. Daugiau informacijos rasite IEC 62056-21 komponentas.
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
Sukurkite ir įrašykite programinę įrangą
bash
esphome run piggymeter-s2-iec62056-21.yaml
Aukščiau pateikta komanda įrašo programinę įrangą ir rodo monitoriaus išvestį. Pagal numatytuosius nustatymus sąsaja skaito duomenis iš skaitiklio kas 1 minutę.
TIP
ESP32-S2 plokštei turite paspausti BOOT mygtuką, o tada RESET mygtuką ant PCB, kad įeitumėte į programavimo režimą. Be to, po įrašymo galite matyti klaidos pranešimą -- tiesiog ignoruokite jį.
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)
Programavimas SML skaitikliams
Pirmieji žingsniai yra identiški tiems, kurie skirti IEC62056-21 skaitikliams.
Po saugyklos klonavimo ir secrets.yaml
failo sukūrimo, naudokite konfigūracijos failus SML skaitikliams.
bash
esphome run piggymeter-s2-sml.yaml
Labiausiai tikėtina, kad reikės pritaikyti konfigūracijos failą, kad jis atitiktų skaitiklio perduodamus duomenų taškus. Taip pat verta patikrinti nuoseklaus prievado duomenų perdavimo spartą ir duomenų bitus.
Home Assistant
Įrenginys turėtų būti automatiškai aptiktas Home Assistant. Jei ne, galite jį pridėti rankiniu būdu spustelėdami Pridėti integraciją ir pasirinkdami ESPHome integraciją.
PiggyMeter pateikia tris elementų grupes:
Nuskaitymo paleidiklis
Šis paleidiklis priverčia PiggyMeter nuskaityti duomenis iš skaitiklio ne pagal tvarkaraštį.
Skaitiklio ryšio būsena
Connected būsena rodo, kad sąsaja keičiasi duomenimis su skaitikliu.
Jutikliai
Tai yra jutiklių, apibrėžtų konfigūracijos faile, sąrašas.
Savarankiškas režimas
PiggyMeter gali veikti nepriklausomai nuo Home Assistant, suteikdamas galimybę aktyvuoti žiniatinklio serverį. Šis serveris tiesiogiai naršyklėje rodo nuskaitytus duomenis ir siūlo paprastą REST API.
Norėdami aktyvuoti žiniatinklio serverį, įtraukite šias eilutes į konfigūracijos failą:
yaml
web_server:
port: 80
Daugiau informacijos apie žiniatinklio serverį galite rasti ESPHome dokumentacijoje.
Modifikacijos
Pagal numatytuosius nustatymus įrenginys renka duomenis kas minutę, o vidinis LED šviečia perdavimo metu.
Konfigūracijos yaml faile apibrėžtas tik ribotas OBIS kodų skaičius. Labai rekomenduojama modifikuoti jutiklių sąrašą, kad jis atitiktų skaitiklį.
Nors OBIS kodai yra standartizuoti, skaitikliai gali perduoti skirtingą kodų skaičių. Norėdami nustatyti, kokius kodus palaiko jūsų skaitiklis, įjunkite DEBUG
žurnalavimą IEC62056-21 komponentui ir analizuokite žurnalo išvestį.
Diagnostika ir problemos IEC62056-21
Šis skyrius skirtas tik IEC62056-21 skaitikliams (ne SML).
Po programinės įrangos įrašymo įrenginys bandys nuskaityti duomenis iš skaitiklio maždaug po 15 sekundžių. Jei perdavimas nepavyks, jis bandys dar du kartus kas 15 sekundžių.
Galite koreguoti šiuos parametrus, sukonfigūruodami atitinkamus žetonus. Daugiau informacijos rasite IEC62056-21 komponento dokumentacijoje.
Rekomenduojama pakeisti numatytąjį žurnalo lygį iš DEBUG
į INFO
, kai įrenginys veikia tinkamai.
Žemiau pateikiamos dažniausios problemos ir jų sprendimai.
TIP
Įsitikinkite, kad zondas yra tvirtai pritvirtintas prie skaitiklio, nukreipiant zondo rodyklę į viršų.
Nėra perdavimo iš skaitiklio
log
[E][iec62056.component:268]: No transmission from meter.
Tai gali reikšti:
- Dažniausiai sąsaja nėra prijungta prie skaitiklio.
- Sąsaja nėra tinkamai suderinta su skaitiklio optine sąsaja.
- Skaitiklis nėra suderinamas.
Įsitikinkite, kad optinė sąsaja yra lygiagreti priekinio korpuso paviršiui. Jei įrenginys veikia, kai prijungtas prie skaitiklio be korpuso, bet neveikia po įdėjimo į korpusą, tai gali būti problema. Tokiu atveju taip pat galite apsvarstyti galimybę padidinti dvi skyles korpuse.
Ne visi jutikliai gavo duomenis
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.
Tai gali reikšti dvi problemas:
- Skaitiklis nepalaiko OBIS kodo, kurį sukonfigūravote yaml faile. Tiesiog pašalinkite jutiklį su konkrečiu OBIS kodu iš konfigūracijos.
- Gali būti rašybos klaida arba neteisingas OBIS kodo apibrėžimas jutikliui konfigūracijos faile. Patikrinkite kodą dar kartą.
Skaitiklis automatiškai perduoda duomenis, bet įrenginys nieko negauna
Tai rodo, kad skaitiklis palaiko D režimą IEC62056-21. Šiame režime skaitiklis automatiškai perduoda duomenis kas kelias sekundes, nereikalaudamas konkretaus užklausos. Įsitikinkite, kad nuoseklusis prievadas yra sukonfigūruotas taip, kad atitiktų skaitiklio perdavimo formatą, kuris dažniausiai nustatytas kaip 9600 7E1 arba 2400 7E1 daugeliu atvejų.
yaml
# 9600bps for mode D
uart:
rx_pin: GPIO21
tx_pin: GPIO22
baud_rate: 9600
data_bits: 7
parity: EVEN
stop_bits: 1
Be to, D režimas turi būti aktyvuotas rankiniu būdu, nustatant mode_d=True
platformos konfigūracijoje.
yaml
# Įjungti D režimą
iec62056:
mode_d: True
Kontrolinės sumos klaidos
log
[E][iec62056.component:504]: BCC patikrinimas nepavyko. Tikėtasi 0x6b, gauta 0x14
Ši klaida rodo perdavimo problemas.
Dažniausiai perdavimo greitis yra per didelis. Sumažinus maksimalų baudų greitį turėtų padėti.
yaml
iec62056:
baud_rate_max : 4800
Gautas skaitiklio identifikavimas, bet nėra perdavimo
log
[D][iec62056.component:174]: Skaitiklio identifikavimas: '/XXX6\2YYYYYYY'
[D][iec62056.component:252]: Skaitiklis nurodo E režimą, kuris nepalaikomas. Bandoma C režimas. Tai veiks skaitikliams, palaikantiems tiek E, tiek C režimus.
[E][iec62056.component:268]: Nėra perdavimo iš skaitiklio.
Skaitiklio identifikavimo eilutė sėkmingai gauta, tačiau nėra duomenų perdavimo. Be to, žurnale rodoma žinutė, kad "Skaitiklis nurodo E režimą."
Skaitiklis veikia tik E režimu, kurio PiggyMeter nepalaiko. Dėl to programinė įranga bando perjungti skaitiklį į C režimą, tačiau šis bandymas nepavyksta.
Jei skaitiklis palaiko tiek E, tiek C režimus, sistema turėtų veikti teisingai.