DOIF - Zeitverzögertes abschalten eines Dummys

Begonnen von Stargazer, 21 Juli 2017, 08:02:07

Vorheriges Thema - Nächstes Thema

Stargazer

Hallo zusammen,

ich möchte gerne einen Dummy über ein DOIF zeitverzögert wieder abschalten. Doch es läuft noch nicht rund.

Hier einmal die Konfiguration:

define BlitzBoxDOIF DOIF ([Blitzalarm:short]) (set BlitzBox BLITZ) DOELSE (set BlitzBox ENTWARNUNG)
attr BlitzBoxDOIF group BlitzBox
attr BlitzBoxDOIF room Wetter
attr BlitzBoxDOIF timerWithWait 1
attr BlitzBoxDOIF wait 300

Habe ich da irgend etwas übersehen ?
Dachte eigentlich, dass es so laufen müsste.

Viele Grüße und besten Dank

André

RaspiLED

Hi,
Warum nicht on-for-timer? Wie ist das list von BlitzBox/Blitzalarm?
Bsp:
([sduino433:&DMSG] =~ "xyz") (set WZ_Lampe_CUL blink 3 1)
Mir fehlt Dein Vergleich im DOIF!?

Gruß Arnd


Raspi2 mit FHEM, CUL, Signalduino, MySensors, HomeBridge, Presence, Bravia, ...
Raspberry Pi mit FHEM, CUL, Signalduino, MySensors, HomeBridge, Presence, WifiLight2, Bravia, ...

CoolTux

Zitat von: Stargazer am 21 Juli 2017, 08:02:07
Hallo zusammen,

ich möchte gerne einen Dummy über ein DOIF zeitverzögert wieder abschalten. Doch es läuft noch nicht rund.

Hier einmal die Konfiguration:

define BlitzBoxDOIF DOIF ([Blitzalarm:short]) (set BlitzBox BLITZ) DOELSE (set BlitzBox ENTWARNUNG)
attr BlitzBoxDOIF group BlitzBox
attr BlitzBoxDOIF room Wetter
attr BlitzBoxDOIF timerWithWait 1
attr BlitzBoxDOIF wait 300

Habe ich da irgend etwas übersehen ?
Dachte eigentlich, dass es so laufen müsste.

Viele Grüße und besten Dank

André

Was heißt denn abschalten bei Dir. Entwarnung oder Blitz. Im Moment setzt er den wait Timer für Blitz um.

wait 0:300

Jetzt würde er für Entwarnung die 300 nehmen.
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

Stargazer

Hallo zusammen,

ein List kann ich später am PC nachreichen. Bin derzeit
unterwegs.

Ich wollte das gerne so haben, dass, wenn der Dummy
auf in (Blitz) geht, er diesen Zustand für die Zeit x hält
und dann wieder auf off (Entwarnung) schaltet.

VG

André

Otto123

Hallo André,

so würde er das tun was Du willst und auch nachtriggern:
define BlitzBoxDOIF DOIF ([Blitzalarm:"short"]) (set BlitzBox BLITZ)(set BlitzBox ENTWARNUNG)
attr BlitzBoxDOIF do resetwait
attr BlitzBoxDOIF wait 0,300

Falls der Event wirklich stimmt! -> Blitzalarm:"short"

Gruß Otto
Viele Grüße aus Leipzig  ⇉  nächster Stammtisch an der Lindennaundorfer Mühle
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7590,WRT3200ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266,MQTT,Zigbee,deconz

pc1246

#5
Moin Otto
Fehlt in Deinem Code nicht etwas? So ein gewagtes DOELSE wuerde ich jedenfalls erwarten!?
Gruss Christoph

Edith: Kommando zurueck, jetzt verstehe ich, was Du meinst. Mann das ist ja echt eine eierlegende Wollmilchsau!
HP T610
Onkyo_AVR;3 Enigma2; SB_Server ; SB_Player; HM-USB mit 15 HM-CC-RT-DN, 3 HM_WDS10_TH_O, 6 HM-Sec-SCo, 4 HM-Sec-MDIR-2, 1 HM-Sen-MDIR-O-2, 8 Ferion 5000 OW ; PhilipsTV; 4 harmony hub; Jeelink mit 9 PCA301; Somfy; S7-300; 3 LGW; HUE; HM-IP auf Charly

CoolTux

Zitat von: pc1246 am 21 Juli 2017, 09:47:11
Moin Otto
Fehlt in Deinem Code nicht etwas? So ein gewagtes DOELSE wuerde ich jedenfalls erwarten!?
Gruss Christoph

Wenn höchstens ein do always.
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

pc1246

HP T610
Onkyo_AVR;3 Enigma2; SB_Server ; SB_Player; HM-USB mit 15 HM-CC-RT-DN, 3 HM_WDS10_TH_O, 6 HM-Sec-SCo, 4 HM-Sec-MDIR-2, 1 HM-Sen-MDIR-O-2, 8 Ferion 5000 OW ; PhilipsTV; 4 harmony hub; Jeelink mit 9 PCA301; Somfy; S7-300; 3 LGW; HUE; HM-IP auf Charly

CoolTux

Habe gerade mal gelesen. Das do resetwait dürfte es auch tun.
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

Stargazer

Hi Leute !

Jetzt sieht es bei mir so aus:

define BlitzBoxDOIF DOIF ([Blitzalarm:short]) (set BlitzBox BLITZ) DOELSE (set BlitzBox ENTWARNUNG)
attr BlitzBoxDOIF do resetwait
attr BlitzBoxDOIF group BlitzBox
attr BlitzBoxDOIF room Wetter
attr BlitzBoxDOIF wait 0,300

Nun noch 2 Fragen:

Warum kann ich auf das DOELSE verzichten ?

Bei dem wait 0,300 stehen die Zahlen für cmd1 und cmd2, richtig ?

VG

André

nils_

hi,

poste doch bitte den code auch in code-tags (im editor über dem  :-X smiley )
das ist dann "lesbarer"

Zitat von: Stargazer am 21 Juli 2017, 10:32:34
Jetzt sieht es bei mir so aus:

define BlitzBoxDOIF DOIF ([Blitzalarm:short]) (set BlitzBox BLITZ) DOELSE (set BlitzBox ENTWARNUNG)
attr BlitzBoxDOIF do resetwait
attr BlitzBoxDOIF group BlitzBox
attr BlitzBoxDOIF room Wetter
attr BlitzBoxDOIF wait 0,300
der code von otto sah aber etwas anders aus ;)


Zitat von: Stargazer am 21 Juli 2017, 10:32:34
Nun noch 2 Fragen:

Warum kann ich auf das DOELSE verzichten ?
hast du doch gar nicht.

Zitat von: Stargazer am 21 Juli 2017, 10:32:34
Bei dem wait 0,300 stehen die Zahlen für cmd1 und cmd2, richtig ?
nein.
bei Komma: 0 --> cmd1_1 und 300 --> cmd1_2 (hast du momentan nicht)

siehe dazu auch: https://fhem.de/commandref_DE.html
und speziell: https://fhem.de/commandref_DE.html#DOIF_wait
viele Wege in FHEM es gibt!

Damian

Zitat von: Stargazer am 21 Juli 2017, 10:32:34
Hi Leute !

Jetzt sieht es bei mir so aus:

define BlitzBoxDOIF DOIF ([Blitzalarm:short]) (set BlitzBox BLITZ) DOELSE (set BlitzBox ENTWARNUNG)
attr BlitzBoxDOIF do resetwait
attr BlitzBoxDOIF group BlitzBox
attr BlitzBoxDOIF room Wetter
attr BlitzBoxDOIF wait 0,300

Nun noch 2 Fragen:

Warum kann ich auf das DOELSE verzichten ?

Bei dem wait 0,300 stehen die Zahlen für cmd1 und cmd2, richtig ?

VG

André

Du musst sogar in deinem Fall auf DOELSE verzichten, da es keinen Trigger von außen für die Entwarnung gibt, sondern nur einen wait-Timer, der aufgrund der Blitzwarnung gesetzt wird (hier 300). Dein DOELSE-Fall würde also nie zum Zuge kommen.

Die Lösung von Otto123 ist neben einem on-for-timer, der allerdings nur on/off kann, die Beste, sie entspricht dem Beispiel https://fhem.de/commandref_DE.html#DOIF_Weitere_Anwendungsbeispiele für die Nachbildung eines on-for-timers aus der Commandref zu DOIF.

resetwait ist in dem Fall wichtig, um während der Wartezeit bei erneuter Blitzwarnung den Timer zu verlängern.

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

Stargazer

Ahhh !

Alles klar !
Habe das DOELSE rausgenommen.
Durch eure Hilfe ist nun einiges klarer !

Ich simuliere später Mal einen Blitz um es zu testen.

Besten Dank nochmals für eure schnelle Hilfe !

VG

André

pc1246

Hallo Andre
Irgendwie hast Du jetzt alle neugierig gemacht! Was ist der Sinn dahinter? Magst Du uns eventuell aufklaeren?
Gruss Christoph
HP T610
Onkyo_AVR;3 Enigma2; SB_Server ; SB_Player; HM-USB mit 15 HM-CC-RT-DN, 3 HM_WDS10_TH_O, 6 HM-Sec-SCo, 4 HM-Sec-MDIR-2, 1 HM-Sen-MDIR-O-2, 8 Ferion 5000 OW ; PhilipsTV; 4 harmony hub; Jeelink mit 9 PCA301; Somfy; S7-300; 3 LGW; HUE; HM-IP auf Charly

Stargazer

Soo...

was steckt dahinter ?

Ich habe eine Wetterstation mit einem Arduino gebaut. Diese ergänzt unsere Davis Wetterstation noch um die Werte von UV-Wert, Helligkeitswert sowie eine Infrarotmessung um zu erkennen, ob Wolken da sind und wenn, wie dick die Schicht ist.

Tja...wozu brauche ich das geraffel alles ?
Ich betreibe Astronomie als Hobby und arbeite auch schonmal in der Nacht autark. D.h., wenn ich am anderen Morgen wieder pünktlich auf der Arbeit sein muss, kann ich mir ja nicht die Nächte permanent in die Ohren schlagen. Deshalb kann das Teleskop samt Kamera eine Liste an Objekten in der Nacht eigenständig anfahren und auch Aufnahmeserien mit einer CCD-Kamera machen.
In dieser Zeit kann ich mich dann kurz aufs Ohr hauen  ;). Und falls die Bedingungen drussen in dieser Zeit zu fies werden, bekomme ich dann einen Alarm.

Die Sache mit dem Gewittersensor entstand dann aus der Bastellaune heraus. Da habe ich den bei der Sensorenbestellung gleich mit geordert. Der läuft mit dem Arduino wirklich sehr gut.

Ein zweiter Punkt ist der, dass ich über den Sensor auch unsere Kleinwindanlage außer Betrieb nehmen kann, falls es Gewittert.
Das ist eine reine Vorsichtsmaßnahme, die ich allerdings gerne mache, da evtl. Hagel in diesen Gewitterzellen dann doch
derbe Schäden an den Rotorblättern verursachen können. Gerade beim Gewitter sind ja oftmals starke Sturmböen dabei, wo der Rotor (5,3m Durchmesser) bis 400 U/min erreichen kann. Wenn da ein Hagelkorn auftrifft kann man sich ausmalen, dass das nicht so dolle ist. es sind zwar Schutztapes an den Blattvorderkanten aufgeklebt, doch abschalten ist da immer noch sicherer.

Das mit dem DOIF habe ich jetzt noch gemacht, damit ich es im TabletUI ordentlich visualisiert bekomme.

So...das war ein kleiner Off-Topic Exkurs  ;).

Viele Grüße

André

Stargazer

Hallo zusammen,

ich konnte das DOIF nun schon etwas genauer testen. Durch eine alte Schreibtischlampe habe ich auch die Möglichkeit, einen "Blitz" zu erzeugen, den der Sensor erfasst.

Was ich bisher beobachten konnte war, dass das DOIF Modul den Dummy aktiviert, jedoch nicht zurück springt.
Der HomeMatic-Switch wird nur für 0,5 Sekunden via Relais ausgelöst. So kommt das "short"-Signal an FHEM an.

Hier mal ein List des DOIF's:

Internals:
   DEF        ([Blitzalarm:short.*]) (set BlitzBox BLITZ)  (set BlitzBox ENTWARNUNG)
   NAME       BlitzBoxDOIF
   NR         407
   NTFY_ORDER 50-BlitzBoxDOIF
   STATE      initialized
   TYPE       DOIF
   READINGS:
     2017-07-23 10:52:10   Device          Blitzalarm
     2017-07-23 09:34:15   cmd             0
     2017-07-23 09:34:15   state           initialized
   condition:
     0          ReadingValDoIf($hash,'Blitzalarm','short.*')
   devices:
     0           Blitzalarm
     all         Blitzalarm
   do:
     0:
       0          set BlitzBox BLITZ
       1          set BlitzBox ENTWARNUNG
     1:
   helper:
     event      Short 1_46 (to broadcast),trigger: Short_46,trigger_cnt: 46
     globalinit 1
     last_timer 0
     sleeptimer -1
     triggerDev Blitzalarm
     triggerEvents:
       Short 1_46 (to broadcast)
       trigger: Short_46
       trigger_cnt: 46
     triggerEventsState:
       state: Short 1_46 (to broadcast)
       trigger: Short_46
       trigger_cnt: 46
   internals:
   itimer:
   readings:
     0           Blitzalarm:short.*
     all         Blitzalarm:short.*
   regexp:
     0:
     all:
   state:
     STATE:
   trigger:
Attributes:
   do         resetwait
   group      BlitzBox
   room       Wetter
   wait       0,300


Setzte ich das cmd nach dem Initialisieren manuell auf cmd1, so funktioniert es und der Status springt nach 5 Minuten von BLITZ auf ENTWARNUNG.

Was kann das jetzt noch sein ?

Stargazer

Nachtrag:

So sieht das List aus, nachdem ich nochmal den Blitz über die Lampe simuliert habe.
Das DOIF scheint es zu registrieren, schaltet aber nicht die "Zeitschaltuhr" ein.

Ich hatte heute morgen schon, wo das Problem ja auch schon war, die DEF nochmal von Blitzalarm:short auf Blitzalarm:short.*
geändert. Scheint aber auch egal zu sein, was ich jetzt so sehen konnte.


Hier nochmal das List:

Internals:
   DEF        ([Blitzalarm:short.*]) (set BlitzBox BLITZ)  (set BlitzBox ENTWARNUNG)
   NAME       BlitzBoxDOIF
   NR         407
   NTFY_ORDER 50-BlitzBoxDOIF
   STATE      cmd_1
   TYPE       DOIF
   READINGS:
     2017-07-23 11:58:28   Device          Blitzalarm
     2017-07-23 11:50:44   cmd             1.2
     2017-07-23 11:50:44   cmd_event       set_cmd_1
     2017-07-23 11:50:44   cmd_nr          1
     2017-07-23 11:50:44   cmd_seqnr       2
     2017-07-23 11:45:54   mode            enable
     2017-07-23 11:50:44   state           cmd_1
     2017-07-23 11:50:44   wait_timer      no timer
   condition:
     0          ReadingValDoIf($hash,'Blitzalarm','short.*')
   devices:
     0           Blitzalarm
     all         Blitzalarm
   do:
     0:
       0          set BlitzBox BLITZ
       1          set BlitzBox ENTWARNUNG
     1:
   helper:
     event      Short 1_50 (to broadcast),trigger: Short_50,trigger_cnt: 50
     globalinit 1
     last_timer 0
     sleepdevice set_cmd_1
     sleepsubtimer -1
     sleeptimer -1
     triggerDev Blitzalarm
     triggerEvents:
       Short 1_50 (to broadcast)
       trigger: Short_50
       trigger_cnt: 50
     triggerEventsState:
       state: Short 1_50 (to broadcast)
       trigger: Short_50
       trigger_cnt: 50
   internals:
   itimer:
   readings:
     0           Blitzalarm:short.*
     all         Blitzalarm:short.*
   regexp:
     0:
     all:
   state:
     STATE:
   trigger:
Attributes:
   do         resetwait
   group      BlitzBox
   room       Wetter
   wait       0,300



VG

André

Ellert

Zitat von: Stargazer am 23 Juli 2017, 12:06:22
Nachtrag:

So sieht das List aus, nachdem ich nochmal den Blitz über die Lampe simuliert habe.
Das DOIF scheint es zu registrieren, schaltet aber nicht die "Zeitschaltuhr" ein.

Ich hatte heute morgen schon, wo das Problem ja auch schon war, die DEF nochmal von Blitzalarm:short auf Blitzalarm:short.*
geändert. Scheint aber auch egal zu sein, was ich jetzt so sehen konnte.


Hier nochmal das List:

Internals:
   DEF        ([Blitzalarm:short.*]) (set BlitzBox BLITZ)  (set BlitzBox ENTWARNUNG)
   NAME       BlitzBoxDOIF
   NR         407
   NTFY_ORDER 50-BlitzBoxDOIF
   STATE      cmd_1
   TYPE       DOIF
   READINGS:
     2017-07-23 11:58:28   Device          Blitzalarm
     2017-07-23 11:50:44   cmd             1.2
     2017-07-23 11:50:44   cmd_event       set_cmd_1
     2017-07-23 11:50:44   cmd_nr          1
     2017-07-23 11:50:44   cmd_seqnr       2
     2017-07-23 11:45:54   mode            enable
     2017-07-23 11:50:44   state           cmd_1
     2017-07-23 11:50:44   wait_timer      no timer
   condition:
     0          ReadingValDoIf($hash,'Blitzalarm','short.*')
   devices:
     0           Blitzalarm
     all         Blitzalarm
   do:
     0:
       0          set BlitzBox BLITZ
       1          set BlitzBox ENTWARNUNG
     1:
   helper:
     event      Short 1_50 (to broadcast),trigger: Short_50,trigger_cnt: 50
     globalinit 1
     last_timer 0
     sleepdevice set_cmd_1
     sleepsubtimer -1
     sleeptimer -1
     triggerDev Blitzalarm
     triggerEvents:
       Short 1_50 (to broadcast)
       trigger: Short_50
       trigger_cnt: 50
     triggerEventsState:
       state: Short 1_50 (to broadcast)
       trigger: Short_50
       trigger_cnt: 50
   internals:
   itimer:
   readings:
     0           Blitzalarm:short.*
     all         Blitzalarm:short.*
   regexp:
     0:
     all:
   state:
     STATE:
   trigger:
Attributes:
   do         resetwait
   group      BlitzBox
   room       Wetter
   wait       0,300



VG

André

Das Gerät Blitzalarm erzeugt ein Event:
Short 1_50 (to broadcast)

Für dieses Ereignis musst Du den regulären Ausdruck formulieren.

Das hier [Blitzalarm:short.*] ist keine DOIF Syntax und keine passende Regexp.

Nach https://fhem.de/commandref_DE.html#DOIF_Ereignissteuerung_ueber_Auswertung_von_Events wäre die richtige Syntax [<devicename>:"<regex>"]
Inhaltlich müsstest Du darauf achten, dass die Schreibung zum Event passt.

Hilft Dir das weiter?

Stargazer

Hallo Ellert,

das hilft mir so schon weiter. Nur habe ich das Problem, dass sich "Short 1_50 (to broadcast)" mit der Nummer hinter stetig ändert.
Bei anderen Modulen (z.B. notify), war das bis jetzt immer eine einfache Sache. Dort reicht dann das "Blitzalarm:short" bzw. "Blitzalarm:long" aus.

Die Regex kenne ich derzeit nur vom HTTPMOD-Modul bedingt aus. Waren bis jetzt nie Freunde... ???.

VG und besten Dank

André

CoolTux

#19
Blitzalarm:"sShort"
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

Damian

Zitat von: Stargazer am 23 Juli 2017, 13:02:57
Bei anderen Modulen (z.B. notify), war das bis jetzt immer eine einfache Sache. Dort reicht dann das "Blitzalarm:short" bzw. "Blitzalarm:long" aus.

Das stimmt aber nicht. Bei notify müsstest  du Blitzalarm:short.* angeben, bei DOIF kannst du auf .* verzichten. Dafür musst du das short in Anführungszeichen setzen, sonst wird es bei DOIF als Reading interpretiert.
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

Ellert

#21
Wir kommen der Lösung immer näher, jetzt muss nur noch s durch S ersetzt werden  ;)

Edit: oder das s weglassen

CoolTux

Stimmt. Habe ich nicht drauf geachtet. Werde es mal korrigieren
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

Stargazer

Hallo zusammen,

so ! Dann habe ich heute wieder etwas gelernt. Man kann echt schon schnell etwas falsch machen oder verwechseln.

@Damian: Das mit dem Short.* meinte ich auch bei einem notify. Ist im eifer des "Schreibgefechts" irgendwie falsch rüber
gekommen.

Fakt ist: So läuft es dank euch richtig gut !

Wenn jetzt ein Blitz erfasst wird, erscheint im UI das Wort "BLITZ" in Rot. Wurde dann über eine gewisse Zeit nichts erfasst, springt er wieder auf ein grünes "ENTWARNUNG".

Viele Grüße und besten Dank nochmals...

André