Modul HourCounter - Betriebsstundenzähler mit einem Fensterkontakt

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

Vorheriges Thema - Nächstes Thema

Charles

Hallo John,
danke für die schnelle Hilfe. Die Plots sind jetzt viel übersichtlicher.
Mit der Ausgabe der userReadings kämpfe ich nochattr HZ_Readings userReadings pulseTimeIncrementMinutes:pulseTimeIncrement {ReadingsVal("HZ_Readings","pulseTimeIncrement",0)/60;;}, pulseTimePerDayVerbrauch:pulseTimePerDay {ReadingsVal("HZ_Readings","pulseTimePerDay",0)/3600*2.6;;}
attr HZ_Readings valueFormat { countsPerDay => "%.0f Heizphasen", pulseTimeIncrementMinutes => "%.2f min.", pulseTimePerDayVerbrauch => "%.2f l"}

die valueFormat-Zeile kennt die Werte von pulseTimeIncrementMinutes nicht und verwendet stattdessen pulseTimeIncrement ohne Formatierung.
Wo liegt denn mein Fehler?

Danke
Charles
Raspberry · FB 7590 · CUL · FS20 · MAX · ESP

John

Hallo Charles
sind den die neuen Readings in der Web-Ansicht schon zu sehen ?

Bitte folgendes reinstellen
list HZ_Readings

John


CubieTruck Docker Node-Red Tasmota Shelly Homematic-IP

Herr 3x

Hallo,

das Modul gefällt mir sehr gut, vielen Dank an John.
Ich benutze es um meinen Gaszähler mit einem Reedkontakt und einem Homematic Fensterkontakt auszulesen.
Der Fensterkontakt ist erst mal ein Test, vermutlich werde ich zukünftig auf eine verkabelte Installation umschwenken, da das häufige Schalten doch ganz schön auf die Batterien geht.

Der Zähler gibt einen Impuls, wenn die 0,001er Stelle ungefähr bei der 9 und 0 ist, also ein Impuls pro 0,01 m3
Der Fensterkontakt sendet auch brav ein "open" bei der 9 und dann ein "close" bei der 0. Soweit kein Problem.

Mich interessiert der Tagesverbrauch, das ist mit countsPerDay auch prima gelöst. Auf der Webseite des örtlichen Netzbetreibers kann man den Brennwert in [kWh/m3] und einen Fummelfaktor "Zustandszahl" nachschauen. Zusammen gibt das:
countsPerDay*Brennwert*Fummelfaktor*0,01

Allerdings würde ich ich gern die aktuell verbrauchte Leistung wissen, was mit dem Script nicht ohne weiteres geht. Jedenfalls mit meinem Know-How als Fhem-Einsteiger.

Da die Leistung [W| die differenzierte Arbeit [J] oder [Ws] ist brauche ich die Zeit pro 0,01 m3. Leider gibt HourCounter nur die Zeit für den Puls und die Pause aus, nicht für die Periode (oder ich bin zu doof es zu finden).

Ich habe mir darum mal erlaubt HourCounter mit meinen nicht vorhandenen Perlweissen anzupassen, dass die Periodenzeit pulsepausePeriodberechnet wird. Scheint einigermaßen zu klappen.

Einen Plot und das modifizierte 98_HourCounter.pm habe ich mal angehangen.

Grüße

Herr 3x

Charles

#108
Hallo John,

die neuen Readings werden (noch??) nicht angezeigt.

list HZ_readungs brachte FolgendesInternals:
   DEF        TYPE=HourCounter:countsPerDay,pulseTimeIncrement,pulseTimePerDay
   NAME       HZ_Readings
   NR         222
   NTFY_ORDER 50-HZ_Readings
   STATE      Initialized
   TYPE       readingsGroup
   Content:
     CN.Test    1
   DEVICES:
     ARRAY(0x1205010)
   Fhem:
     last_update 1388233287.33115
Attributes:
   alias      Anzahl der Heizphasen / Länge der letzten Phase / Tagesverbrauch
   mapping    Heizungsmonitoring
   nostate    0
   notime     1
   room       HEIZUNG
   userReadings pulseTimeIncrementMinutes:pulseTimeIncrement {ReadingsVal("HZ_Readings","pulseTimeIncrement",0)/60;}, pulseTimePerDayVerbrauch:pulseTimePerDay {ReadingsVal("HZ_Readings","pulseTimePerDay",0)/3600*2.6;}
   valueFormat { countsPerDay => "%.0f Heizphasen", pulseTimeIncrementMinutes => "%.2f min.", pulseTimePerDayVerbrauch => "%.2f l"}
   verbose    5


Charles
Raspberry · FB 7590 · CUL · FS20 · MAX · ESP

John

Hallo Charles,
da haben wir uns gründlich missverstanden.

Alles was ich zuvor beschrieben haben bezieht sich auf die Instanz HourCounter,
nicht auf ReadingsGroup.

Am besten schickst du mir mal die Definition vom Hourcounter.
Das zuvor beschriebene UserReading gehört natürlich zum HourCounter.

1. Schritt:
In der aktuellen HourCounter-Instanz ist das UserReading zu erzeugen, das den von dir gewünschten Wert aufnimmt.

John
CubieTruck Docker Node-Red Tasmota Shelly Homematic-IP

John

@Herr 3x

was spricht dagegen beim Event zu pauseTimeIncrement, die Summe periode = pauseTimeIncrement + pulseTimeIncrement zu bilden
und hierzu ein UserReading anzulegen ?

John



CubieTruck Docker Node-Red Tasmota Shelly Homematic-IP

Herr 3x

Hallo John,

Dagegen spricht nix, außer dass ich nicht drauf gekommen bin  ??? Und ich mir anschauen wollte, wie das Script funktioniert.
Wie immer gibt es mehr als eine Lösung.

Grüße
Herr 3x

Charles

#112
Hallo John,

bin gerade erst wieder heimgekommen.
Da sieht man mal, welche Fehler passieren können, wenn sich jemand nicht auskennt.
Ich hab den Code jetzt hier eingefügtdefine CN.Test HourCounter SHUTTER.BRENNER:onoff:.1 SHUTTER.BRENNER:onoff:.0
attr CN.Test userReadings pulseTimeIncrementMinutes:pulseTimeIncrement {ReadingsVal("CN.Test","pulseTimeIncrement",0)/60;;}, pulseTimePerDayVerbrauch:pulseTimePerDay {ReadingsVal("CN.Test","pulseTimePerDay",0)/3600*2.6;;}

#log
define CN.Test.File FileLog ./log/CN.Test-%Y.log (CN\.Test:.*)
attr CN.Test.File room LOGS

# plot
define SVG_CN.Test.File_1 SVG CN.Test.File:SVG_CN.Test.File_1:CURRENT
attr SVG_CN.Test.File_1 label "Ölverbrauch heute: ?"
attr SVG_CN.Test.File_1 room HEIZUNG
attr SVG_CN.Test.File_1 plotsize 800,320
attr SVG_CN.Test.File_1 verbose 5

Das ist Alles für HourCounter.
Die reading Group sieht so aus:#-------------- Reading Group --------------------------
define HZ_Readings readingsGroup TYPE=HourCounter:countsPerDay,pulseTimeIncrementMinutes,pulseTimePerDayVerbrauch
attr HZ_Readings room HEIZUNG
attr HZ_Readings nostate 0
attr HZ_Readings notime 1
attr HZ_Readings mapping Heizungsmonitoring
attr HZ_Readings alias Anzahl der Heizphasen / Länge der letzten Phase / Tagesverbrauch
attr HZ_Readings valueFormat { countsPerDay => "%.0f Heizphasen", pulseTimeIncrementMinutes => "%.1f min.", pulseTimePerDayVerbrauch => "%.2f l"}

Habs jetzt hinbekommen. Reading Group gibt die Minuten und die verbrauchten Liter aus.

Danke für die Hilfe
Charles

Charles
Raspberry · FB 7590 · CUL · FS20 · MAX · ESP

danni-k

Hallo zusammen,

und Respekt für den "HourCounter".
Allerdings bin ich grad irgendwie ratlos: wie krieg ich das Modul mit einem FHT80TF-2 zum Laufen ?
Das Teil liefert zwar nur Window: Open bzw. Closed, aber das sollte doch ebenso tun ???

Hier der Auszug aus der fhem.cfg:
# Stundenzähler
attr CUL_FHTTK_069706 userReadings onoff {(ReadingsVal("CUL_FHTTK_069706","state",0) eq "Open")?1:0;; }

define CN.Test HourCounter CUL_FHTTK_069706:onoff:1 CUL_FHTTK_069706:onoff:0
define CN.Test.File FileLog ./log/CN.Test-%Y.log (CN\.Test:.*)


Danke im voraus,
   danni-k

John

Hi danni-k

wenn das stimmt
ZitatDas Teil liefert zwar nur Window: Open bzw. Closed

musst du daran noch feilen:

Zitatdefine CN.Test HourCounter CUL_FHTTK_069706:onoff:1 CUL_FHTTK_069706:onoff:0

z.B via
Zitatdefine CN.Test HourCounter CUL_FHTTK_069706:Open CUL_FHTTK_069706:Closed

John
CubieTruck Docker Node-Red Tasmota Shelly Homematic-IP

danni-k

Hallo John,

danke für die schnelle Antwort !
Tut aber leider auch nicht.
Die Bezeichnungen hab ich aus der Definition für den Plot des Fensterkontaktes, das sollte doch passen ?
(s. Anhang)
Hab beides probiert, also das device solo und auch device.Window:Open.
Im Logfile zum Kontakt gehen die Signale auch ein (zB: Window: Open).
Im fhem-Log kann ich auch keinen Fehler finden.

John

Hallo danni-k,
schick doch mal einen Auszug aus der Log-Datei zu CUL_FHTTK_069706 mit eine Open und Closed- Eintrag.

John
CubieTruck Docker Node-Red Tasmota Shelly Homematic-IP

danni-k

Hallo John,

das Log sieht so aus:
2013-12-29_18:29:04 CUL_FHTTK_069706 Window: Open
2013-12-29_18:30:05 CUL_FHTTK_069706 Window: Open
2013-12-29_18:31:06 CUL_FHTTK_069706 Window: Closed
2013-12-29_18:32:07 CUL_FHTTK_069706 Window: Closed
2013-12-29_18:34:20 CUL_FHTTK_069706 Window: Open 
2013-12-29_18:35:10 CUL_FHTTK_069706 Window: Open 
2013-12-29_18:39:14 CUL_FHTTK_069706 Window: Open 
2013-12-29_18:47:23 CUL_FHTTK_069706 Window: Open 
2013-12-29_18:51:26 CUL_FHTTK_069706 Window: Open 
2013-12-29_18:55:30 CUL_FHTTK_069706 Window: Open 
2013-12-29_18:59:34 CUL_FHTTK_069706 Window: Open 
2013-12-29_19:03:38 CUL_FHTTK_069706 Window: Open 
2013-12-29_19:07:42 CUL_FHTTK_069706 Window: Open 
2013-12-29_19:11:47 CUL_FHTTK_069706 Window: Open 
2013-12-29_19:15:50 CUL_FHTTK_069706 Window: Open 
2013-12-29_19:19:54 CUL_FHTTK_069706 Window: Open 
2013-12-29_19:23:58 CUL_FHTTK_069706 Window: Open 

John

Hi danni-k

es wird klarer, nächster Versuch mit
define CN.Test HourCounter CUL_FHTTK_069706:Window:.Open CUL_FHTTK_069706:Window:.Closed

John

CubieTruck Docker Node-Red Tasmota Shelly Homematic-IP

danni-k

Hallo John,

perfekt, so funktioniert's:
define CN.Test HourCounter CUL_FHTTK_069706:Window:.Open CUL_FHTTK_069706:Window:.Closed
Mir ist zwar nicht klar, weshalb vor Window ein ":" steht und kein ".", und warum es ":.Open" sein muss...
Werd mich da wohl noch ne Weile in die Syntax einarbeiten müssen.

Aber sei's drum: Danke !

und guten Rutsch !

danni-k