S0 - Schnittstelle mit Raspberry auslesen und auswerten

Begonnen von Knallfrosch, 21 August 2015, 15:51:49

Vorheriges Thema - Nächstes Thema

Knallfrosch

Hallo,

ich erfasse mit einem Reedkontakt meinen Gaszähler.
Über die Genauigkeit kann ich leider noch nichts sagen, denn zur Zeit ist der Gasverbrauch minimal.


Jetzt würde ich gerne den Stromverbrauch meines Klimagerätes erfassen.

Ich habe hier einen Stromzähler mit S0-Schnittstelle (1000imp/kwh) liegen, den ich gerne verwenden möchte.

FHEM läuft auf einem Raspberry.

Kann ich die S0-Schnittstelle eigentlich direkt am GPIO des Raspberry anschließen und in FHEM einbinden?

Der Reedkontakt für den Gaszähler funktioniert es ja auch, wenn auch die Impulse deutlich weniger sind.


Mit der Suche habe ich leider nichts brauchbares gefunden.

Vielen Dank für die Hilfe.


Grüße

münster

Das würde mich auch sehr Interessieren. Ich habe einen Bananapi mit FHEM und 3 Stromzähler mit S0 Anschluss (PV/Hausstrom und Wärmepumpe) die ich gerne überwachen möchte.

Gruß Volker

Otto123

Wurde schon oft behandelt
Das bei Google eingeben
site:forum.fhem.de s0 schnittstelle raspberry

Gruß Otto
Viele Grüße aus Leipzig  ⇉  nächster Stammtisch an der Lindennaundorfer Mühle
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7590,WRT3200ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266,MQTT,Zigbee,deconz

Knallfrosch

#3
Zitat von: münster am 23 August 2015, 23:06:48
Das würde mich auch sehr Interessieren. Ich habe einen Bananapi mit FHEM und 3 Stromzähler mit S0 Anschluss (PV/Hausstrom und Wärmepumpe) die ich gerne überwachen möchte.

Gruß Volker

Moin Volker,

nachdem hier keiner der Profis helfen wollte habe ich mir jetzt mal was aus Codeschnipseln usw. zusammen gebastelt.
Getestet habe ich es mit einer 60W Glüchbirne. Fürs erste scheint es zu funktionieren.

Hier wird der GPIO Pin 3 abgefragt. (Beim Rasp B+ =>   S0+ = GPIO 3 und  S0- = GND -> Pin 6)

define GPIOStromzaehler RPI_GPIO 3
attr GPIOStromzaehler active_low yes
attr GPIOStromzaehler direction input
attr GPIOStromzaehler interrupt both
attr GPIOStromzaehler pud_resistor up
attr GPIOStromzaehler room Verbrauch
attr GPIOStromzaehler toggletostate yes


Dann der Zähler:  (bisher: Gesamt und Tagesverbrauch)

define StromverbrauchGesamt HourCounter GPIOStromzaehler:on GPIOStromzaehler:off
attr StromverbrauchGesamt room Verbrauch
attr StromverbrauchGesamt stateFormat {sprintf("%.3f",ReadingsVal("StromverbrauchGesamt","countsOverall",0)/1000)." kwh"}
define StromverbrauchTag HourCounter GPIOStromzaehler:on GPIOStromzaehler:off
attr StromverbrauchTag room Verbrauch
attr StromverbrauchTag stateFormat {sprintf("%.3f",ReadingsVal("StromverbrauchGesamt","countsPerDay",0)/1000)." kwh"}


Ich habe keine Ahnung ob das alles so korrekt und perfekt ist, aber wiegesagt, bisher scheint es zu funktionieren.
Desweiteren versuche ich mich noch an der Erweiterung zum HourCounter-Modul, aber dazu kann ich dir noch nichts sagen.

Vielleicht hilft es dir ja erstmal weiter und vielleicht ist ja auch jemand mit größerem Wissen bereit hier noch zu unterstützen.


Grüße



SamirSpeed

Oh mit einem Raspberry Pi , das ist ja mal ne gute Idee, ich denke ich hab jetzt ein Projekt für den Sommer, danke :)

Otto123

Naja in irgendeinem Beitrag stand, das der Raspberry ohne Vorteiler irgendwann die Impulse nicht mehr sieht. Bei 60 Watt kein Ding aber bei 6000?

Gruß Otto
Viele Grüße aus Leipzig  ⇉  nächster Stammtisch an der Lindennaundorfer Mühle
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7590,WRT3200ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266,MQTT,Zigbee,deconz

Knallfrosch

Zitat von: Otto123 am 24 August 2015, 15:32:49
Naja in irgendeinem Beitrag stand, das der Raspberry ohne Vorteiler irgendwann die Impulse nicht mehr sieht. Bei 60 Watt kein Ding aber bei 6000?

Gruß Otto

Wenn der Raspberry tatsächlich überlastet wäre mit dem zählen, wäre das natürlich mehr als blöd.

Ich habe mit der Suche nur eine Variante mit Modbus gefunden, aber das gibt mein Zähler nicht her.

Mein Zähler muss eigentlich auch max. 3680W zählen. Ich rechne aber mit einer tatsächlichen maximal Last von 2000W, was dann 2000imp/h und somit <1imp/sec bedeuten würde.


Ich bin für jeden Rat und Verbesserungsvorschlag dankbar.


Grüße

Otto123

Viele Grüße aus Leipzig  ⇉  nächster Stammtisch an der Lindennaundorfer Mühle
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7590,WRT3200ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266,MQTT,Zigbee,deconz

Knallfrosch

Nabend Otto,

Vielen Dank!
Anhand dieser Seite und ein paar Codeschnipseln hier aus dem Forum habe ich das obige Ergebnis erzielt.

Eben habe ich jedoch festgestellt das im Log der Zähler steht, aber das HourCounter-Modul nicht hochgezählt hat.....sehr seltsam.  :o

Wenn sich solche "Ausetzer" natürlich häufen ergibt das dann eine deutliche Differenz.
Sofern sich die Fehlerquote aber im Nachkommabereich befindet kann ich damit gut leben.


Grüße

Knallfrosch

#9
Ich bin gerade etwas verwundert über meinen File-Log zum Stromzähler:

Ich habe den Log so angelegt:


define FileLog_StromverbrauchGesamt FileLog ./log/StromverbrauchGesamt-%Y-%m.log StromverbrauchGesamt:countsOverall:.*|StromverbrauchGesamt:countsPerDay:.*|StromverbrauchGesamt:state:.*

Soweit so gut, jedoch werden die Logeinträge immer doppelt geschrieben.
Ich finde keinen Fehler und weiß nicht wo ich ansetzen muss.


2015-08-24_21:17:11 StromverbrauchGesamt countsPerDay: 14
2015-08-24_21:17:11 StromverbrauchGesamt countsOverall: 14
2015-08-24_21:17:11 StromverbrauchGesamt countsPerDay: 14
2015-08-24_21:17:11 StromverbrauchGesamt countsOverall: 14
2015-08-24_21:18:09 StromverbrauchGesamt countsPerDay: 15
2015-08-24_21:18:09 StromverbrauchGesamt countsOverall: 15
2015-08-24_21:18:10 StromverbrauchGesamt countsPerDay: 15
2015-08-24_21:18:10 StromverbrauchGesamt countsOverall: 15
2015-08-24_21:19:08 StromverbrauchGesamt countsPerDay: 16
2015-08-24_21:19:08 StromverbrauchGesamt countsOverall: 16
2015-08-24_21:19:08 StromverbrauchGesamt countsPerDay: 16
2015-08-24_21:19:08 StromverbrauchGesamt countsOverall: 16


Kann mir bitte jemand helfen!?

Danke euch.


Grüße



PS: Hier noch "list StromverbrauchGesamt"

Internals:
   DEF        GPIOStromzaehler:on GPIOStromzaehler:off
   NAME       StromverbrauchGesamt
   NR         34
   NTFY_ORDER 50-StromverbrauchGesamt
   STATE      0.090 kwh
   TYPE       HourCounter
   VERSION    1.0.1.2 - 24.12.2014
   Readings:
     2015-08-24 22:16:18   countsOverall   90
     2015-08-24 22:16:18   countsPerDay    19
     2015-08-24 22:16:18   pauseTimeEdge   59
     2015-08-24 22:16:18   pauseTimeIncrement 2958
     2015-08-24 22:16:18   pauseTimeOverall 168266
     2015-08-24 22:16:18   pauseTimePerDay 64007
     2015-08-24 22:16:18   pulseTimeEdge   0
     2015-08-24 22:16:18   pulseTimeIncrement 0
     2015-08-24 22:16:18   pulseTimeOverall 8
     2015-08-24 22:16:18   pulseTimePerDay 4
     2015-08-24 22:16:18   state           19
     2015-08-24 21:22:03   tickChanged     126
     2015-08-24 22:15:06   tickDay         0
     2015-08-24 22:15:06   tickHour        0
     2015-08-24 22:15:06   tickMonth       0
     2015-08-24 22:16:18   tickUpdated     232
     2015-08-24 22:15:06   tickWeek        0
     2015-08-24 22:15:06   tickYear        0
     2015-08-24 22:16:18   value           0
   Helper:
     OFF_Regexp GPIOStromzaehler:off
     ON_Regexp  GPIOStromzaehler:on
     calledByEvent
     changedTimestamp 2015-08-24 22:16:18
     forceClear
     forceDayChange
     forceHourChange
     forceMonthChange
     forceWeekChange
     forceYearChange
     isFirstRun
     sdRoundHourLast 1440446400
     value      0
     cmdQueue:
Attributes:
   room       Verbrauch
   stateFormat {sprintf("%.3f",ReadingsVal("StromverbrauchGesamt","countsOverall",0)/1000)." kwh"}


Knallfrosch

Hallo,

nachdem ich an meinen RPI meinen Gaszähler mit einem Reed-Kontakt und die S0-Schnittstelle angeschlossen habe und in FHEM defoniert habe läuft es nun eigentlich seit knapp einem Monat prinzipiell zufriedenstellend.

ABER!

Ich habe nicht erklärbare "Lücken" in der Aufzeichnung.
Und zwar fehlen beim Gaszähler ca. 1000 Impulse was einem Verbrauch von ca. 10m³ entspricht. Tatsächlich wurden 15m³ vebraucht.
Hier ist also die Abweichung extrem hoch.

Beim Stromzähler fehlen etwas 175 gezählte Impulse was einem Vebrrauch von 0,175Kwh entspricht. Tatsächlich wurden 4,65 kwh verbraucht.
Hier ist die Abweichung relativ gering aber trotzdem ärgerlich.

Die Impulse kommen definitiv am RPI an, das Problem liegt also irgendwie bei FHEM das es die Impulse nicht mitbekommt.

Gibt es hierfür eine Lösung??


Angelegt habe ich für das Zählen folgendes:

define GPIOStromzaehler RPI_GPIO 3
attr GPIOStromzaehler active_low yes
attr GPIOStromzaehler direction input
attr GPIOStromzaehler interrupt both
attr GPIOStromzaehler pud_resistor up
attr GPIOStromzaehler room Verbrauch
attr GPIOStromzaehler toggletostate yes


und

define GPIOGaszaehler RPI_GPIO 23
attr GPIOGaszaehler active_low yes
attr GPIOGaszaehler direction input
attr GPIOGaszaehler interrupt both
attr GPIOGaszaehler pud_resistor up
attr GPIOGaszaehler room Verbrauch
attr GPIOGaszaehler toggletostate yes


Diese beiden "Zähler" werte ich mit dem Hourcountermodul aus:

define GasverbrauchGesamt HourCounter GPIOGaszaehler:on GPIOGaszaehler:off
attr GasverbrauchGesamt event-on-change-reading .*
attr GasverbrauchGesamt group Zaehler
attr GasverbrauchGesamt icon icoHEIZUNG
attr GasverbrauchGesamt room Verbrauch
attr GasverbrauchGesamt stateFormat {sprintf("%.2f",ReadingsVal("GasverbrauchGesamt","countsOverall",0)/100)." m³"}


ebenso den Stromzähler.



Kann mir bitte jemand helfen wie ich die Zählung genauer bekomme!?


Vielen Dank.


Grüße
Thorsten

frank

vielleicht hat fhem freezes? kannst du mit perfmon und apptime erkennen.
FHEM: 6.0(SVN) => Pi3(buster)
IO: CUL433|CUL868|HMLAN|HMUSB2|HMUART
CUL_HM: CC-TC|CC-VD|SEC-SD|SEC-SC|SEC-RHS|Sw1PBU-FM|Sw1-FM|Dim1TPBU-FM|Dim1T-FM|ES-PMSw1-Pl
IT: ITZ500|ITT1500|ITR1500|GRR3500
WebUI [HMdeviceTools.js (hm.js)]: https://forum.fhem.de/index.php/topic,106959.0.html

Bartimaus

Ich würde auch darauf tippen, das Impulse vom Raspi verschluckt wurden, weil er gerade ausgelastet war.

Hast Du nicht mal dran gedacht, einen 1wire-Zähler (DS2343 oder Alternative) dazwischenzuhängen ?
Da dieser aber die Impulse zählt und summiert, weiss ich jetzt nicht wie man das dem HourCounter beibringt, der ja selber zählt.
LG
B.


FHEM@AMD-Ryzen7-5700U@Debian-LXC (ProxmoxHOST), CUL1101,FS20,IT,DS18B20,DS2413(Heizungslogger),DS2423(Stromlogger)Homematic,HM-LAN,ZWave,MiniCULs,Shelly

Knallfrosch

Auf diesem Raspberry läuft FHEM nur für diese zwei Zähler und 3x DS18B20 die am GPIO angeschlossen sind.

Die Daten rufe ich mit FHEM2FHEM dort ab.
Also "eigentlich" sollte der RPI damit nicht ausgelastet sein, oder?

99_perfmon.pm habe ich installiert.
Bisher gibt es im Log bei Verbose-5 nur einen Eintrag nach dem restart

2015.09.29 16:11:48 1: Perfmon: possible freeze starting at 16:11:41, delay is 7.359

ansonsten ist Ruhe!


Ja, wenn ich diese Fehlerrate nicht deutlich reduzieren kann muss ich wohl andere Möglichkeiten testen.
Kannst du mir kurz etwas zum 1wire-Zähler erzählen?
Was benötige ich hierfür? Benutzt du das selbst?




Knallfrosch

NACHTRAG:

Ein paar Stunden später findet sich im Log folgendes:

2015.09.29 17:00:01 1: Perfmon: possible freeze starting at 16:59:15, delay is 46.221
2015.09.29 17:00:04 1: Perfmon: possible freeze starting at 17:00:02, delay is 2.043
2015.09.29 17:01:33 1: Perfmon: possible freeze starting at 17:00:48, delay is 45.301
2015.09.29 17:01:35 1: Perfmon: possible freeze starting at 17:01:34, delay is 1.884
2015.09.29 18:30:48 1: Perfmon: possible freeze starting at 18:30:47, delay is 1.229
2015.09.29 18:33:51 1: Perfmon: possible freeze starting at 18:33:50, delay is 1.569
2015.09.29 18:33:53 1: Perfmon: possible freeze starting at 18:33:52, delay is 1.244
2015.09.29 18:48:04 1: Perfmon: possible freeze starting at 18:48:03, delay is 1.026
2015.09.29 18:51:08 1: Perfmon: possible freeze starting at 18:51:07, delay is 1.229
2015.09.29 18:55:13 1: Perfmon: possible freeze starting at 18:55:12, delay is 1.225
2015.09.29 19:13:27 1: Perfmon: possible freeze starting at 19:13:26, delay is 1.365
2015.09.29 19:30:42 1: Perfmon: possible freeze starting at 19:30:41, delay is 1.339
2015.09.29 19:36:48 1: Perfmon: possible freeze starting at 19:36:47, delay is 1.225
2015.09.29 20:05:08 1: Perfmon: possible freeze starting at 20:05:07, delay is 1.225
2015.09.29 20:40:43 1: Perfmon: possible freeze starting at 20:40:42, delay is 1.326


Ich muss dann wohl morgen mal schauen woher diese Freezes kommen.

Ist es plausibel das die fehlenden Zählungen dadurch verursacht werden oder ist das eher unwahrscheinlich?
Nicht das ich in der falschen Ecke suche.....



Sollte jemand diese Daten anders erfolgreich und fehlerfrei aufzeichnen, bitte mal bei mir mit einem Lösungsvorschlag melden.


Vielen Dank.

Grüße und noch einen schönen Abend
Thorsten