(Gelöst) Do-if mit wait und reboot

Begonnen von fhemjan, 09 Januar 2023, 14:58:30

Vorheriges Thema - Nächstes Thema

fhemjan

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?

Damian

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.
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

fhemjan

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!

fhemjan

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.

Damian

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.
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

fhemjan

#5
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

Damian

Dein Fenster wurde zuletzt am 07.01 um 11:45 bewegt:

2023-01-07 11:45:56   trigger_cnt     92
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

fhemjan

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 "}}"

Damian

#8
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
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

fhemjan

Es funktioniert! Vielen Dank für deine Mühe!