Modul HourCounter - Betriebsstundenzähler mit einem Fensterkontakt

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

Vorheriges Thema - Nächstes Thema

fhainz

Hallo John!

Ich nutzte das HourCunter Modul jetzt seit einiger Zeit zum Darstellen meines Stromverbrauches und bin von den unzähligen readings wirklich begeistert. Hab mir jetzt die einzelnen Werte in eine readingsGroup gesteckt und lasse sie mir so anzeigen.

Was mir irgendwie noch fehlt ist ein Jahres Zähler, gleich wie Wochen/Monat Zähler, den ich dann zB am Abrechnungstag auf 0 setzten kann. 
Was meinst du, kann man so etwas noch einbauen?

Grüße

strauch

@fhainz, magst du den "Quelltext" von dem Readingsgroup veröffentlichen?
FHEM 5.6 VMware mit Debian. 1 CUL für FS20 und HMLAN für Homematic, HM-CC-RT-DN, HM-LC_Sw1PBU-FM, HM-LC-Bl1PBU-FM,  HM-SEC-SC, HM-SEC-SC-2, HM-LC-Sw1-Pl2, HM-Sec-RHS, ASH2200, FHT80B, S20KSE, Sonos, XBMC, FB_Callmonitor, SMLUSB, Arduino Firmata, uvm.

John

#167
@fhainz
ich habe die Jahres-Aggregation nun in Vesion 1.02  hinzugefügt.

Es gibt nun die zusätzlichen Readings
tickYear, appOpHoursPerDay,appOpHoursPerDayTemp ,appOpHoursPerYear ,appOpHoursPerYearTemp.

define CN.Event notify
ist wie im Wiki angegeben um tickYear zu erweitern.

Bitte testen.
Ein kurze Feedback wäre hilfreich.

John
CubieTruck Docker Node-Red Tasmota Shelly Homematic-IP

fhainz

Danke für die schnell Umsetzung!
Habs inkl. yearChange getestet und es funktioniert super! Nochmals danke für das klasse Modul!

@strauch: klar, kein Problem
define:
define stromverbrauchAllgemeinRG readingsGroup d_stromverbrauchAllgemein:,<Aktuell>,power,<Durchschnitt Heute / Monat>,<{ReadingsVal("d_stromverbrauchAllgemein","power_avg_day","").' W / '.ReadingsVal("d_stromverbrauchAllgemein","power_avg_month","").' W';;}>\
d_stromverbrauchAllgemein:,<Min / Max Heute>,<{ReadingsVal("d_stromverbrauchAllgemein","power_min_day","").' W / '.ReadingsVal("d_stromverbrauchAllgemein","power_max_day","").' W';;}>,<Min / Max Monat>,<{ReadingsVal("d_stromverbrauchAllgemein","power_min_month","").' W / '.ReadingsVal("d_stromverbrauchAllgemein","power_max_month","").' W';;}>\
hourCounterAllgemein:,<Heute>,countsPerDay,<Gestern>,appCountsPerDay \
hourCounterAllgemein:,<Aktuelle Stunde>,appCountsPerHourTemp,<Letzte Stunde>,appCountsPerHour\
hourCounterAllgemein:,<Aktuell Woche>,appCountsPerWeekTemp,<Letzte Woche>,appCountsPerWeek\
hourCounterAllgemein:,<Aktuells Monat>,appCountsPerMonthTemp,<Letztes Monat>,appCountsPerMonth\
hourCounterAllgemein:,<Aktuells Jahr>,appCountsPerYearTemp,<Letztes Jahr>,appCountsPerYear\
hourCounterAllgemein:,<Gesamt>,countsOverall,<Start der Messung>,clearDate
attr stromverbrauchAllgemeinRG alias Stromverbrauch
attr stromverbrauchAllgemeinRG group Stromverbrauch Allgemein
attr stromverbrauchAllgemeinRG mapping &nbsp;;
attr stromverbrauchAllgemeinRG nameStyle { if($READING eq "Start der Messung"){ 'style="font-size:11px"' } }
attr stromverbrauchAllgemeinRG noheading 1
attr stromverbrauchAllgemeinRG room 5.2 Strom
attr stromverbrauchAllgemeinRG valueFormat { if($DEVICE eq "d_stromverbrauchAllgemein"){ sprintf("%.2f W", $VALUE);;}elsif($READING eq "clearDate"){ sprintf("%s", $VALUE);; } else{sprintf("%.2f kWh", $VALUE/1000);;} }
attr stromverbrauchAllgemeinRG valueStyle { stromverbrauchGesamtAllgemeinRGvalueStyle($DEVICE,$READING,$VALUE);; }


99_myUtils.pm
sub stromverbrauchGesamtAllgemeinRGvalueStyle($$$){

  my $device = shift;
  my $reading = shift;
  my $value = shift;
 
  # hourCounter Values sind in W
 
  if( $reading eq "state" ){
    if( $value > 3000 ){
      'style="color:red"'
    }
    elsif( $value > 2000 ){
      'style="color:orange"'
    }
    else{
    'style="color:green"'
  }
  }
  elsif( ( $reading eq "power_avg_day" || $reading eq "power_avg_month" ) ){
    if( $value > 300 ){
      'style="color:red"'
    }
    elsif( $value > 250 ){
      'style="color:orange"'
    }
    else{
    'style="color:green"'
  }
  }
  elsif( ( $reading eq "countsPerDay" || $reading eq "appCountsPerDay" ) ){
    if( $value > 6000 ){
      'style="color:red"'
    }
    elsif( $value > 4000 ){
      'style="color:orange"'
    }
    else{
    'style="color:green"'
  }
  }
  elsif( ( $reading eq "countsPerWeek" || $reading eq "appCountsPerWeek" ) && $value > 35000 ){
    'style="color:red"'
  }
  elsif( ( $reading eq "countsPerMonth" || $reading eq "appCountsPerMonth" ) && $value > 140000 ){
    'style="color:red"'
  }
  elsif( $reading eq "clearDate" ){
    'style="font-size:11px"'
  }
  else{
    'style="color:green"'
  }
}


Das average modul brauchst du auch. zB
define Temp_Hum_Avg average .*:(temperature|humidity|power).*

d_stromverbrauchAllgemein = dummy in dem im power reading der aktuelle verbrauch steht. das average Modul erstellt die min/max werte.
hourCounterAllgemein = der hourCounter selbst.

Da mein Stromzähler 1000 impulse/kwh hat, kann ich die generieren hourCounter werte einfach mit value format formatieren (durch 1000) und ich hab meine kWh. Wenn dein Zähler keine 1000 impulse abgibt dann müsstest du die werte entsprechend umrechnen.

Wichtig ist noch das im define der readingsGroup alle Leerstellen mit &nbsp; ersetzt werden.

Ich hoffe ich hab alles :D

Grüße

cwagner

Hallo John,

die Ergänzungen von HourCounter habe ich jetzt seit einer Woche im Einsatz und bin schier begeistert: Viele Statistiken, die ich seit Jahtren von Hand mache zur Erfkolgskontrolle meiner diversen Projekte kann ich nun "elektrisch". Klasse! Mit der Jahres-Summe habe ich jetzt ein rundes Paket...

Herzliche Grüße

Christian
PI 2B+/3B+ Raspbian 12, Perl 5.36.0, FHEM 6.3: 295 Module in ConfigDB: Steuerung Heizkessel, FBH, Solarthermie, kontr. Lüftung mit WRG. Smarthome u.a. HMCUL, 1-Wire (FT232RL ; DS2480B), EnOcean (TCM EPS3), MQTT2. DOIF, PID20, Threshold, OWX; Micropelt IRTV, Volkszähler, SolarForecast; MariaDB

fhainz

Hallo John,

checkst du das Modul mal ein?


Grüße

John

Hallo fhainz,

ich habe keinen Developer Status. Daher wird das vorerst nichts mit dem Einchecken.

John
CubieTruck Docker Node-Red Tasmota Shelly Homematic-IP

andreas.maurer

Hallo fhainz,

was hast du denn als d_stromverbrauchAllgemein definiert?
Die Werte fehlen mir alle.

Andreas

fhainz

Hallo!

Internals:
   CFGFN
   CHANGED
   NAME       d_stromverbrauchAllgemein
   NR         292
   STATE      367.49
   TYPE       dummy
   Readings:
     2014-05-17 14:47:44   ampere          1.00
     2014-05-04 12:09:53   cosphi          0.75
     2014-05-27 20:31:14   impulseSec      1401215474.32596
     2014-05-27 20:31:14   impulseTime     2014-05-27 20:31:14
     2014-05-27 20:31:14   power           367.49
     2014-05-27 20:12:51   powerPeak       0
     2014-05-27 20:31:04   power_avg_day   223.3
     2014-05-27 20:31:04   power_avg_month 254.2
     2014-05-27 20:31:04   power_cum_day   16496055.93
     2014-05-27 20:31:04   power_cum_month 611857271.309995
     2014-05-27 20:04:36   power_max_day   2533.3
     2014-05-10 17:14:50   power_max_month 7434.5
     2014-05-27 16:31:42   power_min_day   52.4
     2014-05-09 08:25:44   power_min_month 0.1
     2014-05-17 11:19:39   state           314.45
     2014-05-04 12:09:02   volt            400
Attributes:
   event-min-interval state:31,power:31,ampere:31
   group      Arbeits Dummys
   room       8.1 Parameter
   stateFormat power
   verbose    4


Ein dummy zum speichern. Die Werte kommen aus diesem Script zur Strommessung.

Grüße



backbone10

Hi,
kann mir bitte wer erklären wie ich den "CN.BRENNER pulseTimeIncrement" - so heisst der Counter für die letzte Einschaltdauer - über webcmd oder telnet auf 0 rücksetzen kann?? Genau den finde ich leider nicht in der Auswahldropbox. Ich möchte aber nur den einen Counter rücksetzen..

Danke
bb10

John

Hi backbone10,

ich möchte die Funktionalitäten des Moduls nicht überfrachten, daher habe ich auf Dinge, in denen ich "zunächst"
keinen Sinn sehe verzichtet.

Wozu benötigst du denn den einen Reset von pulseTimeIncrement ?

John

CubieTruck Docker Node-Red Tasmota Shelly Homematic-IP

backbone10

#176
Hi,
danke für die Antwort.

Du hast mir vor längerer Zeit geholfen einen Alarm zu generieren, wenn bestimmte Laufzeiten eines Verbrauchers eintreten. Das funktioniert super, aber wenn dieser Zustand eintritt und ich dann den Alarm manuell rücksetzte, gibt das Modul um Mitternacht nochmal den "alten" pulseTimeIncrement aus, sofern nicht eine neuerliche Einschaltung war -  was bei mir der Fall ist. Das generiert dann nochmal den Alarm....
Daher wäre es ideal den Counter bei Bedarf  rückzusetzen oder die Ausgabe beim Tageswechsel zu unterdrücken. Ich habe eher geglaubt, das kann man leicht rücksetzten und nur ich weiss  nicht, wie es geht :)

LG
bb10


John

Hallo  backbone10
mit Version 1.03 hat man nun die Möglichkeit über den Setter
die Readings pulseTimeIncrement und pauseTimeIncrement zu verändern.

Die aktuelle Version findet sich nun immer als Anhang zum ersten Beitrag in diesem Thread.

John
CubieTruck Docker Node-Red Tasmota Shelly Homematic-IP

pappn

#178
Hallo John,

vielen Dank für die viele Arbeit die du in dieses Thema investierst. Nachdem ich eine deiner ersten Versionen für meinen Oelbrenner adaptiert hatte, habe ich das Thema eine ganze Weile nicht mehr verfolgt.

Ich bin aber jetzt wieder darauf gestoßen und begeistert von den aktuellen Modulen und der Flexibilität die man damit hat und lasse den HourCounter zur Zeit parallel zur etablierten Lösung laufen. Definition und Einrichtung bisher kein Problem.

Ich habe nun eine Frage. Mir ist aufgefallen, dass immer zum DayChange die Zähler appCountsPerWeekTemp, appCountsPerMonthTemp und appCountsPerYearTemp hochgezählt werden, ohne das ein entsprechendes Brennerereignis (Trigger) vorliegt. Dieses hochzählen erfolgt auch bereits bei der initialisierung des Moduls, so dass hier bereits mit 1 statt 0 gestartet wird. Damit weichen dann diese Zähler z.B. von den countsOverall ab laufen der tatsächlen Anzahl von Counts davon.
Aus meiner Sicht sollte dieses Hochzählen zum DayChange bzw. Initialisieriung nicht erfolgen, oder verstehe ich da etwas falsch?

beste Grüße
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

John

Hallo pappn,

wie ich im Wiki beschrieben habe, sind alle app* Readings Erweiterungen.

Mit 99_UtilsHourCounter.pm habe ich eine Referenz-Implementierung erstellt, die zeigen soll, wie man solche Erweiterungen
implementiert.

Die app*Temp Readings sind Arbeitszähler, die bei Tageswechsel allesamt aktualisiert werden.
Ziel dieser Arbeitszähler ist es letztlich die akkumulierten Werte beim Wechsel des entsprechenden Zeitintervalls (z.B Monatswechsel) vorzuhalten.

Wenn du andere Intervalle oder anderes Verhalten wünscht, kannst du jederzeit die 99_UtilsHourCounter.pm entsprechend anpassen.

99_UtilsHourCounter.pm ist lediglich als Vorschlag zu sehen.

John

CubieTruck Docker Node-Red Tasmota Shelly Homematic-IP