Skip to content

PiggyMeter

PiggyMeter ansluten till elmätare

Denna artikel visar hur du bygger en enhet för att fjärravläsa data från en elmätare (eller någon enhet med ett kompatibelt gränssnitt).

Den använder allmänt tillgängliga komponenter, öppen källkod och är kompatibel med populär hemautomationsprogramvara, Home Assistant.

INFO

Ett kit för att montera en fungerande enhet finns att köpa på Tindie: PiggyMeter KIT.

Funktioner

  • Stöder IEC62056-21-baserade protokoll
  • Stöder passivt SML-protokoll med ESPHome inbyggd komponent
  • Flera mätare: energi, vatten, värme och mer
  • Använder öppen källkod ESPHome
  • Trådlös kommunikation via Wi-Fi
  • Integreras med Home Assistant
  • Valfri webbserver
  • Billig hårdvara ESP32-C3 eller ESP32-S2
  • Konstruktion för 3D-utskrift tillgänglig

Den stöder mätare som är kompatibla med IEC62056-21-standarden som fungerar i lägen A, B, C, D (men inte E). För detaljer se IEC 62056-21 komponent.

Observera att det finns många variationer av protokollet. Även om mätaren kan använda samma optiska gränssnitt kan dataformatet vara annorlunda.

Dessutom stöder den mätare som använder SML (Smart Message Language) protokoll med ESPHome SML komponent.

WARNING

DLMS, M-Bus och ANSI C12.18/19-standarder stöds inte av programvaran.

Hur kontrollerar man om mätaren stöds?

IEC 62056-21-termen används för flera protokoll (med samma hårdvarulager men olika dataenkodning). Enheten stöder mätare som tillhandahåller ASCII-kodad data, något i stil med detta:

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)

Mätaren måste vara kompatibel med Internationell Standard IEC 62056-21:2002.

Karakteristisk metallring och optiskt gränssnitt i mitten.

För SML-protokollet, leta efter SML-logotypen på mätaren eller kontrollera manualen. ESPHome-komponenten stöder endast passivt läge, den skickar inga förfrågningar till mätaren. I det läget skickar mätaren data var några sekunder.

Mätare rapporterade att fungera med PiggyMeter

Listan är skapad baserat på användarrapporter. Ingen garanti för att den är korrekt.

INFO

Känn dig fri att skicka ett e-postmeddelande till info@aquaticus.info om du känner till en mätare som fungerar med PiggyMeter men inte är listad ovan.

Alternativ programvara

PiggyMeter-hårdvara kan fungera med många olika mätare som använder optiskt gränssnitt. Dock stöder programvaran för närvarande endast en standard, vilket praktiskt begränsar antalet stödda mätare.

Du kan försöka använda alternativ programvara som kan lägga till stöd för olika mätare. Det är viktigt att notera att det inte finns någon garanti för att det kommer att fungera sömlöst med PiggyMeter. För support, vänligen kontakta den ursprungliga författaren.

Materiallista

DelBeskrivning
CPUWemos C3 eller S2 Mini https://www.wemos.cc/en/latest/
Optiskt gränssnittPiggyMeter PCB https://www.tindie.com/products/32082/
2×stiftlist 1×42,54 mm raster; plastdelen måste vara 8,5 mm hög
Ringmagnet⌀30/⌀15×2mm
Hölje3D-utskrivet hölje https://github.com/aquaticus/piggymeter_case
Bricka3D-utskriven bricka https://github.com/aquaticus/piggymeter_case
Lock3D-utskrivet baklock https://github.com/aquaticus/piggymeter_case

CPU-kort

CPU

Du behöver ett kort med Espressif-chip installerat och kompatibelt Wemos/Lolin pinout. Den avgörande faktorn är placeringen av 4 stift: GND, VCC, TX och RX.

Storleken på PCB är också kritisk. Det 3D-utskrivna fodralet passar endast kort (eller deras kloner) som listas nedan:

  • Lolin/Wemos S2 mini
  • Lolin/Wemos C3 mini

I teorin kan du använda vilket annat CPU-kort som helst med kompatibel pinout, noterbart ESP32 och ESP8266 D1 mini. Men i så fall måste du designa ditt eget fodral och ändra lite i konfigurationsfilerna (korttyp och seriella portstift).

Optiskt gränssnitt

Optiskt gränssnitt

En mätare använder ett optiskt gränssnitt kompatibelt med IEC62056-21 standard, som kommunicerar med en sond via en infraröd diod och en fototransistor.

Gränssnittet är anslutet till en av de seriella portarna på CPU-kortet. Självklart behöver du också VCC och GND.

Optiskt gränssnitt och CPU
kort

Löd 2 stifthuvuden. Du måste använda stifthuvud med 8,5 mm höjd. Designen av fodralet rymmer denna höjd, vilket säkerställer en korrekt passform. Om höjden överstiger denna dimension kan det vara svårt att stänga locket.

INFO

Du kan köpa ett monterat gränssnitt på Tindie. Buy on Tindie

Fodral

Ladda ner filer för 3D-skrivare från https://github.com/aquaticus/piggymeter_case. Använd V5-versionen för den senaste designen.

Fodral

Fodralet består av tre komponenter:

  • huvudfodralet,
  • en bricka,
  • och ett lock.

Det finns tre distinkta STL-filer tillgängliga för varje komponent, eller alternativt en enda 3fm-fil som innehåller alla tre elementen.

Höljet uppfyller kraven i IEC62056-21 standarden Optisk Prober>.

INFO

Höljet har en liten spärr. För att stänga eller öppna det behöver du använda lite kraft.

Rekommenderade 3D-utskriftsinställningar

  • Material: PLA
  • Lager: 0,2 mm
  • Ingen stödstruktur

3d print

Montering

Assembly

Ordna komponenterna i höljet i denna ordning:

  1. Magnet
  2. Bricka
  3. Optiskt gränssnitt
  4. CPU-kort
  5. Lock

Programmering för IEC62056-21 mätare

Börja med att installera ESPHome.

Baserat på ditt CPU-kort, välj lämplig konfigurationsfil. Gör dessutom manuella justeringar av vissa parametrar, såsom WiFi-lösenordet.

Hämta konfigurationsfiler

Klona git-repositoriet med konfigurationsfiler:

bash
git clone https://github.com/aquaticus/piggymeter_esphome_yaml

Skapa secrets.yaml-fil

Skapa en secrets.yaml fil i katalogen där konfigurationsfilerna finns. Denna fil kommer att innehålla WiFi-nätverkets namn och dess motsvarande lösenord.

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

Ändra projektkonfiguration

Konfigurationen är förinställd med standarddatapunkter för en elmätare.

Känn dig fri att justera listan, särskilt om din mätare skiljer sig från elmätartypen. Se IEC 62056-21-komponenten för mer information.

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

Bygg och flasha firmware

bash
esphome run piggymeter-s2-iec62056-21.yaml

Kommandot ovan flashar firmware och visar monitorutgång. Som standard läser gränssnittet data från en mätare varje minut.

TIP

För ESP32-S2-kort måste du trycka på BOOT-knappen och sedan RESET-knappen på PCB för att gå in i programmeringsläge. Dessutom kan du se ett felmeddelande efter flashning -- ignorera det bara.

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)

Programmering för SML-mätare

De första stegen är identiska med de för IEC62056-21 mätare.

Efter att ha klonat repositoriet och skapat secrets.yaml filen, använd konfigurationsfiler för SML-mätare.

bash
esphome run piggymeter-s2-sml.yaml

Det är troligt att du behöver justera konfigurationsfilen för att matcha de datapunkter som överförs av mätaren. Det är också värt att verifiera baudhastigheten och databitarna för den seriella porten.

Home Assistant

Enheten bör automatiskt upptäckas av Home Assistant. Om inte, kan du lägga till den manuellt genom att klicka på Lägg till integration och välja ESPHome-integrationen.

PiggyMeter exponerar tre grupper av objekt:

Avläsningstrigger

Denna trigger tvingar PiggyMeter att läsa data från en mätare utanför schemat.

Mätaranslutningsstatus

Ansluten status indikerar att gränssnittet utbyter data med mätaren.

Anslutningsstatus

Sensorer

Detta är en lista över sensorer definierade i konfigurationsfilen.

Sensorer

Självständigt läge

PiggyMeter kan fungera oberoende av Home Assistant och erbjuder möjligheten att aktivera en webbserver. Denna server visar dataavläsningar direkt i en webbläsare och erbjuder ett enkelt REST API.

För att aktivera webbservern, inkludera följande rader i konfigurationsfilen:

yaml
web_server:
  port: 80

Mer information om webbservern finns i ESPHome-dokumentationen.

Modifieringar

Som standard hämtar enheten data varje minut, och den interna LED-lampan lyser under överföringen.

Endast ett begränsat antal OBIS-koder är definierade i konfigurations-yaml-filen. Det rekommenderas starkt att ändra listan över sensorer för att matcha en mätare.

Även om OBIS-koder är standardiserade kan mätare överföra olika antal koder. För att fastställa de stödda koderna för din mätare, aktivera DEBUG-loggning för IEC62056-21-komponenten och analysera loggutdata.

Diagnostik och problem IEC62056-21

Detta avsnitt är endast för IEC62056-21-mätare (inte SML).

Efter att ha flashat firmware kommer enheten att försöka läsa data från en mätare efter cirka 15 sekunder. Om överföringen misslyckas kommer den att försöka igen två gånger var 15:e sekund.

Du kan justera dessa parametrar genom att konfigurera lämpliga tokens. Konsultera IEC62056-21-komponenten dokumentation för mer information.

Det är tillrådligt att byta standardloggnivån från DEBUG till INFO när enheten har bekräftats fungera korrekt.

Nedan följer vanliga problem och deras respektive lösningar.

TIP

Se till att sonden är ordentligt fäst vid mätaren, med pilen på sonden riktad uppåt.

Ingen överföring från mätaren

log
[E][iec62056.component:268]: No transmission from meter.

Detta kan indikera:

  • Vanligast är att gränssnittet inte är anslutet till en mätare.
  • Gränssnittet är inte korrekt justerat med den optiska gränssnittet på en mätare.
  • Mätaren är inte kompatibel.

Se till att det optiska gränssnittet är placerat parallellt med framsidan av höljet. Om enheten fungerar när den är ansluten till mätaren utan höljet, men inte fungerar efter att ha satts in i höljet, kan detta vara problemet. I ett sådant fall kan du också överväga att förstora de två hålen i höljet.

Inte alla sensorer mottog data

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.

Detta kan indikera två problem:

  • Mätaren stöder inte OBIS-koden du konfigurerade i yaml filen. Ta helt enkelt bort sensorn med specifik OBIS-kod från konfigurationen.
  • Det kan finnas ett skrivfel eller felaktig definition av OBIS-koden för sensorn i konfigurationsfilen. Dubbelkolla koden.

Mätaren sänder data automatiskt men enheten tar inte emot något

Detta indikerar att mätaren stöder läge D av IEC62056-21. I detta läge sänder mätaren autonomt data var några sekunder utan att kräva en specifik begäran. Se till att den seriella porten är konfigurerad för att stämma överens med mätarens överföringsformat, vanligtvis inställd på 9600 7E1 eller 2400 7E1 i de flesta fall.

yaml
# 9600bps for mode D
uart:
    rx_pin: GPIO21
    tx_pin: GPIO22
    baud_rate: 9600
    data_bits: 7
    parity: EVEN
    stop_bits: 1

Dessutom måste läge D aktiveras manuellt genom att ställa in mode_d=True i plattformskonfigurationen.

yaml
# Aktivera läge D
iec62056:
  mode_d: True

Kontrollsummefel

log
[E][iec62056.component:504]: BCC-verifiering misslyckades. Förväntade 0x6b, fick 0x14

Detta fel tyder på överföringsproblem.

Vanligtvis är överföringshastigheten för hög. Att sänka den maximala baudhastigheten bör hjälpa.

yaml
iec62056:
  baud_rate_max : 4800

Mottagen mätaridentifiering men ingen överföring

log
[D][iec62056.component:174]: Mätaridentifiering: '/XXX6\2YYYYYYY'
[D][iec62056.component:252]: Mätaren indikerar läge E, vilket inte stöds. Försöker med läge C. Detta kommer att fungera för mätare som stöder både läge E och C.
[E][iec62056.component:268]: Ingen överföring från mätaren.

Mätaridentifieringssträngen tas emot framgångsrikt, men det finns ingen dataöverföring. Dessutom visar loggen ett meddelande som säger, "Mätaren indikerar läge E."

Mätaren fungerar uteslutande i läge E, vilket PiggyMeter inte stöder. Därför försöker programvaran att växla mätaren till läge C, men detta försök misslyckas.

Om en mätare stöder både läge E och C bör systemet fungera korrekt.