[Gelöst] Vorletzten Temperaturwert speichern und Differenz ermitteln

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

Vorheriges Thema - Nächstes Thema

NewRasPi

Hallo FHEM Freunde und Spezialisten
ich bräuchte etwas Hilfe beim gestalten einer Funktion die man mit "Oldvalue" bezeichnen könnte. War das mal eine Funktion die es nicht mehr gibt?
Ziel meines vorhabens ist, auszuwerten ob sich die Temperatur von der letzten Messung (z.B. vor 5 Minuten intervall) zu der aktuellen um mehr
als 5 °C geändert hat um dann eine Warnmeldung auszugeben. Die Meldefunktion selbst geht vermuttlich am besten mit einem DOIF. Hier in diesem Forumsbereich bin ich, weil ich hoffe das mir jemand beim erzeugen des Readings "vorletzte Temperatur" oder gleich "Differenzwert" zur vorherigen Messung. Als Sensoren habe ich die 1wire DS18B20.  Bei Wiki und den einschlägigen Seiten im Netz habe ich leider nichts passendes gefunden.
Vielen Dank für jeden passenden Hinweis.
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;

Jogi

Meinst so was? Das ist ein DOIF das ich nutze um zu vergleichen ob eine Temperatur sinkt.

(([dummyKaltwasserHeizung] <= OldValue("dummyKaltwasserHeizung")) and ([dummyKaltwasserHeizung]<[Grenzwert_KW_HZ]))
(set TempALKW_Heizung on)
DOELSEIF ([dummyKaltwasserHeizung] > OldValue("dummyKaltwasserHeizung"))
(set TempALKW_Heizung off)


Gruß,
Jogi

CoolTux

Lese Dich in OldReadingsVal ein. Das sollte das sein was Du suchst.
Du musst nicht wissen wie es geht! Du musst nur wissen wo es steht, wie es geht.
Support me to buy new test hardware for development: https://www.paypal.com/paypalme/MOldenburg
My FHEM Git: https://git.cooltux.net/FHEM/
Das TuxNet Wiki:
https://www.cooltux.net

NewRasPi

Hallo CoolTux
Danke für den Tip.
ist dieses Reading noch aktuell?
Ich habe danach gesucht und noch nichts gefunden. - Muss wohl noch mal genauer suchen. Danke


Zitat von: Jogi am 17 Februar 2019, 22:23:06
Meinst so was? Das ist ein DOIF das ich nutze um zu vergleichen ob eine Temperatur sinkt.

(([dummyKaltwasserHeizung] <= OldValue("dummyKaltwasserHeizung")) and ([dummyKaltwasserHeizung]<[Grenzwert_KW_HZ]))
(set TempALKW_Heizung on)
DOELSEIF ([dummyKaltwasserHeizung] > OldValue("dummyKaltwasserHeizung"))
(set TempALKW_Heizung off)


Gruß,
Jogi

Hallo Jogi
diesen Thread hatte ich gelesen. Ich dachte aber das da die Lösung noch offen war.
Ich würde gerne auf eine Änderung von 5 °C oder mehr prüfen. Du bist auf einen Dummy ausgewichen. Wenn es ein "OldValue" direkt im 1wire Sensor gibt - oder per userattr anzulegen geht, dann würde mir das besser gefallen.
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;

CoolTux

OldReadingsVal ist eine FHEM Perlfunktion. Genau wie ReadingsVal nur eben den alten Wert.
Du musst nicht wissen wie es geht! Du musst nur wissen wo es steht, wie es geht.
Support me to buy new test hardware for development: https://www.paypal.com/paypalme/MOldenburg
My FHEM Git: https://git.cooltux.net/FHEM/
Das TuxNet Wiki:
https://www.cooltux.net

NewRasPi

Zitat von: CoolTux am 17 Februar 2019, 22:42:57
OldReadingsVal ist eine FHEM Perlfunktion. Genau wie ReadingsVal nur eben den alten Wert.

Hallo CoolTux
nach diesem Thread
https://forum.fhem.de/index.php?topic=85406.0
soll ja das schon eingecheckt sein. Aber die Commandref oder Anleitung dazu finde ich immer noch nicht.

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;

CoolTux

Du musst nicht wissen wie es geht! Du musst nur wissen wo es steht, wie es geht.
Support me to buy new test hardware for development: https://www.paypal.com/paypalme/MOldenburg
My FHEM Git: https://git.cooltux.net/FHEM/
Das TuxNet Wiki:
https://www.cooltux.net

NewRasPi

Noch mal hallo
muss ich dann doch über einen zusätzlichen Dummy gehen?
Hier mein List: Internals:
   ALARM      0
   ASYNC      0
   CHANGED   
   DEF        DS18B20 FFF898641403
   ERRCOUNT   0
   FUUID      5c430225-f33f-103c-ecee-6e7f0515f9d32105
   INTERVAL   900
   IODev      OWio
   NAME       AussenTemp
   NOTIFYDEV  global
   NR         31
   NTFY_ORDER 50-AussenTemp
   OW_FAMILY  28
   OW_ID      FFF898641403
   PRESENT    1
   ROM_ID     28.FFF898641403.23
   STATE      T:  1.00 °C
   TYPE       OWTHERM
   owg_cf     10
   owg_temp   1
   owg_th     85
   owg_tl     0
   Helper:
     DBLOG:
       temperature:
         logdb:
           TIME       1550442008.43773
           VALUE      1
   READINGS:
     2019-02-17 23:35:08   state           T:  1.00 °C
     2019-02-17 23:35:08   temperature     1
   tempf:
     factor     1
     offset     0
Attributes:
   DbLogExclude failures,T,85
   DbLogInclude temperature
   IODev      OWio
   event-min-interval temperature:900
   event-on-change-reading temperature
   fp_Lageplan 271,720,3,state,Aussen
   icon       temp_temperature
   interval   900
   model      DS18B20
   oldreadings state
   resolution 10
   room       5.1_Umwelt_Aussen,OWX
   tempHigh   85
   tempLow    0
   tempUnit   Celsius
   verbose    4

Darin hätte ich ein weiteres Reading erwartet. Da ist aber nicht mehr wie vorher/ ober bei den anderen Temperatursensoren ist.
Ausser das Attriput "oldreadings state" - nur leider kein Wert.
Ich steh da auf der Leitung - sorry.
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;

CoolTux

Kennst Du die Funktion ReadingsVal? OldReadingsVal ist das selbe in grün nur für den alten Wert.
Willst du also den alten Wert von state haben musst Du

OldReadingsVal('DEVICENAME','state','none')

Machen. Am einfachsten im Notify für Deine Berechnung die Du machen willst oder wegen mein auch im userReadings.
Du musst nicht wissen wie es geht! Du musst nur wissen wo es steht, wie es geht.
Support me to buy new test hardware for development: https://www.paypal.com/paypalme/MOldenburg
My FHEM Git: https://git.cooltux.net/FHEM/
Das TuxNet Wiki:
https://www.cooltux.net

NewRasPi

Zitat von: CoolTux am 18 Februar 2019, 00:00:47
Kennst Du die Funktion ReadingsVal? OldReadingsVal ist das selbe in grün nur für den alten Wert.
Willst du also den alten Wert von state haben musst Du

OldReadingsVal('DEVICENAME','state','none')

Machen. Am einfachsten im Notify für Deine Berechnung die Du machen willst oder wegen mein auch im userReadings.

Hallo CoolTux
im Device selbst geht es anscheinend nicht.
Ich habe beide Versuche ins Device 1wire Sensor eingebaut, leider ohne ein Ergebnis.
Mit Notify habe ich noch nichts gemacht. Damit muss ich mich dann erst mal beschäftigen. Das kann dann mit einem Wert rechnen, der gar nicht im Device
angezeigt wird?
Internals:
   ALARM      0
   ASYNC      0
   DEF        DS18B20 FFFB96641403
   ERRCOUNT   0
   FUUID      5c430225-f33f-103c-58a0-d28ad6c55a24787a
   INTERVAL   300
   IODev      OWio
   NAME       SchlafzimmerTemp
   NOTIFYDEV  global
   NR         34
   NTFY_ORDER 50-SchlafzimmerTemp
   OW_FAMILY  28
   OW_ID      FFFB96641403
   PRESENT    1
   ROM_ID     28.FFFB96641403.78
   STATE      T: 19.75 °C
   TYPE       OWTHERM
   owg_cf     10
   owg_temp   19.75
   owg_th     40
   owg_tl     0
   Helper:
     DBLOG:
       data:
         logdb:
           TIME       1550473751.38808
           VALUE      state: T: 19.75 °C
       temperature:
         logdb:
           TIME       1550473751.38808
           VALUE      19.75
   OLDREADINGS:
     2019-02-18 07:39:11   temperature     19.5
   READINGS:
     2019-02-18 08:09:11   state           T: 19.75 °C
     2019-02-18 08:09:11   temperature     19.75
   tempf:
     factor     1
     offset     0
Attributes:
   DbLogExclude failures,T,85
   DbLogInclude temperature
   IODev      OWio
   OldReadingsVal ('SchlafzimmerTemp','state','none')
   event-min-interval temperature,state:300
   event-on-change-reading temperature,state,STATE
   fp_Lageplan 172,299,5,SchlafzimmerTemp,
   fp_statevalue STATE
   icon       temp_temperature
   interval   300
   model      DS18B20
   oldreadings temperature
   resolution 10
   room       1.2_Schlafzimmer,OWX
   tempHigh   40
   tempLow    0
   tempUnit   Celsius
   userReadings OldReadingsVal('SchlafzimmerTemp','state','none')
   userattr   OldReadingsVal
   verbose    1


Was mache ich da falsch?
Schöne Grüße
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;

CoolTux

Hast Du eigentlich Dich ein bisschen belesen zum Thema userReadings?

userattr   OldReadingsVal
Das ist Unsinn. Bitte löschen.


userReadings OldReadingsVal('SchlafzimmerTemp','state','none')

Der Aufbau ist völlig falsch


Internals:
   NAME       dummyWeather
   NR         122
   STATE      T: 20.75 °C
   TYPE       dummy
   OLDREADINGS:
     2019-02-18 08:32:45   state           T: 18.75 °C
   READINGS:
     2019-02-18 08:32:53   alterWert       T: 18.75 °C
     2019-01-12 10:50:35   statMeasured-tempDay Min: 0.0 Avg: 14.5 Max: 14.5 (since: )
     2019-02-18 08:32:53   state           T: 20.75 °C
     2019-01-12 10:50:08   tempDayMax      0.0
     2019-01-12 10:50:35   tempDayMin      0.0
Attributes:
   oldreadings state
   room       Test
   userReadings alterWert:T:.* { OldReadingsVal($name,'state','none')}

Du musst nicht wissen wie es geht! Du musst nur wissen wo es steht, wie es geht.
Support me to buy new test hardware for development: https://www.paypal.com/paypalme/MOldenburg
My FHEM Git: https://git.cooltux.net/FHEM/
Das TuxNet Wiki:
https://www.cooltux.net

Damian

DOIF unterstützt neuerdings auch Differenz: https://fhem.de/commandref_DE.html#DOIF_Reading_Funktionen

z. B.

DOIF ([kaltwasser:state:diff] < 0) (....)

wenn die Temperatur fällt, ...
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

NewRasPi

Hallo CoolTux
gelesen habe ich viel, verstanden davon leider nur sehr wenig. Euer Hintergrundwissen fehlt mir, wenn ich da "ähnliche Suchworte" nicht erkenne.
Jetzt ist aber dank Deinem Tipp schon mal ein "alter Wert" als Reading im Device (sogar im Temperatursensor Device ohne extra Dummy).
Nun hoffe ich das ich mit einem DOIF auch die Formel hinbekomme, wenn der neue Wert um mehr als 5 °C höher als der "alterWert" ist soll eine Warnmeldung per TTS/ Pushbullet (je nach dem ob zuhause jemand anwessend ist) etc.
versendet/ ausgegeben werden.
Internals:
   ALARM      0
   ASYNC      0
   DEF        DS18B20 FFFB96641403
   ERRCOUNT   0
   FUUID      5c430225-f33f-103c-58a0-d28ad6c55a24787a
   INTERVAL   300
   IODev      OWio
   NAME       SchlafzimmerTemp
   NOTIFYDEV  global
   NR         34
   NTFY_ORDER 50-SchlafzimmerTemp
   OW_FAMILY  28
   OW_ID      FFFB96641403
   PRESENT    1
   ROM_ID     28.FFFB96641403.78
   STATE      T: 19.25 °C
   TYPE       OWTHERM
   owg_cf     10
   owg_temp   19.25
   owg_th     40
   owg_tl     0
   Helper:
     DBLOG:
       data:
         logdb:
           TIME       1550489951.6179
           VALUE      state: T: 19.25 °C
       temperature:
         logdb:
           TIME       1550490251.38622
           VALUE      19.25
   OLDREADINGS:
     2019-02-18 12:29:11   state           T: 19.50 °C
     2019-02-18 10:44:11   temperature     19.75
   READINGS:
     2019-02-18 12:39:11   alterWert       T: 19.50 °C
     2019-02-18 12:44:11   state           T: 19.25 °C
     2019-02-18 12:44:11   temperature     19.25
   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 172,299,5,SchlafzimmerTemp,
   fp_statevalue STATE
   icon       temp_temperature
   interval   300
   model      DS18B20
   oldreadings state
   resolution 10
   room       1.2_Schlafzimmer,OWX
   tempHigh   40
   tempLow    0
   tempUnit   Celsius
   userReadings alterWert:T:.* { OldReadingsVal($name,'state','none')}
   verbose    1

Es soll damit z.B. auch die Garage auf unnormalen Temperaturanstieg überwacht werden. (in unserer Region haben die letzten Wochen mehrere Carports und Garagen mit Autos gebrannt)
Ist der "alterWert" jetzt automatisch der zum voreingestellten Intervall, hier 300 Sekunden, gemessene Wert?

Vielen vielen Dank für die Hilfe.
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;

CoolTux

Bau es doch einfach in das userReading ein. Mach also kein userReading mit dem alten Wert sondern mach ein userReading was Dir auf Basis Deiner Wünsche ein high oder low aud gibt.

Fällt die Temperatir unnerhalb einer Readingaktuallisierung um 5 Grad gib wert high zurück.

nenne das userReading wegen meiner diffMin5 für minus 5 vom aktuellen Wert. Falls doch mal ein + 5 brauchst.  ;D
Du musst nicht wissen wie es geht! Du musst nur wissen wo es steht, wie es geht.
Support me to buy new test hardware for development: https://www.paypal.com/paypalme/MOldenburg
My FHEM Git: https://git.cooltux.net/FHEM/
Das TuxNet Wiki:
https://www.cooltux.net

Damian

Zitat von: NewRasPi am 18 Februar 2019, 12:58:56

Nun hoffe ich das ich mit einem DOIF auch die Formel hinbekomme, wenn der neue Wert um mehr als 5 °C höher als der "alterWert" ist soll eine Warnmeldung per TTS/ Pushbullet (je nach dem ob zuhause jemand anwessend ist) etc.


Wie schon geschrieben man braucht nichts weiter zu definieren (keine Dummys, keine weiteren Readings, kein OldReadings-Attribut etc.), es reicht einfach die Definition:

DOIF ([SchlafzimmerTemp:temperature:diff] > 5)(set ....)

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

CoolTux

Zitat von: Damian am 18 Februar 2019, 13:17:40
Wie schon geschrieben man braucht nichts weiter zu definieren (keine Dummys, keine weiteren Readings, kein OldReadings-Attribut etc.), es reicht einfach die Definition:

DOIF ([SchlafzimmerTemp:temperature:diff] > 5)(set ....)

Das ist schön und auch wirklich sehr Userfreundlich. Aber so lernen die User nichts. Was ist wenn sie mal an einen Punkt kommen wo DOIF nicht helfen kann. Dann fehlt ihnen das Rüstzeug um sich was eigenes zu bauen.
Ist nicht böse gemeint. Ich finde toll das es so geht und würde NewRasPi auch empfehlen es so zu machen, sobald er auch den anderen Weg über FHEM und Perl spezifische Funktionen verstanden hat.


Grüße
Du musst nicht wissen wie es geht! Du musst nur wissen wo es steht, wie es geht.
Support me to buy new test hardware for development: https://www.paypal.com/paypalme/MOldenburg
My FHEM Git: https://git.cooltux.net/FHEM/
Das TuxNet Wiki:
https://www.cooltux.net

NewRasPi

Hallo CoolTux und Damian

um das alles wirklich zu verstehen fehlt mir schon das Informatik Studium. Da bin ich froh das es auch kürzere einfachere Wege gibt, auch wenn ich ja nicht verstehe,
wie die DOIF Funktion etwas berechnet, was vorher nicht mal im Device berechnet wurde.
Ich muss bei meinem FHEM immer nur kleine Schritte machen, bin aber stolz was damit schon alles zu bewerkstelligen war.

Zitat von: Damian am 18 Februar 2019, 13:17:40
Wie schon geschrieben man braucht nichts weiter zu definieren (keine Dummys, keine weiteren Readings, kein OldReadings-Attribut etc.), es reicht einfach die Definition:

DOIF ([SchlafzimmerTemp:temperature:diff] > 5)(set ....)
Hallo CoolTux und Damian
ich bin begeistert.
Das ganze muss ich noch mit den richtigen Variablen füllen, wenn das mit dieser Funktion dann hoffentlich auch funktioniert.

GarageTemp
AussenTemp
DachbodenTemp
BadTemp
SchlafzimmerTemp


Internals:
   CFGFN     
   DEF        ([^Temp:temperature:diff] > 5)
(set TabletWohnzimmer ttsMsg Hallo die Temperatur im $DEVICE steigt zu schnell)
(set AcerHandy2 ttsMsg Hallo die Temperatur im $DEVICE steigt zu schnell)
DOELSE ()
   FUUID      5c6aa366-f33f-103c-feee-e7659679a3472a58
   MODEL      FHEM
   NAME       TemperaturKontrollDOIF
   NR         375286
   NTFY_ORDER 50-TemperaturKontrollDOIF
   STATE      initialized
   TYPE       DOIF
   Helper:
     DBLOG:
       state:
         logdb:
           TIME       1550494085.72993
           VALUE      initialized
   READINGS:
     2019-02-18 13:48:05   cmd             0
     2019-02-18 13:48:05   mode            enabled
     2019-02-18 13:48:05   state           initialized
     2019-02-18 13:48:05   timer_01_c01    error: Wrong timespec ^Temp:temperature:diff: either HH:MM:SS or {perlcode}
   Regex:
   attr:
     cmdState:
     wait:
     waitdel:
   condition:
     0          ::DOIF_time_once($hash,0,$wday) > 5
   devices:
   do:
     0:
       0          set TabletWohnzimmer ttsMsg Hallo die Temperatur im $DEVICE steigt zu schnell
       1          set AcerHandy2 ttsMsg Hallo die Temperatur im $DEVICE steigt zu schnell
     1:
       0         
   helper:
     globalinit 1
     last_timer 1
     sleeptimer -1
   itimer:
   localtime:
   time:
     0          ^Temp:temperature:diff
   timeCond:
     0          0
   timer:
     0          0
   timers:
     0           0
   uiState:
   uiTable:
Attributes:
   do         always


Oder eben erst mal 5 DOIF mit einzelnen Texten erstellen.
Schöne Grüße und noch mal DANKE
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

#17
Zitat von: NewRasPi am 18 Februar 2019, 13:57:48
Oder eben erst mal 5 DOIF mit einzelnen Texten erstellen.

Das funktioniert nur mit konkreten Devicenamen - keine RegeX-Angaben.

Kurz zur Funktionsweise: Initiiert durch die Angabe der Funktion diff sammelt DOIF die gesendeten Wert des Readings intern und kann dadurch die Differenz berechnen. Man kann ebenfalls Durchschnitt, Median oder Anstieg berechnen. Die Anzahl der gesammelten Werte kann ebenfalls angegeben werden, für diese Aufgabe braucht man nur die letzten zwei (diff entspricht diff2).
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

NewRasPi

Hallo Damian und alle Spezialisten
ist es den "Grundsätzlich schlechter" in diesem Fall z.B. fünf DOIF`s zu machen, die jedes davon nur eine Abfrage macht, anstatt, wenns möglich ist, ein DOIF mit variablen - also muss der Raspberry dadurch mehr oder weniger arbeiten?
Wenn es nur ein optisches Grauen ist, wenn da ewig viele einzelne DOIF Device sind versuch ich die einfach mal in einen versteckten Raum zu platzieren.

Dankeschön für Euer Wissen und die Arbeit für die Module
Schöne Grüße
NewRasPi

Zitat von: Damian am 18 Februar 2019, 14:58:07
Das funktioniert nur mit konkreten Devicenamen - keine RegeX-Angaben.

Kurz zur Funktionsweise: Initiiert durch die Angabe der Funktion diff sammelt DOIF die gesendeten Wert des Readings intern und kann dadurch die Differenz berechnen. Man kann ebenfalls Durchschnitt, Median oder Anstieg berechnen. Die Anzahl der gesammelten Werte kann ebenfalls angegeben werden, für diese Aufgabe braucht man nur die letzten zwei (diff entspricht diff2).
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 18 Februar 2019, 15:23:08
Hallo Damian und alle Spezialisten
ist es den "Grundsätzlich schlechter" in diesem Fall z.B. fünf DOIF`s zu machen, die jedes davon nur eine Abfrage macht, anstatt, wenns möglich ist, ein DOIF mit variablen - also muss der Raspberry dadurch mehr oder weniger arbeiten?
Wenn es nur ein optisches Grauen ist, wenn da ewig viele einzelne DOIF Device sind versuch ich die einfach mal in einen versteckten Raum zu platzieren.

Dankeschön für Euer Wissen und die Arbeit für die Module
Schöne Grüße
NewRasPi

Du kannst auch alles in ein DOIF packen, wo ist das Problem?

Jedes DOIF kostet etwas Performance und etwas Speicher, aber selbst bei einem Raspi müssten es schon sehr sehr viele sein, damit man etwas davon merkt.
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

NewRasPi

Hallo Damian
"mein Raspberry" kann nicht rechnen.
Alle 5 Minuten sagt mein DOIF jetzt das die Temperatur zu schnell steigt. Die Temperatur hat sich aber nur um 0,25°C geändert!
Hier das List der Kontroll DOIF:
Internals:
   CFGFN     
   DEF        ([SchlafzimmerTemp:temperature:diff] > 5)
(set TabletWohnzimmer ttsMsg Hallo die Temperatur im Schlafzimmer steigt zu schnell)
(set AcerHandy2 ttsMsg Hallo die Temperatur im Schlafzimmer steigt zu schnell)
DOELSE ()
   FUUID      5c6aa366-f33f-103c-feee-e7659679a3472a58
   MODEL      FHEM
   NAME       TemperaturKontrollSZDOIF
   NR         375286
   NTFY_ORDER 50-TemperaturKontrollDOIF
   STATE      cmd_1
   TYPE       DOIF
   Helper:
     DBLOG:
       state:
         logdb:
           TIME       1550513051.53256
           VALUE      cmd_1
   READINGS:
     2019-02-18 19:04:11   Device          SchlafzimmerTemp
     2019-02-18 19:04:11   cmd             1.2
     2019-02-18 19:04:11   cmd_event       SchlafzimmerTemp
     2019-02-18 19:04:11   cmd_nr          1
     2019-02-18 19:04:11   cmd_seqnr       2
     2019-02-18 19:04:11   e_SchlafzimmerTemp_temperature 19.5
     2019-02-18 15:33:52   mode            enabled
     2019-02-18 19:04:11   state           cmd_1
   Regex:
   attr:
     cmdState:
     wait:
     waitdel:
   condition:
     0          ::ReadingValDoIf($hash,'SchlafzimmerTemp','temperature','','diff') > 5
   devices:
     0           SchlafzimmerTemp
     all         SchlafzimmerTemp
   do:
     0:
       0          set TabletWohnzimmer ttsMsg Hallo die Temperatur im Schlafzimmer steigt zu schnell
       1          set AcerHandy2 ttsMsg Hallo die Temperatur im Schlafzimmer steigt zu schnell
     1:
       0         
   helper:
     event      temperature: 19.5,T: 19.50 °C
     globalinit 1
     last_timer 0
     sleeptimer -1
     timerdev   SchlafzimmerTemp
     timerevent temperature: 19.5,T: 19.50 °C
     triggerDev SchlafzimmerTemp
     DOIF_eventas:
       cmd_nr: 1
       cmd_seqnr: 2
       cmd_event: SchlafzimmerTemp
       state: cmd_1
     timerevents:
       temperature: 19.5
       T: 19.50 °C
     timereventsState:
       temperature: 19.5
       state: T: 19.50 °C
     triggerEvents:
       temperature: 19.5
       T: 19.50 °C
     triggerEventsState:
       temperature: 19.5
       state: T: 19.50 °C
   internals:
   itimer:
   readings:
     0           SchlafzimmerTemp:temperature
     all         SchlafzimmerTemp:temperature
   trigger:
   uiState:
   uiTable:
Attributes:
   do         always


Das List des Temperaturfühler:
Internals:
   ALARM      0
   ASYNC      0
   DEF        DS18B20 FFFB96641403
   ERRCOUNT   0
   FUUID      5c430225-f33f-103c-58a0-d28ad6c55a24787a
   INTERVAL   300
   IODev      OWio
   NAME       SchlafzimmerTemp
   NOTIFYDEV  global
   NR         34
   NTFY_ORDER 50-SchlafzimmerTemp
   OW_FAMILY  28
   OW_ID      FFFB96641403
   PRESENT    1
   ROM_ID     28.FFFB96641403.78
   STATE      T: 19.50 °C
   TYPE       OWTHERM
   owg_cf     10
   owg_temp   19.5
   owg_th     40
   owg_tl     0
   Helper:
     DBLOG:
       data:
         logdb:
           TIME       1550513051.57629
           VALUE      state: T: 19.50 °C
       temperature:
         logdb:
           TIME       1550513051.57629
           VALUE      19.5
   OLDREADINGS:
     2019-02-18 18:29:11   state           T: 19.25 °C
     2019-02-18 10:44:11   temperature     19.75
   READINGS:
     2019-02-18 19:04:11   alterWert       T: 19.25 °C
     2019-02-18 19:04:11   state           T: 19.50 °C
     2019-02-18 19:04:11   temperature     19.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 172,299,5,SchlafzimmerTemp,
   fp_statevalue STATE
   icon       temp_temperature
   interval   300
   model      DS18B20
   oldreadings state
   resolution 10
   room       1.2_Schlafzimmer,OWX
   tempHigh   40
   tempLow    0
   tempUnit   Celsius
   userReadings alterWert:T:.* { OldReadingsVal($name,'state','none')}
   verbose    1


Was habe ich den jetzt falsch gemacht. Alle 5 Minuten eine Ansage ohne das es eigentlich auslösen sollte strapaziert den WAF.
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 18 Februar 2019, 13:57:48
... was vorher nicht mal im Device berechnet wurde.
Falls das einer liest und glaubt, über userReadings kann schon seit Jahren die Differenz und der Differenzenquotient in einem Reading des selben  Gerätes dargestellt werden, s. https://commandref.fhem.de/commandref_DE.html#userReadings

Beispiel
attr <device> userReadings difftemp:temperature.* difference

Damian

Zitat von: NewRasPi am 18 Februar 2019, 19:10:38
Hallo Damian
"mein Raspberry" kann nicht rechnen.
Alle 5 Minuten sagt mein DOIF jetzt das die Temperatur zu schnell steigt. Die Temperatur hat sich aber nur um 0,25°C geändert!

Ich würde behaupten, dass du nicht die aktuelle DOIF-Version hast.
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

NewRasPi

Zitat von: Damian am 18 Februar 2019, 20:33:17
Ich würde behaupten, dass du nicht die aktuelle DOIF-Version hast.
Du musst doch Hellseher sein Damian.
Da letztens so viel von Problemen beim Update geschrieben wurde, habe ich wirklich seit einigen Tagen kein Update mehr gemacht.
Das werde ich jetzt sofort nachholen und berichten ob es dann "rechnen kann".

Dankeschön
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: Ellert am 18 Februar 2019, 20:02:47
Falls das einer liest und glaubt, über userReadings kann schon seit Jahren die Differenz und der Differenzenquotient in einem Reading des selben  Gerätes dargestellt werden, s. https://commandref.fhem.de/commandref_DE.html#userReadings

Beispiel
attr <device> userReadings difftemp:temperature.* difference

Ich denke, das Problem ist, dass die meisten nicht (mehr) wissen, was ein Differenzenquotient ist ;)
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

Ellert

Zitat von: Damian am 18 Februar 2019, 20:47:16
Ich denke, das Problem ist, dass die meisten nicht (mehr) wissen, was ein Differenzenquotient ist ;)
Na ja, in Wikipedia gibt's den Begriff  schon noch https://de.wikipedia.org/wiki/Differenzenquotient

und Intuitiv liegt der TE damit
Zitat von: NewRasPi am 17 Februar 2019, 22:17:30
Ziel meines vorhabens ist, auszuwerten ob sich die Temperatur von der letzten Messung (z.B. vor 5 Minuten intervall) zu der aktuellen um mehr
als 5 °C geändert hat um dann eine Warnmeldung auszugeben.
ja auch nicht falsch.

Damian

Zitat von: Ellert am 19 Februar 2019, 09:51:12
Na ja, in Wikipedia gibt's den Begriff  schon noch https://de.wikipedia.org/wiki/Differenzenquotient

und Intuitiv liegt der TE damit ja auch nicht falsch.

Viele werden es auch als Steigungsdreieck kennen, dazu muss man auch kein Abi haben.

Da oft von einem festen Zeitintervall (x1-x2) ausgegangen wird, reduziert sich die Aufgabe auf die Überprüfung der Differenz (y1-y2), wie in diesem Fall.
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

Ellert

Der Begriff Steigungsdreieck ist bisher unbemerkt an mir vorübergezogen

Ja, wenn der Sensor sich an das feste Zeitintervall hält, reicht der modifier "difference", sonst benötigt man "differential" bei den userReadings, z. B. wenn man eventbeschränkende Attribute (event-on-.*) verwendet.

NewRasPi

#28
Zitat von: Ellert am 19 Februar 2019, 10:49:21
Der Begriff Steigungsdreieck ist bisher unbemerkt an mir vorübergezogen

Ja, wenn der Sensor sich an das feste Zeitintervall hält, reicht der modifier "difference", sonst benötigt man "differential" bei den userReadings, z. B. wenn man eventbeschränkende Attribute (event-on-.*) verwendet.

Hallo Ihr Spezialisten
kurze Rückmeldung. Die nervigen Meldungen im 300 Sekundentakt ohne Änderung der Temperatur sind nach dem Update weg. Es gab zwar nach dem ersten "shutdown restart" nach dem Update eine Fehler Benachrichtigung das im Device ein falsches Attribute "fp_statevalue" vorhanden ist. Wer auch immer das angelegt hatte, ich wars nicht. (sagen immer alle)
Nach einem weiteren "shutdown restart" hat sich das aber wieder "erledigt".

Kann es sein das die Funktion von CoolTux mit dem userReadings  alterWert:T:.* { OldReadingsVal($name,'state','none')}
pro FHEM/ Raspi nur einmal vergeben werden kann? Auf den weiteren 1-wire Temperatursensoren geht es jedenfalls nicht.
Ich habe auch noch versucht, den Namen des userReadings verändert, aber auch dann geht es in einem anderen Temperaturfüher Device bei mir nicht/ oder zeigt "none".
userReadings  alterWertGarage:T:.* { OldReadingsVal($name,'state','none')}
Als nächstes werde ich mal mit dem Fön die Temperatursensoren um mehr als 5 °C anwärmen und prüfen ob dann das DOIF auslöst. (leider erst heut abend zuhause)
Eine Anmerkung zu Differenzenquotienen - im technischen kenne ich das unter dem Begriff "delta" mit Dreieck als Sympol, was für die Veränderung steht.

Vielen Dank für Eure Hilfe - ohne Euch würde ich vermuttlich nur den Startbildschirm von FHEM bewundern. (ganz ohne "Funktionen")
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 19 Februar 2019, 12:57:38
Hallo Ihr Spezialisten
kurze Rückmeldung. Die nervigen Meldungen im 300 Sekundentakt ohne Änderung der Temperatur sind nach dem Update weg. Es gab zwar nach dem ersten "shutdown restart" nach dem Update eine Fehler Benachrichtigung das im Device ein falsches Attribute "fp_statevalue" vorhanden ist. Wer auch immer das angelegt hatte, ich wars nicht. (sagen immer alle)
Nach einem weiteren "shutdown restart" hat sich das aber wieder "erledigt".

Kann es sein das die Funktion von CoolTux mit dem userReadings  alterWert:T:.* { OldReadingsVal($name,'state','none')}
pro FHEM/ Raspi nur einmal vergeben werden kann? Auf den weiteren 1-wire Temperatursensoren geht es jedenfalls nicht.
Ich habe auch noch versucht, den Namen des userReadings verändert, aber auch dann geht es in einem anderen Temperaturfüher Device bei mir nicht/ oder zeigt "none".
userReadings  alterWertGarage:T:.* { OldReadingsVal($name,'state','none')}
Als nächstes werde ich mal mit dem Fön die Temperatursensoren um mehr als 5 °C anwärmen und prüfen ob dann das DOIF auslöst. (leider erst heut abend zuhause)
Eine Anmerkung zu Differenzenquotienen - im technischen kenne ich das unter dem Begriff "delta" mit Dreieck als Sympol, was für die Veränderung steht.

Vielen Dank für Eure Hilfe - ohne Euch würde ich vermuttlich nur den Startbildschirm von FHEM bewundern. (ganz ohne "Funktionen")
Schöne Grüße
NewRasPi
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

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;