Modul HourCounter - Betriebsstundenzähler mit einem Fensterkontakt

Begonnen von John, 08 April 2013, 22:11:55

Vorheriges Thema - Nächstes Thema

John


Das Modul HourCounter ist seit 24.10.2014 Bestandteil von FHEM
(die Zwischenversionen in diesem Thread wurden gelöscht)

WIKI-Link  HourCounter


Ich habe den MAX-Fensterkontakt dazu "missbraucht" die Starts meines Brenners aufzuzeichnen, dabei ist sukzessive das Modul HourCounter entstanden. (Das nunmehr mit beliebigen Ereignissen gefüttert werden kann).

Die Modifikationen am Fensterkontakt habe ich bereits beschrieben:
Link

Über ein Koppelrelais nehme ich das Signal zur Ansteuerung des Betriebsstundenzählers meiner Heizung ab.

Der potentialfreie Kontakt des Relais (ich verwende hier den Öffner)  wird mit den beiden Anschlüssen des
Fensterkontakts verbunden.

Sobald der Brenner aktiv ist, meldet der Fensterkontakt "opened" bzw. onoff:1, andernfalls "closed"

Damit kann man nun die

- die kumulierten Brennerstarts
- die Betriebsstunden über den  Tag
- die Dauer jedes Einschaltvorganges
- das Brenner-Ein Signal über die Zeit

darstellen.


John


CubieTruck Docker Node-Red Tasmota Shelly Homematic-IP

Harald

Hallo John,

das ist ein interessanter Ansatz. Kannst Du mir sagen, mit welchen Befehlen Du den Zähler realisiert hast? Die Stadtwerke haben mir einen neuen Gaszähler mit Kontakt in der 100 Liter-Stelle eingebaut. Den möchte ich mittels eines Fensterkontaktes zum Qube/FHEM übertragen und in FHEM einen Impulszähler generieren, der mir dann den Gasverbrauch pro Std, Tag, Monat usw. anzeigt. Da ich als blutiger Anfänger im Bereiech FHEM schon froh bin, dass ich den Qube abfragen und die Daten meiner Vertile angezeigt bekomme, habe ich noch nicht herausgefunden, wie ich vorgehen und was wo eingetragen werden muss.

Vielleicht kann ich ja von Deinen Erfahrungen partizipieren.

Vielen Dank im Voraus und viele Grüße

funker
Router:AVM7590 1&1 FW:FRITZ!OS 07.56 Anbindung:1&1 50/10 Mb/s, WLAN-Repeater 300E
ELV MAX!Cube, 7xThermostat, ECO, RasPi 4B mit bullseye auf Festplatte,
CUL V 1.67, JeeLink v3_10.1c, nanoCUL, 1xS300TH, 4xHMS100T, 4xELRO, 1xTFA, 2xMAX_FK
ELV MAX!1.4.5, FHEM 5.7 auf RasPi, Kostal PIKO plus

John

Hallo funker,

mein Skript ist noch in der Testphase und noch nicht so ausgereift, dass ich es dir zumuten kann.

 
Zitat..
 Den möchte ich mittels eines Fensterkontaktes zum Qube/FHEM übertragen.

Damit solltest du vorweg schon mal beginnen, das ist die Basis für alles andere.
 
Zitatund in FHEM einen Impulszähler generieren, der mir dann den Gasverbrauch pro Std
geht nicht mit meinem Skript

 
Zitat, Tag,

das  kann es leisten.

 
ZitatMonat usw. anzeigt.

das leider nicht.

Aber mit dem Tagesverbrauch findest du ggf. eine Lösung im Forum auch den Monatsverbrauch zu bestimmen.

Melde mich hier wieder, sobald das Skript an Reife gewonnen hat.

John



CubieTruck Docker Node-Red Tasmota Shelly Homematic-IP

Harald

Prima, besten Dank. Da bin ich gespannt.


Schönen Abend noch von

Harald

PS: Ich glaube, ich habe der gleichen Brenner - zumindest sieht die Front genau so aus.
Router:AVM7590 1&1 FW:FRITZ!OS 07.56 Anbindung:1&1 50/10 Mb/s, WLAN-Repeater 300E
ELV MAX!Cube, 7xThermostat, ECO, RasPi 4B mit bullseye auf Festplatte,
CUL V 1.67, JeeLink v3_10.1c, nanoCUL, 1xS300TH, 4xHMS100T, 4xELRO, 1xTFA, 2xMAX_FK
ELV MAX!1.4.5, FHEM 5.7 auf RasPi, Kostal PIKO plus

Harald

Hallo John,

bist Du mit Deinem Skript schon weiter gekommen? Wie und wo hast Du den Fensterkontakt an der Heizungssteuerung angeschlossen? Gibt es da bereits einen potentialfreien Kontakt oder hast Du ein zusätzliches Relais eingebaut?

Wahrscheinlich werde ich auch die Laufzeit des Brenners überwachen, da ich keinen modulierenden Brenner habe. Ich denke, das ist besser, als den Gaszähler abzufragen. Wenn dieser nämlich gerade den Kontakt aktiviert hat und die Heizung abschaltet, bleibt das Signal stehen und man muss bei der Abfrage Aufwand betreiben, um das Signal passend zu begrenzen. Das ist bei der Brennerauswertung nicht erforderlich.

Ich würde mich freuen, wenn Du mir Dein Skript überlassen würdest.

Vielen Dank im Voraus und schönes WE

Harald
Router:AVM7590 1&1 FW:FRITZ!OS 07.56 Anbindung:1&1 50/10 Mb/s, WLAN-Repeater 300E
ELV MAX!Cube, 7xThermostat, ECO, RasPi 4B mit bullseye auf Festplatte,
CUL V 1.67, JeeLink v3_10.1c, nanoCUL, 1xS300TH, 4xHMS100T, 4xELRO, 1xTFA, 2xMAX_FK
ELV MAX!1.4.5, FHEM 5.7 auf RasPi, Kostal PIKO plus

John

#5
Hallo Harald,
anbei meine Antwort

Zitat
Wie und wo hast Du den Fensterkontakt an der Heizungssteuerung angeschlossen?

(siehe Anhang / see attachement)


Dies ist der Steckverbinder zum Gasfeuerungsautomat.
BZ ist der Betriebsstundenzähler.
Die Anschlüsse A1,A2 des Ralais (Spulenkontakte) werden an den Nulleiter und an den Kontakt BZ von Stecker 41 angeschlossen.
Achtung: das Potential an BZ beträgt 230VAC. Nur von Personen mit entsprechender Fachkunde durchzuführen.

Der Öffner des Relais wird mit den beiden Enden des Fensterkontakts verbunden.
Das Relais wird mit einer Spulenspannung von 230VAC betrieben.

Zitat
Wahrscheinlich werde ich auch die Laufzeit des Brenners überwachen, da ich keinen modulierenden Brenner habe.
Ich denke, das ist besser, als den Gaszähler abzufragen.
Wenn dieser nämlich gerade den Kontakt aktiviert hat und die Heizung abschaltet,
bleibt das Signal stehen und man muss bei der Abfrage Aufwand betreiben,
um das Signal passend zu begrenzen.
Das ist bei der Brennerauswertung nicht erforderlich.

Beim Brennersignal muss die Pulsdauer vermessen werden.  (cntOntimePerDayHours= Einschaltzeit in Stunden)
Beim Zähler hingegen die Anzahl der steigenden Flanken. ( cntPerDay = kumulierte Starts über den Tag)

Du kannst das Skript für beides verwenden.

Installation

Datei 99_UtilsMaxCounter.pm in das Verzeichnis der FHEM-Skripte einspielen:  /fhem/FHEM
Datei myOnOffHeizung.gplot in das Verzeichnis der Plots einspielen:          /fhem/www/gplot

In FHEM.cfg Shutter definieren:

define SHUTTER.BRENNER MAX ShutterContact 005b4f

Notify auf Sub CounterNotify definieren: (Achtung: Zeilenumbruch durch WEB-Seite, nicht im Original)

define SHUTTER.BRENNER.event notify SHUTTER.BRENNER:onoff.*  { CounterNotify("%NAME","%EVTPART0","%EVTPART1");;}

Logfile anlegen
# file
define FileLog_SHUTTER.BRENNER FileLog ./log/SHUTTER.BRENNER-%Y.log SHUTTER.BRENNER:(onoff|cntOntimePerDayHours|cntPerDay|cntOntimeIncrement|cntPerDayLast|cntOntimeHours).*
attr FileLog_SHUTTER.BRENNER logtype text
attr FileLog_SHUTTER.BRENNER room KE.HEIZUNG


Plot anlegen
# plot
define weblink_SHUTTER.BRENNER weblink fileplot FileLog_SHUTTER.BRENNER:myOnOffHeizung:CURRENT
attr weblink_SHUTTER.BRENNER label "SHUTTER.BRENNER Min $data{min1}, Max $data{max1}, Last $data{currval1}"
attr weblink_SHUTTER.BRENNER room KE.HEIZUNG

danach FHEM neu starten.

Inbetriebnahme

unter Unsorted findet sich der automatisch erzeugte AT Befehl

(siehe Anhang / see attachement)

Dies sorgt für den Aufruf um 00:00 Uhr:
Hier die Zählerstände in die LastDay-Werte kopiert und die Aktualzähler resettiert.

nach dem ersten Signalwechsel beim Schutter-Contact sollten die meisten Readings im Shutter zu sehen sein.
Spätesten nach einem Tageswechsel um 00:00 Uhr müssen alle vorhanden sein.

(siehe Anhang / see attachement)


In der Logging-Datei müssen Einträge wie folgt stehen:
2013-04-19_18:40:06 SHUTTER.BRENNER onoff: 1
2013-04-19_18:40:08 SHUTTER.BRENNER cntPerDay: 9
2013-04-19_18:44:43 SHUTTER.BRENNER onoff: 0
2013-04-19_18:44:44 SHUTTER.BRENNER cntOntimeIncrement: 276
2013-04-19_18:44:44 SHUTTER.BRENNER cntOntimePerDayHours:   1.8028
2013-04-19_19:31:08 SHUTTER.BRENNER onoff: 1
2013-04-19_19:31:09 SHUTTER.BRENNER cntPerDay: 10
2013-04-19_19:43:15 SHUTTER.BRENNER onoff: 0
2013-04-19_19:43:16 SHUTTER.BRENNER cntOntimeIncrement: 727
2013-04-19_19:43:16 SHUTTER.BRENNER cntOntimePerDayHours:   2.0047


Nochmal zur Bedeutung der Readings:

cntOntimeHoursLast         Einschaltzeit in Stunden vom letzten Tag
cntOntimeIncrement         Einschaltdauer des letzten Einschaltvorganges in Sekunden
cntOntimePerDay            Einschaltdauer im Zeitformat
cntOntimePerDayHours       Einschaltzeit in Stunden, damit könnte man über UserReadings Verbräuche ermitteln
cntOntimePerDaySeconds     Einschaltzeit in Sekunden, die interne Rechenbasis
cntPerDay            kumulierte Starts über den Tag
cntperDayLast              Starts des letzten Tages


John

CubieTruck Docker Node-Red Tasmota Shelly Homematic-IP

Harald

Hallo John,

herzlichen Dank, dass Du mir (und allen anderen hier) Deine tolle Arbeit zur Verfügung stellst.

Das werde ich am WE mal ausprobieren. Dann kann ich endlich die Laufzeit der Heizung und damit den Gasverbrauch beobachten.

Nochmals danke und ein schönes WE

Harald

PS: An der Fachkenntnis bez. 230V sollte es einem Elektriker nicht mangeln ;-)

Nachtrag 20.4.: Hervorragend, John, habe die Einträge in der fhem.cfg auf meine Verhältnisse angepasst und es klappt besten. Nochmals danke für Deine Hilfe und schönes WE
Router:AVM7590 1&1 FW:FRITZ!OS 07.56 Anbindung:1&1 50/10 Mb/s, WLAN-Repeater 300E
ELV MAX!Cube, 7xThermostat, ECO, RasPi 4B mit bullseye auf Festplatte,
CUL V 1.67, JeeLink v3_10.1c, nanoCUL, 1xS300TH, 4xHMS100T, 4xELRO, 1xTFA, 2xMAX_FK
ELV MAX!1.4.5, FHEM 5.7 auf RasPi, Kostal PIKO plus

Harald

Hallo John,

ich habe mich doch entschieden, mittels des Gaszählers meinen Gasverbrauch zu ermitteln, da evtl. in Zukunft ein modulierender Brenner eingesetzt werden soll. Dann klappt das mit der Laufzeit des Brenners nicht mehr.

Grundsätzlich funktioniert das schon einigermaßen. Nun möchte ich das erweitern, dass ich bei der Anzeige der Readings den Verbauch in m³, kWh (m³ * 10.996) pro Tag/Monat/Jahr/gesammt sehen kann. Der Readkontakt des Gaszählers sitzt übrigens auf der 0,1m³-Stelle.

Kannst Du mir sagen, wo Du die Beschreibung der Variablen cntPerDay, cntPerDayLast usw. gefunden hast. Trotz verzweifelter Suche habe ich nichts gefunden. Wahrscheinlich suche ich nach den falschen Begriffen.

Werden die durch Perl zur Verfügung gestellt? Weißt Du, wie man mit den "Readings" rechnen kann (z.B. cntPerDay * 10,996kWh/m³:10= ? kWh/Tag o.ä.) und wie man die Dimmensionen in die Tabelle der Readings einfügen kann? Wird das in der 99_UtilsMaxCounter gemacht?

Viele Grüße, besten Dank für Deine Hilfe und schönen Sonntag

Harald
Router:AVM7590 1&1 FW:FRITZ!OS 07.56 Anbindung:1&1 50/10 Mb/s, WLAN-Repeater 300E
ELV MAX!Cube, 7xThermostat, ECO, RasPi 4B mit bullseye auf Festplatte,
CUL V 1.67, JeeLink v3_10.1c, nanoCUL, 1xS300TH, 4xHMS100T, 4xELRO, 1xTFA, 2xMAX_FK
ELV MAX!1.4.5, FHEM 5.7 auf RasPi, Kostal PIKO plus

John

Hallo Harald,


Kannst Du mir sagen, wo Du die Beschreibung der Variablen cntPerDay, cntPerDayLast usw. gefunden hast. Trotz verzweifelter Suche habe ich nichts gefunden. Wahrscheinlich suche ich nach den falschen Begriffen.

Die wirst du nirgends finden, da diese erst durch das Skript 99_UtilsMaxCounter.pm erzeugt werden.
Du suchst nicht nach den falsche Begriffen, sondern dein Verständnis ist noch falsch.

Das neue Skript liefert die Funktionalitäten zu cntPerDay, cntPerDayLast ...
Du musst nicht woanders suchen, du hast alles in der Hand.

ZitatWeißt Du, wie man mit den "Readings" rechnen kann (z.B. cntPerDay * 10,996kWh/m³:10= ? kWh/Tag o.ä.) und wie man die Dimmensionen in die Tabelle der Readings einfügen kann?

Es gibt Links eine Leiste mit Links an der Web-Oberfläche mit der Bezeichnung: Commandref.
Dort nach userReadings suchen und die Beispiele ausprobieren.

John

CubieTruck Docker Node-Red Tasmota Shelly Homematic-IP

Harald

Hallo John,

herzlichen Dank. Du hast natürlich völlig Recht. Mein Verständnis der Thematik ist sehr rudimentär. Da muss ich noch viel lernen. Aber Stück für Stück geht es langsam voran.

Ich habe mir aus Deinen Dateien eine myUtilMaxGasCounter.pm und eine myGasCounter.gplot erzeugt, ein paar Anpassungen eingebracht (Namen, Bezeichnungen u.a.), die FHEM.cfg angepasst und was soll ich sagen, es funktioniert!

Jetzt geht's an's Anpassen der Berechnungen, damit die Raedings so angezeigt werden, wie ich möchte.

Deine Arbeit zu den Brennerbetriebsstunden hat mir sehr geholfen, besten Dank nochmal und viele Grüße

Harald
Router:AVM7590 1&1 FW:FRITZ!OS 07.56 Anbindung:1&1 50/10 Mb/s, WLAN-Repeater 300E
ELV MAX!Cube, 7xThermostat, ECO, RasPi 4B mit bullseye auf Festplatte,
CUL V 1.67, JeeLink v3_10.1c, nanoCUL, 1xS300TH, 4xHMS100T, 4xELRO, 1xTFA, 2xMAX_FK
ELV MAX!1.4.5, FHEM 5.7 auf RasPi, Kostal PIKO plus

Harald

Hallo John,

kannst Du mir einen Tipp geben, wie ich den Wert von cntPerDay ans Ende der Diagrammüberschrift bekomme?

Mit der Metode, die man bei Temperaturplots anwendet - attr weblink_GasZaehler label "GasZaehler $data{curval1} kWh" - klappt es ja nicht.

Wäre schön, wenn Du mir einen Tipp geben könntest.

Viele Grüße

Harald

Hat sich erledigt. Man sollte die Syntax beachten!  ;-)
So ist's richtig: attr weblink_GasZaehler label "GasZaehler $data{currval2} kWh"
Router:AVM7590 1&1 FW:FRITZ!OS 07.56 Anbindung:1&1 50/10 Mb/s, WLAN-Repeater 300E
ELV MAX!Cube, 7xThermostat, ECO, RasPi 4B mit bullseye auf Festplatte,
CUL V 1.67, JeeLink v3_10.1c, nanoCUL, 1xS300TH, 4xHMS100T, 4xELRO, 1xTFA, 2xMAX_FK
ELV MAX!1.4.5, FHEM 5.7 auf RasPi, Kostal PIKO plus

Harald

Hallo John,

vielleicht kannst Du mir ja nochmal helfen. Meine Kenntnisse und Fähigkeiten in PERL und FHEM sind sehr eingeschränkt. Deshalb verstehe ich auch Deine Vorgehensweise bez. des Gaszählers nicht genug, um statt des MAX-Kontakts einen FS20 KSE einzusetzen.

Ich habe mal fogendes probiert aber natürlich ohne Erfolg:

define GasZaehler FS20 7e7e 02
attr GasZaehler alias Gaszaehler
attr GasZaehler room Heizung
define GasZaehler.event notify GasZaehler set "%EVTPART0 onoff";; {if (Value("GasZaehler") eq "on") {fhem("set %EVTPART1 1") } else {fhem("set %EVTPART1 0") CounterNotify("%NAME","%EVTPART0","%EVTPART1");;}

Ich wollte damit erreichen, dass on und off des KSE umgewandelt werden in onoff: 1 bzw onoff: 0, damit die Werte in Deinem 99_UtilsMaxCounter.pm weiter richtig verarbeitet werden.

Hintergrund ist, dass ich die MAX-Abfrageintervalle verlängern möchte, um die Logeinträge zu vermindern. Den KSE möchte ich benutzen, weil ich den über den CUL direkt abfragen kann und damit (hoffentlich) keine Zählerimpulse durch lange Abfrageintervalle verliere.

Viele Grüße und ein schönes Wochenende

Harald

Router:AVM7590 1&1 FW:FRITZ!OS 07.56 Anbindung:1&1 50/10 Mb/s, WLAN-Repeater 300E
ELV MAX!Cube, 7xThermostat, ECO, RasPi 4B mit bullseye auf Festplatte,
CUL V 1.67, JeeLink v3_10.1c, nanoCUL, 1xS300TH, 4xHMS100T, 4xELRO, 1xTFA, 2xMAX_FK
ELV MAX!1.4.5, FHEM 5.7 auf RasPi, Kostal PIKO plus

John

Hallo Harald,

schick bitte die Event-Einträge aus dem Event-Monitor zu Deinem Zähler.
Dann kann ich mehr dazu sagen.

Beim Max-Fensterkontakt sieht dies wie folgt aus:

2013-06-01 10:34:53 MAX SHUTTER.BRENNER onoff: 1


Bezogen auf den Aufruf
{ CounterNotify("%NAME","%EVTPART0","%EVTPART1");;}
entspricht dann

"%NAME"       SHUTTER.BRENNER
"%EVTPART0"   onoff
"%EVTPART1"   1


"%EVTPART0"  wird aber vom CounterNotify-Skript nicht weiter ausgwertet.
Es gibt also keine Notwendigkeit diesen Begriff zu ändern.

Du solltest dem Skript nur Dinge zumuten, die es auch auswerten kann:
1. Parameter ist der Name des auslösenden Objektes
2. Parameter ist egal
3. Parameter ist 0 oder 1

Vermutlich musst du einfach nur die Trigger-Bedingung im notify anpassen:

Zitatdefine SHUTTER.BRENNER.event notify SHUTTER.BRENNER:onoff.*



John
CubieTruck Docker Node-Red Tasmota Shelly Homematic-IP

Harald

Hallo John,

erstmal besten Dank für Deine Antwort.

Der KSE hat in der Protokollzeile "Datum/Zeit", "Name (also GasZaehler)" und "on" bzw "off" (nur mit Leerzeichen getrennt) stehen. Die Zuordnung von %Name, %EVTPART0 usw. habe ich schon herausgefunden. Ich wusste aber nicht, dass nur %EVTPART1 augewertet wird (ist doch richtig, oder?).

Heist das, ich muss nur dafür sorgen, dass %EVTPART1 auf 1 bei on und auf 0 bei off gesetzt wird oder funktioniert es auch, wenn %EVTPART1 on oder off beinhaltet?

Könnte es so klappen?

define FileLog_GasZaehler FileLog ./log/GasZaehler-%m.log GasZaehler:.*
define GasZaehler.event notify GasZaehler:.*  { CounterNotify("%NAME","%EVTPART0","%EVTPART1");; { if ( "$value{GasZaehler}" eq "on" ) { fhem("set (%EVTPART1, onoff) 1 ) } else { fhem("set (%EVTPART1, onoff) 0 ) }}

Ich möchte Dein Modul 99_UtilsMaxCounter.pm etwas angepasst verwenden. Muss ich dann dort auch "onoff" in "on" ändern, z.B. hier:  my $strState = ReadingsVal($strShutter,"onoff","0"); ?


Viele Grüße und schönes WE

Harald
Router:AVM7590 1&1 FW:FRITZ!OS 07.56 Anbindung:1&1 50/10 Mb/s, WLAN-Repeater 300E
ELV MAX!Cube, 7xThermostat, ECO, RasPi 4B mit bullseye auf Festplatte,
CUL V 1.67, JeeLink v3_10.1c, nanoCUL, 1xS300TH, 4xHMS100T, 4xELRO, 1xTFA, 2xMAX_FK
ELV MAX!1.4.5, FHEM 5.7 auf RasPi, Kostal PIKO plus

John

Hallo Harald,
bevor wir noch ein paar Mal die Runde drehen:

schick bitte die Event-Einträge  aus dem Event-Monitor zu Deinem Zähler.
Eine Beispielzeile, wie ich dies im vorherigen Post gemacht habe, dann gehts weiter.

John
CubieTruck Docker Node-Red Tasmota Shelly Homematic-IP