[Gelöst] Vorletzten Temperaturwert speichern und Differenz ermitteln

Begonnen von NewRasPi, 17 Februar 2019, 22:17:30

Vorheriges Thema - Nächstes Thema

Damian

Ich glaube er ist jetzt ganz verwirrt :)

Wenn du bereits das DOIF mit diff-Option definiert hast, dann brauchst du keine weiteren Definitionen, keine userReadings und keine OldReadings.

Also entweder diff im DOIF

oder

userReadings mit difference

oder

OldReadings ...

Es sind drei verschiedene Wege, die das Gleiche leisten können, aber nichts miteinander zu tun haben.
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

NewRasPi

#31
Zitat von: Ellert am 19 Februar 2019, 13:30:12
Wie gesagt wenn Du eine Differenz willst geht das in jedem Gerät über userReadings, dazu benötigst Du OldReadingsVal nicht und überspringst diesen Schritt mit
attr <device> userReadings difftemp:temperature.* difference Dann steht im Reading difftemp die Temperaturdifferenz. Die Angaben musst Du natürlich auf Dein Device anpassen.
Wenn das Aktualisierungsintervall nicht konstant ist, musst Du die Temperaturänderung auf die Zeit beziehen damit die Werte vergleichbar sind, dann hast Du die Steigung der Temperatur pro Zeiteinheit (Sekunden)
Das geht dann mit dem modifier "differential" so:
attr <device> userReadings difftemp:temperature.* differential
Aber, das ist jetzt eine Nacherzählung dessen was hier steht: https://commandref.fhem.de/commandref_DE.html#userReadings

Hallo Damian
Danke für Deine Lösung die es ja anscheinend erst Brandaktuell (nach dem Update) gibt.
Sehr gerne würde ich auch den Ansatz den CoolTux meint, "man soll nicht nur eine Formel auswendig lernen, sondern auch den Weg dazu kennen" verfolgen.
Ich muss aber zugeben das es für einen Handwerker ein steiniger Weg ist.
Das Ihr im Forum nicht dazu da seid, allen die Lösung auf einem Tablett zu servieren ist mir auch vollkommen klar.
Ich danke Euch allen herzlichst für die Hilfe.


Hallo Ellert
vielen Dank für jedes Beispiel und die Nacherzählung des userReadings.
Wenn Du Dein Vorwissen wegwerfen könntest und dann diesen Link lesen würdest, würde die Sache vielleicht anders aussehen. Ich habe den Link jetzt schon mehrfach rauf und runter gelesen. Mir fehlen da immer wieder Teile, das ich es nicht wirklich daraus umsetzen kann. Und bitte glaube mir, das ist nicht Faulheit oder Dummheit.
Die Modulautoren hier haben natürlich ein ganz anderes Verständnis - die erkennen wie das gemeint ist und wie man das umsetzen kann.
Wer nicht so gut vorgebildet ist greift da nach jeden Strohhalm der es einem ermöglicht, FHEM auch möglichst komfortabel einzusetzen.
Hier ein List vom Sensor der noch das alte mit "none" gefüllte Reading hat, aber den neuen difftemp nicht kennt.
Internals:
   ALARM      0
   ASYNC      0
   DEF        DS18B20 FF5E16651401
   ERRCOUNT   0
   FUUID      5c430225-f33f-103c-d571-0ab81990c84a5a5c
   INTERVAL   300
   IODev      OWio
   NAME       GarageTemp
   NOTIFYDEV  global
   NR         32
   NTFY_ORDER 50-GarageTemp
   OW_FAMILY  28
   OW_ID      FF5E16651401
   PRESENT    1
   ROM_ID     28.FF5E16651401.57
   STATE      T:  3.50 °C
   TYPE       OWTHERM
   owg_cf     9
   owg_temp   3.5
   owg_th     40
   owg_tl     0
   Helper:
     DBLOG:
       data:
         logdb:
           TIME       1550583239.18336
           VALUE      state: T:  3.50 °C
       state:
         logdb:
           TIME       1550580538.72071
           VALUE      initialized
       temperature:
         logdb:
           TIME       1550583538.78762
           VALUE      3.5
   READINGS:
     2019-02-19 13:44:36   alterWert       none
     2019-02-19 08:07:31   alterWertGarage none
     2019-02-19 14:38:58   state           T:  3.50 °C
     2019-02-19 14:38:58   temperature     3.5
   tempf:
     factor     1
     offset     0
Attributes:
   DbLogExclude failures,T,85
   DbLogInclude temperature
   IODev      OWio
   event-min-interval temperature,state:300
   event-on-change-reading temperature,state
   fp_Lageplan 470,729,1,GarageTemp,
   icon       temp_temperature
   interval   300
   model      DS18B20
   resolution 9
   room       4.1_Garage,OWX
   tempHigh   40
   tempLow    0
   tempUnit   Celsius
   userReadings difftemp:temperature.* difference
   verbose    1

Bei anderen Device gab es ein "set <device>  clear readings oder deletereadings ...
Hier kommt dann nur die Fehlermeldung.
"OWTHERM: Set with unknown argument deletereading, choose one of interval,tempHigh,tempLow"
Ich lese kräftig weiter mit, bestimmt wird auch mein Problem mal gelöst.
Schöne Grüße
NewRasPi

Nachtrag: Wenn meine von Damian erstellte DOIF die Prüfung bestehen, ist mein Anliegen ja auch schon erledigt. DANKE
Raspberry Pi 2 Mod B + Raspberry Pi 3 + Raspberry Pi4; HM Lan Adapter; 8 Kanal Relaiskarte; ca. 15x 1wire Temperatur Sensor DS18B20; 10x HC-SR501 Bewegungsmelder; 9x HM Rauchmelder HM-Sec-SD; HM Funk Fenstersensoren; HM Strommess-Zwischenstecker;

NewRasPi

Hallo Damian
jetzt habe ich die von Dir beschriebene Funktion getestet. Es funktioniert hervorragend. DANKESCHÖN
define GarageTempKontrollDOIF DOIF ([GarageTemp:temperature:diff] > 5) (set TabletWohnzimmer ttsMsg Hallo die Temperatur in der Garage steigt zu schnell)
Der Intervall ist auf 300 Sekunden eingestellt. So schnell dürfte die Temperatur normal nicht ansteigen.
Damit ist auch in Räumen wo man einen Rauchmelder schlecht einsetzen kann eine effektive Überwachung machbar.
Viele Grüße
NewRasPi
Raspberry Pi 2 Mod B + Raspberry Pi 3 + Raspberry Pi4; HM Lan Adapter; 8 Kanal Relaiskarte; ca. 15x 1wire Temperatur Sensor DS18B20; 10x HC-SR501 Bewegungsmelder; 9x HM Rauchmelder HM-Sec-SD; HM Funk Fenstersensoren; HM Strommess-Zwischenstecker;

Damian

Zitat von: NewRasPi am 19 Februar 2019, 20:04:57
Hallo Damian
jetzt habe ich die von Dir beschriebene Funktion getestet. Es funktioniert hervorragend. DANKESCHÖN
define GarageTempKontrollDOIF DOIF ([GarageTemp:temperature:diff] > 5) (set TabletWohnzimmer ttsMsg Hallo die Temperatur in der Garage steigt zu schnell)
Der Intervall ist auf 300 Sekunden eingestellt. So schnell dürfte die Temperatur normal nicht ansteigen.
Damit ist auch in Räumen wo man einen Rauchmelder schlecht einsetzen kann eine effektive Überwachung machbar.
Viele Grüße
NewRasPi

Für einen Feueralarm sind wohl 5 Minuten schon verdammt viel, in dieser Zeit kann die Bude schon abgefackelt sein :)

Ich denke, dass es sinnvoller wäre das Intervall erheblich zu reduzieren, ggf. auch die Temperaturdifferenz und schauen ob es Fehlalarme gibt.

z. B. 30 Sekunden und 1 Grad

So hast du vielleicht noch eine geringe Chance überhaupt etwas zu tun.

hier ist nach 5 Minuten alles vorbei:

https://www.youtube.com/watch?v=lVfhzNZRXao
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

NewRasPi

Zitat von: Damian am 19 Februar 2019, 20:49:43
Für einen Feueralarm sind wohl 5 Minuten schon verdammt viel, in dieser Zeit kann die Bude schon abgefackelt sein :)

Ich denke, dass es sinnvoller wäre das Intervall erheblich zu reduzieren, ggf. auch die Temperaturdifferenz und schauen ob es Fehlalarme gibt.

z. B. 30 Sekunden und 1 Grad

So hast du vielleicht noch eine geringe Chance überhaupt etwas zu tun.

hier ist nach 5 Minuten alles vorbei:

https://www.youtube.com/watch?v=lVfhzNZRXao

Hallo Damian
danke für den eindringlichen link.
Ich werde natürlich den Intervall auf 45 Sekunden und die Temperaturdifferenz auf 3 °C heruntersetzen.
In der Autogarage ist eine Temperaturerhöhung durch das abstellen des warm gefahrenen Autos von 2 °C auf dem Diagrammplot zu sehen.
Im Haus sind natürlich richtige Rauchmelder installiert. In der Garage vermute ich zu viel Staub, als das unter diesen Bedingungen ein Rauchmelder zuverlässig
arbeiten würde.
Gut das Du auch noch die realen Umgebungsdaten im Blick hast.
Schöne Grüße
NewRasPi
Raspberry Pi 2 Mod B + Raspberry Pi 3 + Raspberry Pi4; HM Lan Adapter; 8 Kanal Relaiskarte; ca. 15x 1wire Temperatur Sensor DS18B20; 10x HC-SR501 Bewegungsmelder; 9x HM Rauchmelder HM-Sec-SD; HM Funk Fenstersensoren; HM Strommess-Zwischenstecker;

Damian

Dann hätte ich noch einen Tipp für dich, was man so alles mit den neuen Features des DOIF machen kann:

define messung DOIF ##

attr messung event_Readings diff2: [GarageTemp:temperature:diff2],
diff3: [GarageTemp:temperature:diff3],
diff4: [GarageTemp:temperature:diff4],
diff5: [GarageTemp:temperature:diff5]


Im obigen DOIF werden vier Readings definiert, die du loggen kannst.

Im Reading messung:diff2 wird die Differenz zwischen den letzten beiden Werten abgelegt, im Reading messung:diff3 wird die Differenz zwischen dem letzten und dem drittletzten  abgelegt und so weiter.

Wenn du z. B. das Intervall auf 30 Sekunden einstellst, so kannst du die Differenzen zwischen 30 Sekunden, 60 Sekunden , 90 Sekunden und 120 Sekunden über die Readings protokollieren und dir damit nach ein paar Tagen ein Bild über die Temperaturschwankungen abhängig von den Zeitintervallen in deiner Garage machen und so einen sinnvollen Grenzwert und ein sinnvolles Zeitintervall für den Alarmauslöser definieren.


Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

NewRasPi

Zitat von: Damian am 19 Februar 2019, 23:34:46
Dann hätte ich noch einen Tipp für dich, was man so alles mit den neuen Features des DOIF machen kann:

define messung DOIF ##

attr messung event_Readings diff2: [GarageTemp:temperature:diff2],
diff3: [GarageTemp:temperature:diff3],
diff4: [GarageTemp:temperature:diff4],
diff5: [GarageTemp:temperature:diff5]


Im obigen DOIF werden vier Readings definiert, die du loggen kannst.

Im Reading messung:diff2 wird die Differenz zwischen den letzten beiden Werten abgelegt, im Reading messung:diff3 wird die Differenz zwischen dem letzten und dem drittletzten  abgelegt und so weiter.

Wenn du z. B. das Intervall auf 30 Sekunden einstellst, so kannst du die Differenzen zwischen 30 Sekunden, 60 Sekunden , 90 Sekunden und 120 Sekunden über die Readings protokollieren und dir damit nach ein paar Tagen ein Bild über die Temperaturschwankungen abhängig von den Zeitintervallen in deiner Garage machen und so einen sinnvollen Grenzwert und ein sinnvolles Zeitintervall für den Alarmauslöser definieren.

Hallo Damian
vielen Dank für diese weitere Hilfe.
Das neue DOIF habe ich sofort angelegt. Eine Frage hätte ich noch. Differenz auswerten bedeutet in dieser Formel ja auch,
wenn die Temperatur um mehr als X °C fällt!
Wenn bei Frosttemperaturen das Tor eine weile geöffnet wird, könnte dann schon mal eine fehlerhafte Meldung entstehen.
Kann man die Differenz Berechnung auch auf eine Temperatur Zunahme eingrenzen?
Internals:
   CFGFN     
   DEF        ##
   FUUID      5c6cfb60-f33f-103c-d0ac-5c20423aa7b30ddb
   MODEL      FHEM
   NAME       messungGarage
   NR         18208
   NTFY_ORDER 50-messungGarage
   STATE      initialized
   TYPE       DOIF
   Helper:
     DBLOG:
       state:
         logdb:
           TIME       1550647229.11069
           VALUE      initialized
   READINGS:
     2019-02-20 08:20:29   cmd             0
     2019-02-20 08:26:18   diff2           0
     2019-02-20 08:26:18   diff3           0
     2019-02-20 08:26:18   diff4           0
     2019-02-20 08:26:18   diff5           0
     2019-02-20 08:20:29   mode            enabled
     2019-02-20 08:20:29   state           initialized
   Regex:
     accu:
       GarageTemp:
         accu:
           temperature ^GarageTemp$:^temperature:
     event_Readings:
       GarageTemp:
         diff2:
           temperature ^GarageTemp$:^temperature:
         diff3:
           temperature ^GarageTemp$:^temperature:
         diff4:
           temperature ^GarageTemp$:^temperature:
         diff5:
           temperature ^GarageTemp$:^temperature:
   accu:
     GarageTemp temperature:
       dim        5
       value:
         2.5
         2.5
         2.5
         2.5
         2.5
   condition:
   devices:
   do:
     0:
   event_Readings:
     diff2       ::ReadingValDoIf($hash,'GarageTemp','temperature','','diff2')
     diff3       ::ReadingValDoIf($hash,'GarageTemp','temperature','','diff3')
     diff4       ::ReadingValDoIf($hash,'GarageTemp','temperature','','diff4')
     diff5       ::ReadingValDoIf($hash,'GarageTemp','temperature','','diff5')
   helper:
     globalinit 1
     last_timer 0
     sleeptimer -1
     triggerDev
   itimer:
   uiState:
   uiTable:
Attributes:
   event_Readings diff2: [GarageTemp:temperature:diff2],
diff3: [GarageTemp:temperature:diff3],
diff4: [GarageTemp:temperature:diff4],
diff5: [GarageTemp:temperature:diff5]


Die Raw Definition:
defmod messungGarage DOIF ##
attr messungGarage event_Readings diff2: [GarageTemp:temperature:diff2],\
diff3: [GarageTemp:temperature:diff3],\
diff4: [GarageTemp:temperature:diff4],\
diff5: [GarageTemp:temperature:diff5]

setstate messungGarage initialized
setstate messungGarage 2019-02-20 08:20:29 cmd 0
setstate messungGarage 2019-02-20 08:27:48 diff2 0
setstate messungGarage 2019-02-20 08:27:48 diff3 0
setstate messungGarage 2019-02-20 08:27:48 diff4 0
setstate messungGarage 2019-02-20 08:27:48 diff5 0
setstate messungGarage 2019-02-20 08:20:29 mode enabled
setstate messungGarage 2019-02-20 08:20:29 state initialized

Die Temperatur hat sich jetzt leider nicht verändert.

Schöne Grüße
NewRasPi
Raspberry Pi 2 Mod B + Raspberry Pi 3 + Raspberry Pi4; HM Lan Adapter; 8 Kanal Relaiskarte; ca. 15x 1wire Temperatur Sensor DS18B20; 10x HC-SR501 Bewegungsmelder; 9x HM Rauchmelder HM-Sec-SD; HM Funk Fenstersensoren; HM Strommess-Zwischenstecker;

NewRasPi

Raspberry Pi 2 Mod B + Raspberry Pi 3 + Raspberry Pi4; HM Lan Adapter; 8 Kanal Relaiskarte; ca. 15x 1wire Temperatur Sensor DS18B20; 10x HC-SR501 Bewegungsmelder; 9x HM Rauchmelder HM-Sec-SD; HM Funk Fenstersensoren; HM Strommess-Zwischenstecker;

Damian

Man muss nach der Definition schon paar gesendete Werte abwarten, damit die Differenz entsprechend berechnet werden kann, Differenz von einem einzigen Wert ist natürlich 0, siehe Commandref zu diff. Wenn die Temperatur fällt gibt´s logischerweise negative Werte.

Mit dem Plot kann man grob erkennen wie die Temperatur sich verhält, aber wie viel Grad in welcher Zeitspanne, wirst du besser mit den definierten Readings erkennen.
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

Prof. Dr. Peter Henning

Ich habe eine Erweiterung zu logProxy im Test, die nicht nur den letzten Wert einer Zeitreihe gesondert aufhebt, sondern auch den vorletzten. Und damit dann eine Trendanzeige realisiert.

LG

pah

NewRasPi

Hallo Ihr Spezialisten
ich möchte diesen Thread noch mal nach vorne holen.
Total unschön ist nachts um 4:00 Uhr von einer Nachricht aus dem Schlaf gerissen zu werden, weil die 1-wire DS18B20 Temperatursensoren mal wieder ihre "85 Grad Fehlanzeige" bringen.

Für die Datenbank gibts ja schon den
attr DbLogExclude failures,T,85
Kann diese Falschmessung vielleicht jemand auch für die normale Auswertung in FHEM "unterdrücken"?
Meine Überwachung des Temperaturanstieg in der Garage funktioniert also schon mal. Zeitabhängig (nachts von - bis) das abzuschalten wäre
nicht zielführend.
define TemperaturKontrollGarageDOIF DOIF ([GarageTemp:temperature:diff] > 3)
(set TabletWohnzimmer ttsMsg Hallo die Temperatur in der Garage steigt zu schnell)

Das List:
Internals:
   ALARM      0
   ASYNC      0
   DEF        DS18B20 FF5E16651401
   ERRCOUNT   0
   FUUID      5c430225-f33f-103c-d571-0ab81990c84a5a5c
   INTERVAL   45
   IODev      OWio
   NAME       GarageTemp
   NOTIFYDEV  global
   NR         31
   NTFY_ORDER 50-GarageTemp
   OW_FAMILY  28
   OW_ID      FF5E16651401
   PRESENT    1
   ROM_ID     28.FF5E16651401.57
   STATE      T: 10.06 °C
   TYPE       OWTHERM
   owg_cf     9
   owg_temp   10.0625
   owg_th     85
   owg_tl     0
   Helper:
     DBLOG:
       data:
         logdb:
           TIME       1553784017.34988
           VALUE      state: T: 10.06 °C
       state:
         logdb:
           TIME       1551694276.8677
           VALUE      initialized
       temperature:
         logdb:
           TIME       1553784017.34988
           VALUE      10.0625
   READINGS:
     2019-02-19 13:44:36   alterWert       none
     2019-02-19 08:07:31   alterWertGarage none
     2019-03-28 15:40:17   state           T: 10.06 °C
     2019-03-28 15:40:17   temperature     10.0625
   tempf:
     factor     1
     offset     0
Attributes:
   DbLogExclude failures,T,85
   DbLogInclude temperature
   IODev      OWio
   event-min-interval temperature,state:45
   event-on-change-reading temperature,state
   fp_Lageplan 470,729,1,GarageTemp,
   icon       temp_temperature
   interval   45
   model      DS18B20
   resolution 9
   room       4.1_Garage,OWX
   tempHigh   85
   tempLow    0
   tempUnit   Celsius
   verbose    1



Ich wäre für jede Lösung sehr dankbar.
Schöne Grüße
NewRasPi
Raspberry Pi 2 Mod B + Raspberry Pi 3 + Raspberry Pi4; HM Lan Adapter; 8 Kanal Relaiskarte; ca. 15x 1wire Temperatur Sensor DS18B20; 10x HC-SR501 Bewegungsmelder; 9x HM Rauchmelder HM-Sec-SD; HM Funk Fenstersensoren; HM Strommess-Zwischenstecker;

Ellert

Zitat von: NewRasPi am 28 März 2019, 15:32:21
Hallo Ihr Spezialisten
ich möchte diesen Thread noch mal nach vorne holen.
Total unschön ist nachts um 4:00 Uhr von einer Nachricht aus dem Schlaf gerissen zu werden, weil die 1-wire DS18B20 Temperatursensoren mal wieder ihre "85 Grad Fehlanzeige" bringen.

Für die Datenbank gibts ja schon den
attr DbLogExclude failures,T,85
Kann diese Falschmessung vielleicht jemand auch für die normale Auswertung in FHEM "unterdrücken"?
Meine Überwachung des Temperaturanstieg in der Garage funktioniert also schon mal. Zeitabhängig (nachts von - bis) das abzuschalten wäre
nicht zielführend.
define TemperaturKontrollGarageDOIF DOIF ([GarageTemp:temperature:diff] > 3)
(set TabletWohnzimmer ttsMsg Hallo die Temperatur in der Garage steigt zu schnell)

Das List:
Internals:
   ALARM      0
   ASYNC      0
   DEF        DS18B20 FF5E16651401
   ERRCOUNT   0
   FUUID      5c430225-f33f-103c-d571-0ab81990c84a5a5c
   INTERVAL   45
   IODev      OWio
   NAME       GarageTemp
   NOTIFYDEV  global
   NR         31
   NTFY_ORDER 50-GarageTemp
   OW_FAMILY  28
   OW_ID      FF5E16651401
   PRESENT    1
   ROM_ID     28.FF5E16651401.57
   STATE      T: 10.06 °C
   TYPE       OWTHERM
   owg_cf     9
   owg_temp   10.0625
   owg_th     85
   owg_tl     0
   Helper:
     DBLOG:
       data:
         logdb:
           TIME       1553784017.34988
           VALUE      state: T: 10.06 °C
       state:
         logdb:
           TIME       1551694276.8677
           VALUE      initialized
       temperature:
         logdb:
           TIME       1553784017.34988
           VALUE      10.0625
   READINGS:
     2019-02-19 13:44:36   alterWert       none
     2019-02-19 08:07:31   alterWertGarage none
     2019-03-28 15:40:17   state           T: 10.06 °C
     2019-03-28 15:40:17   temperature     10.0625
   tempf:
     factor     1
     offset     0
Attributes:
   DbLogExclude failures,T,85
   DbLogInclude temperature
   IODev      OWio
   event-min-interval temperature,state:45
   event-on-change-reading temperature,state
   fp_Lageplan 470,729,1,GarageTemp,
   icon       temp_temperature
   interval   45
   model      DS18B20
   resolution 9
   room       4.1_Garage,OWX
   tempHigh   85
   tempLow    0
   tempUnit   Celsius
   verbose    1



Ich wäre für jede Lösung sehr dankbar.
Schöne Grüße
NewRasPi
[GarageTemp:temperature:diff] > 3 and [GarageTemp:temperature] != 85

NewRasPi

Vielen Dank Ellert
das es so einen einfachen Weg gibt ist super.

Schöne Grüße
NewRasPi
Raspberry Pi 2 Mod B + Raspberry Pi 3 + Raspberry Pi4; HM Lan Adapter; 8 Kanal Relaiskarte; ca. 15x 1wire Temperatur Sensor DS18B20; 10x HC-SR501 Bewegungsmelder; 9x HM Rauchmelder HM-Sec-SD; HM Funk Fenstersensoren; HM Strommess-Zwischenstecker;