FHEM Forum

FHEM => Anfängerfragen => Thema gestartet von: z0lt1 am 28 Mai 2021, 21:02:31

Titel: Anzahl der Brennerstarts der letzten Stunde
Beitrag von: z0lt1 am 28 Mai 2021, 21:02:31
Hallo,

ich würde gerne die Anzahl der Brennerstarts meiner Gastherme der letzten Stunde immer vom aktuellen Zeitpunkt zurückblickend ermitteln.

Anbei das Device, welches die Brennerstarts hochzählt:
Internals:
   DEF        /dev/serial/by-id/usb-Silicon_Labs_CP2102_USB_to_UART_Bridge_Controller_0001-if00-port0 /opt/fhem/89_VCONTROL300_VScotHO1.cfg 180 300
   DeviceName /dev/serial/by-id/usb-Silicon_Labs_CP2102_USB_to_UART_Bridge_Controller_0001-if00-port0@4800,8,E,2
   FUUID      5e9c9f50-f33f-a976-fe15-0733b6601772e855
   INTERVAL   180
   NAME       Vitodens200W
   NR         46
   PROTOCOL   300
   STATE      24 °C Heizen_und_Warmwasser
   TYPE       VCONTROL300
   UPDATESTATUS INACTIVE
   READINGS:
     2021-05-28 21:00:15   Aussentemperatur 14
     2021-05-28 21:00:16   Betriebsart     Heizen_und_Warmwasser
     2021-05-28 21:00:16   Betriebsart_Party off
     2021-05-28 21:00:16   Betriebsart_Spar off
     2021-05-28 21:00:15   Brennerlaufzeit 15483.43
     2021-05-28 21:00:15   Brennerlaufzeit_Today 2.24
     2021-05-28 00:00:15   Brennerlaufzeit_TodayStart 15481.19
     2021-05-28 00:00:15   Brennerlaufzeit_Yesterday 3.13
     2021-05-28 21:00:15   Brennerleistung 0
     2021-05-28 21:00:15   Brennerstarts   41457
     2021-05-28 21:00:15   Brennerstarts_Today 33.00
     2021-05-28 00:00:15   Brennerstarts_TodayStart 41424.00
     2021-05-28 00:00:15   Brennerstarts_Yesterday 51.00
     2021-05-28 21:00:16   Heizkennlinie_Neigung 0.8
     2021-05-28 21:00:15   Heizkennlinie_Niveau 0
     2021-05-28 21:00:15   Kesseltemperatur_Ist 37.3
     2021-05-28 21:00:16   Kesseltemperatur_Soll 5
     2021-05-28 21:00:15   Raumtemperatur_Party_Soll 20
     2021-05-28 21:00:16   Raumtemperatur_Red_Soll 3
     2021-05-28 21:00:15   Raumtemperatur_Soll 24
     2021-05-28 21:00:15   Stoerung        off
     2021-05-28 21:00:16   Systemzeit      Fr,28.05.2021 21:01:33
     2021-04-24 13:01:54   Timer_Haus_1MO  06:00,21:00,--,--,--,--,--,--,
     2021-04-24 13:01:54   Timer_Haus_2DI  06:00,21:00,--,--,--,--,--,--,
     2021-04-24 13:01:55   Timer_Haus_3MI  06:00,21:00,--,--,--,--,--,--,
     2021-04-24 13:01:54   Timer_Haus_4DO  06:00,21:00,--,--,--,--,--,--,
     2021-04-24 13:01:54   Timer_Haus_5FR  06:00,21:00,--,--,--,--,--,--,
     2021-04-24 13:01:55   Timer_Haus_6SA  07:00,21:00,--,--,--,--,--,--,
     2021-04-24 13:01:54   Timer_Haus_7SO  07:00,21:00,--,--,--,--,--,--,
     2021-04-24 13:01:55   Timer_Wasser_1MO --,--,--,--,--,--,--,--,
     2021-04-24 13:01:55   Timer_Wasser_2DI --,--,--,--,--,--,--,--,
     2021-04-24 13:01:54   Timer_Wasser_3MI --,--,--,--,--,--,--,--,
     2021-04-24 13:01:55   Timer_Wasser_4DO --,--,--,--,--,--,--,--,
     2021-04-24 13:01:54   Timer_Wasser_5FR --,--,--,--,--,--,--,--,
     2021-04-24 13:01:54   Timer_Wasser_6SA --,--,--,--,--,--,--,--,
     2021-04-24 13:01:54   Timer_Wasser_7SO --,--,--,--,--,--,--,--,
     2021-05-28 21:00:16   Umwaelzpumpe_Heizkreis2 off
     2021-05-28 21:00:15   Umwaelzpumpe_Intern off
     2021-05-28 21:00:16   UpdateStatus    Inactive
     2021-05-28 21:00:16   UpdateTime      2021-05-28_21:00:16
     2021-05-28 21:00:15   Urlaubs-Beginn  Do,01.01.1970 00:00:00
     2021-05-28 21:00:16   Urlaubs-Ende    Do,01.01.1970 00:00:00
     2021-05-28 21:00:16   Vorlauftemperatur_Ist 34
     2021-05-28 21:00:16   Vorlauftemperatur_Soll 0
     2021-05-28 21:00:16   Warmwassertemperatur_Ist 37.4
     2021-05-28 21:00:15   Warmwassertemperatur_Soll 40
   helper:
Attributes:
   icon       sani_boiler_temp
   room       10_Spitzboden
   stateFormat Raumtemperatur_Soll °C Betriebsart
   vitotronicType 200_HOxx
   webCmd     Betriebsart
Titel: Antw:Anzahl der Brennerstarts der letzten Stunde
Beitrag von: supernova1963 am 29 Mai 2021, 05:56:40
Hey @z0lt1,

interessante Fragestellung bei einem Device, das per dev alle 180 Sekunden aktuelle Werte erhält.
Den idealen Lösungsansatz wüßte ich auch ganz gerne.

Das Modul selbst setzt scheinbar um 00:00:15 Uhr den Startwert für den Tag. Bei jeder Datenübermittlung wird dann die Differenz ermittelt und in das reading Brennerstarts_today geschrieben.
Das könnte man theoretisch mit fhem auch für die volle Stunde so umsetzen.
Also jede volle Stunde den aktuellen Wert der Brennerstarts per "at" Befehl z.B. als reading  Brennerstarts_lhStart setzen und Brennerstarts_lhFull errechnen lassen und setzen. Zusätzlich könnte mit einem userReading Brennerstarts_lh die Anzahl der Brennerstarts der aktuellen Stunde ermittelt werden.
Darüberhinaus könnte man dann über das Attribut oldreadings auf das Reading Brennerstarts_lhFull dann noch den Wert der vorletzten vollen Stunde setzen lassen. (lh = Last Hour)

Aber vielleicht geht es auch viel einfacher, ich bin absoluter Laie und interessiere mich für die Lösungsansätze der Profis ...

lg

Gernot
Titel: Antw:Anzahl der Brennerstarts der letzten Stunde
Beitrag von: Sany am 29 Mai 2021, 09:50:44
Moin @z0lt1,

da ist meiner Meinung nach das Modul statistics  genau das Richtige. Wenn ich es recht verstehe zählt das Reading Brennerstarts kontinuierlich hoch, richtig? Dieses in statistics wie einen Stromzähler konfigurieren. Du bekommst dann Reading wie diese:
ZitatstatEnergy Hour: 281.6 Day: 3377.8 Month: 97202.5 Year: 97202.5 (since: )
2021-05-29 09:29:13
statEnergyLast Hour: 479.9 Day: 15164.1 Month: - Year: -
Die sind von meinem Stromzähler. Im Readings Hour hast Du die Summe seit dem letzten Stundenwechsel, und im Reading Last Hour die Starts der letzten vollen Stunde. Und on Top das Ganze noch für Tag, Monat, Jahr.
Ansonsten kannst Du ein DOIF nehmen, das schreibt jede Stunde den Brennerstarts-Wert in ein Reading "letzteStunde" und bei jedem neuen Wert von Brennerstarts die Differenz von aktuell - "letzteStunde". Erweitern z.B. jede Stunde wird zuerst der Stundenwert ins Reaging "vorletzteStunde" geschrieben, dann der aktuelle Wert in "letzteStunde". Rest wie oben. Dann hättest Du noch die Anzahl der vergangenen ganzen Stunde.

Versuch macht kluch!

Viel Erfolg!

Sany
Titel: Antw:Anzahl der Brennerstarts der letzten Stunde
Beitrag von: schwatter am 29 Mai 2021, 10:20:45
Hier mein Beispiel. Ich zähle die Brennerstarts pro Tag.


defmod Startcounter DOIF ([Vitodens222ws2:Brennerstatus]>0)\
  (setreading Vitodens222ws2 Starts {([Vitodens222ws2:Starts]+1)})\
DOELSEIF ([00:01|Mo Di Mi Do Fr Sa So])\
  (setreading Vitodens222ws2 Starts 0)
attr Startcounter do always
attr Startcounter room 01.Heizung_UG

setstate Startcounter cmd_1
setstate Startcounter 2021-05-29 10:18:03 Device Vitodens222ws2
setstate Startcounter 2020-10-20 07:48:36 Starts 1
setstate Startcounter 2021-05-29 10:14:49 cmd 1
setstate Startcounter 2021-05-29 10:14:49 cmd_event Vitodens222ws2
setstate Startcounter 2021-05-29 10:14:49 cmd_nr 1
setstate Startcounter 2021-05-29 10:18:03 e_Vitodens222ws2_Brennerstatus 0
setstate Startcounter 2020-10-21 23:02:50 mode enabled
setstate Startcounter 2021-05-29 10:14:49 state cmd_1
setstate Startcounter 2021-05-29 00:01:00 timer_01_c02 30.05.2021 00:01:00|MoDiMiDoFrSaSo


Gruß schwatter
Titel: Antw:Anzahl der Brennerstarts der letzten Stunde
Beitrag von: MadMax-FHEM am 29 Mai 2021, 16:02:52
Wäre nicht auch HourCounter eine Möglichkeit: https://wiki.fhem.de/wiki/HourCounter

Gruß, Joachim
Titel: Antw:Anzahl der Brennerstarts der letzten Stunde
Beitrag von: z0lt1 am 29 Mai 2021, 21:42:24
Ich danke euch allen mal wieder recht herzlich für die Antworten, ich hab doch gewusst dass es dafür eine elegante Lösung gibt. Jetzt muss ich mich nur noch entscheiden ;-)

Ich sage hier auf jeden Fall Bescheid wie ich es umgesetzt habe!
Titel: Antw:Anzahl der Brennerstarts der letzten Stunde
Beitrag von: z0lt1 am 29 Mai 2021, 22:21:01
So, ich habe es jetzt erstmal so umgesetzt, DOIF sind für meine bescheidenen FHEM-Kenntnisse noch am ehesten verständlich, vor allem wenn ich dann wieder in einem halben Jahr nachschauen muss, was ich da fabriziert habe ;-)


([+:00]) (
setreading VitodensStartsHour lastHourValue [VitodensStartsHour:actualHourValue],
setreading VitodensStartsHour actualHourValue [Vitodens200W:Brennerstarts],
setreading VitodensStartsHour startsLastHour {([VitodensStartsHour:actualHourValue]-[VitodensStartsHour:lastHourValue])}
)

DOELSE ()


Die anderen, viel mächtigeren Module, werde ich mir aber auch auf jeden Fall anschauen!
Titel: Antw:Anzahl der Brennerstarts der letzten Stunde
Beitrag von: supernova1963 am 30 Mai 2021, 06:52:44
Hallo @z0lt1,

sehr interessanter Lösungsansatz es mit einen DOIF umzusetzen.

Damit auch die Anzahl der Brennerstarts der "aktuell angebrochenen" Stunde ermittelt werden, könnte man ein userReading am Vitodens200W device ergänzen, dass "Brennerstarts - startsLastHour" bei jedem event des Vitodens200W devices jeweils aktuell berechnet (also bei Deiner Definition mind. alle 180 Sekunden).

Ob man, - wie in Deinem DOIF -, die readings für die Berechnung am DOIF device ablegt, oder, diese am Vitodens200W device alle zusammenführt, kommt halt darauf an, was man damit machen will. (Im ersten Fall würde ich jedoch über ein notify oder eine Erweiterung des "userreadings perl Scripts" den "Wert der aktuellen angebrochenen Stunde" auch noch in das DOIF device kopieren.) 

Aber, ich bin nur ein "Anwender" und kein "Perl Programmierer" und kann nicht sagen, ob die vorgeschlagenen Profi - Lösungen nicht geeigneter sind, oder, ob es bessere Lösungen gibt.

lg

Gernot
Titel: Antw:Anzahl der Brennerstarts der letzten Stunde
Beitrag von: z0lt1 am 30 Mai 2021, 08:14:54
Zitat von: supernova1963 am 30 Mai 2021, 06:52:44
Damit auch die Anzahl der Brennerstarts der "aktuell angebrochenen" Stunde ermittelt werden, könnte man ein userReading am Vitodens200W device ergänzen, dass "Brennerstarts - startsLastHour" bei jedem event des Vitodens200W devices jeweils aktuell berechnet (also bei Deiner Definition mind. alle 180 Sekunden).

Das ist nochmal "schöner" da hast du Recht, das werde ich umsetzen. Wie gesagt, versuche ich meine Definitionen möglichst einfach zu halten, da ich auch nur ein User bin, und es vorkommen kann, dass ich mehrere Monate mal nichts mache.
Titel: Antw:Anzahl der Brennerstarts der letzten Stunde
Beitrag von: supernova1963 am 30 Mai 2021, 08:19:50
dito ...
Titel: Antw:Anzahl der Brennerstarts der letzten Stunde
Beitrag von: Damian am 30 Mai 2021, 09:21:07
defmod di_brennerStarts DOIF {[+:00];;\
  set_Reading ("lastHourValue",get_Reading("actualHourValue",ReadingsVal("Vitodens200W","Brennerstarts")));;\
  set_Reading ("actualHourValue",ReadingsVal("Vitodens200W","Brennerstarts"));;\
  set_Reading ("startsLastHour" ,get_Reading("actualHourValue")-get_Reading("lastHourValue"),1);;\
}


Effizienter wirst du es nicht hinbekommen, da alles in Perl. Ich würde eine Lösung "an einer Stelle" bevorzugen.
Titel: Antw:Anzahl der Brennerstarts der letzten Stunde
Beitrag von: supernova1963 am 30 Mai 2021, 11:27:54
Rein interessehalber hier ein laienhafter Versuch ohne DOIF (ungetestet):


# at für das Setzen der stündlichen (Start-)Werte als readings des Vitodens200W devices: Brennerstarts_HourFullLast,  Brennerstarts_HourFull und Brennerstarts_HourFullStart
defmod Vitodens200W_Hourly at +*01:00:00 { fhem("setreading Vitodens200W Brennerstarts_HourFullLast ".ReadingsVal("Vitodens200W","Brennerstarts_HourFull",0),"setreading Vitodens200W Brennerstarts_HourFull ".ReadingsVal("Vitodens200W","Brennerstarts_HourFull",0) - ReadingsVal("Vitodens200W","Brennerstarts_HourFullStart",0),"setreading Vitodens200W Brennerstarts_HourFullStart ". ReadingsVal("Vitodens200W","Brennerstarts",0))}
attr Vitodens200W_Hourly alignTime 00:00

# userreadings Definition am Vitidens200W device: Brennerstarts_HourActual
attr Vitodens200W userReadings Brennerstarts_HourActual { ReadingsVal("Vitodens200W","Brennerstarts",0) - ReadingsVal("Vitodens200W","Brennerstarts_HourFullStart",0) }


Fragen:

Danke,

Gernot