Konnte zu dem Thema noch nichts finden, daher frage ich euch mal nach Lösungsvorschlägen:
Ich habe ein DO-IF, das mich erinnern soll wenn ich in einem Raum 24 Stunden nicht gelüftet habe. Das Ganze funtkioniert im Grunde.
Nun zerschießt sich der schöne Plan jedoch wenn während der Wartezeit ein Reboot des Fhem-Systems stattfindet (z.B. automatisches nächtliches Backup des PIs).
Mir fehlt also z.B. ein userreading, das den wait-timer kurz vor dem shutdown ausliest und speichert und nach dem reboot einen neuen wait-timer mit dem gesicherten Wert startet. Ist das sinnvoll, bzw. machbar? Oder habt ihr da evtl. sogar eine fesche Lösung parat?
Zitat von: fhemjan am 09 Januar 2023, 14:58:30
Konnte zu dem Thema noch nichts finden, daher frage ich euch mal nach Lösungsvorschlägen:
Ich habe ein DO-IF, das mich erinnern soll wenn ich in einem Raum 24 Stunden nicht gelüftet habe. Das Ganze funtkioniert im Grunde.
Nun zerschießt sich der schöne Plan jedoch wenn während der Wartezeit ein Reboot des Fhem-Systems stattfindet (z.B. automatisches nächtliches Backup des PIs).
Mir fehlt also z.B. ein userreading, das den wait-timer kurz vor dem shutdown ausliest und speichert und nach dem reboot einen neuen wait-timer mit dem gesicherten Wert startet. Ist das sinnvoll, bzw. machbar? Oder habt ihr da evtl. sogar eine fesche Lösung parat?
Du fragst einmal am Tag zu einem bestimmten Zeitpunkt das Reading des Fensters ab. Mit [...:sec] kannst du das Alter des Readings bestimmten. Damit kannst du feststellen, ob innerhalb der letzten 24 Stunden sich der Zustand des Readings geändert hat.
Zitat von: Damian am 09 Januar 2023, 15:32:06
Du fragst einmal am Tag zu einem bestimmten Zeitpunkt das Reading des Fensters ab. Mit [...:sec] kannst du das Alter des Readings bestimmten. Damit kannst du feststellen, ob innerhalb der letzten 24 Stunden sich der Zustand des Readings geändert hat.
Das klingt gut, probiere ich, danke!
hm. Ich hab das Gefühl das es so nicht klappt.
Es sind die HM-Sec-Sco. Die senden scheinbar immer mal wieder ein Alive Signal, bei dem auch der state (open/closed) mit aktualisiert wird.
Ggf. über eine Hilfsvariable, die ihren Zustand ändert wenn sich state ändert!? Da müsst ich mal ein wenig dran tüfteln.
Zitat von: fhemjan am 09 Januar 2023, 17:27:13
hm. Ich hab das Gefühl das es so nicht klappt.
Es sind die HM-Sec-Sco. Die senden scheinbar immer mal wieder ein Alive Signal, bei dem auch der state (open/closed) mit aktualisiert wird.
Ggf. über eine Hilfsvariable, die ihren Zustand ändert wenn sich state ändert!? Da müsst ich mal ein wenig dran tüfteln.
Poste mal ein list von dem Device.
Zitat von: Damian am 09 Januar 2023, 18:10:38
Poste mal ein list von dem Device.
Das Fenster:
Internals:
DEF 576896
FUUID 631cef24-f33f-fb2e-0ad2-cdc5b5ba8bbd5007
FVERSION 10_CUL_HM.pm:0.259770/2022-04-18
IODev myRemoteHmUART
LASTInputDev myRemoteHmUART
MSGCNT 7
NAME KB_Fenster
NR 49
NTFY_ORDER 48-KB_Fenster
STATE closed
TYPE CUL_HM
chanNo 01
disableNotifyFn 1
eventCount 3
lastMsg No:91 - t:10 s:576896 d:ACDBAD 06010000
myHmUART_MSGCNT 2
myHmUART_RAWMSG 050000528FA610576896ACDBAD06010000
myHmUART_RSSI -82
myHmUART_TIME 2023-01-09 17:17:24
myRemoteHmUART_MSGCNT 5
myRemoteHmUART_RAWMSG 0501004091A610576896ACDBAD06010000
myRemoteHmUART_RSSI -64
myRemoteHmUART_TIME 2023-01-09 19:04:27
peerList KB_Heizung_WindowRec
protLastRcv 2023-01-09 19:04:27
protRcv 5 last_at:2023-01-09 19:04:27
protSnd 5 last_at:2023-01-09 19:04:27
protState CMDs_done
rssi_at_myHmUART cnt:2 min:-82 max:-80 avg:-81 lst:-82
rssi_at_myRemoteHmUART cnt:5 min:-64 max:-59 avg:-60 lst:-64
CL:
Authenticated 1
AuthenticatedBy allowed_WEB
AuthenticatedUser fhemuser
BUF
FD 12
FW_ID 2743
LASTACCESS 1673288634.52614
NAME WEB_192.168.178.23_33794
NR 2745
PEER 192.168.178.23
PORT 33794
SNAME WEB
SSL
STATE Connected
TEMPORARY 1
TYPE FHEMWEB
canAsyncOutput 1
encoding UTF-8
READINGS:
2023-01-09 19:23:16 state Connected
Helper:
DBLOG:
battery:
logdb:
TIME 1673287467.79402
VALUE ok
state:
logdb:
TIME 1673287467.79402
VALUE closed
READINGS:
2022-09-10 22:18:51 CommandAccepted yes
2022-09-10 22:18:49 D-firmware 1.0
2022-09-10 22:18:49 D-serialNr OEQ0431789
2023-01-09 19:04:27 IODev myRemoteHmUART
2023-01-04 16:52:40 PairedTo 0xACDBAD
2023-01-04 16:52:40 RegL_00. 00:00 02:01 09:01 0A:AC 0B:DB 0C:AD 10:01 14:06
2023-01-04 16:52:40 RegL_01. 00:00 08:01 20:9C 21:00 30:06
2023-01-04 16:52:41 RegL_04.KB_Heizung_WindowRec 00:00 01:01
2022-09-10 22:18:51 aesCommToDev ok
2022-09-10 22:18:51 aesKeyNbr 00
2023-01-09 19:04:27 alive yes
2023-01-09 19:04:27 battery ok
2023-01-04 22:35:40 cfgState TrigUndef,TrigUnkn
2023-01-09 19:04:27 commState CMDs_done
2023-01-09 19:04:27 contact closed (to VCCU)
2023-01-09 15:06:27 peerList KB_Heizung_WindowRec
2022-11-19 03:40:52 powerOn 2022-11-19 03:40:52
2023-01-09 19:04:27 recentStateType info
2023-01-09 19:04:27 sabotageError off
2023-01-09 19:04:27 state closed
2022-12-01 13:35:25 trigDst_ACDBAD noConfig
2022-12-01 06:41:23 trigDst_KB_Heizung noConfig
2022-09-10 22:15:04 trigDst_broadcast noConfig
2023-01-07 11:45:56 trigger_cnt 92
helper:
HM_CMDNR 145
lastMsgTm 1673287467.78285
mId 00C7
peerFriend peerAct,peerVirt
peerIDsState complete
peerOpt 4:threeStateSensor
regLst 0,1,4p
rxType 28
supp_Pair_Rep 0
ack:
cmds:
TmplKey KB_Heizung_WindowRec:no:1673273187.86353
TmplTs 1673273187.86353
cmdKey 1:1:0::KB_Fenster:00C7:01:KB_Heizung_WindowRec
cmdLst:
assignHmKey noArg
clear [({msgErrors}|msgEvents|rssi|attack|trigger|register|oldRegs|readings|all)]
deviceRename -newName-
fwUpdate -filename- [-bootTime-]
getConfig noArg
getDevInfo noArg
getRegRaw (List0|List1|List2|List3|List4|List5|List6|List7) [-peerChn-]
peerBulk -peer1,peer2,...- [({set}|unset)]
peerChan -btnNumber- -actChn- [({single})] [({set}|unset)] [actor|remote|both]
peerSmart -peerOpt-
raw -data- [...]
regBulk -list-.-peerChn- -addr1:data1- [-addr2:data2-]...
regSet [(prep|{exec})] -regName- -value- [-peerChn-]
reset noArg
sign [(on|{off})]
tplDel -tplDel-
tplSet_0 -tplChan-
tplSet_KB_Heizung_WindowRec -tplPeer-
trgEventL -peer- -condition-
trgEventS -peer- -condition-
trgPressL [(-peer-|{all})]
trgPressS [(-peer-|{all})]
unpair noArg
lst:
condition closed,open,tilted
peer KB_Heizung_WindowRec
peerOpt remove_KB_Heizung_WindowRec,AZJ_Heizung_WindowRec,AZJ_Heizung_remote,AZK_Heizung_WindowRec,AZK_Heizung_remote,KB_Heizung_remote,KZ_Heizung_WindowRec,KZ_Heizung_remote,SZK_Heizung_WindowRec,SZK_Heizung_remote,SZ_Heizung_WindowRec,SZ_Heizung_remote,VCCU,WZF_Heizung_WindowRec,WZF_Heizung_remote,WZT_Heizung_WindowRec,WZT_Heizung_remote
tplChan
tplDel
tplPeer
rtrvLst:
cmdList [({short}|long)]
deviceInfo [({short}|long)]
list [({normal}|full)]
param -param-
reg -addr- -list- [-peerChn-]
regList noArg
regTable noArg
regVal -addr- -list- [-peerChn-]
saveConfig [-filename-]
tplInfo noArg
expert:
def 0
det 0
raw 1
tpl 0
io:
flgs 0
newChn +576896,00,00,00
nextSend 1673287468.07462
rxt 2
vccu VCCU
p:
576896
00
00
00
prefIO:
mRssi:
mNo 91
io:
myHmUART:
myRemoteHmUART:
-60
-60
peerIDsH:
00000000 broadcast
37F67B03 KB_Heizung_WindowRec
prt:
bErr 0
sProc 0
sleeping 1
rspWait:
q:
qReqConf
qReqStat
role:
chn 1
dev 1
rpt:
IO myRemoteHmUART
flg A
ts 1673287467.78285
ack:
HASH(0x596fd10)
918002ACDBAD57689600
rssi:
at_myHmUART:
avg -81
cnt 2
lst -82
max -80
min -82
at_myRemoteHmUART:
avg -60
cnt 5
lst -64
max -59
min -64
tmpl:
Attributes:
DbLogExclude .*
DbLogInclude battery,state
IOgrp VCCU
alias Fenster im kleinen Bad
autoReadReg 4_reqStatus
event-min-interval .*:3600
event-on-change-reading .*
expert rawReg
firmware 1.0
icon fts_window_1w_open
model HM-SEC-SCO
peerIDs 00000000,37F67B03
room BadUnten,Homematic
serialNr OEQ0431789
subType threeStateSensor
Ganz richtig ist mein At aber auch noch nicht
+*00:00:30 {
my $closedFor = ReadingsVal("KB_Fenster","state[sec]","");;
my $notifyAfterSec = 10;;
if (($closedFor > $notifyAfterSec)) {
fhem("set pushmsg msg device='gal20-Jan' title='Bad unten lüften!' message='Bad unten wurde seit $closedFor Sekunden nicht mehr gelüftet.'")}
}]
Ist das so richtig mit dem sec? Bekomme keine Nachricht trotz der kleinen Werte die ich testweise gewählt hab. Auch bei direktem execute
Dein Fenster wurde zuletzt am 07.01 um 11:45 bewegt:
2023-01-07 11:45:56 trigger_cnt 92
Müsste das at dann nicht so richtig sein? Er gibt mir 2 Syntaxfehler:
+*00:00:30 {
my $notifyAfterSec = 10;;
if (([KB_Fenster:trigger_cnt:sec] < $notifyAfterSec)) {
fhem("set pushmsg msg device='gal20-Jan' title='Bad unten lüften!' message='Bad unten wurde seit 1 Tag nicht mehr gelüftet.'")}
}
Fehler:
syntax error at (eval 2842) line 3, near "KB_Fenster:"
syntax error at (eval 2842) line 5, near "}}"
set magic funktioniert wohl nicht innerhalb von Perl.
mit DOIF:
DOIF ([18:00] and [?KB_Fenster:trigger_cnt:sec] > 24*3600) (set pushmsg msg device='gal20-Jan' title='Bad unten lüften!' message='Bad unten wurde seit 1 Tag nicht mehr gelüftet)
attr do always
Es funktioniert! Vielen Dank für deine Mühe!