Skip to content

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.

Interfeiss uz skaitītāja. Metāla gredzens magnētam un divi optiskie elementi iekšpusē.

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=ūdens
  • B - kanāls, 0=nav pieejams kanāls
  • C - 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āk
  • F - 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:

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ā.

Optiskās zondes izmēri

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 uz 0. Tādā veidā jūs varat izmantot maksimālo iespējamo pārraides ātrumu 19200, ja skaitītājs to atbalsta. ESP8266 gadījumā izmantojiet programmatūras UART, kas iestatīts uz 4800 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ņemot receive_timeout, tiek ignorēti. Neaizmirstiet iestatīt UART pārraides ātrumu, ko izmanto skaitītājs. Ja neesat pārliecināts, izmēģiniet 2400 7E1 vai 9600 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 vai 2. Noklusējums ir 1. Ja iestatīts uz 0, 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.

Skatīt arī