Skip to content

ESPHome IEC 62056-21 Component

IEC 62056-21 είναι ένα διεθνές πρότυπο για ένα πρωτόκολλο ανταλλαγής δεδομένων με μετρητές κοινής ωφέλειας. Κυρίως για ηλεκτρική ενέργεια αλλά και για νερό, θερμική και άλλους μετρητές. Προηγουμένως ήταν γνωστό ως IEC 61107.

Το στοιχείο iec62056 σας επιτρέπει να διαβάσετε δεδομένα από οποιονδήποτε συμβατό μετρητή. Απαιτεί μια σειριακή θύρα και μια εξωτερική οπτική διεπαφή. Η ανταλλαγή δεδομένων χρησιμοποιεί ένα υπέρυθρο οπτικό κανάλι. Οι συμβατοί μετρητές είναι εξοπλισμένοι με μια χαρακτηριστική στρογγυλή μεταλλική πλάκα με δύο οπτοστοιχεία μέσα. Το πρωτόκολλο θα μπορούσε να χρησιμοποιηθεί με άλλα επίπεδα μεταφοράς, π.χ. βρόχος ρεύματος αλλά το στοιχείο δοκιμάστηκε μόνο με την οπτική διεπαφή.

Υποστηρίζει 4 λειτουργίες του IEC 62056-21: A, B, C και D. Η λειτουργία E δεν υποστηρίζεται.

Το στοιχείο δεν υποστηρίζει προγραμματισμό. Η ρύθμιση των παραμέτρων διαμόρφωσης του μετρητή απαιτεί έναν μυστικό κωδικό πρόσβασης που καθιστά αδύνατη τη χρήση από απλούς χρήστες.

Η διεπαφή σε έναν μετρητή. Μεταλλικός δακτύλιος για μαγνήτη και δύο οπτικά
στοιχεία μέσα.

Υπάρχουν άλλα πρότυπα έξυπνων μετρητών που χρησιμοποιούν την ίδια οπτική διεπαφή. Αν και μοιράζονται κάποιες κοινές έννοιες, δεν είναι συμβατά.

Εγκατάσταση

Προσθέστε τον ακόλουθο κώδικα στο αρχείο διαμόρφωσης YAML του ESPHome για να αναφερθείτε σε εξωτερικό στοιχείο.

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

Θεωρία λειτουργίας

Το στοιχείο λειτουργεί σε 2 κύριες λειτουργίες:

  • Διμερής επικοινωνία με έναν μετρητή. Σε αυτή τη λειτουργία, ένας μετρητής στέλνει δεδομένα μόνο όταν ζητηθεί. Απαιτεί έναν δέκτη και πομπό IR. Αυτή είναι η λειτουργία A, B και C σύμφωνα με το IEC 62056-21.
  • Μονομερής επικοινωνία, όπου ένας μετρητής στέλνει δεδομένα σε έναν ανιχνευτή από καιρό σε καιρό. Απαιτεί μόνο έναν δέκτη IR. Στην ορολογία του IEC 62056-21 είναι η λειτουργία D.

Λειτουργίες A, B, C

Το στοιχείο διαβάζει δεδομένα για πρώτη φορά 15 δευτερόλεπτα μετά την εκκίνηση. Πρώτα, στέλνει ένα αίτημα αναγνώρισης στα 300 bps. Ο μετρητής επιστρέφει τη μέγιστη ταχύτητα baud που μπορεί να χειριστεί. Στη συνέχεια, η ταχύτητα baud της σειριακής θύρας αλλάζει στην τιμή που παρέχεται από τον μετρητή ή ρυθμίζεται από την επιλογή baud_rate_max. Ο μετρητής μεταδίδει δεδομένα καταχωρητών με τους σχετικούς κωδικούς OBIS.

Εάν η μετάδοση έχει αποτύχει (κακή αθροιστική τιμή ή μη έγκυρη μορφή), το εξάρτημα θα προσπαθήσει να διαβάσει τα δεδομένα ξανά, αλλά αυτή τη φορά χρησιμοποιώντας χαμηλότερη ταχύτητα μετάδοσης. Για κάθε επανάληψη, η ταχύτητα μειώνεται. Ο αριθμός των επαναλήψεων και οι καθυστερήσεις μπορούν να ρυθμιστούν.

Εάν ο μετρητής λειτουργεί με μπαταρία, μπορεί να εφαρμοστεί μια ειδική ακολουθία αφύπνισης. Αυτό συμβαίνει μόνο όταν το battery_meter έχει οριστεί σε True.

Λειτουργία D

Για μετρητές που λειτουργούν στη λειτουργία D, χρειάζεστε μόνο έναν δέκτη IR καθώς η μετάδοση σε έναν μετρητή δεν υποστηρίζεται. Σε αυτή τη λειτουργία, ο μετρητής στέλνει δεδομένα κάθε λίγα δευτερόλεπτα χωρίς καμία αίτηση. Πρέπει να ρυθμίσετε τη σειριακή θύρα ώστε να ταιριάζει με τη μορφή μετάδοσης του μετρητή. Σε αντίθεση με τις λειτουργίες A, B και C που ανιχνεύονται αυτόματα, η Λειτουργία D πρέπει να ενεργοποιηθεί χειροκίνητα ορίζοντας mode_d=True στη διαμόρφωση της πλατφόρμας.

Λειτουργία E

Αυτή η λειτουργία δεν υποστηρίζεται. Η Λειτουργία E χρησιμοποιεί δυαδική κωδικοποίηση μέσω συνδέσμου HDLC.

Το εξάρτημα προσπαθεί να χρησιμοποιήσει τη λειτουργία C για μετρητές που αναφέρουν τη λειτουργία E. Αυτό θα πρέπει να λειτουργήσει εάν ο μετρητής υποστηρίζει και τις λειτουργίες E και C. Για μετρητές που υποστηρίζουν μόνο τη λειτουργία E, η ανάγνωση δεν είναι δυνατή.

Κωδικοί OBIS

Ο κωδικός OBIS (Object Identification System) αναγνωρίζει τις διάφορες μετρήσεις από έναν μετρητή. Ο κωδικός αποτελείται από έως και 6 υπο-αναγνωριστικά ομάδας. Ο κωδικός είναι μορφοποιημένος ως εξής: A-B:C.D.E*F, όπου:

  • A - μέσο: 0=αφηρημένα αντικείμενα, 1=ηλεκτρισμός, 6=θερμότητα, 7=αέριο, 8=νερό
  • B - κανάλι, 0=κανένα διαθέσιμο κανάλι
  • C - φυσική τιμή, για παράδειγμα ρεύμα, τάση, θερμοκρασία.
  • D - τύπος μέτρησης,
  • E - τιμολόγιο, 0=σύνολο, 1=τιμολόγιο #1, 2=τιμολόγιο #2 κ.ο.κ.
  • F - περίοδος χρέωσης

Τα A, B και F μπορεί να παραλειφθούν. Οι κωδικοί μπορεί να χρησιμοποιούν δεκαεξαδικούς αριθμούς, για παράδειγμα, ο κωδικός 15.8.0 θα μπορούσε να αναπαρασταθεί ως F.8.0.

Οι κωδικοί είναι τυποποιημένοι, αλλά οι συσκευές στέλνουν διαφορετικό αριθμό κωδικών. Για να λάβετε μια λίστα με τους κωδικούς που υποστηρίζονται από τον μετρητή σας, ενεργοποιήστε το DEBUG log για το εξάρτημα iec62056 και παρατηρήστε την έξοδο του log. Δείγμα εξόδου:

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

Ο κωδικός OBIS του αισθητήρα πρέπει να ταιριάζει ακριβώς με αυτό που μεταδίδεται από έναν μετρητή. Αυτό είναι το μέρος πριν από την πρώτη παρένθεση (.

Εάν ένας κωδικός OBIS είναι μόνο δύο ψηφία, θα πρέπει να χρησιμοποιήσετε εισαγωγικά στο αρχείο ρυθμίσεων. Για παράδειγμα, "1.2" αντί για απλά 1.2.

Για μια λίστα με κωδικούς OBIS για ηλεκτρικούς μετρητές, μπορείτε να επισκεφθείτε:

Υλικό

Για να επικοινωνήσετε με έναν μετρητή, πρέπει να συνδέσετε μια οπτική διεπαφή στη σειριακή θύρα. Η διεπαφή αποτελείται από ένα υπέρυθρο LED και έναν φωτοτρανζίστορ. Επιπλέον, η συσκευή πρέπει να είναι εξοπλισμένη με έναν μαγνήτη δακτυλίου για να παραμένει ευθυγραμμισμένη με τον μετρητή.

Εάν ο μετρητής λειτουργεί σε μονοκατευθυντική λειτουργία D, απαιτείται μόνο ένας υπέρυθρος φωτοτρανζίστορ.

Ανιχνευτής

Το πρότυπο ορίζει τις μέγιστες διαστάσεις του ανιχνευτή που μπορεί να συνδεθεί σε έναν μετρητή. Πρέπει να είναι εξοπλισμένος με έναν μαγνήτη καθώς είναι ο μόνος τρόπος να παραμένει ο ανιχνευτής σε σταθερή θέση.

Διαστάσεις οπτικού ανιχνευτή

Ρύθμιση

Για να δείτε δεδομένα μετρητή στο Home Assistant, πρέπει να ορίσετε έναν αισθητήρα ή έναν αισθητήρα κειμένου με τον κατάλληλο κωδικό OBIS. Σημειώστε ότι οι μετρητές υποστηρίζουν διαφορετικά σύνολα κωδικών OBIS. Από προεπιλογή, το στοιχείο δεν ορίζει κανέναν αισθητήρα.

Σειριακή θύρα

Το στοιχείο απαιτεί UART bus. Η σειριακή πρέπει να ρυθμιστεί ως 7E1 στις περισσότερες περιπτώσεις. Όταν mode_d=True, ο ρυθμός baud πρέπει να οριστεί σε μια τιμή που υποστηρίζεται από τον μετρητή. Συνήθως 2400 ή 9600 bps. Για άλλες λειτουργίες (mode_d=False), η ταχύτητα μετάδοσης διαπραγματεύεται με έναν μετρητή. Το baud_rate αγνοείται και μπορεί να είναι οποιαδήποτε τιμή.

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 συνιστάται ιδιαίτερα η χρήση υλικού UART. Το λογισμικό UART δεν μπορεί να χειριστεί μεταδόσεις ταχύτερες από 4800 bps.

Ίσως χρειαστεί να απενεργοποιήσετε την καταγραφή αν ο οπτικός ανιχνευτής είναι συνδεδεμένος στη σειριακή θύρα που χρησιμοποιείται από το στοιχείο καταγραφής.

yaml
# Ορίστε το baud_rate σε 0 για να απενεργοποιήσετε την καταγραφή μέσω UART.
logger:
    baud_rate: 0

Πλατφόρμα

Για να χρησιμοποιήσετε το στοιχείο, πρέπει να ορίσετε την ενότητα πλατφόρμας iec62056 στο αρχείο ρυθμίσεων. Αποτελείται από βασικές ρυθμίσεις.

yaml
# Example platform configuration entry for bidirectional communication
iec62056:
  update_interval: 60s
  baud_rate_max: 9600
  battery_meter: False
yaml
# Παράδειγμα διαμόρφωσης πλατφόρμας για μονοκατευθυντική επικοινωνία
iec62056:
  mode_d: True

Μεταβλητές διαμόρφωσης

  • update_interval (Προαιρετικό, Time): Το διάστημα για ανάγνωση δεδομένων από έναν μετρητή. Από προεπιλογή είναι 15min. Το never απενεργοποιεί τις ενημερώσεις. Σε αυτή την περίπτωση, πρέπει να χρησιμοποιηθεί ένας διακόπτης για να ενεργοποιήσει την ανάγνωση. Για συνεχείς αναγνώσεις χρησιμοποιήστε μια μικρή τιμή όπως 1s.
  • baud_rate_max (Προαιρετικό, int): Περιορίζει τη μέγιστη ταχύτητα μετάδοσης στην καθορισμένη τιμή. Από προεπιλογή, είναι ρυθμισμένο σε 9600 καθώς παρέχει σταθερή σύνδεση. Για να το απενεργοποιήσετε, ορίστε το σε 0. Με αυτόν τον τρόπο μπορείτε να χρησιμοποιήσετε τη μέγιστη δυνατή ταχύτητα baud 19200 αν ο μετρητής το υποστηρίζει. Για το ESP8266 χρησιμοποιήστε το λογισμικό UART ρυθμισμένο σε 4800 ή χαμηλότερο.
  • receive_timeout (Προαιρετικό, Time): Μέγιστος χρόνος που το στοιχείο περιμένει δεδομένα από έναν μετρητή πριν αναφέρει σφάλμα μετάδοσης. Από προεπιλογή είναι 3s.
  • battery_meter (Προαιρετικό, boolean): Ορίστε το σε true αν ο μετρητής είναι με μπαταρία. Με αυτόν τον τρόπο θα χρησιμοποιηθεί ειδική ακολουθία ενεργοποίησης.
  • retry_delay (Προαιρετικό, Time): Σε περίπτωση αποτυχίας μετάδοσης, χρόνος αναμονής πριν την επανάληψη της μετάδοσης. Από προεπιλογή είναι 15s.
  • retry_counter_max (Προαιρετικό, int): Σε περίπτωση αποτυχίας μετάδοσης, ο μέγιστος αριθμός επαναλήψεων. Από προεπιλογή είναι 2.
  • uart_id (Προαιρετικό, ID: Καθορίστε χειροκίνητα το ID του Στοιχείου UART αν θέλετε να χρησιμοποιήσετε πολλαπλά UART buses.
  • mode_d (Προαιρετικό, boolean): Ορίστε το σε True αν ο μετρητής στέλνει δεδομένα κάθε λίγα δευτερόλεπτα. Αυτό αναγκάζει το στοιχείο να λειτουργεί σε λειτουργία D. Σε αυτή τη λειτουργία, δεδομένα δεν μεταδίδονται ποτέ σε έναν μετρητή. Αν οριστεί, οποιαδήποτε άλλη ρύθμιση εκτός από το receive_timeout αγνοείται. Μην ξεχάσετε να ορίσετε την ταχύτητα baud του UART που χρησιμοποιεί ο μετρητής. Αν δεν είστε σίγουροι δοκιμάστε 2400 7E1 ή 9600 7E1.

WARNING

Τα μετρητικά όργανα με μπαταρία συνήθως περιορίζουν τον αριθμό των μετρήσεων για να διατηρήσουν την ενέργεια, π.χ. σε 4 μετρήσεις την ημέρα. Αν ένας μετρητής δεν επιβάλλει τον περιορισμό, οι συχνές μετρήσεις μπορεί να μειώσουν σημαντικά τη διάρκεια ζωής της μπαταρίας.

Αισθητήρας

Ο αισθητήρας αναφέρει την πρώτη τιμή μέσα σε αγκύλες από την εγγραφή. Για τα παρακάτω δεδομένα

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

η τιμή του αισθητήρα είναι 6000.385. Για να λάβετε τη δεύτερη τιμή (ημερομηνία/ώρα σε αυτό το παράδειγμα) χρησιμοποιήστε έναν Αισθητήρα Κειμένου.

Ο αισθητήρας υποστηρίζει μόνο δεκαδικές τιμές. Αν η εγγραφή περιέχει δεδομένα σε οποιαδήποτε άλλη μορφή, πρέπει να χρησιμοποιήσετε έναν Αισθητήρα Κειμένου και προαιρετικά lambda για να τα μετατρέψετε σε αριθμό.

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

Μεταβλητές διαμόρφωσης

  • obis (Απαιτείται): Κωδικός OBIS.
  • Όλες οι άλλες επιλογές από τον Αισθητήρα.

Αισθητήρας Κειμένου

Ο αισθητήρας κειμένου παρέχει δεδομένα ανάγνωσης ως κείμενο. Σε αντίθεση με τον Αισθητήρα, μπορείτε να επιλέξετε ποιο μέρος της ανάγνωσης αναφέρεται και ακόμη και να στείλετε ολόκληρη την εγγραφή δεδομένων πίσω στο 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

Μεταβλητές διαμόρφωσης

  • obis (Απαιτείται): Κωδικός OBIS. Μπορείτε να ορίσετε πολλούς αισθητήρες κειμένου με το ίδιο OBIS αλλά διαφορετική ομάδα.
  • group (Προαιρετικό, int): Ομάδα τιμών, 0, 1, ή 2. Προεπιλογή στο 1. Αν οριστεί στο 0, αναφέρεται ολόκληρη η εγγραφή δεδομένων συμπεριλαμβανομένου του κωδικού OBIS. Το 1 αναφέρει την πρώτη τιμή, το 2 τη δεύτερη.
  • Όλες οι άλλες επιλογές είναι από τον Αισθητήρα Κειμένου.

Μετατροπή δεδομένων

Αν ένας μετρητής αναφέρει δεδομένα ως μη δεκαδική τιμή, μπορείτε να τα μετατρέψετε αυτόματα χρησιμοποιώντας έναν αισθητήρα προτύπου και lambda. Ας υποθέσουμε ότι ο μετρητής στέλνει μια εγγραφή όπως η παρακάτω με δεδομένα κωδικοποιημένα σε δεκαεξαδικό:

text
0-0:96.8.0*255(ABCDEF00)

Πρώτα, δημιουργήστε έναν αισθητήρα προτύπου που θα δημοσιεύει δεδομένα ως δεκαδική τιμή.

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

Τώρα δημιουργήστε έναν αισθητήρα κειμένου που θα λαμβάνει δεδομένα ως συμβολοσειρά, θα τα μετατρέπει σε δεκαδικό και θα τα δημοσιεύει.

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);

Κάθε φορά που ο αισθητήρας κειμένου λαμβάνει μια νέα τιμή, τη μετατρέπει σε δεκαδικό και τη δημοσιεύει χρησιμοποιώντας τον αισθητήρα με το id hex_to_dec_sensor. Η σημαία internal αποτρέπει τον αισθητήρα από το να είναι ορατός στο Home Assistant. Στο αρχείο καταγραφής θα πρέπει να δείτε:

log
[I][iec62056.component:127]: Converted HEX 'ABCDEF00' to 2882400000 decimal

Τα ίδια αποτελέσματα μπορούν να επιτευχθούν χρησιμοποιώντας lambdas του Home Assistant. Σε αυτό το σενάριο, ο αισθητήρας κειμένου δημοσιεύει την δεκαεξαδική τιμή και ο αισθητήρας προτύπου του Home Assistant κάνει τη μετατροπή.

Διακόπτης

Ο διακόπτης παρέχει τη δυνατότητα ενεργοποίησης ανάγνωσης κατόπιν αιτήματος. Όταν η κατάσταση αλλάζει από OFF σε ON, το στοιχείο ξεκινά τη μετάδοση δεδομένων από έναν μετρητή. Μπορείτε να χρησιμοποιήσετε τον διακόπτη σε αυτοματισμούς.

Οι μεταβλητές διαμόρφωσης από τον Διακόπτη μπορούν να χρησιμοποιηθούν.

yaml
# Sample switch configuration
switch:
  - platform: iec62056
    name: 'Readout Trigger'

Δεν μπορείτε να ενεργοποιήσετε ανάγνωση στη λειτουργία D.

Δυαδικός αισθητήρας

Ορίζεται σε ON όταν ξεκινά η μετάδοση σε έναν μετρητή. OFF όταν η μετάδοση ολοκληρώνεται.

Μπορείτε να χρησιμοποιήσετε όλες τις μεταβλητές διαμόρφωσης από τον Δυαδικό Αισθητήρα.

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

Αντιμετώπιση προβλημάτων

  • Βεβαιωθείτε ότι ο ανιχνευτής είναι σωστά ευθυγραμμισμένος με τα οπτικά στοιχεία στον μετρητή.
  • Οι μετρητές συνήθως εγκαθίστανται σε όχι πολύ καθαρές περιοχές. Ίσως χρειαστεί να αφαιρέσετε τη σκόνη από τη οπτική διεπαφή από καιρό σε καιρό.
  • Εάν αντιμετωπίσετε σφάλματα μετάδοσης και ελέγχου BCC, μειώστε τον ρυθμό baud χρησιμοποιώντας τη ρύθμιση baud_rate_max.
  • Εάν η συσκευή σας χειρίζεται πολλούς αισθητήρες που ξοδεύουν πολύ χρόνο στον βρόχο ενημέρωσης, ίσως χρειαστεί να αυξήσετε το μέγεθος του buffer της σειριακής θύρας. Ειδικά αν παρατηρήσετε προβλήματα μετάδοσης όταν ενεργοποιούνται επιπλέον αισθητήρες αλλά όχι όταν είναι απενεργοποιημένοι.

Δείτε επίσης