Categories
Betraktelser & Berättelse Linux M2M programming Sensors Techstuff VSCP

Ny smart elmätare från Ellevio

An English version is here.

Ett kretskort (som jag tillverkat för att många frågat efter det) för att koppla upp sig mot smarta mätare finns här.

—————————————————————————————

Så monterades den då den nya elmätaren. Tydligen skall 5.4 miljoner nya mätare ut innan 2025. Jodå, jag har samlat data från dess föregångare (som bara satt monterad här i två år) rätt länge. S0-puls var inte tillgänglig för vanligt folk men den blinkande IR dioden var det. Så effekt och energi har jag alltså loggat. Jodå, jag har en till mätare också, på mitt kontor. Läser S0 och IR där och kan på så sätt skilja på husets totala elförbrukning och kontorets elförbrukning.

Men den nya elmätaren lovade mer. Ett seriell interface för kunder. En HAN port. Japp, definitivt sådant som en sådan som jag går igång på. Några minuter efter att den var installerad var kundinterfacet aktiverat. Bara att gå in i på “mina sidor” och aktivera. Smidigt.

Tyvärr han jag inte gå vidare med att bygga den interface logik som krävs för att kunna läsa ut värden från interfacet då den dan. Fick (otåligt) hålla mig till dagen efter eftersom jag hade annat att göra. Men det var mycket enkelt. En transistor några motstånd och en USB till serie konverter är allt som behövs. Sen kunde en Raspberry Pi läsa informationen som mätaren skickar ut. Man skulle lika gärna kunnat använda en ESP32’a eller en ESP8266, Arduino, eller en pc såklart. Inget konstigt, dyrt eller avancerat.

Den nya mätaren ger ström och spänning och aktiv och reaktiv last på alla faser separat. Plus summerad energi. Ja både in och ut, om man nu är en sådan som har ett vindkraftverk eller solpaneler på tomten. Härligheter för den som gillar data. All data skickas ut var tionde sekund.

Så vad skickar mätaren?

Efter vad jag förstår heter protokollet “P1 Companion Standard” som är baserad på IEC 62056-21 Mode D. Energiföretagen har gett ut en Branschrekommendation för lokalt kundgränssnitt för elmätare som beskriver funktion och protokoll. Man kan gissa att Ellevio inte är de enda som har det här kundinterfacet och protokollet.

Det seriella formatet är okrypterat med hastighet och format 115200,N,8,1. Lite standard. Sänds dock inverterat så det måste man ta hand om.

Kontakten på elmätaren är en RJ12 enligt nedan

Kundgränssnitt på elmätare

Mätaren skickar data på pin 5 när D_Rqst(RTS) är hög. Jag har testat anpassningskretsen nedan med både 5V och 3.3V och båda fungerar utmärkt.

Tittar man på hur gränssnittet på mätaren ser ut så förstår man att både 3.3V och 5V fungerar.

Kundgränssnitt på elmätare

Mätaren ger +5V, max 250mA ut på 5V.

En enkel krets är det enda som behövs för att anpassa det här till en USB TTL serieadapter som jag använt eller till de seriella kanalerna på en Raspberry Pi, Arduino eller annan enhet.

p1 serial interface

Välj 5V för VCC om rx skall anslutas till en 5V ingång (Arduino etc), annars välj 3.3V (ESP32/ESP8266/Raspberry Pi etc). I mitt fall så använder jag en USB till serie adapter som kan hantera TTL nivåer. Kom ihåg att koppla jorden också till den enhet som skall läsa data.

Om din mätare har strömmatning på 5V och om du vill köra VCC=3.3V så koppla inte VCC till strömmatningen på mätaren. Vid VCC=5V kan du välja om du skall strömförsörja lokalt eller externt. Bra är det att inte köra båda på samma gång.

Om du använder en usb till serie adapter som jag och Raspberry Pi så kommer den att bli tillgänglig som /dev/ttyUSB0, /dev/ttyUSB1, etc när den kopplas in. Med programmet Minicom kan du titta på den råa datan. Installera Minicom med

sudo apt install minicom

Vill du kunna öppna porten utan “sudo” så adderar du bara den användare du kör under (oftast “pi”) till dialout i /dev/group

Använd editorn nano eller vim eller din egen favorit.

Kör nu Minicom med

minicom -b115200 -D/dev/ttyUSB0

Addera sudo om du inte gjort ändringen i /dev/group.

Switcharna talar väl för sig själv. Men för säkerhets skull tar vi dom. -b sätter baudraten. -D anger den port som du vill kommunicera på. Du ändrar såklart till den port du använder. Om allt är som det skall skrivs följande ut på skärmen var tionde sekund

I det länkade dokumentet ovan finns en bilaga 3 som talar om vad respektive rad är för typ av data. Enkelt att “parsa”. Man har tänkt till.

För att avsluta Minicom skriver du

ctrl-A Z X 

och väljer “yes” när du får frågan “Leave Minicom?” Bäst att skriva det eftersom sekvensen inte är den första man kommer på.

Mer än så är det inte. Nu är det bara att skriva ett program som läser de här värdena och listar dem i diagram och tabeller. node-red är en utmärkt verktyg att använda för det här. node-red kan läsa från en seriell port direkt eller också kan man skriva en snutt som denna i Python

import serial

sio = serial.Serial(
port='/dev/ttyUSB1',\
baudrate=115200,\
parity=serial.PARITY_NONE,\
stopbits=serial.STOPBITS_ONE,\
bytesize=serial.EIGHTBITS,\
timeout=12)

print("connected to: " + sio.portstr)
count=1

while True:
line = sio.readline().decode('ascii')
if (-1 != line.find("1-0:31.7.0")):
print("[" + line + "]")
print("Fas L1:"+line[11:-5]+ " " + line[-4])
print(float(line[11:-5]))

Lämpligen skickar man sen data till en MQTT broker eller liknande istället för att skriva ut den. Lite roligt kodande för en kväll helt enkelt.

Jag har knappat ihop projektet vscp-python-p1-power-meter som skickar sensorvärden till valfri MQTT broker. Gillar du inte VSCP så kan koden enkelt anpassas för andra format (det finns till och men en konfigurering för VSCP hatare ;-)). Jag tror att koden är ganska enkel att förstå. Konfigurering sker i filen config.ini och du har dokumentation på kodsidan. Nedan en skärmdump från MQTT explorer som visar MQTT VSCP data för spänning, fas 1 i realtid

Och strömmen för samma fas

Notera diagrammet nere till höger. En smidig finess i MQTT explorer för att snabbt visualisera data.

Såhär kan set se ut när data presenteras i node-red

Men det är mycket enkelt att göra en egen websida för att presentera data om man först sänder den till en MQTT broker. Websockets är din vän där. Skickar du VSCP events över det interfacet istället för någon annan slumpvis data så har du en lösning som både skalar och är återanvändbar på alla nivåer. Återkommer kanske senare med ett exempel som visar hur det där går till.

Ja och såhär någonting ser det ut när allt rullar.

Demo i realtid finns här

Drivare till VSCP daemon finns här.

42 replies on “Ny smart elmätare från Ellevio”

That was great. Thanks for your post , I could read data from the Elmättare vi fick från Kraftringen. Det är samma som du fick, fast från annan elbolag. Tack.

Tack för en bra guide!
Kollar på kretsschemat och även om jag har hyfsad koll så är jag ingen expert så ursäkta en ev dum fråga. Men varför kopplar man ihop +5V från mätaren med VCC (+5V om man använder serieadaptern du länkade till)? Kan man inte bara skita i 5V-pinnen från mätaren?

Hej, och ursäkta sen respons men har varit borta. En del mätare har ingen 5V matning. Min har det, men man får kolla. Men har den inte det måste man driva interfacet utifrån. Men vb´isst det går bra att skippa matningen på de flesta modeller generellt.
/Ake

Hej Åke,
Intressant. Så om jag vill koppla detta till en enhet/läsare som har ett RS-232 gränsnitt, så är detta möjligt med lite ytterligare anpassning?

Tack för ett intressant inlägg 🙂 Har just fått den nya elmätaren T211 från Ellevio och hoppas kunna plocka ut informationen via gränssnittet. Har inga “besvärande” HW kunskaper utan kommer från SW sidan. Så att bygga interface-loligen är INTE aktuellt för mig, går inte igång på detta. Hur som helst så köra jag en Raberry PI 4 med ett tillhörande UART RS232 kort. Jag var verifierat att detta funkar genom att köra detta mot em PC med nullmodemkabel. Har skaffat en RJ12 — DB9 tkabel och försökt att få ut data från elmätaren utan framgång. Jag har aktiverat gränsnittet på mina sido. Har också testat med en nullmodemkonverter utan framgång. Jag har testat att få ut data med screen och minicom enligt ovan dvs 115200, 8N1 men tji.

Du skriver ovan; “Sänds dock inverterat så det måste man ta hand om”. Vad innebär detta? Är interfacet inte ett “vanligt” RS232 snitt?
Kan jag ha missat något uppenbart?

PoBe

Hej
Har du aktiverat interfacet på “min sida” hos Ellevio? Är det aktiverat skall det finnas ström på kontakten.

/Ake

Ja interfacet är aktiverat hos ellevio och när jag mäter spänningen mellan pin1 och pin6 så får jag 5.2 V, alltid en början.
Har nu försökt att bygga en egen RJ12 till DB9 (female) kabel. Där Jag mappar
RJ12 pin5 (data) –> pin2 DB9 (TXD)
RJ12 pin6 (ground) –> pin5 DB9 (Ground)
RJ12 pin1 (+ 5.22V) –> pin8 DB9 (Rqst to Send) har testat utan att ansluta denna pin, utan att det funkar
RJ12 pin2 (Rqst to Receive) –> pin4 DB9 (Data terminal ready) på denna pin ger RS232 kortet 5.68V är det för mycket?

Hmmmm en TTL serie adapter. Tack. Har nog inte riktig koll där ?
Jag jobbar vidare och postar vid nya framsteg, Att bygga ett interface med motstånd etc. är inte aktuellt, jag går inte igång på sådant.

initialt prova jag med ett vanligt UART RS232 adapter och det gick bekant inget vidare. Nu har jag skaffat en MX3232 RS232 to TTL adapter som jag kopplar in mig på direkt to PI’n men utan framgång. Känns långt ifrån säkert att detta är rätt 🙁 finns det någon off-the-shelf adapter som går att koppla till en Rasberry Pi?

Finns ingen att köpa från hyllan idag vad jag vet. Jag har haft planer på att börja sälja en trådlös variant men inte haft tid att fixa ännu. Men kanske till hösten. Vi får se,

/Ake

Du kanske vill ändra länken till “https://www.energiforetagen.se/globalassets/energiforetagen/det-erbjuder-vi/kurser-och-konferenser/elnat/branschrekommendation-lokalt-granssnitt-v2_0-201912.pdf” som fungerar bättre.
Janne

Efter en del letade snubbla jag över https://energyintelligence.se/shop/product/p1-han-till-usb-adapter.
Den verkar göra jobbet out-of-the-box. Inkopplad dyker den som en USB serie-port. Rå-data enligt specifikation skickas.
Nu återstår bara en den enkla biten att processa och presentera data :-). Kanke en bra lösning för dem som inte har en böjelse för hårdvarubiten 🙂
Tack under alla omständigheter

Tack Åke, detta är magiskt! Nu har man en rolig kväll framför sig. 🙂

Hej igen!

Jag tänker använda mig av en Arduino Nano (serial in) med en Ethernet-shield (MQTT ut). Den verkar då dra under 200 mA vid 5V, så jag ska försöka driva den från strömmatningen på mätaren.

Du har inte ritat in pin 6 (power-GND) i din krets, men jag antar (som hobbyelektroniker) att jag ska koppla både data-gnd (pin 3), resistor-gnd (ben 3) och power-gnd (pin 6) till GND på Arduinon?

Vänligen
John

Japp, koppla ihop alla GND till Nano. Koppla +5V från mätaren bara om du vill strömförsörja Nano från den. Annars bara +5V på (2) från dina grejer.Tänk på att du får +5V på kortet från USB när du kopplar in en USB kontakt (om du tänker göra det).

/Ake

Ok! Perfekt, tack!

Jag tänker bara köra USB när jag laddar upp/modifierar arduino-koden (och då med frånkopplad RJ12 i skåpet). Återkommer om jag få det att funka! Ha det gott.

Tack för den. Japp det skall stå RJ-12. Ändrat nu.

Det fina med modularkontakterna är ju annars att RJ-10/11/12 passar i en RJ-45. Men här är det en RJ-12 som du mycket riktigt påpåekar.

Tack!
/Ake

Riktigt Coolt. Jag måste också få in mitt i en databas vad det lider.Skrivet i Go dessutom. Kul och bra jobbat!

Hej,
Fantastiskt bra initiativ. Är så sugen på att testa! Finns det någon bedömning om när man kan beställa kretskortet igen?
Kan man sätta upp sig på en väntelista?

Hittade detta blogginlägg när jag själv spånade på hur jag skulle använda P1-porten på min nya elmätare.

Det landade dock i en annan lösning. Hade en fristående ESP8266-modul utan breakout board (AI Thinker) liggande, som passade utmärkt till ändamålet. Ville komma åt datan över wifi för att slippa en ful kabel i hallen.

En mycket trivsam feature hos ESP är att man kan invertera serieporten, och därmed slippa transistorn. Använde 5VDC-matningen i P1-porten, reglerad till 3.3VDC, för att mata ESPn. Rts är som bekant åtminstone i T211 matning till “open collector”-datautgången. Tog matning till den från 3.3VDC-sidan, och får därmed rätt signalnivå. Utöver ESPn och några resistorer för att dra diverse ingångar på den höga/låga för att sätta den i rätt mode, behövdes alltså bara en resistor och en linjärregulator.

Efter att ha lyckats få ut rådata från mätaren grottade jag vidare i hur man skulle gå tillväga för att publicera datan i snygga grafer på en websida. Rotade i det här med MQTT, och hittade projektet https://github.com/UdoK/esp8266_p1meter_sv. Tur var väl det, hade tagit mig ångestfyllda månader att få ihop något liknande på egen hand 😀

Installerade MQTT-brokern Mosquitto på hemmaservern, och klienten MQTT Explorer på datorn. Nu har jag superfina grafer över förbrukning etc 🙂

Överkurs kommer bli att försöka fixa någon weblösning på hemmaservern istället. Otroligt nog har jag inte lyckats hitta något färdigt för att ta värden över MQTT och trycka in i värde-tid-grafer, optimalt med möjlighet att skala värdena, och ännu bättre, beräkna nya värden utifrån den inkommande datan. Som dumt exempel hade man kunnat beräkna och plotta huvudspänningarna utifrån fasspänningarna som ges av mätaren. Man tycker det borde krylla av sådana lösningar, men tydligen inte då. Eller så är jag bara dålig på att googla.

Det hade som parentes också varit möjligt att köra en minimal webserver på ESPn, om man ville ha det helt fristående. Tänker dock att man kanske kommer skaffa annat som pratar MQTT i framtiden, så fortsätter nog ändå med det.

Avslutar med det viktigaste – tack för inspirationen 🙂

Ja, och som ytterligare parentes för den som vill göra något med saker man har hemma – RJ12-kontakter tillhör väl sällan den kategorin – så går det utmärkt att peta bort de två yttersta kontaktblecken på en RJ45-kontakt, och fila ned sidorna någon millimeter. Tar man en färdig nätverkssladd, klipper av, gör ovanstående, och rycker ut ledarna som korresponderar mot de två bortplockade kontaktblecken, behöver man inte ens något pressverktyg.

Åke,

Kul, ser ut att vara en prydlig lösning. Rent sådär är jag också förtjust i företag som öppnar sina produkter, gillar att gynna dem när det går 🙂

ESP32 är nog i praktiken en mycket bättre plattform än ESP8266 till detta. Visst går det att göra väldigt mycket med 8266 också, men har den en svaghet så är det den enda kärnan. Wifi kan vara lite timingkänsligt, och på en 8266 måste wifikoden köa med din kod om CPU-tiden. Kan börja bära sig åt när din kod blir komplex och tar tid att exekvera. Det kommer man runt med ESP32.

Fungerar absolut med 8266 såklart. Men gillar C3’an. Den är ju också enkärnig men för det här jobbet är det OK. Strömuttaget är ju den kritiska faktorn här och där är C3’an en god kandidat också. Vi får se vad det blir av det hela till slut. Det här är lite av ett sidoprojekt.

Ah, visste inte att det fanns enkelkärniga varianter av ESP32, man lär sig alltid något nytt 🙂

Ja, i den här specifika applikationen kan man förstås sluta sig till att den som designat projektet gjort en korrekt bedömning av behoven, men snackade i största allmänhet. Två kärnor har sina klara fördelar när loopen börjar ta tid och wifi är med i bilden 🙂

Japp, instämmer kring strömuttaget. Mycket elegantare att ta matning från porten än att blanda in externa spänningskällor.

Hej!
Beställde serie adaptern, HAN P1 TTL serie kortet och kabel av dig i måndags, fick dem idag (onsdag). Otroligt snabbt jobbat! Kopplade in det i en Raspberry pi och det fungerade klockrent. Tack för bra grejer! Har elmätare från Ellevio i Halland.

Lämna en kommentar

This site uses Akismet to reduce spam. Learn how your comment data is processed.

%d bloggers like this: