Modul HourCounter - Betriebsstundenzähler mit einem Fensterkontakt

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

Vorheriges Thema - Nächstes Thema

Harald

Guten Morgen John,

Du machst ja tolle Sachen! Ich habe Deinen alten Betriebsstundenzähler auf Ereigniszählung für meinen Gaszähler umgebaut. Tages- und Summenzähler funktionieren aber die Monats- und Jahreserfassung noch nicht so richtig. Da kommt Dein neues Mudul gerade richtig. Entweder ich kann es dirkt für meine Zwecke verwenden oder ich kann lernen, wie man die div. Summen für die Tages-, Wochen-, Monats- und Jahreserfassung verarbeitet.

Ich bin schon sehr gepannt.

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

John

#46
Hallo Harald,
ich habe schon gehofft, dass du dich meldest und bei der Evaluierung unterstützt.

Die Sache mit den Tages- Wochen und Monatswerten hat mich ziemlich beschäftigt.
Es wird Zeit, dass das Modul nun gut getestet wird.

Vielen Dank für Deine Unterstützung, vor allem auch beim Max-Scanner. Es ist auch eine große Hilfe für mich, wenn
du Anfragen anderer User übernimmst.

Ich werde das Wiki nach und nach mit weiteren Informationen befüllen.

John
CubieTruck Docker Node-Red Tasmota Shelly Homematic-IP

Harald

#47
Hallo John,

so, ich hab's soeben geschafft, das Modul einzubinden und ein Diagramm zu erstellen. Es läuft erstmal parallel zu meinem Zähler, gesteuert vom selben Kontakt. Ich zähle z.Z. die Impulse des Gaszählerkontakts 1/0,1m³).  Mal sehen, ob ich alles richtig gemacht habe und ich die gleichen Werte bekomme.
Wenn ich das richtig sehe, ermittelst Du im Moment die Anzahl, On- und Offzeit pro Tag und gesamt. Ist das richtig?

Ach ja, was die Beantwortung der Userfragen anbetrifft, das tue ich gerne, so gut ich kann und soweit mein Wissen reicht. Falls ich irgendwann mal Unsinn schreibe, würde ich mich freuen, wenn Du oder andere das korrigieren würden.

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

John

ZitatWenn ich das richtig sehe, ermittelst Du im Moment die Anzahl, On- und Offzeit pro Tag und gesamt. Ist das richtig?

Ja genau so ist es.

Alles andere wird von diesen Werten abgeleitet.

Das kann so vielfältig sein, dass ich mich dazu entschieden haben einen Teil als Standardpaket zu liefern.
Der andere Teil muss anwendungsspezifisch implementiert werden.

Allerdings biete ich viele Hilfen an, damit diese Arbeit erleichtert wird.

Mehr dazu im Wiki.

John
CubieTruck Docker Node-Red Tasmota Shelly Homematic-IP

Harald

#49
Hallo John,

das Modul läuft bei mir seit ein paar Tagen im Modus "define GasZaehler_2 HourCounter GasZaehler:onoff:.1 GasZaehler:onoff:.0".
Es sieht so aus, als wenn alles soweit klappt. Ob die berechneten Zeiten stimmen, habe ich nicht überprüft.
Was mir zum Testen fehlt (reine Bequemlichkeit  ;) ), ist die Manipulation von "state" mittels "set ...". Mit "setreading ..." geht's natürlich.

Ich habe noch ein paar Unregelmäßigkeiten bei den Kurven "cntPerDay" (in meinem Zählermodul) bzw. "value". Es wird nicht immer hochgezählt, wenn der Gaszählerkontakt gearbeitet hat. Eine mögliche Ursache ist "addLog". Ich hab es gerade deaktiviert. Mal sehen, ob es eine Änderung gibt. Es gibt hier Beiträge dazu.

Viele Grüße

Harald
Nachtrag: Die Module zählen mit ziemlicher Sicherheit richtig, lediglich die Verbrauchskurven (cntPerDay und value) stimmen in dem Diagrammen nicht exakt mit den gezählten Impulsen überein. Ein Vergleich der 3 Gerätelogs mit den entsprechenden Diagrammen hat das so ergeben.

Achja, noch etwas: Ich habe gesehen, dass Du in den Zeilen 259 und 265 smartmatch (~~) verwendest. Ich meine, dass das nicht mehr verwendet werden sollte, da es auf "experimentell" gesetzt wurde. Hier wurde schon darüber diskutiert.

Noch eine Frage: Wie kann ich bei diesem Modul die Menge der Logausgaben beeinflussen?
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

ZitatAchja, noch etwas: Ich habe gesehen, dass Du in den Zeilen 259 und 265 smartmatch (~~) verwendest. Ich meine, dass das nicht mehr verwendet werden sollte, da es auf "experimentell" gesetzt wurde. Hier wurde schon darüber diskutiert.

Habe ich für die nächste Release schon geändert.

ZitatNoch eine Frage: Wie kann ich bei diesem Modul die Menge der Logausgaben beeinflussen?
wie üblich über verbose

Danke fürs Testen.

John
CubieTruck Docker Node-Red Tasmota Shelly Homematic-IP

Harald

#51
Guten Morgen John,

habe ich das richtig verstanden, dass man dann, wenn man die Zykluszeiten nicht benötigt, das so schreiben kann
"define GasZaehler_2 HourCounter GasZaehler:onoff:.1 # GasZaehler:onoff:.0"?

Wenn ich das tue ( um 09:39) , wird bei jeder positiven Flanke countPerDay um 2 erhöht aber value nicht verändert.

Einen Auszug aus dem Gerätelog und die Diagramme hänge ich an. Das Diagramm GasZaehler1 brauchst Du nicht berücksichtigen. Das ist der 2. Kanal vom Gaszählerkontakt und nur für mich zur Kontrolle.2013-11-19_09:02:03 GasZaehler_2 value: 0   << addLog
2013-11-19_09:02:03 GasZaehler_2 countsPerDay: 22   << addLog
2013-11-19_09:03:43 GasZaehler_2 countsPerDay: 23
2013-11-19_09:03:43 GasZaehler_2 value: 1
2013-11-19_09:06:04 GasZaehler_2 value: 0
2013-11-19_09:07:03 GasZaehler_2 countsPerDay: 24
2013-11-19_09:07:03 GasZaehler_2 value: 1
2013-11-19_09:09:25 GasZaehler_2 value: 0
2013-11-19_09:10:24 GasZaehler_2 countsPerDay: 25
2013-11-19_09:10:24 GasZaehler_2 value: 1
2013-11-19_09:11:03 GasZaehler_2 value: 1   << addLog
2013-11-19_09:11:03 GasZaehler_2 countsPerDay: 25   << addLog
2013-11-19_09:12:46 GasZaehler_2 value: 0
2013-11-19_09:13:46 GasZaehler_2 countsPerDay: 26
2013-11-19_09:13:46 GasZaehler_2 value: 1
2013-11-19_09:20:03 GasZaehler_2 value: 1   << addLog
2013-11-19_09:20:03 GasZaehler_2 countsPerDay: 26   << addLog
2013-11-19_09:21:47 GasZaehler_2 value: 0
2013-11-19_09:22:47 GasZaehler_2 countsPerDay: 27
2013-11-19_09:22:47 GasZaehler_2 value: 1
2013-11-19_09:29:03 GasZaehler_2 value: 1   << addLog
2013-11-19_09:29:03 GasZaehler_2 countsPerDay: 27   << addLog
2013-11-19_09:31:59 GasZaehler_2 value: 0
2013-11-19_09:32:58 GasZaehler_2 countsPerDay: 28
2013-11-19_09:32:58 GasZaehler_2 value: 1
2013-11-19_09:38:03 GasZaehler_2 value: 1   << addLog
2013-11-19_09:38:03 GasZaehler_2 countsPerDay: 28   << addLog
2013-11-19_09:44:05 GasZaehler_2 countsPerDay: 29
2013-11-19_09:44:05 GasZaehler_2 value: 1
2013-11-19_09:44:06 GasZaehler_2 countsPerDay: 30
2013-11-19_09:44:06 GasZaehler_2 value: 1
2013-11-19_09:48:37 GasZaehler_2 value: 1   << addLog
2013-11-19_09:48:37 GasZaehler_2 countsPerDay: 30   << addLog
2013-11-19_09:54:41 GasZaehler_2 countsPerDay: 31
2013-11-19_09:54:41 GasZaehler_2 value: 1
2013-11-19_09:54:42 GasZaehler_2 countsPerDay: 32
2013-11-19_09:54:42 GasZaehler_2 value: 1
2013-11-19_09:57:36 GasZaehler_2 value: 1   << addLog
2013-11-19_09:57:36 GasZaehler_2 countsPerDay: 32   << addLog
2013-11-19_10:06:38 GasZaehler_2 value: 1   << addLog
2013-11-19_10:06:38 GasZaehler_2 countsPerDay: 32   << addLog
2013-11-19_10:15:36 GasZaehler_2 value: 1   << addLog
2013-11-19_10:15:36 GasZaehler_2 countsPerDay: 32   << addLog
2013-11-19_10:24:33 GasZaehler_2 countsPerDay: 33
2013-11-19_10:24:33 GasZaehler_2 value: 1
2013-11-19_10:24:34 GasZaehler_2 countsPerDay: 34
2013-11-19_10:24:34 GasZaehler_2 value: 1
2013-11-19_10:24:36 GasZaehler_2 value: 1   << addLog
2013-11-19_10:24:36 GasZaehler_2 countsPerDay: 34   << addLog


Viele Grüße
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,
wenn das Ereignis zu <regexp_for_ON> kommt wird value=1
wenn das Ereignis zu <regexp_for_OFF> kommt wird value=0

wenn  <regexp_for_OFF> nicht definiert ist, bleibt value immer auf 1

Es werden dann nur noch die Ereignisse zu <regexp_for_ON> gezählt.

Ich habe meinen Test-Counter wie folgt definiert:
Zitatdefine CN.Test HourCounter testme:1
nur wenn ich folgendes schicke:
set testme state 1
zählt der counter 1x hoch, value bleibt auf 1.
schicke ich hingegen
set testme state 0
ändert sich der Counter nicht mehr.


So sollte es sein.



John

CubieTruck Docker Node-Red Tasmota Shelly Homematic-IP

Harald

#53
Hallo John,

ich hab's gerade nochmal getestet.

Definiere ich onoff:.1 und onoff:.0, wechselt valve bei der ansteigenden Flanke auf 0 und bei der abfallenden auf 1. state und countsPerDay werden bei abfallender Flanke um 1 erhöht.

Definiere ich nur onoff:.1, bleibt valve auf 1. Bei ansteigender Flanke bleiben state und countsPerDay und bei abfallender Flanke werden beide jeweils um 2 erhöht.

Habe ich da irgend etwas falsch gemacht?

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

John

Hallo Harald,
kannst du mir von deinem Gaszähler bitte ein Log-vom Event-Monitor schicken oder einen Auszug von der Log-Datei
(nicht vom HourCounter, sondern vom Sensor)

Mein Pulsgeber ist ein Max-Fensterkontakt, wenn du etwas anderes verwendest muss die define clause angepasst werden.

John
CubieTruck Docker Node-Red Tasmota Shelly Homematic-IP

Harald

Hallo John,

hier meinen Eintrag für den GasZaehler in der FHEM.cfg, den Auszug aus dem EventMonitor und das Logfile des Gerätes.

Du erimmerst Dich vielleicht: Du hast damals den MAX-BetriebsstundenZähler für den MAX-Fensterkontakt entwickelt, der den Status onoff:0 bzw. 1 ins Log schreibt. Ich benutze einen FS20 KSE, der on und off meldet. Du hast mir damals freundlicherweise geholfen, dass für Dein Modul anzupassen und das läuft immer noch so.

Wenn Du noch weiteres benötigst, melde Dich bitte.

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

John

#56
Hallo Harald,
das neue Modul sollte die Flexibilität bringen alle Ereignisse ohne Kunstgriffe aufzunehmen, also auch deinen FS20 KSE.

Es sollte für den bipolaren Modus wie folgt funktionieren:
define CN.GasZaehler   HourCounter GasZaehler:on  GasZaehler:off

Das passt auch zu den natürlichen Readings des KSE-Moduls laut deiner Log-Datei:
2013-11-23 13:14:47 FS20 GasZaehler off
2013-11-23 13:17:12 FS20 GasZaehler on


Wenn du den unipolaren Modus wählst sollte es so formuliert sein:
define CN.GasZaehler   HourCounter GasZaehler:on
Dann werden nur die on-Ereignisse gezählt, also ohne Messung von Puls/Pause.

Du kommst also ohne das UserReading aus.
attr GasZaehler userReadings onoff {(ReadingsVal("GasZaehler","state",0) eq "on")?0:1;; }

Zitat
Bei ansteigender Flanke bleiben state und countsPerDay und bei abfallender Flanke werden beide jeweils um 2 erhöht.

Das resultiert direkt aus deinem Logfile bei unipolarem Modus:
Zitat2013-11-23 13:14:47 FS20 GasZaehler off
2013-11-23 13:14:47 FS20 GasZaehler onoff: 1
2013-11-23 13:14:48 FS20 GasZaehler cntStateOld: 1
2013-11-23 13:14:48 FS20 GasZaehler cntPerDay: 40
2013-11-23 13:14:48 FS20 GasZaehler Gasverbrauch_gestern_m³: 7.7
2013-11-23 13:14:48 FS20 GasZaehler Gasverbrauch_gestern_kWh: 85.8
2013-11-23 13:14:48 FS20 GasZaehler Gasverbrauch_heute_m³: 4
2013-11-23 13:14:48 FS20 GasZaehler Gasverbrauch_heute_kWh: 44.6
2013-11-23 13:14:48 FS20 GasZaehler Zaehlerstand: 513.9
2013-11-23 13:14:48 FS20 GasZaehler Verbrauch_Jahr_m³: 513.9
2013-11-23 13:14:48 FS20 GasZaehler Verbrauch_Monat_m³: 121.1
2013-11-23 13:14:48 FS20 GasZaehler Monat: 11
2013-11-23 13:14:48 FS20 GasZaehler Vormonat: 10
2013-11-23 13:14:48 FS20 GasZaehler Jahr: 2013
2013-11-23 13:14:48 FS20 GasZaehler Vorjahr: 2012
2013-11-23 13:14:48 FS20 GasZaehler onoff: 1

Das Reading onoff kommt ja tatsächlich 2x vor und wird demnach 2x gezählt.

Eigentlich macht dieser Modus bei funkbezogenen Gebern keinen Sinn, da hier der Status ggf. zyklisch (z.B. jede Stunde)
gesendet wird. Diese Wiederholung würde somit keine echte positive Flanke darstellen.
Das wird im bipolaren Modus verhindert, da hier ein Zustandswechsel zwingend notwendig ist.

John
CubieTruck Docker Node-Red Tasmota Shelly Homematic-IP

Harald

Hallo John,

vielen Dank für Deine ausfühlichen Erläuterungen. Jetzt weiß ich wenigstens, warum das so ist. Ich benutze das Modul im bipolarem Modus, weil ich mein GasZaehlermodul erstmal weiter betreiben will. Deshalb benötige ich auch noch das userReading, weil ich es mit meinen geringen Perlkenntnissen noch nicht geschafft habe, das auf on und off umzustellen. Aber es läuft ja auch so und ich habe die Readings, die ich haben möchte. Wenn Dein Betriebsstundenzähler mal so weit ist, dass man da auch Wochen-, Monats-, Jahres- und Gesamtzähler mit Umrechnungen in m³, kWh und Kosten implementieren kann, werde ich den alten Zähler deaktivieren. Bis dahin versuche ich, auch um zu lernen,  meinen Zähler um diese Parameter zu erweitern.

Nochmals herzlichen Dank für alles und schönen Abend noch

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,
du kannst natürlich parallel zum alten Zähler den neuen definieren.

define CounterNeu   HourCounter GasZaehler:on  GasZaehler:off

Dazu die Logfiles anlegen und mit den alten vergleichen.

John
CubieTruck Docker Node-Red Tasmota Shelly Homematic-IP

Harald

#59
Guten Morgen John,

mein Gaszähler beruht ja auf Deinem Betriebstundenzähler mit Max-Fensterkontakt. Dieses Modul gibt folgende Meldung aus:

2013.11.28 11:12:10 3: GasZaehler1.event return value: 1385633531.99662

Kannst Du mir sagen, wo die generiert wird? Ich würde sie gerne abschalten, da sie für mich derzeit nicht relevant ist.

In dem neuen Modul kann man ja die Werte der Readings per "set" manipulieren. Kannst Du mir sagen, wo diese Funktion eingerichtet wird? Ich möchte versuchen, dass in mein Gaszäher-Modul zu implementieren.

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