Lampen nach Zeit x abschalten [gelöst]

Begonnen von Maui, 30 März 2019, 13:43:41

Vorheriges Thema - Nächstes Thema

Maui

Moin.
monitoring mit WindowOpen Meldung hat mich auf eine Idee gebracht.
Ich habe ein paar Lampen, die einzeln per DOIF Nacht Zeit x automatisch ausgeschaltet werden.
Treppenhaus zb oder Lampen die ewig an sind.
Aktuell mache ich das mit einem DOIF pro Gerät.

Was mir vorschwebt wäre ein DOIF, welches alle Devices mit on triggert und dann einen per attr im jeweiligen Device hinterlegten Wert ausliest und nach dieser Zeit in Sekunden auf off schaltet. Default soll beim Attr nix passieren also wenn es nicht gesetzt ist, triggert das Device auch nicht.
Ein schalten am Schalter in der Zeit soll den Counter zurücksetzen also eine Art resetwait.
Spontan würde mir da aggregieren einfallen aber ich krieg es nicht sinnvoll zusammen.

Vielleicht kann mir einer einen Schubs mit DOIF geben oder evtl. Gibt es sogar etwas "besseres"?

KernSani

RasPi: RFXTRX, HM, zigbee2mqtt, mySensors, JeeLink, miLight, squeezbox, Alexa, Siri, ...

Ellert

Zitat von: Maui am 30 März 2019, 13:43:41
Moin.
monitoring mit WindowOpen Meldung hat mich auf eine Idee gebracht.
Ich habe ein paar Lampen, die einzeln per DOIF Nacht Zeit x automatisch ausgeschaltet werden.
Treppenhaus zb oder Lampen die ewig an sind.
Aktuell mache ich das mit einem DOIF pro Gerät.

Was mir vorschwebt wäre ein DOIF, welches alle Devices mit on triggert und dann einen per attr im jeweiligen Device hinterlegten Wert ausliest und nach dieser Zeit in Sekunden auf off schaltet. Default soll beim Attr nix passieren also wenn es nicht gesetzt ist, triggert das Device auch nicht.
Ein schalten am Schalter in der Zeit soll den Counter zurücksetzen also eine Art resetwait.
Spontan würde mir da aggregieren einfallen aber ich krieg es nicht sinnvoll zusammen.

Vielleicht kann mir einer einen Schubs mit DOIF geben oder evtl. Gibt es sogar etwas "besseres"?
Da würde sich DOIF im Perl-Mode gut eignen. Ein Block schaltet in einer for-Schleife alle Geräte zeitgesteuert ein und setzt die Dauer auf den Readingswert für die Lampe, aber nur wenn ein Reading für die Lampe existiert oder es nicht 0 ist.
Für jedes Gerät setzt Du ein Reading über readingList, setList, webCmd und webCmdLabel mit der Einschaltdauer.
Ein weiterer Block triggert auf die Schalter und setzt den entsprechenden laufenden Timer zurück oder startet ihn.
https://commandref.fhem.de/commandref_DE.html#DOIF_Perl_Modus
https://forum.fhem.de/index.php/topic,84969.0.html


Byte09

#3
Zitat von: Maui am 30 März 2019, 13:43:41
Moin.
monitoring mit WindowOpen Meldung hat mich auf eine Idee gebracht.
Ich habe ein paar Lampen, die einzeln per DOIF Nacht Zeit x automatisch ausgeschaltet werden.
Treppenhaus zb oder Lampen die ewig an sind.
Aktuell mache ich das mit einem DOIF pro Gerät.

Was mir vorschwebt wäre ein DOIF, welches alle Devices mit on triggert und dann einen per attr im jeweiligen Device hinterlegten Wert ausliest und nach dieser Zeit in Sekunden auf off schaltet. Default soll beim Attr nix passieren also wenn es nicht gesetzt ist, triggert das Device auch nicht.
Ein schalten am Schalter in der Zeit soll den Counter zurücksetzen also eine Art resetwait.
Spontan würde mir da aggregieren einfallen aber ich krieg es nicht sinnvoll zusammen.

Vielleicht kann mir einer einen Schubs mit DOIF geben oder evtl. Gibt es sogar etwas "besseres"?

ich habe dir mal ein MSwitch gebaut. Das sollte 'out off the box' tun , was du möchtest - vorausgesetzt ich habe es richtig verstanden.

es reagiert auf alle devices, die das userattribut 'autooff' haben und dieses attribut entsprechend mit einem wert in sekunden belegt ist.

bei manuellem erneuten anschalten des devices werden interne timer gelöscht und neu gesetzt . Um es möglichst kompatibel zu halten , habe ich auf eine Nutzung von 'on-for-timer' verzichtet.

... bei interesse musst du dich halt mal in das modul einlesen.

! aktueller Fhemstatus (updates) ist Voraussetzung !

gruss Byte09

defmod Autooff MSwitch    # FreeCmd
attr Autooff MSwitch_Debug 0
attr Autooff MSwitch_Delete_Delays 0
attr Autooff MSwitch_Expert 1
attr Autooff MSwitch_Extensions 0
attr Autooff MSwitch_Help 1
attr Autooff MSwitch_Ignore_Types notify allowed at watchdog doif fhem2fhem telnet FileLog readingsGroup FHEMWEB autocreate eventtypes readingsproxy svg cul
attr Autooff MSwitch_Include_Devicecmds 1
attr Autooff MSwitch_Include_MSwitchcmds 0
attr Autooff MSwitch_Include_Webcmds 0
attr Autooff MSwitch_Inforoom MSwitch
attr Autooff MSwitch_Lock_Quickedit 1
attr Autooff MSwitch_Mode Notify
attr Autooff room 1_test

setstate Autooff active
setstate Autooff 2019-03-31 15:29:47 .Device_Affected FreeCmd-AbsCmd1,FreeCmd-AbsCmd2
setstate Autooff 2019-03-31 18:33:19 .Device_Affected_Details FreeCmd-AbsCmd1#[NF]cmd#[NF]cmd#[NF]{#[nl]my#[sp]$message#[sp]=#[sp]"set#[sp]$EVTPART1#[sp]off#[se]"#[se]#[nl]my#[sp]$timehash#[sp]=#[sp]$hash->{helper}{delays}#[se]#[nl]foreach#[sp]my#[sp]$a#[sp](#[sp]sort#[sp]keys#[sp]%{$timehash}#[sp])#[nl]{#[nl]Log3(#[sp]$name#[ko]#[sp]0#[ko]#[sp]$a#[sp])#[se]#[nl]my#[sp]@devhash#[sp]=#[sp]split(#[sp]/#[bs]##[bs][tr#[bs]]/#[ko]#[sp]$a#[sp])#[se]#[nl]#Log3(#[sp]$name#[ko]#[sp]0#[ko]#[sp]"$message"#[sp])#[se]#[nl]#Log3(#[sp]$name#[ko]#[sp]0#[ko]#[sp]"$devhash[0]"#[sp])#[se]#[nl]my#[sp]$re#[sp]=#[sp]qr/$message/#[se]#[nl]if#[sp](#[sp]$devhash[0]#[sp]=~#[sp]$re#[sp])#[sp]#[nl]{#[nl]#Log3(#[sp]$name#[ko]#[sp]0#[ko]#[sp]"found#[sp]#[sp]$devhash[0]#[sp]---#[sp]$devhash[4]"#[sp])#[se]#[nl]RemoveInternalTimer($devhash[4])#[se]#[nl]RemoveInternalTimer($a)#[se]#[nl]delete(#[sp]$hash->{helper}{delays}{$a}#[sp])#[se]#[nl]}#[nl]}#[nl]my#[sp]$sec#[sp]=#[sp]AttrVal(#[sp]'$EVTPART1'#[ko]#[sp]'autooff'#[ko]#[sp]"00#[dp]00#[dp]00"#[sp])#[se]#[nl]my#[sp]$hours#[sp]=#[sp](#[sp]abs($sec)#[sp]<#[sp]3600#[sp]?#[sp]0#[sp]#[dp]#[sp]int(#[sp]abs($sec)#[sp]/#[sp]3600#[sp])#[sp])#[se]#[nl]my#[sp]$minutes#[sp]=#[sp](#[sp]abs($sec)#[sp]<#[sp]60#[sp]?#[sp]0#[sp]#[dp]#[sp]int(#[sp]abs($sec)#[sp]/#[sp]60#[sp])#[sp])#[se]#[nl]my#[sp]$seconds#[sp]=#[sp]abs($sec)#[sp]%#[sp]60#[se]#[nl]$hours#[sp]#[sp]#[sp]=#[sp]"0"#[sp].#[sp]$hours#[sp]#[sp]#[sp]if#[sp](#[sp]$hours#[sp]<#[sp]10#[sp])#[se]#[nl]$minutes#[sp]=#[sp]"0"#[sp].#[sp]$minutes#[sp]if#[sp](#[sp]$minutes#[sp]<#[sp]10#[sp])#[se]#[nl]$seconds#[sp]=#[sp]"0"#[sp].#[sp]$seconds#[sp]if#[sp](#[sp]$seconds#[sp]<#[sp]10#[sp])#[se]#[nl]my#[sp]$devicetime#[sp]=#[sp]"$hours#[dp]$minutes#[dp]$seconds"#[se]#[nl]fhem("setreading#[sp]$SELF#[sp]device_off#[sp]$EVTPART1")#[se]#[nl]fhem("setreading#[sp]$SELF#[sp]device_off_time#[sp]$devicetime")#[se]#[nl]my#[sp]$timecond#[sp]=gettimeofday()#[sp]+#[sp]$sec#[se]#[nl]}#[NF]#[NF]delay1#[NF]delay1#[NF]00#[dp]00#[dp]00#[NF]00#[dp]00#[dp]00#[NF]#[NF]#[NF]0#[NF]0#[NF]1#[NF]0#[NF]#[NF]0#[NF]0#[NF]1#[ND]FreeCmd-AbsCmd2#[NF]cmd#[NF]cmd#[NF]set#[sp][$SELF#[dp]device_off]#[sp]off#[se]#[NF]#[NF]delay0#[NF]delay1#[NF][$SELF#[dp]device_off_time]#[NF]00#[dp]00#[dp]00#[NF][$SELF#[dp]device_off_time]#[sp]ne#[sp]"00#[dp]00#[dp]00"#[NF]#[NF]0#[NF]0#[NF]2#[NF]0#[NF]#[NF]0#[NF]0#[NF]1
setstate Autooff 2019-03-31 18:33:48 .Device_Events .*#[tr]no_trigger
setstate Autooff 2019-03-31 12:38:57 .First_init done
setstate Autooff 2019-03-31 18:31:21 .Trigger_Whitelist TYPE=..*:FILTER=autooff=..*
setstate Autooff 2019-03-31 15:32:48 .Trigger_cmd_off no_trigger
setstate Autooff 2019-03-31 15:32:48 .Trigger_cmd_on .*
setstate Autooff 2019-03-31 18:31:21 .Trigger_condition "$EVENT"#[sp]=#[ti]#[sp]m/(#[pt]*#[dp]?)state#[dp]on$/
setstate Autooff 2019-03-31 15:32:48 .Trigger_off no_trigger
setstate Autooff 2019-03-31 15:32:48 .Trigger_on no_trigger
setstate Autooff 2019-03-31 18:31:21 .Trigger_time
setstate Autooff 2019-03-31 12:38:57 .V_Check V2.00
setstate Autooff 2019-03-31 18:33:40 EVENT autoaus1:state:on
setstate Autooff 2019-03-31 18:33:40 EVTFULL autoaus1:state:on
setstate Autooff 2019-03-31 18:33:40 EVTPART1 autoaus1
setstate Autooff 2019-03-31 18:33:40 EVTPART2 state
setstate Autooff 2019-03-31 18:33:40 EVTPART3 on
setstate Autooff 2019-03-31 18:31:21 Trigger_device all_events
setstate Autooff 2019-03-31 15:32:48 Trigger_log off
setstate Autooff 2019-03-31 18:33:40 device_off autoaus1
setstate Autooff 2019-03-31 18:33:40 device_off_time 00:00:07
setstate Autooff 2019-03-31 18:33:48 last_activation_by event
setstate Autooff 2019-03-31 18:33:41 last_cmd 1
setstate Autooff 2019-03-31 18:33:40 last_event autoaus1:state:on
setstate Autooff 2019-03-31 18:33:48 last_exec_cmd   set autoaus1 off;;
setstate Autooff 2019-03-31 18:33:58 state active


Maui

Moin. Ich Danke euch allen dreien für eure hilfreichen Antworten.
Homezone werde ich mir in einem anderen Kontext noch mal ansehen, klingt interessant.
@Byte09: Danke. Ein erster Test hat super funktioniert. Ich werde es morgen intensiver testen.
Und im Anschluss versuchen zu verstehen. Im Moment ist es nur Magie für mich.
Ich bin echt immer wieder erstaunt was ihr alle aus Fhem rausholt. Danke euch

Maui

#5
Was mir beim Testen aufgefallen ist Byte09: Ich wollte ein Device mit autooff auf 14400 setzen. Allerdings schaltet er dann direkt aus. Gibt es eine Max Grenze als Timer?
EDIT: die Sekunden wurden nach dem Stunden berechnen nicht weggestrichen.
Hab das ganze mal angepasst und damit klappt es dann auch.  ;)

Edit2: der Vollständigkeit halber nochmal die Änderung bzw das ganze Device als raw.

defmod Autooff MSwitch # FreeCmd
attr Autooff MSwitch_Debug 0
attr Autooff MSwitch_Delete_Delays 0
attr Autooff MSwitch_Expert 1
attr Autooff MSwitch_Extensions 0
attr Autooff MSwitch_Help 1
attr Autooff MSwitch_Ignore_Types notify allowed at watchdog doif fhem2fhem telnet FileLog readingsGroup FHEMWEB autocreate eventtypes readingsproxy svg cul
attr Autooff MSwitch_Include_Devicecmds 1
attr Autooff MSwitch_Include_MSwitchcmds 0
attr Autooff MSwitch_Include_Webcmds 0
attr Autooff MSwitch_Inforoom MSwitch
attr Autooff MSwitch_Lock_Quickedit 1
attr Autooff MSwitch_Mode Notify
attr Autooff room 1_test

setstate Autooff active
setstate Autooff 2019-03-31 15:29:47 .Device_Affected FreeCmd-AbsCmd1,FreeCmd-AbsCmd2
setstate Autooff 2019-03-31 23:51:01 .Device_Affected_Details FreeCmd-AbsCmd1#[NF]cmd#[NF]cmd#[NF]{#[nl]my#[sp]$message#[sp]=#[sp]"set#[sp]$EVTPART1#[sp]off#[se]"#[se]#[nl]my#[sp]$timehash#[sp]=#[sp]$hash->{helper}{delays}#[se]#[nl]foreach#[sp]my#[sp]$a#[sp](#[sp]sort#[sp]keys#[sp]%{$timehash}#[sp])#[nl]{#[nl]Log3(#[sp]$name#[ko]#[sp]0#[ko]#[sp]$a#[sp])#[se]#[nl]my#[sp]@devhash#[sp]=#[sp]split(#[sp]/#[bs]##[bs][tr#[bs]]/#[ko]#[sp]$a#[sp])#[se]#[nl]#Log3(#[sp]$name#[ko]#[sp]0#[ko]#[sp]"$message"#[sp])#[se]#[nl]#Log3(#[sp]$name#[ko]#[sp]0#[ko]#[sp]"$devhash[0]"#[sp])#[se]#[nl]my#[sp]$re#[sp]=#[sp]qr/$message/#[se]#[nl]if#[sp](#[sp]$devhash[0]#[sp]=~#[sp]$re#[sp])#[sp]#[nl]{#[nl]#Log3(#[sp]$name#[ko]#[sp]0#[ko]#[sp]"found#[sp]#[sp]$devhash[0]#[sp]---#[sp]$devhash[4]"#[sp])#[se]#[nl]RemoveInternalTimer($devhash[4])#[se]#[nl]RemoveInternalTimer($a)#[se]#[nl]delete(#[sp]$hash->{helper}{delays}{$a}#[sp])#[se]#[nl]}#[nl]}#[nl]my#[sp]$sec#[sp]=#[sp]AttrVal(#[sp]'$EVTPART1'#[ko]#[sp]'autooff'#[ko]#[sp]"00#[dp]00#[dp]00"#[sp])#[se]#[nl]my#[sp]$hours#[sp]=#[sp](#[sp]abs($sec)#[sp]<#[sp]3600#[sp]?#[sp]0#[sp]#[dp]#[sp]int(#[sp]abs($sec)#[sp]/#[sp]3600#[sp])#[sp])#[se]#[nl]$sec#[sp]=#[sp]$sec#[sp]-#[sp]$hours*3600#[se]#[nl]my#[sp]$minutes#[sp]=#[sp](#[sp]abs($sec)#[sp]<#[sp]60#[sp]?#[sp]0#[sp]#[dp]#[sp]int(#[sp]abs($sec)#[sp]/#[sp]60#[sp])#[sp])#[se]#[nl]$sec#[sp]=#[sp]$sec#[sp]-#[sp]$minutes*60#[se]#[nl]my#[sp]$seconds#[sp]=#[sp]abs($sec)#[sp]%#[sp]60#[se]#[nl]$hours#[sp]#[sp]#[sp]=#[sp]"0"#[sp].#[sp]$hours#[sp]#[sp]#[sp]if#[sp](#[sp]$hours#[sp]<#[sp]10#[sp])#[se]#[nl]$minutes#[sp]=#[sp]"0"#[sp].#[sp]$minutes#[sp]if#[sp](#[sp]$minutes#[sp]<#[sp]10#[sp])#[se]#[nl]$seconds#[sp]=#[sp]"0"#[sp].#[sp]$seconds#[sp]if#[sp](#[sp]$seconds#[sp]<#[sp]10#[sp])#[se]#[nl]my#[sp]$devicetime#[sp]=#[sp]"$hours#[dp]$minutes#[dp]$seconds"#[se]#[nl]fhem("setreading#[sp]$SELF#[sp]device_off#[sp]$EVTPART1")#[se]#[nl]fhem("setreading#[sp]$SELF#[sp]device_off_time#[sp]$devicetime")#[se]#[nl]my#[sp]$timecond#[sp]=gettimeofday()#[sp]+#[sp]$sec#[se]#[nl]}#[NF]#[NF]delay1#[NF]delay1#[NF]00#[dp]00#[dp]00#[NF]00#[dp]00#[dp]00#[NF]#[NF]#[NF]0#[NF]0#[NF]1#[NF]0#[NF]#[NF]0#[NF]0#[NF]1#[ND]FreeCmd-AbsCmd2#[NF]cmd#[NF]cmd#[NF]set#[sp][$SELF#[dp]device_off]#[sp]off#[se]#[NF]#[NF]delay0#[NF]delay1#[NF][$SELF#[dp]device_off_time]#[NF]00#[dp]00#[dp]00#[NF][$SELF#[dp]device_off_time]#[sp]ne#[sp]"00#[dp]00#[dp]00"#[NF]#[NF]0#[NF]0#[NF]2#[NF]0#[NF]#[NF]0#[NF]0#[NF]1
setstate Autooff 2019-03-31 18:33:48 .Device_Events .*#[tr]no_trigger
setstate Autooff 2019-03-31 12:38:57 .First_init done
setstate Autooff 2019-03-31 18:31:21 .Trigger_Whitelist TYPE=..*:FILTER=autooff=..*
setstate Autooff 2019-03-31 15:32:48 .Trigger_cmd_off no_trigger
setstate Autooff 2019-03-31 15:32:48 .Trigger_cmd_on .*
setstate Autooff 2019-03-31 18:31:21 .Trigger_condition "$EVENT"#[sp]=#[ti]#[sp]m/(#[pt]*#[dp]?)state#[dp]on$/
setstate Autooff 2019-03-31 15:32:48 .Trigger_off no_trigger
setstate Autooff 2019-03-31 15:32:48 .Trigger_on no_trigger
setstate Autooff 2019-03-31 18:31:21 .Trigger_time
setstate Autooff 2019-03-31 12:38:57 .V_Check V2.00
setstate Autooff 2019-03-31 22:41:29 EVENT Regenbogen_wz:state:on
setstate Autooff 2019-03-31 22:41:29 EVTFULL Regenbogen_wz:state:on
setstate Autooff 2019-03-31 22:41:29 EVTPART1 Regenbogen_wz
setstate Autooff 2019-03-31 22:41:29 EVTPART2 state
setstate Autooff 2019-03-31 22:41:29 EVTPART3 on
setstate Autooff 2019-03-31 19:14:51 Trigger_device all_events
setstate Autooff 2019-03-31 15:32:48 Trigger_log off
setstate Autooff 2019-03-31 23:47:37 device_off Regenbogen_wz
setstate Autooff 2019-03-31 23:47:37 device_off_time 02:00:00
setstate Autooff 2019-03-31 23:47:37 last_activation_by event
setstate Autooff 2019-03-31 23:47:37 last_cmd 1
setstate Autooff 2019-03-31 22:41:29 last_event Regenbogen_wz:state:on
setstate Autooff 2019-03-31 23:47:37 last_exec_cmd   {my $message = "set Regenbogen_wz off;;";;my $timehash = $hash->{helper}{delays};;foreach my $a ( sor....
setstate Autooff 2019-03-31 23:51:02 state active

Byte09

Zitat von: Maui am 31 März 2019, 22:58:14
Was mir beim Testen aufgefallen ist Byte09: Ich wollte ein Device mit autooff auf 14400 setzen. Allerdings schaltet er dann direkt aus. Gibt es eine Max Grenze als Timer?
EDIT: die Sekunden wurden nach dem Stunden berechnen nicht weggestrichen.
Hab das ganze mal angepasst und damit klappt es dann auch.  ;)

Edit2: der Vollständigkeit halber nochmal die Änderung bzw das ganze Device als raw.

defmod Autooff MSwitch # FreeCmd
attr Autooff MSwitch_Debug 0
attr Autooff MSwitch_Delete_Delays 0
attr Autooff MSwitch_Expert 1
attr Autooff MSwitch_Extensions 0
attr Autooff MSwitch_Help 1
attr Autooff MSwitch_Ignore_Types notify allowed at watchdog doif fhem2fhem telnet FileLog readingsGroup FHEMWEB autocreate eventtypes readingsproxy svg cul
attr Autooff MSwitch_Include_Devicecmds 1
attr Autooff MSwitch_Include_MSwitchcmds 0
attr Autooff MSwitch_Include_Webcmds 0
attr Autooff MSwitch_Inforoom MSwitch
attr Autooff MSwitch_Lock_Quickedit 1
attr Autooff MSwitch_Mode Notify
attr Autooff room 1_test

setstate Autooff active
setstate Autooff 2019-03-31 15:29:47 .Device_Affected FreeCmd-AbsCmd1,FreeCmd-AbsCmd2
setstate Autooff 2019-03-31 23:51:01 .Device_Affected_Details FreeCmd-AbsCmd1#[NF]cmd#[NF]cmd#[NF]{#[nl]my#[sp]$message#[sp]=#[sp]"set#[sp]$EVTPART1#[sp]off#[se]"#[se]#[nl]my#[sp]$timehash#[sp]=#[sp]$hash->{helper}{delays}#[se]#[nl]foreach#[sp]my#[sp]$a#[sp](#[sp]sort#[sp]keys#[sp]%{$timehash}#[sp])#[nl]{#[nl]Log3(#[sp]$name#[ko]#[sp]0#[ko]#[sp]$a#[sp])#[se]#[nl]my#[sp]@devhash#[sp]=#[sp]split(#[sp]/#[bs]##[bs][tr#[bs]]/#[ko]#[sp]$a#[sp])#[se]#[nl]#Log3(#[sp]$name#[ko]#[sp]0#[ko]#[sp]"$message"#[sp])#[se]#[nl]#Log3(#[sp]$name#[ko]#[sp]0#[ko]#[sp]"$devhash[0]"#[sp])#[se]#[nl]my#[sp]$re#[sp]=#[sp]qr/$message/#[se]#[nl]if#[sp](#[sp]$devhash[0]#[sp]=~#[sp]$re#[sp])#[sp]#[nl]{#[nl]#Log3(#[sp]$name#[ko]#[sp]0#[ko]#[sp]"found#[sp]#[sp]$devhash[0]#[sp]---#[sp]$devhash[4]"#[sp])#[se]#[nl]RemoveInternalTimer($devhash[4])#[se]#[nl]RemoveInternalTimer($a)#[se]#[nl]delete(#[sp]$hash->{helper}{delays}{$a}#[sp])#[se]#[nl]}#[nl]}#[nl]my#[sp]$sec#[sp]=#[sp]AttrVal(#[sp]'$EVTPART1'#[ko]#[sp]'autooff'#[ko]#[sp]"00#[dp]00#[dp]00"#[sp])#[se]#[nl]my#[sp]$hours#[sp]=#[sp](#[sp]abs($sec)#[sp]<#[sp]3600#[sp]?#[sp]0#[sp]#[dp]#[sp]int(#[sp]abs($sec)#[sp]/#[sp]3600#[sp])#[sp])#[se]#[nl]$sec#[sp]=#[sp]$sec#[sp]-#[sp]$hours*3600#[se]#[nl]my#[sp]$minutes#[sp]=#[sp](#[sp]abs($sec)#[sp]<#[sp]60#[sp]?#[sp]0#[sp]#[dp]#[sp]int(#[sp]abs($sec)#[sp]/#[sp]60#[sp])#[sp])#[se]#[nl]$sec#[sp]=#[sp]$sec#[sp]-#[sp]$minutes*60#[se]#[nl]my#[sp]$seconds#[sp]=#[sp]abs($sec)#[sp]%#[sp]60#[se]#[nl]$hours#[sp]#[sp]#[sp]=#[sp]"0"#[sp].#[sp]$hours#[sp]#[sp]#[sp]if#[sp](#[sp]$hours#[sp]<#[sp]10#[sp])#[se]#[nl]$minutes#[sp]=#[sp]"0"#[sp].#[sp]$minutes#[sp]if#[sp](#[sp]$minutes#[sp]<#[sp]10#[sp])#[se]#[nl]$seconds#[sp]=#[sp]"0"#[sp].#[sp]$seconds#[sp]if#[sp](#[sp]$seconds#[sp]<#[sp]10#[sp])#[se]#[nl]my#[sp]$devicetime#[sp]=#[sp]"$hours#[dp]$minutes#[dp]$seconds"#[se]#[nl]fhem("setreading#[sp]$SELF#[sp]device_off#[sp]$EVTPART1")#[se]#[nl]fhem("setreading#[sp]$SELF#[sp]device_off_time#[sp]$devicetime")#[se]#[nl]my#[sp]$timecond#[sp]=gettimeofday()#[sp]+#[sp]$sec#[se]#[nl]}#[NF]#[NF]delay1#[NF]delay1#[NF]00#[dp]00#[dp]00#[NF]00#[dp]00#[dp]00#[NF]#[NF]#[NF]0#[NF]0#[NF]1#[NF]0#[NF]#[NF]0#[NF]0#[NF]1#[ND]FreeCmd-AbsCmd2#[NF]cmd#[NF]cmd#[NF]set#[sp][$SELF#[dp]device_off]#[sp]off#[se]#[NF]#[NF]delay0#[NF]delay1#[NF][$SELF#[dp]device_off_time]#[NF]00#[dp]00#[dp]00#[NF][$SELF#[dp]device_off_time]#[sp]ne#[sp]"00#[dp]00#[dp]00"#[NF]#[NF]0#[NF]0#[NF]2#[NF]0#[NF]#[NF]0#[NF]0#[NF]1
setstate Autooff 2019-03-31 18:33:48 .Device_Events .*#[tr]no_trigger
setstate Autooff 2019-03-31 12:38:57 .First_init done
setstate Autooff 2019-03-31 18:31:21 .Trigger_Whitelist TYPE=..*:FILTER=autooff=..*
setstate Autooff 2019-03-31 15:32:48 .Trigger_cmd_off no_trigger
setstate Autooff 2019-03-31 15:32:48 .Trigger_cmd_on .*
setstate Autooff 2019-03-31 18:31:21 .Trigger_condition "$EVENT"#[sp]=#[ti]#[sp]m/(#[pt]*#[dp]?)state#[dp]on$/
setstate Autooff 2019-03-31 15:32:48 .Trigger_off no_trigger
setstate Autooff 2019-03-31 15:32:48 .Trigger_on no_trigger
setstate Autooff 2019-03-31 18:31:21 .Trigger_time
setstate Autooff 2019-03-31 12:38:57 .V_Check V2.00
setstate Autooff 2019-03-31 22:41:29 EVENT Regenbogen_wz:state:on
setstate Autooff 2019-03-31 22:41:29 EVTFULL Regenbogen_wz:state:on
setstate Autooff 2019-03-31 22:41:29 EVTPART1 Regenbogen_wz
setstate Autooff 2019-03-31 22:41:29 EVTPART2 state
setstate Autooff 2019-03-31 22:41:29 EVTPART3 on
setstate Autooff 2019-03-31 19:14:51 Trigger_device all_events
setstate Autooff 2019-03-31 15:32:48 Trigger_log off
setstate Autooff 2019-03-31 23:47:37 device_off Regenbogen_wz
setstate Autooff 2019-03-31 23:47:37 device_off_time 02:00:00
setstate Autooff 2019-03-31 23:47:37 last_activation_by event
setstate Autooff 2019-03-31 23:47:37 last_cmd 1
setstate Autooff 2019-03-31 22:41:29 last_event Regenbogen_wz:state:on
setstate Autooff 2019-03-31 23:47:37 last_exec_cmd   {my $message = "set Regenbogen_wz off;;";;my $timehash = $hash->{helper}{delays};;foreach my $a ( sor....
setstate Autooff 2019-03-31 23:51:02 state active


ups  ;) ... hab das ganze relativ schnell 'dahingemacht' , daher wohl durchgerutscht . Super , wenn es jetzt klappt.

gruss Byte09

Maui

Mir ist gestern noch aufgefallen, man hätte das auch per modulo lösen können. Dann hätte man sich eher die 2 neuen Zeilen sparen können.

Maui

#8
Moin Byte, ich muss das Ding leider noch mal hochholen.
Mit manchen Devices scheint das MSwitch echt Probleme zu haben. Es wird an dem MQTT JSON String liegen, aber ich bin ratlos, wie ich das abfangen kann. Leider wird mir dadurch der ganze Log vollgeschrieben.

Auszug aus dem Log

2019.04.27 20:02:45.464 1: Logfile gelöscht
2019.04.27 20:03:18.646 1: PERL WARNING: Bareword found where operator expected at (eval 293) line 1, near ""sensor:{"Time"
2019.04.27 20:03:18.647 1: PERL WARNING: (Missing operator before Time?)
2019.04.27 20:03:18.648 1: PERL WARNING: String found where operator expected at (eval 293) line 1, near "Time":""
2019.04.27 20:03:18.648 1: PERL WARNING: Number found where operator expected at (eval 293) line 1, near "":"2019"
2019.04.27 20:03:18.649 1: PERL WARNING: (Missing operator before 2019?)
2019.04.27 20:03:18.649 1: PERL WARNING: Bareword found where operator expected at (eval 293) line 1, near "27T19"
2019.04.27 20:03:18.650 1: PERL WARNING: (Missing operator before T19?)
2019.04.27 20:03:18.650 1: PERL WARNING: String found where operator expected at (eval 293) line 1, near "18",""
2019.04.27 20:03:18.651 1: PERL WARNING: (Missing operator before ","?)
2019.04.27 20:03:18.651 1: PERL WARNING: Bareword found where operator expected at (eval 293) line 1, near "","ENERGY"
2019.04.27 20:03:18.651 1: PERL WARNING: (Missing operator before ENERGY?)
2019.04.27 20:03:18.652 1: PERL WARNING: String found where operator expected at (eval 293) line 1, at end of line
2019.04.27 20:03:18.653 1: PERL WARNING: Use of uninitialized value $ret in concatenation (.) or string at ./FHEM/98_MSwitch.pm line 7207.
2019.04.27 20:03:18.653 1: Autooff ERROR: syntax error at (eval 293) line 1, near ""sensor:{"Time"
7209
2019.04.27 20:03:18.654 1: Autooff if ("sensor:{"Time":"2019-04-27T19:03:18","ENERGY":{[dst]TotalStartTime[dst][dp][dst]2019-01-08T17[dp]21[dp]42[dst],[dst]Total[dst][dp]4.964,[dst]0Yesterday[dst][dp]0.338,[dst]Today[dst][dp]0.000,[dst]Period[dst][dp]0,[dst]Power[dst][dp]0,[dst]ApparentPower[dst][dp]0,[dst]ReactivePower[dst][dp]0,[dst]Factor[dst][dp]0.00,[dst]Voltage[dst][dp]0,[dst]Current[dst][dp]0.000}}" =~ m/(.*:?)state:on$/){$answer = 'true';} else {$answer = 'false';}  7210


Beispiel für ein Device

Internals:
   FUUID      5c50c637-f33f-414e-0dac-d9ef8aa3f7f7fc91
   NAME       Swi_Pumpe
   NR         211
   STATE      off
   STILLDONETIME 0
   TYPE       dummy
   READINGS:
     2019-04-28 10:38:19   CostLastMonth   0
     2019-04-28 10:38:19   ENERGY_ApparentPower 0
     2019-04-28 10:38:19   ENERGY_Current  0
     2019-04-28 10:38:19   ENERGY_Factor   0
     2019-04-28 10:38:19   ENERGY_Period   0
     2019-04-28 10:38:19   ENERGY_Power    0
     2019-04-28 10:38:19   ENERGY_ReactivePower 0
     2019-04-28 10:38:19   ENERGY_Today    0.011
     2019-04-28 10:38:19   ENERGY_Total    4.976
     2019-04-28 10:38:19   ENERGY_TotalStartTime 2019-01-08T17:21:42
     2019-04-28 10:38:19   ENERGY_Voltage  0
     2019-04-28 10:38:19   ENERGY_Yesterday 0
     2019-04-27 23:59:00   PowerActualMonth 4.789
     2019-04-28 10:00:00   PowerLastHour   0.00800000000000001
     2019-04-28 10:38:19   Time            2019-04-28T09:38:19
     2019-04-16 19:00:17   power           OFF
     2019-04-28 10:38:19   sensor          {"Time":"2019-04-28T09:38:19","ENERGY":{"TotalStartTime":"2019-01-08T17:21:42","Total":4.976,"Yesterday":0.000,"Today":0.011,"Period":0,"Power":0,"ApparentPower":0,"ReactivePower":0,"Factor":0.00,"Voltage":0,"Current":0.000}}
     2019-04-28 09:31:18   state           off
     2019-04-28 10:01:00   temp_counts     4.976
Attributes:
   alexaName  Pumpe
   autooff    1800
   event-on-change-reading .*
   mqttPublish state:topic=cmnd/pumpe/POWER
   mqttSubscribe state:topic=stat/pumpe/POWER sensor:topic=tele/pumpe/SENSOR
   room       0_Keller,0_Maui,1_Garten,alexa
   setList    on off
   userReadings CostLastMonth { ReadingsVal("Swi_Pumpe","PowerLastMonth",0)*0.2422 ;; }


Danke dir.

Byte09

Zitat von: Maui am 28 April 2019, 10:38:50
Moin Byte, ich muss das Ding leider noch mal hochholen.
Mit manchen Devices scheint das MSwitch echt Probleme zu haben. Es wird an dem MQTT JSON String liegen, aber ich bin ratlos, wie ich das abfangen kann. Leider wird mir dadurch der ganze Log vollgeschrieben.

Auszug aus dem Log

2019.04.27 20:02:45.464 1: Logfile gelöscht
2019.04.27 20:03:18.646 1: PERL WARNING: Bareword found where operator expected at (eval 293) line 1, near ""sensor:{"Time"
2019.04.27 20:03:18.647 1: PERL WARNING: (Missing operator before Time?)
2019.04.27 20:03:18.648 1: PERL WARNING: String found where operator expected at (eval 293) line 1, near "Time":""
2019.04.27 20:03:18.648 1: PERL WARNING: Number found where operator expected at (eval 293) line 1, near "":"2019"
2019.04.27 20:03:18.649 1: PERL WARNING: (Missing operator before 2019?)
2019.04.27 20:03:18.649 1: PERL WARNING: Bareword found where operator expected at (eval 293) line 1, near "27T19"
2019.04.27 20:03:18.650 1: PERL WARNING: (Missing operator before T19?)
2019.04.27 20:03:18.650 1: PERL WARNING: String found where operator expected at (eval 293) line 1, near "18",""
2019.04.27 20:03:18.651 1: PERL WARNING: (Missing operator before ","?)
2019.04.27 20:03:18.651 1: PERL WARNING: Bareword found where operator expected at (eval 293) line 1, near "","ENERGY"
2019.04.27 20:03:18.651 1: PERL WARNING: (Missing operator before ENERGY?)
2019.04.27 20:03:18.652 1: PERL WARNING: String found where operator expected at (eval 293) line 1, at end of line
2019.04.27 20:03:18.653 1: PERL WARNING: Use of uninitialized value $ret in concatenation (.) or string at ./FHEM/98_MSwitch.pm line 7207.
2019.04.27 20:03:18.653 1: Autooff ERROR: syntax error at (eval 293) line 1, near ""sensor:{"Time"
7209


Beispiel für ein Device

Internals:
   FUUID      5c50c637-f33f-414e-0dac-d9ef8aa3f7f7fc91
   NAME       Swi_Pumpe
   NR         211
   STATE      off
   STILLDONETIME 0
   TYPE       dummy
   READINGS:
     2019-04-28 10:38:19   CostLastMonth   0
     2019-04-28 10:38:19   ENERGY_ApparentPower 0
     2019-04-28 10:38:19   ENERGY_Current  0
     2019-04-28 10:38:19   ENERGY_Factor   0
     2019-04-28 10:38:19   ENERGY_Period   0
     2019-04-28 10:38:19   ENERGY_Power    0
     2019-04-28 10:38:19   ENERGY_ReactivePower 0
     2019-04-28 10:38:19   ENERGY_Today    0.011
     2019-04-28 10:38:19   ENERGY_Total    4.976
     2019-04-28 10:38:19   ENERGY_TotalStartTime 2019-01-08T17:21:42
     2019-04-28 10:38:19   ENERGY_Voltage  0
     2019-04-28 10:38:19   ENERGY_Yesterday 0
     2019-04-27 23:59:00   PowerActualMonth 4.789
     2019-04-28 10:00:00   PowerLastHour   0.00800000000000001
     2019-04-28 10:38:19   Time            2019-04-28T09:38:19
     2019-04-16 19:00:17   power           OFF
     2019-04-28 10:38:19   sensor          {"Time":"2019-04-28T09:38:19","ENERGY":{"TotalStartTime":"2019-01-08T17:21:42","Total":4.976,"Yesterday":0.000,"Today":0.011,"Period":0,"Power":0,"ApparentPower":0,"ReactivePower":0,"Factor":0.00,"Voltage":0,"Current":0.000}}
     2019-04-28 09:31:18   state           off
     2019-04-28 10:01:00   temp_counts     4.976
Attributes:
   alexaName  Pumpe
   autooff    1800
   event-on-change-reading .*
   mqttPublish state:topic=cmnd/pumpe/POWER
   mqttSubscribe state:topic=stat/pumpe/POWER sensor:topic=tele/pumpe/SENSOR
   room       0_Keller,0_Maui,1_Garten,alexa
   setList    on off
   userReadings CostLastMonth { ReadingsVal("Swi_Pumpe","PowerLastMonth",0)*0.2422 ;; }


Danke dir.

sieht ja nicht so schick aus  :( . kannst du mir bitte von dem device mal die raw geben , ich schaue mir das dann im laufe des tages an.

gruss Byte09

Maui

#10
klar. Habe im letzten Post noch eine letzte Zeile des Logs ergänzt, die fehlte. Kommt bei jedem event des Readings, also minütlich. global verbose ist auf 2.


defmod Swi_Pumpe dummy
attr Swi_Pumpe alexaName Pumpe
attr Swi_Pumpe autooff 1800
attr Swi_Pumpe event-on-change-reading .*
attr Swi_Pumpe mqttPublish state:topic=cmnd/pumpe/POWER
attr Swi_Pumpe mqttSubscribe state:topic=stat/pumpe/POWER sensor:topic=tele/pumpe/SENSOR
attr Swi_Pumpe room 0_Keller,0_Maui,1_Garten,alexa
attr Swi_Pumpe setList on off
attr Swi_Pumpe userReadings CostLastMonth { ReadingsVal("Swi_Pumpe","PowerLastMonth",0)*0.2422 ;;;; }

setstate Swi_Pumpe off
setstate Swi_Pumpe 2019-04-28 12:27:19 CostLastMonth 0
setstate Swi_Pumpe 2019-04-28 12:27:19 ENERGY_ApparentPower 0
setstate Swi_Pumpe 2019-04-28 12:27:19 ENERGY_Current 0
setstate Swi_Pumpe 2019-04-28 12:27:19 ENERGY_Factor 0
setstate Swi_Pumpe 2019-04-28 12:27:19 ENERGY_Period 0
setstate Swi_Pumpe 2019-04-28 12:27:19 ENERGY_Power 0
setstate Swi_Pumpe 2019-04-28 12:27:19 ENERGY_ReactivePower 0
setstate Swi_Pumpe 2019-04-28 12:27:19 ENERGY_Today 0.011
setstate Swi_Pumpe 2019-04-28 12:27:19 ENERGY_Total 4.976
setstate Swi_Pumpe 2019-04-28 12:27:19 ENERGY_TotalStartTime 2019-01-08T17:21:42
setstate Swi_Pumpe 2019-04-28 12:27:19 ENERGY_Voltage 0
setstate Swi_Pumpe 2019-04-28 12:27:19 ENERGY_Yesterday 0
setstate Swi_Pumpe 2019-04-27 23:59:00 PowerActualMonth 4.789
setstate Swi_Pumpe 2019-04-28 12:00:01 PowerLastHour 0
setstate Swi_Pumpe 2019-04-28 12:27:19 Time 2019-04-28T11:27:19
setstate Swi_Pumpe 2019-04-16 19:00:17 power OFF
setstate Swi_Pumpe 2019-04-28 12:27:19 sensor {"Time":"2019-04-28T11:27:19","ENERGY":{"TotalStartTime":"2019-01-08T17:21:42","Total":4.976,"Yesterday":0.000,"Today":0.011,"Period":0,"Power":0,"ApparentPower":0,"ReactivePower":0,"Factor":0.00,"Voltage":0,"Current":0.000}}
setstate Swi_Pumpe 2019-04-28 09:31:18 state off
setstate Swi_Pumpe 2019-04-28 12:01:00 temp_counts 4.976

Byte09

Zitat von: Maui am 28 April 2019, 12:31:45
klar. Habe im letzten Post noch eine letzte Zeile des Logs ergänzt, die fehlte. Kommt bei jedem event des Readings, also minütlich. global verbose ist auf 2.


defmod Swi_Pumpe dummy
attr Swi_Pumpe alexaName Pumpe
attr Swi_Pumpe autooff 1800
attr Swi_Pumpe event-on-change-reading .*
attr Swi_Pumpe mqttPublish state:topic=cmnd/pumpe/POWER
attr Swi_Pumpe mqttSubscribe state:topic=stat/pumpe/POWER sensor:topic=tele/pumpe/SENSOR
attr Swi_Pumpe room 0_Keller,0_Maui,1_Garten,alexa
attr Swi_Pumpe setList on off
attr Swi_Pumpe userReadings CostLastMonth { ReadingsVal("Swi_Pumpe","PowerLastMonth",0)*0.2422 ;;;; }

setstate Swi_Pumpe off
setstate Swi_Pumpe 2019-04-28 12:27:19 CostLastMonth 0
setstate Swi_Pumpe 2019-04-28 12:27:19 ENERGY_ApparentPower 0
setstate Swi_Pumpe 2019-04-28 12:27:19 ENERGY_Current 0
setstate Swi_Pumpe 2019-04-28 12:27:19 ENERGY_Factor 0
setstate Swi_Pumpe 2019-04-28 12:27:19 ENERGY_Period 0
setstate Swi_Pumpe 2019-04-28 12:27:19 ENERGY_Power 0
setstate Swi_Pumpe 2019-04-28 12:27:19 ENERGY_ReactivePower 0
setstate Swi_Pumpe 2019-04-28 12:27:19 ENERGY_Today 0.011
setstate Swi_Pumpe 2019-04-28 12:27:19 ENERGY_Total 4.976
setstate Swi_Pumpe 2019-04-28 12:27:19 ENERGY_TotalStartTime 2019-01-08T17:21:42
setstate Swi_Pumpe 2019-04-28 12:27:19 ENERGY_Voltage 0
setstate Swi_Pumpe 2019-04-28 12:27:19 ENERGY_Yesterday 0
setstate Swi_Pumpe 2019-04-27 23:59:00 PowerActualMonth 4.789
setstate Swi_Pumpe 2019-04-28 12:00:01 PowerLastHour 0
setstate Swi_Pumpe 2019-04-28 12:27:19 Time 2019-04-28T11:27:19
setstate Swi_Pumpe 2019-04-16 19:00:17 power OFF
setstate Swi_Pumpe 2019-04-28 12:27:19 sensor {"Time":"2019-04-28T11:27:19","ENERGY":{"TotalStartTime":"2019-01-08T17:21:42","Total":4.976,"Yesterday":0.000,"Today":0.011,"Period":0,"Power":0,"ApparentPower":0,"ReactivePower":0,"Factor":0.00,"Voltage":0,"Current":0.000}}
setstate Swi_Pumpe 2019-04-28 09:31:18 state off
setstate Swi_Pumpe 2019-04-28 12:01:00 temp_counts 4.976


danke , ich kann den Fehler reproduzieren und versuche das noch heute zu fixen - wird aber sicherlich im Laufe des Abends werden.

gruss Byte09

Byte09

Zitat von: Maui am 28 April 2019, 12:31:45
klar. Habe im letzten Post noch eine letzte Zeile des Logs ergänzt, die fehlte. Kommt bei jedem event des Readings, also minütlich. global verbose ist auf 2.


defmod Swi_Pumpe dummy
attr Swi_Pumpe alexaName Pumpe
attr Swi_Pumpe autooff 1800
attr Swi_Pumpe event-on-change-reading .*
attr Swi_Pumpe mqttPublish state:topic=cmnd/pumpe/POWER
attr Swi_Pumpe mqttSubscribe state:topic=stat/pumpe/POWER sensor:topic=tele/pumpe/SENSOR
attr Swi_Pumpe room 0_Keller,0_Maui,1_Garten,alexa
attr Swi_Pumpe setList on off
attr Swi_Pumpe userReadings CostLastMonth { ReadingsVal("Swi_Pumpe","PowerLastMonth",0)*0.2422 ;;;; }

setstate Swi_Pumpe off
setstate Swi_Pumpe 2019-04-28 12:27:19 CostLastMonth 0
setstate Swi_Pumpe 2019-04-28 12:27:19 ENERGY_ApparentPower 0
setstate Swi_Pumpe 2019-04-28 12:27:19 ENERGY_Current 0
setstate Swi_Pumpe 2019-04-28 12:27:19 ENERGY_Factor 0
setstate Swi_Pumpe 2019-04-28 12:27:19 ENERGY_Period 0
setstate Swi_Pumpe 2019-04-28 12:27:19 ENERGY_Power 0
setstate Swi_Pumpe 2019-04-28 12:27:19 ENERGY_ReactivePower 0
setstate Swi_Pumpe 2019-04-28 12:27:19 ENERGY_Today 0.011
setstate Swi_Pumpe 2019-04-28 12:27:19 ENERGY_Total 4.976
setstate Swi_Pumpe 2019-04-28 12:27:19 ENERGY_TotalStartTime 2019-01-08T17:21:42
setstate Swi_Pumpe 2019-04-28 12:27:19 ENERGY_Voltage 0
setstate Swi_Pumpe 2019-04-28 12:27:19 ENERGY_Yesterday 0
setstate Swi_Pumpe 2019-04-27 23:59:00 PowerActualMonth 4.789
setstate Swi_Pumpe 2019-04-28 12:00:01 PowerLastHour 0
setstate Swi_Pumpe 2019-04-28 12:27:19 Time 2019-04-28T11:27:19
setstate Swi_Pumpe 2019-04-16 19:00:17 power OFF
setstate Swi_Pumpe 2019-04-28 12:27:19 sensor {"Time":"2019-04-28T11:27:19","ENERGY":{"TotalStartTime":"2019-01-08T17:21:42","Total":4.976,"Yesterday":0.000,"Today":0.011,"Period":0,"Power":0,"ApparentPower":0,"ReactivePower":0,"Factor":0.00,"Voltage":0,"Current":0.000}}
setstate Swi_Pumpe 2019-04-28 09:31:18 state off
setstate Swi_Pumpe 2019-04-28 12:01:00 temp_counts 4.976


ich habe ein update in das GIT geladen

mach bitte mal ein :
update all https://raw.githubusercontent.com/Byte009/FHEM-MSwitch/master/controls_mswitch.txt

und dann ein reload 98_MSwitch.pm

ich hoffe der fehler ist dann weg, bin mir aber nicht ganz sicher  :-\
wäre nett, wenn du mir bescheid gibst , am liebsten im MSwitch Thread ( wenn es weg ist würde ich es in das SVN übernehmen ):
https://forum.fhem.de/index.php/topic,86199.0.html

.... ich habe das hier heute nur per zufall gefunden.

gruss Byte09