Skip to content

Componente ESPHome IEC 62056-21

IEC 62056-21 è uno standard internazionale per un protocollo di scambio dati con contatori di utenza. Principalmente per l'elettricità, ma anche per acqua, termico e altri contatori. Era precedentemente noto come IEC 61107.

Il componente iec62056 ti permette di leggere i dati da qualsiasi contatore compatibile. Richiede una porta seriale e un'interfaccia ottica esterna. Lo scambio di dati utilizza un canale ottico a infrarossi. I contatori compatibili sono dotati di una caratteristica piastra metallica rotonda con due opto-elementi all'interno. Il protocollo potrebbe essere utilizzato con altri strati di trasporto, ad es. loop di corrente, ma il componente è stato testato solo con l'interfaccia ottica.

Supporta 4 modalità di IEC 62056-21: A, B, C e D. La modalità E non è supportata.

Il componente non supporta la programmazione. L'impostazione dei parametri di configurazione del contatore richiede una password segreta che rende impossibile l'uso da parte degli utenti ordinari.

L'interfaccia su un contatore. Anello metallico per un magnete e due elementi ottici all'interno.

Esistono altri standard per contatori intelligenti che utilizzano la stessa interfaccia ottica. Sebbene condividano alcuni concetti comuni, non sono compatibili.

Installazione

Aggiungi il seguente codice al file di configurazione YAML di ESPHome per fare riferimento al componente esterno.

yaml
external_components:
    # Componente IEC62056
    - source: github://aquaticus/esphome-iec62056

Teoria del funzionamento

Il componente opera in 2 modalità principali:

  • Comunicazione bidirezionale con un contatore. In questa modalità, un contatore invia dati solo quando richiesto. Richiede un ricevitore e trasmettitore IR. Questa è la modalità A, B e C secondo IEC 62056-21.
  • Comunicazione unidirezionale, dove un contatore invia dati a una sonda di tanto in tanto. Richiede solo un ricevitore IR. Nella terminologia IEC 62056-21 è la modalità D.

Modalità A, B, C

Il componente legge i dati per la prima volta 15 secondi dopo l'avvio. Prima, invia una richiesta di identificazione a 300 bps. Il contatore restituisce la velocità massima di baud che può gestire. Successivamente, la velocità di baud della porta seriale viene cambiata al valore fornito dal contatore o configurato tramite l'opzione baud_rate_max. Il contatore trasmette i registri dei dati con i codici OBIS associati.

Se la trasmissione non riesce (checksum errato o formato non valido), il componente tenterà di leggere nuovamente i dati, ma questa volta utilizzando una velocità di trasmissione più lenta. Per ogni tentativo, la velocità viene ridotta. Il numero di tentativi e i ritardi possono essere configurati.

Se il contatore è alimentato a batteria, può essere applicata una sequenza di risveglio speciale. Questo avviene solo quando battery_meter è impostato su True.

Modalità D

Per i contatori che operano in modalità D, è necessario solo un ricevitore IR poiché la trasmissione a un contatore non è supportata. In questa modalità, il contatore invia dati ogni pochi secondi senza alcuna richiesta. È necessario configurare la porta seriale per adattarsi al formato di trasmissione del contatore. A differenza delle modalità A, B e C che vengono rilevate automaticamente, la Modalità D deve essere abilitata manualmente impostando mode_d=True nella configurazione della piattaforma.

Modalità E

Questa modalità non è supportata. La Modalità E utilizza la codifica binaria su collegamento HDLC.

Il componente tenta di utilizzare la modalità C per i contatori che riportano la modalità E. Questo dovrebbe funzionare se il contatore supporta entrambe le modalità E e C. Per i contatori che supportano solo la modalità E, la lettura non è possibile.

Codici OBIS

Il codice OBIS (Object Identification System) identifica le diverse letture di un contatore. Il codice è composto da un massimo di 6 sottogruppi identificativi. Il codice è formattato in questo modo: A-B:C.D.E*F, dove:

  • A - mezzo: 0=oggetti astratti, 1=elettricità, 6=calore, 7=gas, 8=acqua
  • B - canale, 0=nessun canale disponibile
  • C - valore fisico, ad esempio corrente, tensione, temperatura.
  • D - tipo di misurazione,
  • E - tariffa, 0=totale, 1=tariffa #1, 2=tariffa #2 e così via
  • F - periodo di fatturazione

A, B e F possono essere omessi. I codici possono utilizzare cifre esadecimali, ad esempio, il codice 15.8.0 potrebbe essere rappresentato come F.8.0.

I codici sono standardizzati, ma i dispositivi inviano un numero diverso di codici. Per ottenere un elenco dei codici supportati dal tuo contatore, abilita il log DEBUG per il componente iec62056 e osserva l'output del log. Esempio di output:

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

Il codice OBIS del sensore deve corrispondere esattamente a ciò che viene trasmesso da un contatore. Questa è la parte prima della prima parentesi (.

Se un codice OBIS è composto da solo due cifre, dovresti usare le virgolette nel file di configurazione; ad esempio, "1.2" invece di solo 1.2.

Per un elenco di codici OBIS per contatori elettrici, puoi visitare:

Hardware

Per comunicare con un contatore, devi collegare un'interfaccia ottica alla porta seriale. L'interfaccia è composta da un LED a infrarossi e un fototransistor. Inoltre, il dispositivo deve essere dotato di un magnete ad anello per mantenerlo allineato con il contatore.

Se il contatore opera in modalità unidirezionale D, è richiesto solo un fototransistor IR.

Sonda

Lo standard definisce le dimensioni massime della sonda che può essere collegata a un contatore. Deve essere dotata di un magnete poiché è l'unico modo per mantenere la sonda in una posizione stabile.

Dimensioni della sonda ottica

Configurazione

Per visualizzare i dati del contatore in Home Assistant, devi definire un sensore o un sensore di testo con il codice OBIS appropriato. Nota che i contatori supportano diversi set di codici OBIS. Di default, il componente non definisce alcun sensore.

Porta seriale

Il componente richiede bus UART. La seriale deve essere configurata come 7E1 nella maggior parte dei casi. Quando mode_d=True, il baud rate deve essere impostato su un valore supportato dal contatore. Solitamente 2400 o 9600 bps. Per altre modalità (mode_d=False), la velocità di trasmissione viene negoziata con un contatore. baud_rate viene ignorato e può essere qualsiasi valore.

yaml
# Example UART configuration entry
uart:
    rx_pin: GPIO21
    tx_pin: GPIO22
    baud_rate: 9600
    data_bits: 7
    parity: EVEN
    stop_bits: 1

WARNING

Per ESP8266 è altamente raccomandato utilizzare UART hardware. UART software non può gestire trasmissioni più veloci di 4800 bps.

Potrebbe essere necessario disabilitare il logging se la sonda ottica è collegata alla porta seriale utilizzata dal componente logger.

yaml
# Imposta baud_rate a 0 per disabilitare il logging tramite UART.
logger:
    baud_rate: 0

Piattaforma

Per utilizzare il componente, devi definire la sezione della piattaforma iec62056 nel file di configurazione. Consiste in impostazioni di base.

yaml
# Example platform configuration entry for bidirectional communication
iec62056:
  update_interval: 60s
  baud_rate_max: 9600
  battery_meter: False
yaml
# Esempio di configurazione della piattaforma per comunicazione unidirezionale
iec62056:
  mode_d: True

Variabili di configurazione

  • update_interval (Opzionale, Time): L'intervallo per leggere i dati da un contatore. Il valore predefinito è 15min. never disabilita gli aggiornamenti. In tal caso, dovrebbe essere utilizzato un interruttore per attivare la lettura. Per ottenere letture continue, utilizzare un valore piccolo come 1s.
  • baud_rate_max (Opzionale, int): Limita la velocità massima di trasmissione al valore specificato. Per impostazione predefinita, è impostato su 9600 poiché fornisce una connessione stabile. Per disabilitarlo, impostarlo su 0. In questo modo è possibile utilizzare la velocità massima di baud di 19200 se il contatore lo supporta. Per ESP8266 utilizzare l'UART software impostato su 4800 o inferiore.
  • receive_timeout (Opzionale, Time): Tempo massimo che il componente attende i dati da un contatore prima di segnalare un errore di trasmissione. Il valore predefinito è 3s.
  • battery_meter (Opzionale, booleano): Impostare su true se un contatore è alimentato a batteria. In questo modo verrà utilizzata una sequenza di accensione speciale.
  • retry_delay (Opzionale, Time): In caso di fallimento della trasmissione, tempo di attesa prima di riprovare la trasmissione. Il valore predefinito è 15s.
  • retry_counter_max (Opzionale, int): In caso di fallimento della trasmissione, il numero massimo di tentativi. Il valore predefinito è 2.
  • uart_id (Opzionale, ID: Specificare manualmente l'ID del Componente UART se si desidera utilizzare più bus UART.
  • mode_d (Opzionale, booleano): Impostare su True se un contatore invia dati ogni pochi secondi. Questo forza il componente a operare in modalità D. In questa modalità i dati non vengono mai trasmessi a un contatore. Se impostato, qualsiasi altra impostazione eccetto receive_timeout viene ignorata. Non dimenticare di impostare la velocità di baud UART che il contatore sta utilizzando. Se non sei sicuro prova 2400 7E1 o 9600 7E1.

WARNING

I misuratori alimentati a batteria in genere limitano il numero di letture per preservare l'energia, ad esempio a 4 letture al giorno. Se un misuratore non impone il limite, letture frequenti possono ridurre significativamente la durata della batteria.

Sensore

Il sensore riporta il primo valore tra parentesi dal record. Per i seguenti dati

log
1-0:15.6.0(00000006000.385*kW)(2000-01-01 20:10:30)

il valore del sensore è 6000.385. Per ottenere il secondo valore (data/ora in questo esempio) usa un Sensore di Testo.

Il sensore supporta solo valori decimali. Se il record contiene dati in qualsiasi altro formato, devi usare un Sensore di Testo e opzionalmente lambda per convertirlo in un numero.

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

Variabili di configurazione

  • obis (Obbligatorio): Codice OBIS.
  • Tutte le altre opzioni da Sensore.

Sensore di Testo

Il sensore di testo fornisce i dati di lettura come testo. A differenza del Sensore, puoi selezionare quale parte della lettura viene riportata e persino inviare l'intero record di dati a 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

Variabili di configurazione

  • obis (Obbligatorio): Codice OBIS. Puoi definire più sensori di testo con lo stesso OBIS ma un gruppo diverso.
  • group (Opzionale, int): Gruppo di valori, 0, 1 o 2. Predefinito a 1. Se impostato a 0, viene riportato l'intero record di dati incluso il codice OBIS. 1 riporta il primo valore, 2 il secondo.
  • Tutte le altre opzioni sono da Sensore di Testo.

Conversione dei dati

Se un misuratore riporta dati come valore non decimale, puoi convertirlo automaticamente usando un sensore template e lambda. Supponiamo che il misuratore invii un record come il seguente con dati codificati in esadecimale:

text
0-0:96.8.0*255(ABCDEF00)

Per prima cosa, crea un sensore template che pubblicherà i dati come valore decimale.

yaml
sensor:
  - platform: template
    id: hex_to_dec_sensor
    name: "Converted hexadecimal number"

Ora crea un sensore di testo che riceverà i dati come stringa, li convertirà in decimale e li pubblicherà.

Ogni volta che il sensore di testo riceve un nuovo valore, lo converte in un decimale e lo pubblica utilizzando il sensore con id hex_to_dec_sensor. Il flag internal impedisce al sensore di essere visibile in Home Assistant. Nel log dovresti vedere:

Gli stessi risultati possono essere ottenuti utilizzando le lambda di Home Assistant. In questo scenario, il sensore di testo pubblica il valore esadecimale e il sensore di template di Home Assistant effettua la conversione.

Interruttore

L'interruttore fornisce la possibilità di attivare la lettura su richiesta. Quando lo stato viene cambiato da OFF a ON, il componente avvia la trasmissione dei dati da un contatore. Puoi utilizzare l'interruttore nell'automazione.

Le variabili di configurazione da Interruttore possono essere utilizzate.

Non puoi attivare la lettura in modalità D.

Sensore binario

Impostato su ON quando inizia la trasmissione a un contatore. OFF quando la trasmissione è terminata.

Puoi utilizzare tutte le variabili di configurazione da Sensore Binario.

Risoluzione dei problemi

  • Assicurati che la sonda sia correttamente allineata con gli elementi ottici sul contatore.
  • I contatori sono solitamente installati in aree non molto pulite. Potrebbe essere necessario rimuovere la polvere dall'interfaccia ottica di tanto in tanto.
  • Se incontri errori di trasmissione e checksum BCC, riduci la velocità in baud utilizzando l'impostazione baud_rate_max.
  • Se il tuo dispositivo gestisce più sensori che impiegano molto tempo nel ciclo di aggiornamento, potrebbe essere necessario aumentare la dimensione del buffer della porta seriale. Soprattutto se noti problemi di trasmissione quando i sensori aggiuntivi sono abilitati ma non quando sono disabilitati.

Vedi anche