Modul HourCounter - Betriebsstundenzähler mit einem Fensterkontakt

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

Vorheriges Thema - Nächstes Thema

netbus

Zitat von: John am 03 Juli 2014, 23:46:06
Hallo Mitch,
du solltest dir das im ersten Beitrag erwähnte Wiki vornehmen.

Der Hourcounter berechnet zunächst  Puls- und Pausendauer eines Ereignisses.

Du brauchst als genau das Event bei der Definition, das den EIN-Zustand und den AUS-Zustand beschreibt.

John
Hallo,
Ich bin auch nach der Suche wie Mitch um den Stromverbrauch auszuwerten. Zb in Monatswerten.
Das Log meiner Steckdose sieht so aus.
2014-07-18_10:49:55 Steckdose_Pwr energy: 0
2014-07-18_10:49:55 Steckdose_Pwr power: 0.08
2014-07-18_10:49:55 Steckdose_Pwr current: 0
2014-07-18_10:49:55 Steckdose_Pwr voltage: 233.6
2014-07-18_10:49:55 Steckdose_Pwr frequency: 49.99
2014-07-18_10:49:55 Steckdose_Pwr eState: E: 0 P: 0.08 I: 0 U: 233.6 f: 49.99

Wie könnte jetzt eine HourCounter definition aussehen?

hyper2910

Hallo zusammen,

ich finde die Idee nicht schlecht.

Ich spiele mit der Idee damit meinen Ölvorrat zu überwachen!  Kann man im fhem auch rechnen?


Mir schwebt folgendes vor.

ich kenne die Brennerlaufzeit, den Ölverbrauch pro Stunde habe ich ausgelitert, also kenne ich diesen auch relativ genau.

Jetzt könnte ich darüber ja die aktuell verbrauchte Menge Öl errechnen.  Zusätzlich kenne ich noch meine aktuelle Öl menge, jetzt könnte man doch über eine Grafik einfach die noch vorhandene Menge Öl dich anzeigen lassen.

Hat das jemand schon gemacht und hat ggf. ein paar Zeilen Code dafür über!


Gruss Dirk
Cubietruck mit FHEM, CUL V3 443MHz, 2 x CULV3 868MHz, Milights, Max Heizungssteuerung, Homematic, IT,

John

#197
@netbus

Der Hourcounter kann kein Integral über einen analogen Wert berechnen.
Daher sehe ich für deine Problemstellung keine Lösung damit.

@hyper2910
Das sollte möglich sein.
HourCounter liefert ja die Laufzeiten. Damit lässt sich bei bekanntem Verbrauch/Zeit der relative Verbrauch berechnen.

John
CubieTruck Docker Node-Red Tasmota Shelly Homematic-IP

pappn

@hyper2910
Mit Johns HourCounter Modul und ein paar kleineren Ergänzungen des UtilsHourCounter Moduls (siehe Wiki) lässt sich soetwas leicht realisieren.
Bei mir sieht es zurzeit wie im Anhang aus.

Pappn
"When all else fails, read the instructions."

CUL868, RFXTFX433 und CCU3
FS20, S300TH, UNIRoll, Homematic IP, OZW672, diverse HOMEEASY, IT kompatible und China Zeugs

hyper2910

hi pappn,

vielen Dank,


das mit dem Diagramm etc. ist klar, aber wie hast du die TabellenWerte angelegt und gerechnet.

Vielleicht kannst du mir mal deinen Code verraten!


Gruss Dirk
Cubietruck mit FHEM, CUL V3 443MHz, 2 x CULV3 868MHz, Milights, Max Heizungssteuerung, Homematic, IT,

pappn

Gerne. Für die Tabellen habe ich Readingsgroup verwendet.
Auszug aus der Config.
define Brenneruebersicht_1 readingsGroup <>,<%secur_smoke_detector> \
BrennerTest:<Starts> \
BrennerTest:<Heute>,countsPerDay,<&nbsp;;&nbsp;;&nbsp;;>,<Gestern>,appCountsPerDay \
BrennerTest:<Aktuelle&nbsp;;Woche>,appCountsPerWeekTemp,<&nbsp;;&nbsp;;&nbsp;;>,<Letzte&nbsp;;Woche>,appCountsPerWeek \
BrennerTest:<Aktueller&nbsp;;Monat>,appCountsPerMonthTemp,<&nbsp;;&nbsp;;&nbsp;;>,<Letzter&nbsp;;Monat>,appCountsPerMonth \
BrennerTest:<Aktuelles&nbsp;;Jahr>,appCountsPerYearTemp,<&nbsp;;&nbsp;;&nbsp;;>,<Letztes&nbsp;;Jahr>,appCountsPerYear \
BrennerTest:<Gesamtstarts>,countsOverall
attr Brenneruebersicht_1 alias 02 Brennerstarts neu
attr Brenneruebersicht_1 group 01 Brenner/Pumpen
attr Brenneruebersicht_1 mapping &nbsp;;
attr Brenneruebersicht_1 room 00 Kurzstatus
attr Brenneruebersicht_1 valueStyle {'style="color:green;;;;text-align:right"'}

define Brenneruebersicht_2 readingsGroup <>,<%time_clock> \
BrennerTest:<Laufzeiten> \
BrennerTest:<letzter&nbsp;;Zyklus>,pulseTimeIncrement \
BrennerTest:<Heute>,appOpHoursPerDayTemp,<&nbsp;;&nbsp;;&nbsp;;>,<Gestern>,appOpHoursPerDay \
BrennerTest:<Aktuelle&nbsp;;Woche>,appOpHoursPerWeekTemp,<&nbsp;;&nbsp;;&nbsp;;>,<Letzte&nbsp;;Woche>,appOpHoursPerWeek \
BrennerTest:<Aktueller&nbsp;;Monat>,appOpHoursPerMonthTemp,<&nbsp;;&nbsp;;&nbsp;;>,<Letzter&nbsp;;Monat>,appOpHoursPerMonth \
BrennerTest:<Aktuelles&nbsp;;Jahr>,appOpHoursPerYearTemp,<&nbsp;;&nbsp;;&nbsp;;>,<Letztes&nbsp;;Jahr>,appOpHoursPerYear \
BrennerTest:<Gesamtlaufzeit>,pulseTimeOverall
attr Brenneruebersicht_2 alias 02 Brennerlaufzeiten neu
attr Brenneruebersicht_2 group 01 Brenner/Pumpen
attr Brenneruebersicht_2 mapping &nbsp;;
attr Brenneruebersicht_2 room 00 Kurzstatus
attr Brenneruebersicht_2 valueFormat { if($READING eq "pulseTimeOverall"){sprintf("%.2f Stunden", $VALUE/3600);;}elsif($READING eq "pulseTimeIncrement"){sprintf("%.2f Minuten", $VALUE/60);;}else{sprintf("%.2f Stunden", $VALUE);;}}
attr Brenneruebersicht_2 valueStyle {'style="color:green;;;;text-align:right"'}

define Brenneruebersicht_3 readingsGroup <>,<%measure_water_meter> \
BrennerTest:<Verbr&aumluche> \
BrennerTest:<Heute>,appOpHoursPerDayTemp,<&nbsp;;&nbsp;;&nbsp;;>,<Gestern>,appOpHoursPerDay \
BrennerTest:<Aktuelle&nbsp;;Woche>,appOpHoursPerWeekTemp,<&nbsp;;&nbsp;;&nbsp;;>,<Letzte&nbsp;;Woche>,appOpHoursPerWeek \
BrennerTest:<Aktueller&nbsp;;Monat>,appOpHoursPerMonthTemp,<&nbsp;;&nbsp;;&nbsp;;>,<Letzter&nbsp;;Monat>,appOpHoursPerMonth \
BrennerTest:<Aktuelles&nbsp;;Jahr>,appOpHoursPerYearTemp,<&nbsp;;&nbsp;;&nbsp;;>,<Letztes&nbsp;;Jahr>,appOpHoursPerYear \
BrennerTest:<Gesamtverbrauch>,pulseTimeOverall,<&nbsp;;&nbsp;;&nbsp;;>,<Tankinhalt>,appTanklevel
attr Brenneruebersicht_3 alias 02 Brennerverbr&aumluche neu
attr Brenneruebersicht_3 group 01 Brenner/Pumpen
attr Brenneruebersicht_3 mapping &nbsp;;
attr Brenneruebersicht_3 room 00 Kurzstatus
attr Brenneruebersicht_3 valueFormat { if($READING eq "pulseTimeOverall"){sprintf("%.2f Liter", $VALUE*0.000630901964);;}elsif($READING eq "appTanklevel"){sprintf("%.2f Liter", $VALUE)}else{sprintf("%.2f Liter", $VALUE*3600*0.000630901964);;} }
attr Brenneruebersicht_3 valueStyle {'style="color:green;;;;text-align:right"'}


Anbei noch die von mir angepasste UtilsHourCounter.pm. Hier wird auch der Tankinhalt "appTanklevel" mitgerechnet.
"When all else fails, read the instructions."

CUL868, RFXTFX433 und CCU3
FS20, S300TH, UNIRoll, Homematic IP, OZW672, diverse HOMEEASY, IT kompatible und China Zeugs

hyper2910

#201
Danke,

kannst du mir den Rest, welcher damit zusammenhängt auch mal zukommen lassen, ich bekomme es irgendwie nicht hin.


aus dem WIKI, habe ich alle übernommen,


jedoch bekomme ich hier einen Fehler:

define CN.Test.FileDay FileLog ./log/CN.Test-Day-%Y.log CN.Test:app\w+ (Utilization|PerHour|PerDay|PerWeek|PerMonth|PerYear)(?!Temp).*

und zwar:

wrong syntax: define <name> FileLog filename regexp


Gruss DIrk
Cubietruck mit FHEM, CUL V3 443MHz, 2 x CULV3 868MHz, Milights, Max Heizungssteuerung, Homematic, IT,

Spuckiii

Hallo ich versuche grade den Hour Counter einzurichten. Ich habe einen Raspberry pi auf dem fhem läuft und einen arduiono mega, den ich per usb verbunden habe Firmata usw. alles installiert. Ich verwende folgenden S0Zähler DRS155DC-V3. Dieser sendet als Readings reading on off. Die DEF für den Counter ist wie folgt:

hwr_Gaszaehler_Reedkontakt:reading:.on hwr_Gaszaehler_Reedkontakt:reading:.off
(lasst euch nicht von dem Namen verwirren.) Aktuell gibt der Zähler mir das aus siehe Bild.
Wenn ich jetzt richtig rechner bei 2000 Impulsen pro KW/h müsste ich dann (grob) 9 KWh Verbraucht haben. Das kann doch nicht stimmen. Habe ich einen Denkfehler?

John

Hi Spuckiii,

zeig uns doch mal dein EventLog , wenn der Sensor aktiv ist.

John
CubieTruck Docker Node-Red Tasmota Shelly Homematic-IP

Spuckiii

Hier ein kleiner Ausschnitt siehe Bild

Konfig von dem "Reedkontakt":
hwr_Gaszaehler_Reedkontakt
hwr_Gaszaehler_Reedkontakt Internals
DEF   
22
IODev
firmata
NAME
hwr_Gaszaehler_Reedkontakt
NR
40
PIN
22
STATE
on
TYPE
FRM_IN
Readings
reading
on
2014-08-29 10:36:50
state
Initialized
2014-08-28 20:18:44
hwr_Gaszaehler_Reedkontakt Attributes
IODev
firmata
deleteattr
event-on-change-reading
.*
deleteattr
internal-pullup
on
deleteattr
room
HWR
deleteattr
stateFormat
reading
deleteattr

John

Hi Spucckiii,

bist du dir sicher, dass du mit FHEM einen schnellen Zähler realisieren willst ?

Dafür ist FHEM sicher nicht gebaut worden.

Wie oft kommt den in der Sekunde ein Flankenwechsel ?

Du solltest die Zählerei in diesem Fall dem Arduino überlassen.

Das kann nicht gut gehen.

John
CubieTruck Docker Node-Red Tasmota Shelly Homematic-IP

Spuckiii

Hm. Was heißt schneller Zähler, ist ein normaler S0Zähler, allerdings sendet dieser Impulse von 30 Millisekunden, die anderen so um 60 - 90.
Dann muss ich mal gucken wie ich das mache...  aber dass das so gravierende Unterschiede zu einem 90 ms bei 1000 Impulsen sein soll...
Danke trotzdem. :-)

pappn

Zitat von: hyper2910 am 28 August 2014, 22:44:09
jedoch bekomme ich hier einen Fehler:

define CN.Test.FileDay FileLog ./log/CN.Test-Day-%Y.log CN.Test:app\w+ (Utilization|PerHour|PerDay|PerWeek|PerMonth|PerYear)(?!Temp).*

und zwar:

wrong syntax: define <name> FileLog filename regexp

in der regexp solltest du kein Leerzeichen haben. Also mal das Leerzeichen zwischen ...\w+ und (Util... löschen.
Ich meine den Fehler habe ich auch gemacht.

Christof
"When all else fails, read the instructions."

CUL868, RFXTFX433 und CCU3
FS20, S300TH, UNIRoll, Homematic IP, OZW672, diverse HOMEEASY, IT kompatible und China Zeugs

hyper2910

#208
danke, das war es!

momentan sieht es so aus.



Was ich momentan nicht hinbekomme, da ich es nicht finde, ist der Tankinhalt, bzw. was noch im Tankdrin ist und wo der Verbrauch berechnet wird.

(http://unbenannt.png)
Cubietruck mit FHEM, CUL V3 443MHz, 2 x CULV3 868MHz, Milights, Max Heizungssteuerung, Homematic, IT,

pappn

Der Tankinhalt wird im Modul 99_UtilsHourCounter_CE einmal am Tag (bei Tageswechsel) berechnet.
Zeile 143:my $appTanklevel = ReadingsVal ($name,'appTanklevel',0 )-$pulseTimePerDay*0.000630901964;

Der Wert 0.000630901964 ist dabei der Oelverbrauch je Sekunde und muss von dir an deine Gegebenheiten angepasst werden.
Den gleichen Wert findest du auch in attr Brenneruebersicht_3 valueFormat der Readingsgroup Definitionen. Hier ist er dann auch anzupassen.

Den aktuelen Wert für den Tankinhalt kannst du mit setreading <device> <reading> <value> setzen.
Bei mir sieht das aktuell dann so aus:setreading BrennerTest appTanklevel 4456.01856228562

Christof
"When all else fails, read the instructions."

CUL868, RFXTFX433 und CCU3
FS20, S300TH, UNIRoll, Homematic IP, OZW672, diverse HOMEEASY, IT kompatible und China Zeugs