ESPHome IEC 62056-21 Komponents
IEC 62056-21 ir starptautisks standarts protokolam datu apmaiņai ar komunālo pakalpojumu skaitītājiem. Galvenokārt elektrībai, bet arī ūdenim, siltumam un citiem skaitītājiem. Iepriekš tas bija pazīstams kā IEC 61107.
Komponents iec62056
ļauj nolasīt datus no jebkura saderīga skaitītāja. Tas prasa sērijas portu un ārēju optisko interfeisu. Datu apmaiņa notiek, izmantojot infrasarkano optisko kanālu. Saderīgi skaitītāji ir aprīkoti ar raksturīgu apaļu metāla plāksni ar diviem optoelementiem iekšpusē. Protokolu varētu izmantot ar citiem transporta slāņiem, piemēram, strāvas cilpu, bet komponents tika pārbaudīts tikai ar optisko interfeisu.
Tas atbalsta 4 IEC 62056-21 režīmus: A, B, C un D. Režīms E netiek atbalstīts.
Komponents neatbalsta programmēšanu. Skaitītāja konfigurācijas parametru iestatīšanai ir nepieciešama slepena parole, kas padara to neiespējamu parastiem lietotājiem.
Ir arī citi viedie skaitītāju standarti, kas izmanto to pašu optisko interfeisu. Lai gan tiem ir dažas kopīgas koncepcijas, tie nav savietojami.
Instalēšana
Pievienojiet šādu kodu ESPHome YAML konfigurācijas failam, lai atsauktos uz ārējo komponentu.
yaml
external_components:
# IEC62056 komponents
- source: github://aquaticus/esphome-iec62056
Darbības teorija
Komponents darbojas 2 galvenajos režīmos:
- Divvirzienu komunikācija ar skaitītāju. Šajā režīmā skaitītājs sūta datus tikai pēc pieprasījuma. Tas prasa IR uztvērēju un raidītāju. Tas ir režīms A, B un C saskaņā ar IEC 62056-21.
- Vienvirziena komunikācija, kur skaitītājs laiku pa laikam sūta datus zondei. Tas prasa tikai IR uztvērēju. IEC 62056-21 terminoloģijā tas ir režīms D.
Režīmi A, B, C
Komponents pirmo reizi nolasa datus 15 sekundes pēc palaišanas. Vispirms tas nosūta identifikācijas pieprasījumu ar 300 bps. Skaitītājs atgriež maksimālo pārraides ātrumu, ko tas var apstrādāt. Pēc tam sērijas porta pārraides ātrums tiek mainīts uz vērtību, ko nodrošina skaitītājs vai konfigurēts ar opciju baud_rate_max
. Skaitītājs pārraida datu reģistrus ar saistītajiem OBIS kodiem.
Ja pārraide ir neizdevusies (nepareiza kontrolsummas vai nederīgs formāts), komponents mēģinās lasīt datus vēlreiz, bet šoreiz izmantojot lēnāku pārraides ātrumu. Ar katru atkārtojumu ātrums tiek samazināts. Atkārtojumu un aizkavējumu skaitu var konfigurēt.
Ja skaitītājs darbojas ar baterijām, var tikt piemērota īpaša pamodināšanas secība. Tas notiek tikai tad, ja battery_meter
ir iestatīts uz True
.
D režīms
Skaitītājiem, kas darbojas D režīmā, nepieciešams tikai IR uztvērējs, jo pārraide uz skaitītāju nav atbalstīta. Šajā režīmā skaitītājs sūta datus ik pēc dažām sekundēm bez jebkāda pieprasījuma. Jums vajadzētu konfigurēt seriālo portu, lai tas atbilstu skaitītāja pārraides formātam. Atšķirībā no A, B un C režīmiem, kas tiek noteikti automātiski, D režīms ir jāiespējo manuāli, iestatot mode_d=True
platformas konfigurācijā.
E režīms
Šis režīms nav atbalstīts. E režīms izmanto bināro kodējumu pār HDLC saiti.
Komponents mēģina izmantot C režīmu skaitītājiem, kas ziņo par E režīmu. Tam vajadzētu darboties, ja skaitītājs atbalsta gan E, gan C režīmus. Skaitītājiem, kas atbalsta tikai E režīmu, nolasīšana nav iespējama.
OBIS kodi
OBIS (Objektu Identifikācijas Sistēma) kods identificē dažādus nolasījumus no skaitītāja. Kods sastāv no līdz 6 grupu apakšidentifikatoriem. Kods ir formatēts šādi: A-B:C.D.E*F
, kur:
A
- vide: 0=abstrakti objekti, 1=elektrība, 6=siltums, 7=gāze, 8=ūdensB
- kanāls, 0=nav pieejams kanālsC
- fiziskā vērtība, piemēram, strāva, spriegums, temperatūra.D
- mērījuma veids,E
- tarifs, 0=kopā, 1=tarifs #1, 2=tarifs #2 un tā tālākF
- norēķinu periods
A
, B
un F
var tikt izlaisti. Kodos var izmantot heksadecimālos ciparus, piemēram, kods 15.8.0
var tikt attēlots kā F.8.0
.
Kodi ir standartizēti, bet ierīces sūta atšķirīgu kodu skaitu. Lai iegūtu sarakstu ar kodiem, ko atbalsta jūsu skaitītājs, ieslēdziet DEBUG
žurnālu iec62056
komponentam un novērojiet žurnāla izvadi. Parauga izvade:
log
[10:50:12][D][iec62056.component:416]: Data: '1-0:15.8.1(00000009999.567*kWh)'
[10:50:12][D][iec62056.component:416]: Data: '1-0:15.8.2(00000000000.000*kWh)'
[10:50:12][D][iec62056.component:416]: Data: '1-0:15.8.3(00000000000.000*kWh)'
[10:50:12][D][iec62056.component:416]: Data: '1-0:15.8.4(00000000000.000*kWh)'
TIP
Sensora OBIS kodam ir jāsakrīt tieši ar to, kas tiek pārraidīts no skaitītāja. Tas ir tas, kas atrodas pirms pirmās iekavas (
.
Ja OBIS kods ir tikai divi cipari, konfigurācijas failā jāizmanto pēdiņas; piemēram, "1.2"
nevis tikai 1.2
.
Lai iegūtu elektrisko skaitītāju OBIS kodu sarakstu, varat apmeklēt:
- https://www.promotic.eu/en/pmdoc/Subsystems/Comm/PmDrivers/IEC62056_OBIS.htm
- https://onemeter.com/docs/device/obis/#index
Aparatūra
Lai sazinātos ar skaitītāju, jums jāpievieno optiskais interfeiss pie sērijas porta. Interfeiss sastāv no infrasarkanās LED un fototransistora. Turklāt ierīcei jābūt aprīkotai ar gredzena magnētu, lai to noturētu saskaņā ar skaitītāju.
Ja skaitītājs darbojas vienvirziena režīmā D, nepieciešams tikai IR fototransistors.
Zonde
Standarts nosaka maksimālos zondes izmērus, ko var pievienot skaitītājam. Tai jābūt aprīkotai ar magnētu, jo tas ir vienīgais veids, kā noturēt zondi stabilā pozīcijā.
Konfigurācija
Lai redzētu skaitītāja datus Home Assistant, jums jādefinē sensors vai teksta sensors ar atbilstošo OBIS kodu. Ņemiet vērā, ka skaitītāji atbalsta dažādus OBIS kodu komplektus. Pēc noklusējuma komponents nedefinē nekādus sensorus.
Sērijas ports
Komponents prasa UART autobusu. Sērijas portam vairumā gadījumu jābūt konfigurētam kā 7E1. Kad mode_d=True
, baud likme jāiestata uz vērtību, ko atbalsta skaitītājs. Parasti 2400 vai 9600 bps. Citos režīmos (mode_d=False
) pārraides ātrums tiek sarunāts ar skaitītāju. baud_rate
tiek ignorēts un var būt jebkura vērtība.
yaml
# Example UART configuration entry
uart:
rx_pin: GPIO21
tx_pin: GPIO22
baud_rate: 9600
data_bits: 7
parity: EVEN
stop_bits: 1
WARNING
ESP8266 gadījumā ļoti ieteicams izmantot aparatūras UART. Programmatūras UART nevar apstrādāt pārraides ātrāk par 4800 bps.
Jums var būt nepieciešams atspējot žurnālu veidošanu, ja optiskā zonde ir pievienota sērijas portam, ko izmanto žurnāla komponentam.
yaml
# Iestatiet baud_rate uz 0, lai atspējotu žurnālu veidošanu caur UART.
logger:
baud_rate: 0
Platforma
Lai izmantotu komponentu, jums konfigurācijas failā jādefinē iec62056
platformas sadaļa. Tā sastāv no pamata iestatījumiem.
Konfigurācijas mainīgie
- update_interval (Pēc izvēles, Time): Intervāls datu nolasīšanai no skaitītāja. Noklusējums ir
15min
.never
atspējo atjauninājumus. Šajā gadījumā jāizmanto slēdzis, lai aktivizētu nolasīšanu. Lai iegūtu nepārtrauktus nolasījumus, izmantojiet mazu vērtību, piemēram, 1s. - baud_rate_max (Pēc izvēles, int): Ierobežo maksimālo pārraides ātrumu līdz norādītajai vērtībai. Pēc noklusējuma tas ir iestatīts uz
9600
, jo tas nodrošina stabilu savienojumu. Lai to atspējotu, iestatiet to uz0
. Tādā veidā jūs varat izmantot maksimālo iespējamo pārraides ātrumu19200
, ja skaitītājs to atbalsta. ESP8266 gadījumā izmantojiet programmatūras UART, kas iestatīts uz4800
vai zemāku. - receive_timeout (Pēc izvēles, Time): Maksimālais laiks, ko komponents gaida datus no skaitītāja pirms pārraides kļūdas ziņošanas. Noklusējums ir
3s
. - battery_meter (Pēc izvēles, boolean): Iestatiet uz true, ja skaitītājs ir darbināms ar baterijām. Tādā veidā tiks izmantota īpaša ieslēgšanas secība.
- retry_delay (Pēc izvēles, Time): Gadījumā, ja pārraide neizdodas, laiks, kas jāgaida pirms pārraides atkārtošanas. Noklusējums ir
15s
. - retry_counter_max (Pēc izvēles, int): Gadījumā, ja pārraide neizdodas, maksimālais atkārtojumu skaits. Noklusējums ir
2
. - uart_id (Pēc izvēles, ID: Manuāli norādiet UART komponenta ID, ja vēlaties izmantot vairākus UART autobusus.
- mode_d (Pēc izvēles, boolean): Iestatiet uz
True
, ja skaitītājs sūta datus ik pēc dažām sekundēm. Tas piespiež komponentu darboties D režīmā. Šajā režīmā dati nekad netiek pārraidīti uz skaitītāju. Ja iestatīts, jebkuri citi iestatījumi, izņemotreceive_timeout
, tiek ignorēti. Neaizmirstiet iestatīt UART pārraides ātrumu, ko izmanto skaitītājs. Ja neesat pārliecināts, izmēģiniet2400 7E1
vai9600 7E1
.
WARNING
Ar baterijām darbināmi skaitītāji parasti ierobežo nolasījumu skaitu, lai taupītu enerģiju, piemēram, līdz 4 nolasījumiem dienā. Ja skaitītājs neuzliek ierobežojumu, bieža nolasīšana var ievērojami samazināt baterijas darbības laiku.
Sensors
Sensors ziņo par pirmo vērtību iekavās no ieraksta. Šādiem datiem
log
1-0:15.6.0(00000006000.385*kW)(2000-01-01 20:10:30)
sensora vērtība ir 6000.385
. Lai iegūtu otro vērtību (šajā piemērā datumu/laiku), izmantojiet Teksta Sensoru.
Sensors atbalsta tikai decimālvērtības. Ja ierakstā ir dati citā formātā, jums jāizmanto Teksta Sensors un, ja nepieciešams, lambda, lai tos pārvērstu par skaitli.
yaml
# Example sensor configuration entries
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
- platform: iec62056
name: Instantaneous current in phase L1
obis: 1-0:31.7.0
unit_of_measurement: A
accuracy_decimals: 2
device_class: current
state_class: measurement
- platform: iec62056
name: Instantaneous voltage in phase L1
obis: 1-0:32.7.0
unit_of_measurement: V
accuracy_decimals: 1
device_class: voltage
state_class: measurement
- platform: iec62056
name: Absolute active instantaneous power
obis: 1-0:15.7.0
unit_of_measurement: kW
accuracy_decimals: 3
device_class: energy
state_class: measurement
Konfigurācijas mainīgie
- obis (Nepieciešams): OBIS kods.
- Visas citas iespējas no Sensora.
Teksta Sensors
Teksta sensors nodrošina nolasītos datus kā tekstu. Atšķirībā no Sensora, jūs varat izvēlēties, kura nolasījuma daļa tiek ziņota, un pat nosūtīt visu datu ierakstu atpakaļ uz Home Assistant.
yaml
# Sample text sensor configuration
# Data record:
# 1-0:15.6.0(00000006000.385*kW)(2000-01-01 20:10:30)
text_sensor:
- platform: iec62056
obis: 1-0:15.6.0
group: 2 # "2000-01-01 20:10:30"
name: Date time
- platform: iec62056
obis: 1-0:15.6.0
group: 1 # "00000006000.385"
name: Value
- platform: iec62056
obis: 1-0:15.6.0
group: 0 # "1-0:15.6.0(00000006000.385*kW)(2000-01-01 20:10:30)"
name: The entire record
Konfigurācijas mainīgie
- obis (Nepieciešams): OBIS kods. Jūs varat definēt vairākus teksta sensorus ar vienu un to pašu OBIS, bet atšķirīgu grupu.
- group (Pēc izvēles, int): Vērtību grupa,
0
,1
vai2
. Noklusējums ir1
. Ja iestatīts uz0
, tiek ziņots viss datu ieraksts, ieskaitot OBIS kodu.1
ziņo par pirmo vērtību,2
par otro. - Visas citas iespējas ir no Teksta Sensora.
Datu konvertēšana
Ja skaitītājs ziņo datus kā nedecimālu vērtību, jūs varat tos automātiski konvertēt, izmantojot veidnes sensoru un lambda. Pieņemsim, ka skaitītājs sūta ierakstu, piemēram, šādu ar heksadecimāli kodētiem datiem:
text
0-0:96.8.0*255(ABCDEF00)
Vispirms izveidojiet veidnes sensoru, kas publicēs datus kā decimālvērtību.
yaml
sensor:
- platform: template
id: hex_to_dec_sensor
name: "Converted hexadecimal number"
Tagad izveidojiet teksta sensoru, kas saņems datus kā virkni, konvertēs tos uz decimālu un publicēs.
yaml
text_sensor:
- platform: iec62056
id: hex_sensor
obis: 0-0:96.8.0*255
name: Hex content
internal: True
on_value:
lambda: |-
std::string hex_str = id(hex_sensor).state;
uint32_t dec=std::stoul(hex_str, nullptr, 16);
ESP_LOGI("iec62056.component", "Converted HEX '%s' to %u decimal", hex_str.c_str(), dec);
id(hex_to_dec_sensor).publish_state((float)dec);
Katru reizi, kad teksta sensors saņem jaunu vērtību, tas to pārvērš decimālskaitlī un publicē, izmantojot sensoru ar id hex_to_dec_sensor
. internal
karogs neļauj sensoram būt redzamam Home Assistant. Žurnālā jums vajadzētu redzēt:
log
[I][iec62056.component:127]: Konvertēts HEX 'ABCDEF00' uz 2882400000 decimālskaitli
Tos pašus rezultātus var iegūt, izmantojot Home Assistant lambdas. Šajā scenārijā teksta sensors publicē heksadecimālo vērtību, un Home Assistant veidnes sensors veic konvertēšanu.
Slēdzis
Slēdzis nodrošina iespēju pieprasīt nolasījumu pēc pieprasījuma. Kad stāvoklis tiek mainīts no OFF
uz ON
, komponents uzsāk datu pārraidi no skaitītāja. Jūs varat izmantot slēdzi automatizācijā.
Var izmantot konfigurācijas mainīgos no Slēdzis.
yaml
# Sample switch configuration
switch:
- platform: iec62056
name: 'Readout Trigger'
Jūs nevarat izraisīt nolasījumu D režīmā.
Binārais sensors
Iestata uz ON
, kad sākas pārraide uz skaitītāju. OFF
, kad pārraide ir pabeigta.
Jūs varat izmantot visus konfigurācijas mainīgos no Binārais Sensors.
yaml
# Sample automation to turn LED on when data read from a meter
switch:
- platform: gpio
pin: GPIO2
name: Internal LED
id: led_switch
internal: True
binary_sensor:
- platform: iec62056
id: meter_status
name: Meter Connection Status
on_press:
then:
- switch.turn_on: led_switch
on_release:
then:
- switch.turn_off: led_switch
Problēmu novēršana
- Pārliecinieties, ka zonde ir pareizi izlīdzināta ar optiskajiem elementiem uz skaitītāja.
- Skaitītāji parasti tiek uzstādīti ne pārāk tīrās vietās. Jums var būt nepieciešams laiku pa laikam noņemt putekļus no optiskā interfeisa.
- Ja rodas pārraides un BCC kontrolsummas kļūdas, samaziniet pārraides ātrumu, izmantojot
baud_rate_max
iestatījumu. - Ja jūsu ierīce apstrādā vairākus sensorus, kas daudz laika pavada atjaunināšanas ciklā, jums var būt nepieciešams palielināt seriālā porta bufera izmēru. Īpaši, ja pamanāt pārraides problēmas, kad papildu sensori ir iespējoti, bet ne tad, kad tie ir atspējoti.