Hauptmenü

Kleine DOIF Hilfe :)

Begonnen von ChrisW, 16 September 2017, 13:39:32

Vorheriges Thema - Nächstes Thema

ChrisW

Hallo,
brauche mal hilfe bei meinem DOIF :
define di_fhemtabletscreen DOIF ([Winconnect.FHEMTABLET:motion_detect] eq "True" or [Winconnect.FHEMTABLET:microphone_detect] eq "True") (set Winconnect.FHEMTABLET  screenOn)

Ich möchte bei winconnect.FHEMTABLET:motion_detect und Winconnect.FHEMTABLET:microphone_detect True "set Winconnect.FHEMTABLET  screenOn" setzen. Das funktioniert auch.

Jedoch suche ich nu nach eine Lösung das wenn inconnect.FHEMTABLET:motion_detectWinconnect.FHEMTABLET:microphone_detect False ist für sagen wir 30 Minuten dann set Winconnect.FHEMTABLET  screenOn


Lässt sich so etwas mit einem DOIF bauen ? Oder muss ich da mit einem Watchdog arbeiten?
Raspberry PI3 mit allem möglichen.

Ellert

Das kann mit DOIF gelöst werden. Ergänze das DOIF um einen DOELSEIF Zweig mit der False-Bedingung und nutze das Attribut wait um den Befehl zu verzögern. Falls der erste Zweig innerhalb der Wartezeit True wird, dann wird der Zweite Zweig abgebrochen und der Befehl nicht ausgeführt.

ChrisW

Hast du mal ein kleines Beispiel? Muss ja nicht für mich sein aber wo ich mir den Aufbau angucken aknn? Im Wiki steht leider so vieles :D
Raspberry PI3 mit allem möglichen.

amenomade

ZitatIm Wiki steht leider so vieles

In CommandRef aber viel mehr https://fhem.de/commandref_DE.html#DOIF
Pi 3B, Alexa, CUL868+Selbstbau 1/2λ-Dipol-Antenne, USB Optolink / Vitotronic, Debmatic und HM / HmIP Komponenten, Rademacher Duofern Jalousien, Fritz!Dect Thermostaten, Proteus

ChrisW

Danke ich setze nun alle X minuten per at das screenoff.
Das doif von mir macht das Display dann an :)
Ist einfacher für mich *g*
Raspberry PI3 mit allem möglichen.

ChrisW

Okay diese Lösung ist doch nicht so gut. Wenn ich alle 30 min Display ausmachen lasse und bei 29 gerade daor bin ist es aus obwohl True ist ;)
Man müsste den watchdog dann umbauen aber das scheint mir auch nicht einfacher zu sein :D
Raspberry PI3 mit allem möglichen.

Rolfg

Setz doch in deinem doif ein DOELSEIF mit dem gleichen Code nur true durch false ersetzen und das atribut wait. Schau in die commanref doif atribut wait. Das ist sehr gut erklärt.
Gruß Rolf

ChrisW

hmm okay hab es so verstanden
([Winconnect.FHEMTABLET:motion_detect] eq "True" or [Winconnect.FHEMTABLET:microphone_detect] eq "True") (set Winconnect.FHEMTABLET  screenOn) DOELSE ([Winconnect.FHEMTABLET:motion_detect] eq "False" or [Winconnect.FHEMTABLET:microphone_detect] eq "False") wait 1800

im log ist aber ein fehler

017.09.18 10:41:28 2: di_fhemtabletscreen: False eq "False" or False eq "False": Unknown command False, try help.
2017.09.18 10:41:31 3: WINCONNECT set Winconnect.FHEMTABLET screenOn
2017.09.18 10:41:42 2: di_fhemtabletscreen: False eq "False" or False eq "False": Unknown command False, try help.
2017.09.18 10:41:43 3: WINCONNECT set Winconnect.FHEMTABLET screenOn


Raspberry PI3 mit allem möglichen.

CoolTux

DOELSEIF


([Winconnect.FHEMTABLET:motion_detect] eq "True" or [Winconnect.FHEMTABLET:microphone_detect] eq "True") (set Winconnect.FHEMTABLET  screenOn) DOELSEIF ([Winconnect.FHEMTABLET:motion_detect] eq "False" or [Winconnect.FHEMTABLET:microphone_detect] eq "False") (set Winconnect.FHEMTABLET  screenOn)

und das wait als Attribut

attr wait 0:1800
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

ChrisW

Danke aber nun funktioniert das screenOn nicht mehr wenn etwas True wird.
Sicher das wait in das attribut ??
Fehlermeldungen habe ich keine. screenoff funktioniert.
Raspberry PI3 mit allem möglichen.

CoolTux

Im ganzen Code sehe ich nicht ein screenoff. Keine Ahnung was du aus meinem Code machst
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

ChrisW

hab es nun angepasst. Geht aber irendwie nicht.
Hab ein True ausgelöst. Bildschirm geht aber nicht an.
define di_tabletscreen DOIF ([Winconnect.TABLET:motion_detect] eq "True" or [Winconnect.TABLET:microphone_detect] eq "True") (set Winconnect.TABLET screenOn) DOELSEIF ([Winconnect.TABLET:motion_detect] eq "False" or [Winconnect.TABLET:microphone_detect] eq "False") (set Winconnect.TABLET screenOff)\

attr di_tabletscreen wait 0:1800

Ein fehler noch ? oder muss man noch was hinzufügen?
Da energiesparen den Bildschirm auch ausmachen kkann will ich immer ein screenon schicken bei true
Raspberry PI3 mit allem möglichen.

CoolTux

Ein list vom DOIF wurde hier mehr Aufschluss bringen.
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

ChrisW

Internals:
   DEF        ([Winconnect.TABLET:motion_detect] eq "True" or [Winconnect.TABLET:microphone_detect] eq "True") (set Winconnect.TABLET screenOn) DOELSEIF ([Winconnect.TABLET:motion_detect] eq "False" or [Winconnect.TABLET:microphone_detect] eq "False") (set Winconnect.TABLET screenOff)

   NAME       di_tabletscreen
   NR         434
   NTFY_ORDER 50-di_tabletscreen
   STATE      cmd_1
   TYPE       DOIF
   READINGS:
     2017-09-22 19:58:05   Device          Winconnect.TABLET
     2017-09-22 18:24:38   cmd             1
     2017-09-22 18:24:38   cmd_event       Winconnect.TABLET
     2017-09-22 18:24:38   cmd_nr          1
     2017-09-22 19:58:05   e_Winconnect.TABLET_microphone_detect True
     2017-09-22 19:58:05   e_Winconnect.TABLET_motion_detect False
     2017-09-22 18:24:38   state           cmd_1
     2017-09-22 19:58:05   wait_timer      no timer
   condition:
     0          ReadingValDoIf($hash,'Winconnect.TABLET','motion_detect') eq "True" or ReadingValDoIf($hash,'Winconnect.TABLET','microphone_detect') eq "True"
     1          ReadingValDoIf($hash,'Winconnect.TABLET','motion_detect') eq "False" or ReadingValDoIf($hash,'Winconnect.TABLET','microphone_detect') eq "False"
   devices:
     0           Winconnect.TABLET
     1           Winconnect.TABLET
     all         Winconnect.TABLET
   do:
     0:
       0          set Winconnect.TABLET screenOn
     1:
       0          set Winconnect.TABLET screenOff
     2:
   helper:
     event      microphone_detect: True
     globalinit 1
     last_timer 0
     sleepdevice Winconnect.TABLET
     sleepsubtimer 0
     sleeptimer -1
     timerdev   Winconnect.TABLET
     timerevent microphone_detect: True
     triggerDev Winconnect.TABLET
     timerevents:
       microphone_detect: True
     timereventsState:
       microphone_detect: True
     triggerEvents:
       microphone_detect: True
     triggerEventsState:
       microphone_detect: True
   internals:
   itimer:
   readings:
     0           Winconnect.TABLET:motion_detect Winconnect.TABLET:microphone_detect
     1           Winconnect.TABLET:motion_detect Winconnect.TABLET:microphone_detect
     all         Winconnect.TABLET:motion_detect Winconnect.TABLET:microphone_detect
   regexp:
     0:
     1:
     all:
   state:
     STATE:
   trigger:
Attributes:
   wait       0:1800
Raspberry PI3 mit allem möglichen.

CoolTux

Und der Befehl
set Winconnect.TABLET screenOn
einfach in der Kommandozeile von FHEMWEB eingegeben klappt?
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

ChrisW

Raspberry PI3 mit allem möglichen.

Damian

ohne do always wird nur nach Zustandswechsel geschaltet.
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

ChrisW

hm wie bekomm ich das den nun sauber hin ?
Will ja nur damit hinbekommen das das Tablet immer an bleibt wenn in den 30 Minuten eins von beiden True ist. Wenn jetzt 30 Minuten False bei beiden ist soll screenOff gehen.

Raspberry PI3 mit allem möglichen.

Damian

Zitat von: ChrisW am 22 September 2017, 22:02:27
hm wie bekomm ich das den nun sauber hin ?
Will ja nur damit hinbekommen das das Tablet immer an bleibt wenn in den 30 Minuten eins von beiden True ist. Wenn jetzt 30 Minuten False bei beiden ist soll screenOff gehen.

Dann musst du bei false mit and statt or arbeiten.
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

ChrisW

lol doch so einfach ? Scheint im Test echt zu klappen ich werd es mal weiter im Auge behalten :)
Raspberry PI3 mit allem möglichen.

ChrisW

#20
also heute morgen auch wieder das Problem screenOn führt er nicht aus. Mache ich es Manuell geht das Display an.
Irgendwie nach der Nacht wieso auch immer klappt das DoIf nicht mehr. Der STatus dort wurde aber verändert :(

([Winconnect.TABLET:motion_detect] eq "True" or [Winconnect.TABLET:microphone_detect] eq "True") (set Winconnect.TABLET screenOn) DOELSEIF ([Winconnect.TABLET:motion_detect] eq "False" and [Winconnect.TABLET:microphone_detect] eq "False") (set Winconnect.TABLET screenOff)


Hab mal ein Filelog erstellt aber da steht nur sowas:
2017-09-25_09:16:42 di_tabletscreen wait_timer: 25.09.2017 09:46:42 cmd_2 Winconnect.TABLET
2017-09-25_09:18:32 di_tabletscreen wait_timer: no timer
2017-09-25_09:18:33 di_tabletscreen wait_timer: 25.09.2017 09:48:33 cmd_2 Winconnect.TABLET
2017-09-25_09:22:17 di_tabletscreen wait_timer: no timer
2017-09-25_09:22:33 di_tabletscreen wait_timer: 25.09.2017 09:52:33 cmd_2 Winconnect.TABLET
2017-09-25_09:22:36 di_tabletscreen wait_timer: no timer
2017-09-25_09:22:41 di_tabletscreen wait_timer: 25.09.2017 09:52:41 cmd_2 Winconnect.TABLET
2017-09-25_09:22:44 di_tabletscreen wait_timer: no timer
2017-09-25_09:22:49 di_tabletscreen wait_timer: 25.09.2017 09:52:49 cmd_2 Winconnect.TABLET
2017-09-25_09:22:49 di_tabletscreen wait_timer: no timer
2017-09-25_09:22:54 di_tabletscreen wait_timer: 25.09.2017 09:52:54 cmd_2 Winconnect.TABLET
2017-09-25_09:22:55 di_tabletscreen wait_timer: no timer
2017-09-25_09:22:59 di_tabletscreen wait_timer: 25.09.2017 09:52:59 cmd_2 Winconnect.TABLET
2017-09-25_09:23:02 di_tabletscreen wait_timer: no timer
2017-09-25_09:23:04 di_tabletscreen wait_timer: 25.09.2017 09:53:04 cmd_2 Winconnect.TABLET
2017-09-25_09:23:12 di_tabletscreen wait_timer: no timer
2017-09-25_09:23:43 di_tabletscreen wait_timer: 25.09.2017 09:53:43 cmd_2 Winconnect.TABLET


Kann es sein das wegen dem wait attribut auch für screen on gewartet wird?
Raspberry PI3 mit allem möglichen.

Damian

Dein Timer zur Ausführung wird zwar gesetzt, paar Minuten später wird durch ein Ereignis aber wieder in den cmd_1 Zustand gewechselt - das Löscht den Timer - die Ausführung von cmd_2 kommt nicht zum Zuge.

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

ChrisW

hm und eine idee wie ich das nun am besten gelöst bekomme ? Kann man den timer nicht im code einbauen ? Würde das was bringen ?
Raspberry PI3 mit allem möglichen.

Damian

Zitat von: ChrisW am 25 September 2017, 11:39:59
hm und eine idee wie ich das nun am besten gelöst bekomme ? Kann man den timer nicht im code einbauen ? Würde das was bringen ?

setze mal dieses Attribut im deinem DOIF: https://fhem.de/commandref_DE.html#DOIF_checkReadingEvent
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

ChrisW

okay Danke habe mal checkReadingEvent 0 gesetzt im ersten Test hat es nun geklappt ich versuche es nun mal mit beiden zusammen ob das auch noch geht :)
Raspberry PI3 mit allem möglichen.

Damian

Zitat von: ChrisW am 25 September 2017, 12:40:15
okay Danke habe mal checkReadingEvent 0 gesetzt im ersten Test hat es nun geklappt ich versuche es nun mal mit beiden zusammen ob das auch noch geht :)

eigentlich müsstest du checkReadingEvent  auf 1 setzen, damit es Wirkung zeigt.
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

ChrisW

dann hat es nicht funktioniert. Hatte es erst auf 1.
Nun mit 0 klappt es derzeit .. komisch
Raspberry PI3 mit allem möglichen.

ChrisW

so lange ohne ausgekommen aber jetzt habe ich fhem neu gemacht nun will ich es nochmal versuchen.. mit checkReadingEvent 0 hat es auch nicht besser funktioniert. Mit 1 aber auch nicht.
Sehe das bei wait_timer öfters notimer oder so etwas was ( 06.02.2019 21:39:11 cmd_2 Winconnect.TABLET ) aber dann wieder zu notimer wechselt........ die beiden Mic und Motion verändern sich aber nicht !

Internals:
   DEF        ([Winconnect.TABLET:motion_detect] eq "True" or [Winconnect.TABLET:microphone_detect] eq "True") (set Winconnect.TABLET screenOn) DOELSEIF ([Winconnect.TABLET:motion_detect] eq "False" and [Winconnect.TABLET:microphone_detect] eq "False") (set Winconnect.TABLET screenOff)

   FUUID      5c5496c6-f33f-09a2-0553-30fd4008f75d212c
   MODEL      FHEM
   NAME       di_tabletscreen
   NR         670
   NTFY_ORDER 50-di_tabletscreen
   STATE      cmd_1
   TYPE       DOIF
   .attraggr:
   .attrminint:
   READINGS:
     2019-02-06 21:24:20   Device          Winconnect.TABLET
     2019-02-05 20:55:02   cmd             1
     2019-02-05 20:55:02   cmd_event       Winconnect.TABLET
     2019-02-05 20:55:02   cmd_nr          1
     2019-02-06 21:23:54   e_Winconnect.TABLET_microphone_detect True
     2019-02-06 21:11:24   e_Winconnect.TABLET_motion_detect False
     2019-02-05 20:55:02   error           set Winconnect.TABLET screenOn: Device needs to be ON to adjust screenon.
     2019-02-05 20:55:02   state           cmd_1
     2019-02-06 21:23:54   wait_timer      no timer
   Regex:
   attr:
     wait:
       0:
         0
       1:
         800
     waitdel:
   condition:
     0          ::ReadingValDoIf($hash,'Winconnect.TABLET','motion_detect') eq "True" or ::ReadingValDoIf($hash,'Winconnect.TABLET','microphone_detect') eq "True"
     1          ::ReadingValDoIf($hash,'Winconnect.TABLET','motion_detect') eq "False" and ::ReadingValDoIf($hash,'Winconnect.TABLET','microphone_detect') eq "False"
   devices:
     0           Winconnect.TABLET
     1           Winconnect.TABLET
     all         Winconnect.TABLET
   do:
     0:
       0          set Winconnect.TABLET screenOn
     1:
       0          set Winconnect.TABLET screenOff
     2:
   helper:
     event      memory_available: 1.893
     globalinit 1
     last_timer 0
     sleepdevice Winconnect.TABLET
     sleepsubtimer 0
     sleeptimer -1
     timerdev   Winconnect.TABLET
     timerevent microphone_detect: True
     triggerDev Winconnect.TABLET
     timerevents:
       microphone_detect: True
     timereventsState:
       microphone_detect: True
     triggerEvents:
       memory_available: 1.893
     triggerEventsState:
       memory_available: 1.893
   internals:
   itimer:
   perlblock:
   readings:
     0           Winconnect.TABLET:motion_detect Winconnect.TABLET:microphone_detect
     1           Winconnect.TABLET:motion_detect Winconnect.TABLET:microphone_detect
     all         Winconnect.TABLET:motion_detect Winconnect.TABLET:microphone_detect
   trigger:
   uiState:
   uiTable:
Attributes:
   DbLogExclude .*
   checkReadingEvent 1
   wait       0:800
Raspberry PI3 mit allem möglichen.

amenomade

Wäre es nicht besser mit:
([Winconnect.TABLET:motion_detect] eq "True" or [Winconnect.TABLET:microphone_detect] eq "True") (set Winconnect.TABLET screenOn) DOELSE (set Winconnect.TABLET screenOff)
?
Pi 3B, Alexa, CUL868+Selbstbau 1/2λ-Dipol-Antenne, USB Optolink / Vitotronic, Debmatic und HM / HmIP Komponenten, Rademacher Duofern Jalousien, Fritz!Dect Thermostaten, Proteus

ChrisW

Danke schaut aktuell so aus als ob es funktioniert :)
Raspberry PI3 mit allem möglichen.