Anhand von Temperatur an/aus für Kessel

Begonnen von stefanru, 23 Februar 2020, 16:44:00

Vorheriges Thema - Nächstes Thema

stefanru

Hi,

ich habe einen alten Heizkessel.
Hab per ESP nun einen Temperatursensor angeschlossen.
Man erkennt die Heizkurven sehr gut.
Jetzt frage ich mich ob ich einen groben Betriebsstunden zähler anhand der Temperatur bauen kann.
Wie könnte ich bei steigender Temperatur eine Zeit mitlaufen lassen?
Würde gern die Betriebszeit pro Tag, Monat und Jahr anzeigen.
Mir ist klar, dass es ungenau ist anhand der Temperatur, aber besser als nichts.

Gruß,
Stefan



steffen83

Hallo Stefan,
Bin gerade kurz angebunden. Aber ich kann dir morgen etwas zusammenschreiben.

Zur Info:
Wenn alter Wert kleiner als neuer Wert dann
Startzeit.
Wenn alter Wert größer als neuer Wert dann Stopzeit.


Gesendet von meinem MI 8 mit Tapatalk

Raspberry Pi 3 (Noobs, aktuelle Fhem und Pilight) | FHEMduino | HM-OCCU-SDK | HM-Sec-SCo | HM-Sec-SD-2 | HM-CC-RT-DN | HM-LC-Bl1PBU-FM

stefanru

#2
Ok danke,
geht das in einem DOIF?
Oder was würdest du verwenden?

P.S: Habe gerade etwas rum geschaut und OldValue liefert leider nur den State. Meine Temperatur steht in dem Temperatur Reading eines ESP.
Wie löst man das am geschicktesten.

Gruß,
Stefan

Damian

ja, das geht auch in einem DOIF:

defmod di_kessel DOIF subs {\
  sub sum {\
      set_Reading ("end",time());;\
      set_Reading ("diff",get_Reading("end")-get_Reading("begin"));;\
      set_Reading ("begin",0);;\
      set_Reading ("sum_day",get_Reading("sum_day",0)+get_Reading("diff"));;\
  }\
}\
\
\
{ if ([kessel:temperature:diff] > 0 and get_Reading("begin",0) == 0) {\
    set_Reading ("begin",time());;\
  } elsif ([kessel:temperature:diff] < 0 and get_Reading("begin",0) > 0) {\
    sum();;\
  }\
}\
\
{ [00:01];;\
  if (get_Reading("begin",0) > 0) {\
    sum();;\
    set_Reading ("begin",time());;\
  }\
  set_Reading ("sum",get_Reading("sum",0) + get_Reading("sum_day",0));;\
  set_Reading ("sum_day",0);;\
  set_Reading ("sum_hour",::round(get_Reading("sum",0)/3600,1));; \
}


Es entstehen folgende relevante Readings:

sum_day Summe der Betriebssekunden pro Tag
sum Summe  der Betriebssekunden insgesamt
sum_hour Summe in Betriebsstunden insgesamt

kessel:temperature musst du auf dein Device anpassen.
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

stefanru

Wow,
danke!

Es funktioniert, ich danke dir vielmals!
Muss feststellen, dass ich nach wie vor ganz viel nicht weiß.

Kannst du eventuell eine ganz kurze erklärung dazu geben? Würde es gern verstehen.
Mir fehlt etwas woher das :diff kommt in [ESPEasy_Heizung_langerSensor:Temperature:diff].
Das mit set_Reading end begin usw verstehe ich noch einigermaßen, diff im set_Reading dachte ich auch, aber wie kommt das an den Sensor ran?

1000 Dank und Gruß,
Stefan


Damian

#5
Es handelt sich hier um DOIF im Perlmodus. Es ginge auch mit konventionellem DOIF, wäre aber nicht so elegant. Die Erklärungen zu den Funktionen findest du hier:

diff https://fhem.de/commandref_DE.html#DOIF_Reading_Funktionen

set_Reading https://fhem.de/commandref_DE.html#DOIF_set_Reading

get_Reading https://fhem.de/commandref_DE.html#DOIF_get_Reading
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

stefanru

Danke Damian,

das kannte ich noch gar nicht mit den funktionen diff med usw.
Hab mir immer mim Statistics Modul einen abgebrochen.

Super, ich denk dann baue ich auch noch ein paar andere dinge darauf um.

Danke!
Stefan

stefanru

Hi,

hab doch noch eine Frage.
Habe sie schon hier beschrieben.
Vielleicht hat jemand eine Idee?`
https://forum.fhem.de/index.php/topic,108768.0.html

Danke und Gruß,
Stefan