Closed MrHappy closed 9 months ago
Raspberrypi uses an ARM chipset, so it's no surprise that it can only execute the ARM version.
Can you share your config file and copy->paste the output generated when you run the program?
# serial_port is required and points to the serial file handle you want to use.
#serial_port: "/dev/ttyUSB0"
serial_port: "/dev/serial/by-id/usb-FTDI_P1_Converter_Cable_P13F11IL-if00-port0"
# dsmr_version is required to configure the serial port correctly.
# Must be one of:
# - "2" - generic meter using DSMR version 2
# - "2.2" - Dutch meter using DSMR version 2.2
# - "3" - generic meter using DSMR version 3
# - "Q3D" - Easymeter Q3D
# - "4" - generic meter using DSMR version 4
# - "5" - generic meter using DSMR version 5
# - "5B" - Belgian meter using DSMR version 5
# - "5L" - Luxembourg meter using DSMR version 5
# - "5S" - Swedish meter using DSMR version 5
dsmr_version: "2.2"
# server is a map conta2.2ining the server config.
# - host configures the server address on which the server listens.
# This can be a hostname, but this is not recommended because it will create a listener for at most one of the host's IP addresses.
# If the parameter is left empty or a literal unspecified IP address, it will listen on all available unicast and anycast IP addresses of the local system.
# - port configures the port on which to listen. If the port is left empty or "0", a port number is automatically chosen.
server:
host: ""
port: 9988
# enable verbose mode to have the raw telegrams printed to stdOut
verbose: false
The console shows 2 lines that it started and listening, one line with the ipaddress of HA. After that a lot of line with EOF, ending with
2023/12/08 14:45:19 EOF
2023/12/08 14:45:19 EOF
2023/12/08 14:45:19 EOF
2023/12/08 14:45:19 EOF
2023/12/08 14:45:19 EOF
2023/12/08 14:45:19 EOF
client_loop: send disconnect: Broken pipe
Occasionally it looks like there are other lines, but I was not able to catch them
What output do you get when you run cat /dev/serial/by-id/usb-FTDI_P1_Converter_Cable_P13F11IL-if00-port0
?
It returns nothing, just shows the next prompt. I just ran it again and it returned a lot of EOF lines, but also the data from the smartmeter. It began with 3 'regular' messages, than 237347 lines with EOF. Changed the version to 4 (was missing some data, like gas) to see if that added that info. With that changed HA could connect, but did not receive any data. The log/output did return some messages (incl m3).
--edit With v5 it gathered enough of data to show in HA, but the session broke and killed the app.
I will see if running it at boot as a schedule works better.
That explains the EOF output you were seeing, because those are not supposed to show up when you run the cat command. At least not with my DSMR v4 meter.
Can you share some information about your meter? Some meters require a resistor on the data request pin and/or output inversion.
If you know how to read Dutch, the following pages have lots of information about connecting to the meter. http://domoticx.com/p1-poort-slimme-meter-hardware/ https://gejanssen.com/howto/Slimme-meter-uitlezen/index.html
Dat maakt de communicatie wel iets eenvoudiger ;). Voorheen gebruikte in DMSR2Emoncms en dat werkte prima. Ik begrijp niet helemaal wat je met de EOF output icm het cat commando bedoelt. /dev/serial/by-id/usb-FTDI_P1_Converter_Cable_P13F11IL-if00-port0 is een ln naar /dev/ttyUSB0.
Wat voor info heb je nodig van de meter?
Als ik straks thuis ben zal ik wel eens een stukje cat output van mijn seriële verbinding met de slimme meter posten, dan kan je zien dat daar geen EOF in voorkomt.
Het feit dat dat bij jou wel het geval is kan in mijn ogen 2 dingen betekenen.
Ik ben niet bekend met alle meters, maar vooral met die van mij (DSMR4). De andere verbindingsinstellingen heb ik uit forum posts gevist. Het zou kunen dat daar een foutje in zit. Als je me kan vertellen welk type meter je hebt en van welke fabrikant, dan kan ik onderzoeken welke instellingen daar voor nodig zijn.
Ook schrijf je dat je de meter eerder succesvol hebt uitgelezen via DMSR2Emoncms. Als ik daarop Google krijg ik geen resultaten. Kan je me daar meer over vertellen? Welke verbindingsinstellingen gebruikte je toen? Baudrate, parity, etc.
DSMR2Emoncms kun je hier (https://github.com/EdwinBontenbal/DSMR2Emoncms) vinden. Deze settings gebruikte ik
baudrate = 115200
bytesize = serial.EIGHTBITS
parity = serial.PARITY_NONE
stopbits = serial.STOPBITS_ONE
xonxoff = 1
rtscts = 0
timeout = 20
port = /dev/serial/by-id/usb-FTDI_P1_Converter_Cable_P13F11IL-if00-port0
Mijn meter is een Kaifa MA105 (gok ik)
Probeer het eens met deze executable en dsmr_version: "5"
in je config file.
Eindelijk even tijd ;) Response
2023/12/08 19:24:04 Starting server...
2023/12/08 19:24:04 Unrecognized baud rate
Haha, sorry, copy->paste foutje mijnerzijds. Dit zou beter moeten gaan.
Nog steeds heel veel EOF's. Hoe kan ik zien of mijn meter v4 of v5 is/heeft? Ik ben zo even een half uurtje weg, daarna kan ik weer verder testen
Blijft de app nu wel draaien? Of crasht hij nog steeds?
Krijg je wel data binnen in HA?
Hangt na heel veel EOF-regels met
2023/12/08 20:07:24 EOF
client_loop: send disconnect: Broken pipe
DISCONNECTED (PRESS <ENTER> TO RECONNECT) (Fri Dec 8 20:07:52 2023)
Deze versie zou de EOF melding moeten onderdrukken (tenzij je verbose mode aan hebt staan) en de tot dat moment ontvangen data moeten doorgeven (waar dat eerder niet gebeurde).
En deze versie voorkomt dat er lege regels worden doorgegeven
Kan ik achterhalen of 4 of 5 beter werkt met mijn meter?
Hij crasht nu met
2023/12/08 20:14:23 Starting server...
2023/12/08 20:14:23 Listening on [::]:9988
2023/12/08 20:14:35 192.168.20.46:55498 connected
panic: runtime error: index out of range [0] with length 0
goroutine 18 [running]:
main.collectTelegrams(0x1580000, 0x141e1c0)
/Users/chrisjansen/IdeaProjects/smartmeterBridge/bridge.go:192 +0x120
created by main.ReadRawTelegrams in goroutine 6
/Users/chrisjansen/IdeaProjects/smartmeterBridge/bridge.go:167 +0x114
Hoe kan ik zien of mijn meter v4 of v5 is/heeft?
Goede vraag, voor mijn meter kon ik het op internet vinden aan de hand van de combinatie fabrikant/typenummer
En deze versie voorkomt dat er lege regels worden doorgegeven
Had je deze al geprobeerd? Die zou dat probleem moeten voorkomen.
Die gaf de crash..
For future reference (dankzij jouw tip, voor mijn meter iig)
Kaifa MA105 1-fase kleinverbruik RJ11 6P6C DSMR 4.0 (4.0.5 / 4.0.7) 115200 8N1 Ja /KFM5
DSRM4 dus. Gevonden op https://domoticx.com/p1-poort-slimme-meter-hardware/.
---edit Een keer een herstart en weer gecrasht.
2023/12/08 20:28:23 EOF
panic: runtime error: index out of range [0] with length 0
goroutine 19 [running]:
main.collectTelegrams(0x502080, 0x440080)
/Users/chrisjansen/IdeaProjects/smartmeterBridge/bridge.go:192 +0x120
created by main.ReadRawTelegrams in goroutine 5
/Users/chrisjansen/IdeaProjects/smartmeterBridge/bridge.go:167 +0x114
Ok, dus de instelling die ik bij DSMR "5" heb staan is goed voor jouw meter. (115200 8N1) Daar ligt het niet aan.
De EOF melding is een foutstatus die ik in de laatste versie niet meer wegschrijf naar de console, maar dat betekend niet dat hij er niet meer is. Ik heb het stukje seriële communicatie niet zelf geschreven, maar gebruik daarvoor een bibliotheek. Daar klaagde ook iemand over veel EOF fouten bij het lezen van de seriële verbinding. Daar werd de vraag gesteld of hij zeker wist dat er aan de andere kant gezonden werd.
De P1 poort stuurt alleen maar data als de RTS pin is voorzien van >+5v ten opzichte van de GND (-), zolang de spanning daarop blijft staan wordt er elke 10 seconden een “telegram” verzonden op de TxD
op de pagina die je zelf linkte zie je dat pin 2 de RTS pin is bij DSMR4. Weet je zeker dat daar 5 volt op staat? Zonder 5 volt op die pin zal hij geen data verzenden. En als er niets verzonden wordt, kan dat de EOF's verklaren.
Ik heb net alle output opgevangen in 1 tekst bestand. Dit werd een bestand van 18M (platte tekst). Hier heb ik alle regels uit gefilterd die EOF bevatten. Toen bleef er een bestand(je) over van 11K. Hierin zaten allemaal berichten als
2023/12/08 20:43:13 /KFM5KAIFA-METER^M
^M
1-3:0.2.8(42)^M
0-0:1.0.0(231208204317W)^M
0-0:96.1.1(4530303039313030303038343434333134)^M
1-0:1.8.1(023169.696*kWh)^M
1-0:1.8.2(016909.267*kWh)^M
1-0:2.8.1(008970.022*kWh)^M
1-0:2.8.2(020547.671*kWh)^M
0-0:96.14.0(0002)^M
1-0:1.7.0(03.154*kW)^M
1-0:2.7.0(00.000*kW)^M
0-0:96.7.21(00004)^M
0-0:96.7.9(00002)^M
1-0:99.97.0(2)(0-0:96.7.19)(170531140052S)(0000002635*s)(000101000001W)(2147483647*s)^M
1-0:32.32.0(00000)^M
1-0:32.36.0(00001)^M
0-0:96.13.1()^M
0-0:96.13.0()^M
1-0:31.7.0(013*A)^M
1-0:21.7.0(03.154*kW)^M
Op zich ziet dat er dus wel goed uit.
Overigens geeft die site aan dat mijn meter DSRM v4 heeft, dus lijkt het me sowieso verstandig om deze versie ook te gebruiken. Dat heb ik getest, maar levert dezelfde resultaten op.
Dit is de output bij mij.
/XMX5LGF0010454221243
1-3:0.2.8(50)
0-0:1.0.0(231208223700W)
0-0:96.1.1(4530303532303035343232313234333139)
1-0:1.8.1(017458.378*kWh)
1-0:1.8.2(005631.348*kWh)
1-0:2.8.1(002840.188*kWh)
1-0:2.8.2(006551.409*kWh)
0-0:96.14.0(0002)
1-0:1.7.0(00.112*kW)
1-0:2.7.0(00.000*kW)
0-0:96.7.21(00009)
0-0:96.7.9(00010)
1-0:99.97.0(8)(0-0:96.7.19)(000101000000W)(0000000182*s)(201213104130W)(0000001118*s)(210725120427S)(0000000600*s)(221105165344W)(0000003422*s)(221129125423W)(0000008056*s)(230211075619W)(0000000192*s)(230612133549S)(0000000335*s)(230701162125S)(0000001921*s)
1-0:32.32.0(00020)
1-0:52.32.0(00014)
1-0:72.32.0(00023)
1-0:32.36.0(00005)
1-0:52.36.0(00006)
1-0:72.36.0(00014)
0-0:96.13.0()
1-0:32.7.0(230.1*V)
1-0:52.7.0(228.4*V)
1-0:72.7.0(228.8*V)
1-0:31.7.0(000*A)
1-0:51.7.0(000*A)
1-0:71.7.0(000*A)
1-0:21.7.0(00.066*kW)
1-0:41.7.0(00.000*kW)
1-0:61.7.0(00.046*kW)
1-0:22.7.0(00.000*kW)
1-0:42.7.0(00.000*kW)
1-0:62.7.0(00.000*kW)
0-2:24.1.0(003)
0-2:96.1.0(4730303339303031393530303131323139)
0-2:24.2.1(231208223505W)(04097.336*m3)
!46EA
Ik heb wat meer regels, maar dat is te verklaren doordat hier een 3 fase meter hangt.
Wat wel opvalt is dat elke regel bij jou wordt afgesloten met ^M
, waar dat bij mij niet het geval is. Ook ontbreekt bij jou de waarde voor gasverbruik en de afsluiter (bij mij !46EA
in het bijgevoegde telegram).
In de laatst bijgevoegde versie zijn de communicatie instellingen het enige verschil tussen DSMR4 (115200 8N0) en DSMR5 (115200 8N1). In beide gevallen is er geen flow control ingesteld, want dat wordt niet ondersteund door de bibliotheek die ik heb gebruikt.
Is het voor jou mogelijk om de output te onderscheppen die je had bij het gebruik van DSMR2Emoncms? Want daar had je het werkend toch? Als dat mogelijk is, dan ben ik benieuwd naar de telegrammen die er in de werkende situatie voorbij komen. Maar ook of je de symptomen die we nu zien kan reproduceren door xonxoff = 0
in te stellen (Daarmee zet je flow control uit). Als de symptomen dan ineens de kop opsteken in de DSMR2Emoncms setup, dan weten we dat het aan de flow control ligt en moet ik op zoek naar een andere manier om de seriële communicatie te programmeren.
Het was vanochtend vroeg, dus daar zal ik morgen even naar kijken en dan laat ik het weten. Volgens mij heb ik de regel voor gas & de afsluiter wel gezien, maar niet meegekopieerd 😬 Kijk ik morgen ook meteen even na. Waar die ^M (cr-lf?) vandaan komt is mij ook niet duidelijk.
--edit Hier een van de volledige berichten
....
2023/12/08 20:42:49 /KFM5KAIFA-METER^M
^M
1-3:0.2.8(42)^M
0-0:1.0.0(231208204307W)^M
0-0:96.1.1(4530303039313030303038343434333134)^M
1-0:1.8.1(023169.696*kWh)^M
1-0:1.8.2(016909.258*kWh)^M
1-0:2.8.1(008970.022*kWh)^M
1-0:2.8.2(020547.671*kWh)^M
0-0:96.14.0(0002)^M
1-0:1.7.0(03.162*kW)^M
1-0:2.7.0(00.000*kW)^M
0-0:96.7.21(00004)^M
0-0:96.7.9(00002)^M
1-0:99.97.0(2)(0-0:96.7.19)(170531140052S)(0000002635*s)(000101000001W)(2147483647*s)^M
1-0:32.32.0(00000)^M
1-0:32.36.0(00001)^M
0-0:96.13.1()^M
0-0:96.13.0()^M
1-0:31.7.0(013*A)^M
1-0:21.7.0(03.162*kW)^M
1-0:22.7.0(00.000*kW)^M
0-1:24.1.0(003)^M
0-1:96.1.0(4730303032333430313435383837353134)^M
0-1:24.2.1(231208200000W)(13109.763*m3)^M
!A34D^M
2023/12/08 20:43:13 /KFM5KAIFA-METER^M
.....
En een telegrambestand van DSMR2Emoncms
cat /tmp/DSMR2Emoncms_p1Telegram.log
/F5AF-EE
00100(329387)
009..15000333333333433)
-09.40017.71kh
1-0:1.7.0(05.259*kW)
1-0:2.7.0(00.000*kW)
0-0:96.7.21(00004)
0-0:96.7.9(00002)
1-0:99.97.0(2)(0-0:96.7.19)(170531140052S)(0000002635*s)(000101000001W)(2147483647*s)
1-0:32.32.0(00000)
1-0:32.36.0(00001)
0-0:96.13.1()
0-0:96.13.0()
1-0:31.7.0(022*A)
1-0:21.7.0(05.259*kW)
1-0:22.7.0(00.000*kW)
0-1:24.1.0(003)
0-1:96.1.0(4730303032333430313435383837353134)
0-1:24.2.1(231209130000W)(13115.252*m3)
!08BC
Wanneer ik alle output gewoon naar stdout laat gaan krijg ik de ^M niet. En ziet het bericht er zo uit:
2023/12/09 13:15:45 /KFM5KAIFA-METER
1-3:0.2.8(42)
0-0:1.0.0(231209131549W)
0-0:96.1.1(4530303039313030303038343434333134)
1-0:1.8.1(023179.353*kWh)
1-0:1.8.2(016911.921*kWh)
1-0:2.8.1(008970.022*kWh)
1-0:2.8.2(020547.671*kWh)
0-0:96.14.0(0001)
1-0:1.7.0(05.304*kW)
1-0:2.7.0(00.000*kW)
0-0:96.7.21(00004)
0-0:96.7.9(00002)
1-0:99.97.0(2)(0-0:96.7.19)(170531140052S)(0000002635*s)(000101000001W)(2147483647*s)
1-0:32.32.0(00000)
1-0:32.36.0(00001)
0-0:96.13.1()
0-0:96.13.0()
1-0:31.7.0(023*A)
1-0:21.7.0(05.304*kW)
1-0:22.7.0(00.000*kW)
0-1:24.1.0(003)
0-1:96.1.0(4730303032333430313435383837353134)
0-1:24.2.1(231209130000W)(13115.252*m3)
!50CD
Die output naar stdout ziet er goed en volledig uit. De data komt wel goed door dus. Alleen die EOF's tussendoor en de crash na verloop van tijd moeten we nog zien te verklaren.
Dat telegrambestand van DSMR2Emoncms, is dat met xonxoff = 1
? Zo ja, kan je eens kijken wat er gebeurt als je xonxoff = 0
instelt? Zie je dan hetzelfde bij DSMR2Emoncms?
Het telegrambestand is een gevolg dan xonxoff = 0
.
Hij crasht iig niet als ie op de achtergrond draait.
Vandaag heb ik m ook geen EOF-meldingen zien geven, dus dat lijkt opgelost. Op eoa manier.
Was looking for something like this. I have a (very old) raspberry pi near my smartmeter which I currently use to get the data to emoncms. Now I'm moving several things over to Home Assistant and this is one of the last thing to do. The only package running (at all) is the arm-one. I configured the config.yml and ran the program. It returns a lot of lines with '2023/12/08 13:55:43 EOF'. (Whether debug is enabled or not.) When I hit any key the ssh session stops and I have to login again. I would like to get this to work. Can you help me out?