legolasbo / smartmeterBridge

18 stars 4 forks source link

Lots of 'EOF' messages after starting, but no data #1

Closed MrHappy closed 9 months ago

MrHappy commented 10 months ago

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?

legolasbo commented 10 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?

MrHappy commented 10 months ago
# 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

legolasbo commented 10 months ago

What output do you get when you run cat /dev/serial/by-id/usb-FTDI_P1_Converter_Cable_P13F11IL-if00-port0 ?

MrHappy commented 10 months ago

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.

legolasbo commented 10 months ago

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

MrHappy commented 10 months ago

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?

legolasbo commented 10 months ago

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.

  1. Een suboptimale verbinding
  2. De verbinding is goed en je meter verstuurt die EOF's.

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.

MrHappy commented 10 months ago

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)

legolasbo commented 10 months ago

Probeer het eens met deze executable en dsmr_version: "5" in je config file.

smartmeter-bridge-linux-arm.zip

MrHappy commented 10 months ago

Eindelijk even tijd ;) Response

2023/12/08 19:24:04 Starting server...
2023/12/08 19:24:04 Unrecognized baud rate
legolasbo commented 10 months ago

Haha, sorry, copy->paste foutje mijnerzijds. Dit zou beter moeten gaan.

smartmeter-bridge-linux-arm.zip

MrHappy commented 10 months ago

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

legolasbo commented 10 months ago

Blijft de app nu wel draaien? Of crasht hij nog steeds?

Krijg je wel data binnen in HA?

MrHappy commented 10 months ago

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)
legolasbo commented 10 months ago

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

smartmeter-bridge-linux-arm.zip

legolasbo commented 10 months ago

En deze versie voorkomt dat er lege regels worden doorgegeven

smartmeter-bridge-linux-arm.zip

MrHappy commented 10 months ago

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
legolasbo commented 10 months ago

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

legolasbo commented 10 months ago

En deze versie voorkomt dat er lege regels worden doorgegeven

smartmeter-bridge-linux-arm.zip

Had je deze al geprobeerd? Die zou dat probleem moeten voorkomen.

MrHappy commented 10 months ago

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
legolasbo commented 10 months ago

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.

MrHappy commented 10 months ago

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.

legolasbo commented 10 months ago

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.

MrHappy commented 10 months ago

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
.....
MrHappy commented 10 months ago

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
legolasbo commented 10 months ago

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?

MrHappy commented 10 months ago

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.