Han port Raspberry pi pico

Permalänk

Han port Raspberry pi pico

Jag läser av min elmätare med en Rasberry pi Pico. Efter en del tricksande lyckas jag läsa ut data var 10 sekund enligt spec. Tyvärr är datan märklig. Enligt https://hanporten.se/svenska/protokollet/ standarden ska den se ut ungefär såhär:

b"/ELL5\x5c253833635_A\r\n\r\n"
b"0-0:1.0.0(210217184019W)\r\n"
b"1-0:1.8.0(00006678.394*kWh)\r\n"

Min första rad (bortklippt nedan) ser ut exakt som spec. men sedan ballar det ur, ett exempel:

b'.0.0(230330173730W)\r\n'
b'\x82B\x82\x82\x82\x82\x82\x8a\xaa\xb2r\xca\xca\xbaRZ]\xa1\xa55)\xc5\xb5\xc1\xe9\xc9]p.0(00000203.601*kWh)\r\n'
b'\x82\x8a\xc2r\xca\x8a\x8aRZ\xd9\x85\xc9\xa1\xa55)\xc5\xb5\xc1\xe9\xd1Yp.0(00000024.150*kvarh)\r\n'
b'r\xaa\x9a\xc2RZ]\xa55)\xc5\xb5\xc1\xe9\xc9]n.0(0000.000*kW)\r\n'

Signalen skickas till en inverterare via en vanlig telefonkabel innan den skickas till UART porten på picon.

Någon som lyckats lösa att läsa den svenska standarden med en pico? Finns en del lösningar med Modbus, men det används ju inte i moderna svenska mätare?

Permalänk
Medlem
Skrivet av maggan123:

Jag läser av min elmätare med en Rasberry pi Pico. Efter en del tricksande lyckas jag läsa ut data var 10 sekund enligt spec. Tyvärr är datan märklig. Enligt https://hanporten.se/svenska/protokollet/ standarden ska den se ut ungefär såhär:

b"/ELL5\x5c253833635_A\r\n\r\n"
b"0-0:1.0.0(210217184019W)\r\n"
b"1-0:1.8.0(00006678.394*kWh)\r\n"

Min första rad (bortklippt nedan) ser ut exakt som spec. men sedan ballar det ur, ett exempel:

b'.0.0(230330173730W)\r\n'
b'\x82B\x82\x82\x82\x82\x82\x8a\xaa\xb2r\xca\xca\xbaRZ]\xa1\xa55)\xc5\xb5\xc1\xe9\xc9]p.0(00000203.601*kWh)\r\n'
b'\x82\x8a\xc2r\xca\x8a\x8aRZ\xd9\x85\xc9\xa1\xa55)\xc5\xb5\xc1\xe9\xd1Yp.0(00000024.150*kvarh)\r\n'
b'r\xaa\x9a\xc2RZ]\xa55)\xc5\xb5\xc1\xe9\xc9]n.0(0000.000*kW)\r\n'

Signalen skickas till en inverterare via en vanlig telefonkabel innan den skickas till UART porten på picon.

Någon som lyckats lösa att läsa den svenska standarden med en pico? Finns en del lösningar med Modbus, men det används ju inte i moderna svenska mätare?

ingen handshake behöver göras? Ser ut som krypterat.

Permalänk

Kanske, verkar dock märkligt att kryptera all info om vilken data som kommer (OBIS (OBject Identifier System)) men skriva ut förbrukningen i klartext?

HAN porten är enkelriktad så det finns ingen möjlighet att "skaka hand", möjligtvis att datan är i något format som picon inte kan tolka.

Permalänk

inte så enkelt att de pratar olika "encoding"?

typ hanporten använder ANSI och picon tror det den får är i typ UTF-8 eller något?

kan tänka mig att det kan bli lite fel isf.

vet i fasen vad det heter men vet sen tidigare erfarenhet att försöka läsa ansi med utf eller vise versan kan ge diverse konstigheter i textfiler iaf.

Visa signatur

ASUS B550-f-Gaming, R9 5800X3D, HyperX 3200Mhz cl16 128Gb ram, rtx 3070ti.
[Lista] De bästa gratisprogrammen för Windows
[Diskussion] De bästa gratisprogrammen för Windows

Permalänk

Löste det. Picon låg med en for loop för starta logga när datan kom. I loopen använde jag readline. Detta var dumt, för efter varje \n så kontrollerar loopen att det kommer data. Detta tar tid, och när data verifierats klart så börjar picon logga mitt i en rad.

Bytte readline mot read och ser till att read läser allt, sedan körs loopen och sparar det loggade för vidare behandling i scriptet.

Som alltid är det skit bakom spakarna när det går åt skogen

Permalänk
Medlem
Skrivet av maggan123:

Löste det. Picon låg med en for loop för starta logga när datan kom. I loopen använde jag readline. Detta var dumt, för efter varje \n så kontrollerar loopen att det kommer data. Detta tar tid, och när data verifierats klart så börjar picon logga mitt i en rad.

Bytte readline mot read och ser till att read läser allt, sedan körs loopen och sparar det loggade för vidare behandling i scriptet.

Som alltid är det skit bakom spakarna när det går åt skogen

Fint att det löste sig! Underbart när trådskaparen uppdaterar med lösningen också

Visa signatur

B450 Tomahawk 3700X 16gb G.Skill Flare x 860 Evo Noctua DH15 Seasonic focus+ 750W FD Define C Gigabyte RTX 2070 windforce

Permalänk
Datavetare
Skrivet av maggan123:

Löste det. Picon låg med en for loop för starta logga när datan kom. I loopen använde jag readline. Detta var dumt, för efter varje \n så kontrollerar loopen att det kommer data. Detta tar tid, och när data verifierats klart så börjar picon logga mitt i en rad.

Bytte readline mot read och ser till att read läser allt, sedan körs loopen och sparar det loggade för vidare behandling i scriptet.

Som alltid är det skit bakom spakarna när det går åt skogen

Kul att det löste sig, har ändå lite svårt att förstå varför felet bl.a. resulterar i tecken som har högsta biten satt. Det ska bara vara ASCII-tecken, alla dessa har översta biten satt till 0.

Fråga om invertering av signalen: gör du det på sättet som beskrivs nedan eller kör du någon annan elektrisk design? D.v.s. den som beskrivs här

Orsaken till frågan är rätt mycket för egen del!

Har inte fått min elmätare utnytt till en med HAN-port än (ska ske i vår/sommar), men skaffat mig ett par RPi Pico och börjat sätta mig in i Picons "Programmable IO" (PIO) stöd.

Fördelen med att använda elektronik för att invertera signalen är uppenbar: man kan köra med vanliga UART-drivern. Men är protokollet är inte raketforskning, och UART-driven i Pico är ju bara en inkluderat PIO-program.

Rimligen borde det inte vara speciellt komplicerat att skriva ett PIO-program som direkt kan läsa av HAN-porten, utan att först invertera signalen. Fördelen här är enklare elektrisk design, att minska signalnivån från elmätaren från 5 V till 3,3 V kan göras med två motstånd (GPIO på RPi-enhetern klarar inte 5 V).

Visa signatur

Care About Your Craft: Why spend your life developing software unless you care about doing it well? - The Pragmatic Programmer

Permalänk

Började koppla enligt lösningen som du refererar till. Fungerar antagligen, men jag spegelvände hanporten då jag läste pin layouten som hanen och fick följdaktligen inte ut något vettigt. Layout här: https://hanporten.se/svenska/porten/ detta är såklart kontakten i elmätaren, INTE hankontakten som ska stoppas in.

Bytte till en MM74HC14N för att utesluta fel i inverteringen. Hjälpte ju givetvis inte förrän jag upptäckte spegelvända kontakten. Nu har jag en inverterare så jag har inte brytt mig om att testa enligt tidigare koppling. Signalen är ju betydligt "snyggare" med inverteraren än med PNP lösningen, dvs brantare stigning när signalen switchar. Gissar att det inte spelar någon roll, men när inget funkar vill man utesluta alla möjliga felkällor.

Invertera i picon borde inte vara raketforskning, men ibland är man lat. Löser du det 'mjukt' så är det ändå enklare att koppla upp sig.

Permalänk
Medlem
Skrivet av maggan123:

Jag läser av min elmätare med en Rasberry pi Pico. Efter en del tricksande lyckas jag läsa ut data var 10 sekund enligt spec. Tyvärr är datan märklig. Enligt https://hanporten.se/svenska/protokollet/ standarden ska den se ut ungefär såhär:

b"/ELL5\x5c253833635_A\r\n\r\n"
b"0-0:1.0.0(210217184019W)\r\n"
b"1-0:1.8.0(00006678.394*kWh)\r\n"

Min första rad (bortklippt nedan) ser ut exakt som spec. men sedan ballar det ur, ett exempel:

b'.0.0(230330173730W)\r\n'
b'\x82B\x82\x82\x82\x82\x82\x8a\xaa\xb2r\xca\xca\xbaRZ]\xa1\xa55)\xc5\xb5\xc1\xe9\xc9]p.0(00000203.601*kWh)\r\n'
b'\x82\x8a\xc2r\xca\x8a\x8aRZ\xd9\x85\xc9\xa1\xa55)\xc5\xb5\xc1\xe9\xd1Yp.0(00000024.150*kvarh)\r\n'
b'r\xaa\x9a\xc2RZ]\xa55)\xc5\xb5\xc1\xe9\xc9]n.0(0000.000*kW)\r\n'

Signalen skickas till en inverterare via en vanlig telefonkabel innan den skickas till UART porten på picon.

Någon som lyckats lösa att läsa den svenska standarden med en pico? Finns en del lösningar med Modbus, men det används ju inte i moderna svenska mätare?

Ska få min nya elmätare i veckan och har en pico med tillbehör för att koppla in den 🥳
Har du några tips på hur bästa sättet att göra det på, alternativt får in det i home assistant?

Visa signatur

• ASUS 35" ROG Strix XG35VQ • Lian Li PC-O11 Air Mini • Ryzen 7 5800x3D • NZXT X63 • Asus TUF RTX 3070
• Asus B550-F • G.skill 2x16GB (3600MHz 16-19-19-39) • Corsair RM750x • Corsair Force MP600 1TB • Windows 11 Pro

Permalänk
Medlem

Tja! Lust att dela med dig av koden?

Edit: Hittade denna:
https://github.com/HenrikSolver/picowhanport

Ingen raketforskning direkt, sjukt hur enkelt shit är idag med alla paket som finns tillgänliga. 4 rader kod för att skicka meddelanden till en MQTT t ex

Permalänk
Medlem
Skrivet av BasseBaba:

Tja! Lust att dela med dig av koden?

Edit: Hittade denna:
https://github.com/HenrikSolver/picowhanport

Ingen raketforskning direkt, sjukt hur enkelt shit är idag med alla paket som finns tillgänliga. 4 rader kod för att skicka meddelanden till en MQTT t ex

jag har sett den där med, men hur tar man hand om datan sen för att få den i fina grafer?

Visa signatur

• ASUS 35" ROG Strix XG35VQ • Lian Li PC-O11 Air Mini • Ryzen 7 5800x3D • NZXT X63 • Asus TUF RTX 3070
• Asus B550-F • G.skill 2x16GB (3600MHz 16-19-19-39) • Corsair RM750x • Corsair Force MP600 1TB • Windows 11 Pro

Permalänk
Medlem
Skrivet av CusmaR:

jag har sett den där med, men hur tar man hand om datan sen för att få den i fina grafer?

Det är tyvärr en bit mer komplicerat.

Det sättet jag gör på är att
1) skicka datat till en MQTT-server, t ex https://mosquitto.org/
2) du behöver sedan använda något som lyssnar på denna MQTT server och skickar in datat i förslagsvis en tidsserie-databas, t ex InfluxDB
3) använd nu Grafana för att rita grafer från InfluxDB

Så en start skulle vara att googla på nått i stil med ”MQTT to grafana” så bör det komma guider.

Permalänk
Medlem
Skrivet av BasseBaba:

Det är tyvärr en bit mer komplicerat.

Det sättet jag gör på är att
1) skicka datat till en MQTT-server, t ex https://mosquitto.org/
2) du behöver sedan använda något som lyssnar på denna MQTT server och skickar in datat i förslagsvis en tidsserie-databas, t ex InfluxDB
3) använd nu Grafana för att rita grafer från InfluxDB

Så en start skulle vara att googla på nått i stil med ”MQTT to grafana” så bör det komma guider.

Snyggt! Tack då har jag iaf tillvägagångssättet, ska sätta mig ner på semestern o styra upp detta 😁

Visa signatur

• ASUS 35" ROG Strix XG35VQ • Lian Li PC-O11 Air Mini • Ryzen 7 5800x3D • NZXT X63 • Asus TUF RTX 3070
• Asus B550-F • G.skill 2x16GB (3600MHz 16-19-19-39) • Corsair RM750x • Corsair Force MP600 1TB • Windows 11 Pro

Permalänk
Medlem

Gammal tråd, men kanske av intresse ändå. Slängde ihop ett interface av en gammal barebone ESP8266 och kringkomponenter jag hade liggande hemma i höstas.

Angående signalnivåer som diskuterats tidigare, HAN-portens datautgång i min elmätare (Sagemcom T211) är en transistorutgång av open collector-typ, dvs signalnivån blir vad man matar kollektorn (data_request) med. Matning till den kan tas från samma källa som matningen till mikrocontrollern. Jag kör med en vanlig linjäromvandlare som riktar ner 5VDC från elmätaren till 3.3VDC för ESP8266 och data_request.

Angående invertering av signalen, så har ESP:ns UART stöd för inverterad signal. Man behöver inte invertera med extern hårdvara eller i programmet. Skulle förvåna mig om inte RPi Pico kan det också. En snabb googling antyder att man bara behöver sätta en flagga i ett register.

Har man inga RJ12-kontakter hemma går det utmärkt att slakta en vanlig nätverkssladd, peta bort de två yttersta kontaktblecken, rycka korresponderande ledare, och slipa ner kontakten någon millimeter på båda sidor.

Vad det gäller mjukvara landade det på esp8266_p1meter_sv på ESP8266, och Mosquitto på hemmaservern. Webserial kan vara användbart för att se rådatan vid debugging. Ett lättanvänt program för att rita snygga grafer etc är MQTT Explorer.

Visa signatur

Nu lurade jag dig att slösa bort ett par värdefulla sekunder av ditt liv på att läsa denna fullständigt poänglösa signatur!

Permalänk

Någon som har fått pico fungera ihop med HAN port

Har försökt att få till pico w ihop med nedan lösning men får inte pico att koppla upp sig på wifi när den är inkopplad på han-porten (elmätare Kampstrup Omnia) fungerar om jag kopplar in den via micro usb.
Någon som har en fungerande som kan dela erfarenhet?
https://github.com/HenrikSolver/picowhanport