DOIF neue Features (Sleep-Alternative)

Begonnen von Damian, 12 Juli 2015, 21:17:52

Vorheriges Thema - Nächstes Thema

MarkusN

#30
Hallo Damian,

habe mittlerweile alle notify und at durch DOIF ausgewechselt, und bin hier und da schon über einige DOIF-Besonderheiten gestolpert, bspw. dieses tolle Feature (Auszug aus commandref): Hinzu kommt, dass nur die Bedingungen überprüft werden, die zum ausgelösten Event auch das Device beinhalten.

Heute habe ich allerdings einen Fall bei dem ich irgendwie nicht weiter komme. Folgende Definition funktioniert bei mir leider nicht wie erwartet:

define doif_modus_beleuchtung_flur DOIF ([doif_zeitschaltuhr_ambient_light] eq "on" or [licht_ambient_light_manuell] eq "on") (set licht_rgbufo_flur RGB 6E6E6E 3) \
DOELSEIF ([doif_zeitschaltuhr_ambient_light] eq "off" and [licht_ambient_light_manuell] eq "off" and [{sunset("REAL")}-{sunrise("REAL")}]) (set licht_rgbufo_flur RGB 424242 3) \
DOELSE (set licht_rgbufo_flur off 3)
attr doif_modus_beleuchtung_flur alias Modus Beleuchtung Flur
attr doif_modus_beleuchtung_flur cmdState on|nacht|auto
attr doif_modus_beleuchtung_flur initialize auto
attr doif_modus_beleuchtung_flur room Flur


Mit diesem DOIF steuere ich einen LED-Stripe in meinem Flur, es gibt drei Modi (an, nachtbetrieb und automatikbetrieb durch ein weiteres DOIF mit Bewegungsmelder). Ein Fall funktioniert nicht wie erwartet, nämlich im ersten Zweig. Wenn doif_zeitschaltuhr_ambient_light auf "on" wechselt bleibt das DOIF auf auto, erst wenn ich licht_ambient_light_manuell (beide sind über ein oder verknüpft) schalte schlägt der Nachtbetrieb on-Modus zu.

Wo habe ich da einen Denkfehler?

Grüße,

Markus

Damian

Zitat von: MarkusN am 23 Juli 2015, 22:18:11
Hallo Damian,

habe mittlerweile alle notify und at durch DOIF ausgewechselt, und bin hier und da schon über einige DOIF-Besonderheiten gestolpert, bspw. dieses tolle Feature (Auszug aus commandref): Hinzu kommt, dass nur die Bedingungen überprüft werden, die zum ausgelösten Event auch das Device beinhalten.

Heute habe ich allerdings einen Fall bei dem ich irgendwie nicht weiter komme. Folgende Definition funktioniert bei mir leider nicht wie erwartet:

define doif_modus_beleuchtung_flur DOIF ([doif_zeitschaltuhr_ambient_light] eq "on" or [licht_ambient_light_manuell] eq "on") (set licht_rgbufo_flur RGB 6E6E6E 3) \
DOELSEIF ([doif_zeitschaltuhr_ambient_light] eq "off" and [licht_ambient_light_manuell] eq "off" and [{sunset("REAL")}-{sunrise("REAL")}]) (set licht_rgbufo_flur RGB 424242 3) \
DOELSE (set licht_rgbufo_flur off 3)
attr doif_modus_beleuchtung_flur alias Modus Beleuchtung Flur
attr doif_modus_beleuchtung_flur cmdState on|nacht|auto
attr doif_modus_beleuchtung_flur initialize auto
attr doif_modus_beleuchtung_flur room Flur


Mit diesem DOIF steuere ich einen LED-Stripe in meinem Flur, es gibt drei Modi (an, nachtbetrieb und automatikbetrieb durch ein weiteres DOIF mit Bewegungsmelder). Ein Fall funktioniert nicht wie erwartet, nämlich im ersten Zweig. Wenn doif_zeitschaltuhr_ambient_light auf "on" wechselt bleibt das DOIF auf auto, erst wenn ich licht_ambient_light_manuell (beide sind über ein oder verknüpft) schalte schlägt der Nachtbetrieb zu.

Wo habe ich da einen Denkfehler?

Grüße,

Markus

Dann musst du die Ausgabe von  "list doif_modus_beleuchtung_flur" von diesem Fall hier posten, sonst kann ich dazu nichts sagen.


Gruß

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

MarkusN

Internals:
   CFGFN
   DEF        ([doif_zeitschaltuhr_ambient_light] eq "on" or [licht_ambient_light_manuell] eq "on") (set licht_rgbufo_flur RGB 6E6E6E 3)
DOELSEIF ([doif_zeitschaltuhr_ambient_light] eq "off" and [licht_ambient_light_manuell] eq "off" and [{sunset("REAL")}-{sunrise("REAL")}]) (set licht_rgbufo_flur RGB 424242 3)
DOELSE (set licht_rgbufo_flur off 3)
   NAME       doif_modus_beleuchtung_flur
   NR         840
   NTFY_ORDER 50-doif_modus_beleuchtung_flur
   STATE      nacht
   TYPE       DOIF
   CHANGETIME:
   Readings:
     2015-07-23 22:30:00   cmd_event       doif_zeitschaltuhr_ambient_light
     2015-07-23 22:30:00   cmd_nr          2
     2015-07-23 22:30:00   e_doif_zeitschaltuhr_ambient_light_STATE off
     2015-07-22 21:35:08   e_licht_ambient_light_manuell_STATE off
     2015-07-23 22:30:00   state           nacht
     2015-07-23 21:31:59   timer_1_c2      24.07.2015 21:30:40
     2015-07-23 05:48:47   timer_2_c2      24.07.2015 05:50:08
   Condition:
     0          InternalDoIf('doif_zeitschaltuhr_ambient_light','STATE','') eq "on" or InternalDoIf('licht_ambient_light_manuell','STATE','') eq "on"
     1          InternalDoIf('doif_zeitschaltuhr_ambient_light','STATE','') eq "off" and InternalDoIf('licht_ambient_light_manuell','STATE','') eq "off" and DOIF_time($hash->{realtime}{0},$hash->{realtime}{1},$wday,$hms,"")
   Days:
   Devices:
     0           doif_zeitschaltuhr_ambient_light licht_ambient_light_manuell
     1           doif_zeitschaltuhr_ambient_light licht_ambient_light_manuell
     all         doif_zeitschaltuhr_ambient_light licht_ambient_light_manuell
   Do:
     0:
       0          set licht_rgbufo_flur RGB 6E6E6E 3
     1:
       0          set licht_rgbufo_flur RGB 424242 3
     2:
       0          set licht_rgbufo_flur off 3
   Helper:
     last_timer 2
     sleeptimer -1
   Internals:
     0           doif_zeitschaltuhr_ambient_light:STATE licht_ambient_light_manuell:STATE
     1           doif_zeitschaltuhr_ambient_light:STATE licht_ambient_light_manuell:STATE
     all         doif_zeitschaltuhr_ambient_light:STATE licht_ambient_light_manuell:STATE
   Itimer:
   Readings:
   Realtime:
     0          21:30:40
     1          05:50:08
   State:
   Time:
     0          {sunset("REAL")}
     1          {sunrise("REAL")}
   Timecond:
     0          1
     1          1
   Timer:
     0          0
     1          0
   Timerfunc:
   Timers:
     1           0  1
   Trigger:
Attributes:
   alias      Modus Beleuchtung Flur
   cmdState   on|nacht|auto
   initialize auto
   room       Flur



"e_doif_zeitschaltuhr_ambient_light_STATE off" war bis vor wenigen Minuten natürlich noch "e_doif_zeitschaltuhr_ambient_light_STATE on".

Damian

Zitat von: MarkusN am 23 Juli 2015, 22:43:39
Internals:
   CFGFN
   DEF        ([doif_zeitschaltuhr_ambient_light] eq "on" or [licht_ambient_light_manuell] eq "on") (set licht_rgbufo_flur RGB 6E6E6E 3)
DOELSEIF ([doif_zeitschaltuhr_ambient_light] eq "off" and [licht_ambient_light_manuell] eq "off" and [{sunset("REAL")}-{sunrise("REAL")}]) (set licht_rgbufo_flur RGB 424242 3)
DOELSE (set licht_rgbufo_flur off 3)
   NAME       doif_modus_beleuchtung_flur
   NR         840
   NTFY_ORDER 50-doif_modus_beleuchtung_flur
   STATE      nacht
   TYPE       DOIF
   CHANGETIME:
   Readings:
     2015-07-23 22:30:00   cmd_event       doif_zeitschaltuhr_ambient_light
     2015-07-23 22:30:00   cmd_nr          2
     2015-07-23 22:30:00   e_doif_zeitschaltuhr_ambient_light_STATE off
     2015-07-22 21:35:08   e_licht_ambient_light_manuell_STATE off
     2015-07-23 22:30:00   state           nacht
     2015-07-23 21:31:59   timer_1_c2      24.07.2015 21:30:40
     2015-07-23 05:48:47   timer_2_c2      24.07.2015 05:50:08
   Condition:
     0          InternalDoIf('doif_zeitschaltuhr_ambient_light','STATE','') eq "on" or InternalDoIf('licht_ambient_light_manuell','STATE','') eq "on"
     1          InternalDoIf('doif_zeitschaltuhr_ambient_light','STATE','') eq "off" and InternalDoIf('licht_ambient_light_manuell','STATE','') eq "off" and DOIF_time($hash->{realtime}{0},$hash->{realtime}{1},$wday,$hms,"")
   Days:
   Devices:
     0           doif_zeitschaltuhr_ambient_light licht_ambient_light_manuell
     1           doif_zeitschaltuhr_ambient_light licht_ambient_light_manuell
     all         doif_zeitschaltuhr_ambient_light licht_ambient_light_manuell
   Do:
     0:
       0          set licht_rgbufo_flur RGB 6E6E6E 3
     1:
       0          set licht_rgbufo_flur RGB 424242 3
     2:
       0          set licht_rgbufo_flur off 3
   Helper:
     last_timer 2
     sleeptimer -1
   Internals:
     0           doif_zeitschaltuhr_ambient_light:STATE licht_ambient_light_manuell:STATE
     1           doif_zeitschaltuhr_ambient_light:STATE licht_ambient_light_manuell:STATE
     all         doif_zeitschaltuhr_ambient_light:STATE licht_ambient_light_manuell:STATE
   Itimer:
   Readings:
   Realtime:
     0          21:30:40
     1          05:50:08
   State:
   Time:
     0          {sunset("REAL")}
     1          {sunrise("REAL")}
   Timecond:
     0          1
     1          1
   Timer:
     0          0
     1          0
   Timerfunc:
   Timers:
     1           0  1
   Trigger:
Attributes:
   alias      Modus Beleuchtung Flur
   cmdState   on|nacht|auto
   initialize auto
   room       Flur



"e_doif_zeitschaltuhr_ambient_light_STATE off" war bis vor wenigen Minuten natürlich noch "e_doif_zeitschaltuhr_ambient_light_STATE on".

Das ist doch der Fall der korrekt funktioniert. Es geht doch hier um den ersten Fall, der nicht funktioniert, den musst du mir zeigen.
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

MarkusN

Um dir das richtige list zur Verfügung zu stellen habe ich doif_zeitschaltuhr_ambient_light so geändert, dass es heute noch mal auf on wechselt, und dieses mal hat doif_modus_beleuchtung_flur wie erwartet funktioniert.

Normalerweise sieht doif_zeitschaltuhr_ambient_light so aus:
([{sunset("REAL",-3600)}-22:30]) DOELSE

In diesem Fall springt doif_modus_beleuchtung_flur nicht auf on. Jetzt gerade mit folgendem Zeitraum jedoch schon:
([22:55-23:30]) DOELSE

Das macht die Fehlersuche gerade nicht einfacher, und der Knoten im Kopf wird schlimmer. Ich kann dir anbieten morgen noch mal ein list zu posten wenn das Problem wieder auftreten wird.

Fritz!Maxi

Zitat von: Fritz!Maxi am 22 Juli 2015, 22:42:34
...
Ich möchte an Arbeitstagen den Rollladen_Kueche um 6:20 hochfahren lassen, WZ_Links und WZ_Rechts 15 Sekunden später und WZ_Mitte 30 Sekunden später. An Nicht-Arbeitstagen soll das Ganze erst um 8:00 beginnen, dann aber mit den gleichen Versätzen. Passt das so wie in meinem Beispiel oder ist für die wait Einträge immer 6:20 die Referenzzeit?

DOIF ([?Rollladensteuerung] eq "off" and [6:20|8])
   (set Rollladen_Kueche on)
   (set Rollladen_WZ_Links on)
   (set Rollladen_WZ_Rechts on)
   (set Rollladen_WZ_Mitte on)
  DOELSE ([8:00|7])
   (set Rollladen_Kueche on)
   (set Rollladen_WZ_Links on)
   (set Rollladen_WZ_Rechts on)
   (set Rollladen_WZ_Mitte on)

attr <device> do resetwait
attr <device> wait 0,15,15,30:0,15,15,30




So, ich habe das jetzt erfolgreich testen können. Allerdings hatte ich noch einen Fehler drin. DOELSE muss natürlich DOELSEIF sein. DOELSE konnte mit der Zeitangabe nicht anfangen, was dazu führte dass um 6:20 geschaltet wurde. Nach der Änderung auf DOELSEIF wird wie gewollt um 8:00 geschaltet, mit dem jeweils angegebenen Versatz.


VG,
Christoph
FHEM im Debian Container uaf QNAP, diverse Homematic Komponenten

MarkusN

Zitat von: Damian am 23 Juli 2015, 22:51:33
Das ist doch der Fall der korrekt funktioniert. Es geht doch hier um den ersten Fall, der nicht funktioniert, den musst du mir zeigen.

Der Knoten im Kopf ist weg, ich habe den Fehler gefunden. Folgende Erkenntnisse habe ich erlangt:

1) doif_modus_beleuchtung_flur funktioniert, das licht wird um {sunset("REAL",-3600)} eingeschaltet
2) um {sunset("REAL")} wird es jedoch wieder abgeschaltet (siehe zweite Bedingung im doif)
3) die erste bedingung war wahr, durch ein event in der zweiten bedingung (die allerdings auch nicht erfüllt wird) trifft plötzlich die dritte bedingung (doelse) zu
4) vielleicht hätte mir ein "do always" geholfen, bin mir aber über die möglichen nebenwirkungen noch nicht so klar
5) mir erschien es jetzt als sinnvoll in der zweiten Bedingung die Zeitangabe [{sunset("REAL")}-{sunrise("REAL")}] als nicht triggernd zu definieren
6) sogar vermutlich einfache Aufgaben können ungeahnte Effekte haben
7) DOIF ist trotzdem ein großartiges Modul

Grüße,

Markus

Damian

#37
neues Update:

- Warnings behoben
- Initialisierungsproblem behoben http://forum.fhem.de/index.php/topic,38266.0.html
- Kommentare an beliebiger Stelle beginnend mit # bis zum Ende der Zeile möglich
- im Attribut wait können jetzt indirekte Angaben mit eckigen Klammern gemacht werden

Beispiel:


define wait_2 dummy
set wait_2 20

define di_on_for_timer DOIF ([Button:?]) # Hier ist die Bedingung: Trigger für beliebige Events von Button
# Diese Zeile besteht nur aus einem Kommentar
  (set lamp on) # Hier wird die Lampe eingeschaltet
  (set lamp off) # Hier wird die Lampe zeitversetzt ausgeschaltet

attr di_on_for_timer do resetwait
attr di_on_for_timer wait 0,[wait_2]


Neues Modul ist im ersten Post angehängt.

Gruß

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

Ralli

Vielen Dank, Damian!

Eingebaut und erstes shutdown restart ohne das Initialisierungs-Problem :)
Gruß,
Ralli

Proxmox 8.2 Cluster mit HP ED800G2i7, Intel NUC11TNHi7+NUC7i5BNH, virtualisiertes fhem 6.3 dev, virtualisierte RaspberryMatic (3.75.7.20240420) mit HB-RF-ETH 1.3.0 / RPI-RF-MOD, HM-LAN-GW (1.1.5) und HMW-GW, FRITZBOX 7490 (07.57), FBDECT, Siri und Alexa

Damian

#39
Zitat von: Ralli am 25 Juli 2015, 17:13:24
Vielen Dank, Damian!

Eingebaut und erstes shutdown restart ohne das Initialisierungs-Problem :)

Du musst noch mal updaten. Ansonsten funktionieren Module erst nach dem Neustart, wenn man sie zur Laufzeit neu definiert.

Gruß

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

Ralli

#40
Erledigt ;)

# $Id: 98_DOIF.pm Testversion 0.3$

Erster Test mit neuer Funktionalität: klappt leider nicht wie erwartet. cmd_1_1 wird ausgeführt, cmd_1_2 jedoch gar nicht.


Internals:
   DEF        ([CCU_Btn1:?trig_aes_GEN_FB_open: ok:.*])
    ({if ((AttrVal("UEA","level5xec","0") ne "disarmed" or AttrVal("UEA","level4xec","0") ne "disarmed") and ReadingsVal("GAR_MK_Tor","state","0") eq "closed"){
      fhem("set UEA.Unscharf.4 .");;
      fhem("set UEA.Unscharf.5 .")}})
    (set GEN_4SW_GarageToggle on-for-timer 1)
DOELSE ()
   NAME       GEN_FB_Garage_Oeffner
   NR         345
   NTFY_ORDER 50-GEN_FB_Garage_Oeffner
   STATE      cmd_1_1
   TYPE       DOIF
   CHANGETIME:
   Helper:
     Dblog:
       Cmd_event:
         Eventlog:
           TIME       1437890205.03036
           VALUE      CCU_Btn1
       Cmd_nr:
         Eventlog:
           TIME       1437890205.03036
           VALUE      1
       Cmd_seqnr:
         Eventlog:
           TIME       1437890205.03036
           VALUE      1
       State:
         Eventlog:
           TIME       1437890205.03036
           VALUE      cmd_1_1
       Wait_timer:
         Eventlog:
           TIME       1437890206.00872
           VALUE      no timer
   Readings:
     2015-07-26 07:56:45   cmd_event       CCU_Btn1
     2015-07-26 07:56:45   cmd_nr          1
     2015-07-26 07:56:45   cmd_seqnr       1
     2015-07-26 07:56:45   e_CCU_Btn1_events trig_aes_GEN_FB_open: ok:114
     2015-07-26 07:56:45   state           cmd_1_1
     2015-07-26 07:56:46   wait_timer      no timer
   Condition:
     0          EventDoIf('CCU_Btn1',$hash->{helper}{triggerDev},$hash->{helper}{triggerEvents},'trig_aes_GEN_FB_open')
   Devices:
     0           CCU_Btn1
     all         CCU_Btn1
   Do:
     0:
       0          {if ((AttrVal("UEA","level5xec","0") ne "disarmed" or AttrVal("UEA","level4xec","0") ne "disarmed") and ReadingsVal("GAR_MK_Tor","state","0") eq "closed"){      fhem("set UEA.Unscharf.4 .");;      fhem("set UEA.Unscharf.5 .")}}
       1          set GEN_4SW_GarageToggle on-for-timer 1
     1:
       0
   Helper:
     globalinit 1
     last_timer 0
     sleepdevice CCU_Btn1
     sleepsubtimer -1
     sleeptimer -1
     triggerDev CCU_Btn1
     triggerEvents:
       trig_aes_GEN_FB_open: ok:114
   Internals:
   Itimer:
   Readings:
   State:
   Timerfunc:
   Trigger:
     all         CCU_Btn1
Attributes:
   cmdpause   3
   do         always
   wait       0,1
Gruß,
Ralli

Proxmox 8.2 Cluster mit HP ED800G2i7, Intel NUC11TNHi7+NUC7i5BNH, virtualisiertes fhem 6.3 dev, virtualisierte RaspberryMatic (3.75.7.20240420) mit HB-RF-ETH 1.3.0 / RPI-RF-MOD, HM-LAN-GW (1.1.5) und HMW-GW, FRITZBOX 7490 (07.57), FBDECT, Siri und Alexa

Damian

Zitat von: Ralli am 26 Juli 2015, 08:14:36
Erledigt ;)

# $Id: 98_DOIF.pm Testversion 0.3$

Erster Test mit neuer Funktionalität: klappt leider nicht wie erwartet. cmd_1_1 wird ausgeführt, cmd_1_2 jedoch gar nicht.



Attributes:
   cmdpause   3
   do         always
   wait       0,1


Es liegt an cmdpause. Das Problem hatte ich bereits gestern schon behoben, aber korrigierte Version noch nicht hochgeladen. Ich bin noch dabei weitere Features einzubauen - es gibt heute Abend eine neue Version.

Gruß

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

Invers

Hi,
da mir die neue Funktion wie gerufen kam, um mein Internetradio zu steuern, habe ich es gleich ausprobiert.
Das Internetradio funktioniert damit sehr gut, aber das folgende DOIF leider nicht.
Es wird ständig mein Schloss auf und zu geschlossen. Nachdem ich die alte Version des Moduls wieder installiert habe, geht alles wieder sehr gut (natürlich nicht mein Internetradio).
Hier mal die Definition:
define DI_SchlossAutoZu DOIF ([Tuer_Wohnung] eq "closed" and [Schloss] eq "unlocked") \
   (set Schloss lock)  \
DOELSEIF ([Tuer_Wohnung] eq "closed" and [Schloss] eq "locked (uncertain)") \
   (set Schloss unlock,set PBText message "Tuerstatus locked (uncertain)",set Schloss lock)  \
DOELSEIF ([Tuer_Wohnung] eq "closed" and [Schloss] eq "unlocked (uncertain)") \
   (set Schloss unlock,set PBText message "Tuerstatus unlocked (uncertain)",set Schloss lock)  \
DOELSEIF ([Tuer_Wohnung] eq "closed" and [Schloss] eq "NACK") \
   (set Schloss unlock,set PBText message "Tuerstatus Nack",set Schloss lock) \
DOELSEIF ([Tuer_Wohnung] eq "closed" and [Schloss] eq "Motor aborted") \
   (set Schloss unlock,set PBText message "Tuerstatus Motor aborted",set Schloss lock)\
DOELSEIF ([Tuer_Wohnung] eq "closed" and [Schloss] eq "MISSING ACK") \
   (set Schloss lock,set PBText message "Tuerstatus MISSING ACK",set Schloss lock)
attr DI_SchlossAutoZu do always
attr DI_SchlossAutoZu room Anwesenheit,CUL_HM
attr DI_SchlossAutoZu wait 10:10:10:10:10:10


Trotzdedm vielen Dank an der Stelle für das wirklich tolle Modul.
Pi3B+ mit SSD/ Bullseye | FB7590 AX | 12 x Dect200 | CUL433+868 | SDuino | HM-LAN | 3 x Heizung FHT + FKontakte | KeyMatic + 4 FB | HM Wandtaster 2-fach m. LED | 6 x Türkont. TFK-TI | HM-Bew.-Melder innen | 3 x Smoked. HM-SEC-SD-2

Ralli

Zitat von: Damian am 26 Juli 2015, 11:01:27
Es liegt an cmdpause. Das Problem hatte ich bereits gestern schon behoben, aber korrigierte Version noch nicht hochgeladen.

Sei ehrlich, Du wolltest nur schauen, ob wir auch testen ;).

Zitat
Ich bin noch dabei weitere Features einzubauen - es gibt heute Abend eine neue Version.

Sehr schön! Vielen Dank!
Gruß,
Ralli

Proxmox 8.2 Cluster mit HP ED800G2i7, Intel NUC11TNHi7+NUC7i5BNH, virtualisiertes fhem 6.3 dev, virtualisierte RaspberryMatic (3.75.7.20240420) mit HB-RF-ETH 1.3.0 / RPI-RF-MOD, HM-LAN-GW (1.1.5) und HMW-GW, FRITZBOX 7490 (07.57), FBDECT, Siri und Alexa

Steffen

Hallo!

Bekomme ich auch einen Wait timer bei diesem Code hin?

([AbendLicht] eq "on") ({HueOnSofa};{HueOnSideBoard})