Hallo liebe Forengemeine,
ich bin wieder dabei, an FHEM zu basteln, aber scheitere mal wieder an der Umsetzung.
Ziel: Temperaturüberwachung vom Thermostat: Das Thermostat aktualisiert sich alle 15 Minuten. Die Temperatur wird als Zahl in einen File-Log gespeichert. Dort sollen die letzten beiden Werte überprüft werden und einen Anruf triggern, wenn die letzten beiden Werte unter 15 liegen. Das File Log, UserReading und die SIP-Funktion habe ich schon umgesetzt. Leider weiß ich nicht, wie man diese Werte im File-Log prüfen kann. Ich hoffe, mir kann hier jemand helfen.
Device-List Thermostat
Internals:
CFGFN
DEF fb1:11959_0009784 actuator,tempSensor
FUUID 5e9af6cd-f33f-4070-09c6-fa18afcde7fa58b6
IODev fb1
LASTInputDev fb1
MSGCNT 6
NAME FBDECT_fb1_11959_0009784
NR 83
STATE desired-temp: 17.5 C
TYPE FBDECT
fb1_MSGCNT 6
fb1_TIME 2020-04-18 15:02:26
id 11959_0009784
props actuator,tempSensor
READINGS:
2020-04-18 15:02:26 AIN 11959 0009784
2020-04-18 15:02:26 FBNAME Heizung Bad
2020-04-18 15:02:26 FBPROP actuator,tempSensor
2020-04-18 15:02:26 FBTYPE Comet DECT
2020-04-18 15:02:26 ID 16
2020-04-18 15:02:26 battery 50 %
2020-04-18 15:02:26 batteryPercent 50
2020-04-18 15:02:26 batteryState ok
2020-04-18 15:02:26 batterylow 0
2020-04-18 15:02:26 day-temp 21.5 C
2020-04-18 15:02:26 desired-temp 17.5 C
2020-04-18 15:02:26 devicelock no
2020-04-18 15:02:26 errorcode noError (0)
2020-04-18 15:02:26 fwversion 03.54
2020-04-18 15:02:26 holidayactive no
2020-04-18 15:02:26 locked no
2020-04-18 15:02:26 nextPeriodStart 2020-04-18 20:00:00
2020-04-18 15:02:26 nextPeriodTemp 21.5 C
2020-04-18 15:02:26 night-temp 17.5 C
2020-04-18 15:02:26 present yes
2020-04-18 15:02:26 state desired-temp: 17.5 C
2020-04-18 15:02:26 summeractive no
2020-04-18 15:02:26 temp 18.5
2020-04-18 15:02:26 tempadjust -3.0 C
2020-04-18 15:02:26 temperature 18.5 C (measured)
2020-04-18 15:02:26 windowopenactiv no
Attributes:
IODev fb1
alias Heizung Bad
event-min-interval power:120
room Heizung
userReadings temp:temperature:.* { ReadingsNum("FBDECT_fb1_11959_0009784","temperature","none") }
Device List File-Log
Internals:
CFGFN
DEF ./log/FBDECT_fb1_11959_0009784-%Y.log FBDECT_fb1_11959_0009784:temp:.*
FD 16
FUUID 5e9af6cd-f33f-4070-b003-ec66e470bb0be288
NAME FileLog_FBDECT_fb1_11959_0009784
NOTIFYDEV FBDECT_fb1_11959_0009784
NR 84
NTFY_ORDER 50-FileLog_FBDECT_fb1_11959_0009784
REGEXP FBDECT_fb1_11959_0009784:temp:.*
STATE active
TYPE FileLog
currentlogfile ./log/FBDECT_fb1_11959_0009784-2020.log
logfile ./log/FBDECT_fb1_11959_0009784-%Y.log
READINGS:
2020-04-18 15:02:26 linesInTheFile 3
pos:
Attributes:
nrarchive 3
room Logfiles
Liebe Grüße und vielen Dank im Vorraus
Leon
Hallo,
vielleicht ist das Modul readingshistory was für dich: https://fhem.de/commandref.html#readingsHistory
Dort kann man wohl mehrer ältere Werte Speichern...
Alternativ kannst du natürlich mit average in DOIF arbeiten: https://forum.fhem.de/index.php/topic,95759.0.html
Hierbei kannst du ja 2 Werte nutzen, und wenn der Mittelwert <15 und der aktuelle Werte auch unter 15 ist, werden wohl die beiden letzten <15 gewesen sein... oder du arbeitest mit den prozentualen Anstieg, wobei ich nicht weiß, ob der zwischen positiv und negativ unterscheidet..
Danke für den Tipp, aber der Forenthread ist mit dem Wikt wiedersprüchlich. Wie müsste mein DoIF aussehen?
so?
Internals:
CFGFN
DEF ([zahlentest:state:avg3] < 15) (set ergebnis on)
FUUID 5e9b1b0c-f33f-4070-04f0-cba72c1ecda64294
MODEL FHEM
NAME test
NOTIFYDEV zahlentest,global
NR 507
NTFY_ORDER 50-test
STATE cmd_1
TYPE DOIF
VERSION 21224 2020-02-18 18:45:49
READINGS:
2020-04-18 17:30:41 Device zahlentest
2020-04-18 17:28:18 avg3 33
2020-04-18 17:30:41 cmd 1
2020-04-18 17:30:41 cmd_event zahlentest
2020-04-18 17:30:41 cmd_nr 1
2020-04-18 17:30:41 e_zahlentest_state 10
2020-04-18 17:30:15 mode enabled
2020-04-18 17:30:41 state cmd_1
Regex:
accu:
zahlentest:
accu:
state ^zahlentest$:^state:
cond:
zahlentest:
0:
state ^zahlentest$:^state:
accu:
zahlentest state:
dim 3
value:
33
0
10
attr:
cmdState:
wait:
waitdel:
condition:
0 ::ReadingValDoIf($hash,'zahlentest','state','','avg3') < 15
do:
0:
0 set ergebnis on
1:
helper:
DEVFILTER ^global$|^zahlentest$
NOTIFYDEV global|zahlentest
event 10
globalinit 1
last_timer 0
sleeptimer -1
timerdev zahlentest
timerevent 10
triggerDev zahlentest
DOIF_eventa:
cmd_nr: 1
cmd: 1
cmd_event: zahlentest
cmd_1
DOIF_eventas:
cmd_nr: 1
cmd: 1
cmd_event: zahlentest
state: cmd_1
timerevents:
10
timereventsState:
state: 10
triggerEvents:
10
triggerEventsState:
state: 10
internals:
readings:
all zahlentest:state
trigger:
uiState:
uiTable:
Attributes:
Oder brauche ich da noch das Attribut wie im Forenthread
avg3:[Zahlentest:state:avg3]
Wenn ja, muss ich dann das DEF ([zahlentest:state:avg3] < 15) (set ergebnis on)
ändern?
Vielen Dank für die schnelle Hilfe!
Warum die Log lesen und nicht einfach auf Events reagieren?
https://fhem.de/commandref_DE.html#DOIF_waitsame