Hauptmenü

Probleme mit DOIF

Begonnen von nettiger, 30 November 2015, 23:37:29

Vorheriges Thema - Nächstes Thema

nettiger

Hallo zusammen,

ich versuche gerade meine Rolladensteuerung, welche bis jetzt statisch per sunrise/sunset läuft etwas zu erweitern.

Es soll folgendes passieren:

ich habe 3 dummys dummyzeit_hoch, dummyzeit_runter und dummy_modus
in den 2 time dummys wird im state die Uhrzeit im Format 16:00 gespeichert. Im dummy Modus die werte "auto,manuell,aus"
mein aktor heisst rollo_wz


nun scheitere ich am DOIF.....es soll folgendes machen: wenn im modus dummy auto gesetzt ist, soll der aktor via sunrise/sunset automatisch auf und zu gehen.
ist der modus zeit gesetzt, sollen die zeiten für auf und zu von den beiden dummys benutzt werden
ist der modus auf aus, soll die steuerung gar nichts machen.

ich habe es bereits geschafft, dass der aktor bei der zeit schaltet, aber wenn ich die and bedingung mit hinzufüge geht nichts mehr.

Die Commandref hilft mir leider auch nicht viel weiter :-(

Vielleicht kann mir hier jemand weiter helfen, damit ich wieder etwas klarer sehe und dazu lerne .

Danke schonmal im voraus
Gruß
Jens

Ralli

Dann lass uns doch mal Deine Versuche sehen.
Gruß,
Ralli

Proxmox 8.4 Cluster mit HP ED800G2i7, Intel NUC11TNHi7+NUC7i5BNH, virtualisiertes fhem 6.4 dev, virtualisierte RaspberryMatic (3.83.6.20250705) mit HB-RF-ETH 1.3.0 / RPI-RF-MOD, HM-LAN-GW (1.4.1) und HMW-GW, FRITZBOX 7490 (07.59), FBDECT, Siri und Alexa

nettiger

Hallo zusammen,

war wohl doch gestern etwas zu spät :-(

hier meine Versuche:

Dummy für Status:

define DU_OG_KA_RO dummy
attr DU_OG_KA_RO room LichtRollo
attr DU_OG_KA_RO setList state:sommer,winter,aus,zeit


Dummy für Zeit:

define du_Rollo_Zeit_ru dummy
attr du_Rollo_Zeit_ru alias Rolo Kammer Zeit hoch:
attr du_Rollo_Zeit_ru devStateIcon .*:rc_BLANK
attr du_Rollo_Zeit_ru fp_test 211,265,2,
attr du_Rollo_Zeit_ru group Rollos_Settings
attr du_Rollo_Zeit_ru icon icoUhr
attr du_Rollo_Zeit_ru room LichtRollo
attr du_Rollo_Zeit_ru setList state:time
attr du_Rollo_Zeit_ru sortby 21
attr du_Rollo_Zeit_ru webCmd state

DOIF: zum testen nur mal mit einem Kommando -- Schaltet einen Dummy on oder off


define di_time DOIF ([du_Rollo_Zeit_ru:state] and [DU_OG_KA_RO:state] eq "zeit")(set lamp on)
attr di_time room LichtRollo


Es tut sich da nichts um die eingestellte Zeit :-(....wenn ich aber den Dummy für den Status umstelle z.b. von zeit auf winter und wieder zurück auf zeit geht die lampe am, obwohl die erste Bedingung mit der Zeit nicht erfüllt ist....

Was mir auch noch ein Rätsel ist, ist was ich bei "Aus" definiere....gibts da so ne Art "do nothing" oder bleibt das einfach leer, weil diese Bedingung nie erfüllt wird?

Danke und Gruß
Jens

Ralli

Indirekte Zeitangaben brauchen doppelte eckige Klammern im DOIF. Siehe commandref.
Gruß,
Ralli

Proxmox 8.4 Cluster mit HP ED800G2i7, Intel NUC11TNHi7+NUC7i5BNH, virtualisiertes fhem 6.4 dev, virtualisierte RaspberryMatic (3.83.6.20250705) mit HB-RF-ETH 1.3.0 / RPI-RF-MOD, HM-LAN-GW (1.4.1) und HMW-GW, FRITZBOX 7490 (07.59), FBDECT, Siri und Alexa

nettiger

Hallo,

super das wars....mit den doppelten Klammern stehe ich irgendwie auf Kriegsfuss :-)
Jetzt muss ich nur noch die anderen 3 Stati hineinbasteln.

Danke nochmal.

Gruß
Jens

nettiger

#5
Hallo zusammen,

es funktioniert zwar irgenwie, aber nicht zuverlässig :-( der eine Rolladen, welcher nach sunset/sunrise gesteuert wird ist perfekt runtergefahren, der 2. welcher die manuelle zeitsteuerung besitzt hat rein gar nichts gemacht. Setze ich die Zeit manuell im dummy neu und drücke set initialize im DOIF klappt es ein mal dann ist wieder keine Funktion mehr.

Kurzbeschreibung: wenn in Dummy1 der Modus Winter gesetzt ist, soll der Rolladen nach sunrise/sunset auf- bzw. zugehen. wenn im Dummy 1 der Modus Zeit gesetzt ist, soll er zur Uhrzeit in Dummy2 bzw3 auf bzw. zu gehen.

Hier mal mein "Werk:

List vom DOIF:

Internals:
   DEF        ([[du_og_wz_ro1_closetime:state]] and [du_og_wz_ro1_mode:state] eq "Zeit") (set OG_WZ_RO1 pct 10) DOELSEIF ([{sunrise("CIVIL",0,"16:30","19:00")}] and [du_og_wz_ro1_mode:state] eq "Winter") (set OG_WZ_RO1 pct 10)
   NAME       di_steuerung_og_wz_ro1_close
   NR         260
   NTFY_ORDER 50-di_steuerung_og_wz_ro1_close
   STATE      cmd_1
   TYPE       DOIF
   Readings:
     2015-12-02 22:50:38   Device          du_og_wz_ro1_mode
     2015-12-02 22:57:00   cmd_event       timer_1
     2015-12-02 22:57:00   cmd_nr          1
     2015-12-02 22:50:38   e_du_og_wz_ro1_mode_state Zeit
     2015-12-02 22:57:00   state           cmd_1
     2015-12-02 23:12:00   timer_1_c1      03.12.2015 23:12:00
     2015-12-02 22:53:29   timer_2_c2      03.12.2015 16:30:00
   Condition:
     0          DOIF_time_once($hash,$hash->{timer}{0},$wday,"") and ReadingValDoIf('du_og_wz_ro1_mode','state','') eq "Zeit"
     1          DOIF_time_once($hash,$hash->{timer}{1},$wday,"") and ReadingValDoIf('du_og_wz_ro1_mode','state','') eq "Winter"
   Days:
   Devices:
     0           du_og_wz_ro1_mode
     1           du_og_wz_ro1_mode
     all         du_og_wz_ro1_mode
   Do:
     0:
       0          set OG_WZ_RO1 pct 10
     1:
       0          set OG_WZ_RO1 pct 10
   Helper:
     globalinit 1
     last_timer 2
     sleeptimer -1
   Internals:
   Itimer:
     all         du_og_wz_ro1_closetime
   Readings:
     0           du_og_wz_ro1_mode:state
     1           du_og_wz_ro1_mode:state
     all         du_og_wz_ro1_mode:state
   Realtime:
     0          23:12:00
     1          16:30:00
   State:
   Time:
     0          [du_og_wz_ro1_closetime:state]
     1          {sunrise("CIVIL",0,"16:30","19:00")}
   Timecond:
     0          0
     1          1
   Timer:
     0          0
     1          0
   Timerfunc:
   Timers:
     0           0
     1           1
Attributes:
   alias      Steuerung Rolladen Wohnzimmer zu
   group      Rolladen_Wohnzimmer
   room       LichtRollo


Das DOIF für Rolladen auf: (für Rolladen zu existiert ein weiteres, identisches nur mit den Dummy für die Schliesszeit)



# doif steuerung rolladen Wohnzimmer zu
define di_steuerung_og_wz_ro1_close DOIF ([[du_og_wz_ro1_closetime:state]] and [du_og_wz_ro1_mode:state] eq "Zeit") (set OG_WZ_RO1 pct 10) DOELSEIF ([{sunrise("CIVIL",0,"16:30","19:00")}] and [du_og_wz_ro1_mode:state] eq "Winter") (set OG_WZ_RO1 pct 10)
attr di_steuerung_og_wz_ro1_close alias Steuerung Rolladen Wohnzimmer zu
attr di_steuerung_og_wz_ro1_close group Rolladen_Wohnzimmer
attr di_steuerung_og_wz_ro1_close room LichtRollo


Dummy Schlieszeit:

#Close time Wohnzimmer
define du_og_wz_ro1_closetime dummy
attr du_og_wz_ro1_closetime alias 3-Rolladen Wohnzimmer zu
attr du_og_wz_ro1_closetime group Rolladen_Wohnzimmer
attr du_og_wz_ro1_closetime room LichtRollo
attr du_og_wz_ro1_closetime setList state:16:00,16:15,16:30,16:45,17:00,17:15,17:30,17:45,18:00,18:15,18:30,18:45,19:00,19:15,19:30,19:45,20:00,20:15,20:30,20:45,21:00,21:15,21:30,21:45,22:00,22:15,22:30,22:45,23:00,23:15,23:30,23:45
attr du_og_wz_ro1_closetime webCmd state


Dummy für Modus:

#Modus Rolladen Wohnzimmer
define du_og_wz_ro1_mode dummy
attr du_og_wz_ro1_mode alias 1-Rolladen Wohnzimmer Modus
attr du_og_wz_ro1_mode group Rolladen_Wohnzimmer
attr du_og_wz_ro1_mode room LichtRollo
attr du_og_wz_ro1_mode setList state:Aus,Zeit,Winter,Sommer
attr du_og_wz_ro1_mode webCmd state


Ich habe das Gefühl, es fehlt irgendwo der "Trigger" um die Aktion starten zu lassen, aber ich hänge hier etwas fest.

Es wäre super, wenn hier jemand der experten mal einen Blick drüber werfen könnte.

Danke und Gruß
Jens

nettiger

Moin zusammen,

hat den keiner eine Idee, was hier falsch laufen könnte?

Hab gestern noch etwas dran rumgebastelt, aber leider keine Lösung gefunden. Und der WAF schwindelt allmälig :-(

Gruß
Jens

Vize

Mahlzeit,

hat zwar nix mit deinem Problem zu tun, aber mich wundert dieser code etwas:

{sunrise("CIVIL",0,"16:30","19:00")}

Sonnenaufgang ist doch bei uns niemals nach 16:30 Uhr, oder  ;)

Oder meintest du {sunset...

Gruß
Andreas

Vize

Zu deiner sunrise-Angabe habe ich noch folgendes in der commandref gefunden:
Schalten mit Zeitfunktionen, hier: bei Sonnenaufgang und Sonnenuntergang:

define di_light DOIF ([+{sunrise_rel(900,"06:00","08:00")}]) (set outdoorlight off) DOELSEIF ([+{sunset_rel(900,"17:00","21:00")}]) (set outdoorlight on)


Vielleicht musst du hier auch das "+"-Zeichen setzen, damit es funktioniert?

Das wissen andere aber wahrscheinlich besser...ich konnte nur auf die Schnelle schauen...

Gruß
Andreas

Damian

Zitat von: nettiger am 03 Dezember 2015, 11:48:34
Hallo zusammen,

es funktioniert zwar irgenwie, aber nicht zuverlässig :-( der eine Rolladen, welcher nach sunset/sunrise gesteuert wird ist perfekt runtergefahren, der 2. welcher die manuelle zeitsteuerung besitzt hat rein gar nichts gemacht. Setze ich die Zeit manuell im dummy neu und drücke set initialize im DOIF klappt es ein mal dann ist wieder keine Funktion mehr.

Kurzbeschreibung: wenn in Dummy1 der Modus Winter gesetzt ist, soll der Rolladen nach sunrise/sunset auf- bzw. zugehen. wenn im Dummy 1 der Modus Zeit gesetzt ist, soll er zur Uhrzeit in Dummy2 bzw3 auf bzw. zu gehen.

Hier mal mein "Werk:

List vom DOIF:

Internals:
   DEF        ([[du_og_wz_ro1_closetime:state]] and [du_og_wz_ro1_mode:state] eq "Zeit") (set OG_WZ_RO1 pct 10) DOELSEIF ([{sunrise("CIVIL",0,"16:30","19:00")}] and [du_og_wz_ro1_mode:state] eq "Winter") (set OG_WZ_RO1 pct 10)
   NAME       di_steuerung_og_wz_ro1_close
   NR         260
   NTFY_ORDER 50-di_steuerung_og_wz_ro1_close
   STATE      cmd_1
   TYPE       DOIF
   Readings:
     2015-12-02 22:50:38   Device          du_og_wz_ro1_mode
     2015-12-02 22:57:00   cmd_event       timer_1
     2015-12-02 22:57:00   cmd_nr          1
     2015-12-02 22:50:38   e_du_og_wz_ro1_mode_state Zeit
     2015-12-02 22:57:00   state           cmd_1
     2015-12-02 23:12:00   timer_1_c1      03.12.2015 23:12:00
     2015-12-02 22:53:29   timer_2_c2      03.12.2015 16:30:00
   Condition:
     0          DOIF_time_once($hash,$hash->{timer}{0},$wday,"") and ReadingValDoIf('du_og_wz_ro1_mode','state','') eq "Zeit"
     1          DOIF_time_once($hash,$hash->{timer}{1},$wday,"") and ReadingValDoIf('du_og_wz_ro1_mode','state','') eq "Winter"
   Days:
   Devices:
     0           du_og_wz_ro1_mode
     1           du_og_wz_ro1_mode
     all         du_og_wz_ro1_mode
   Do:
     0:
       0          set OG_WZ_RO1 pct 10
     1:
       0          set OG_WZ_RO1 pct 10
   Helper:
     globalinit 1
     last_timer 2
     sleeptimer -1
   Internals:
   Itimer:
     all         du_og_wz_ro1_closetime
   Readings:
     0           du_og_wz_ro1_mode:state
     1           du_og_wz_ro1_mode:state
     all         du_og_wz_ro1_mode:state
   Realtime:
     0          23:12:00
     1          16:30:00
   State:
   Time:
     0          [du_og_wz_ro1_closetime:state]
     1          {sunrise("CIVIL",0,"16:30","19:00")}
   Timecond:
     0          0
     1          1
   Timer:
     0          0
     1          0
   Timerfunc:
   Timers:
     0           0
     1           1
Attributes:
   alias      Steuerung Rolladen Wohnzimmer zu
   group      Rolladen_Wohnzimmer
   room       LichtRollo


Das DOIF für Rolladen auf: (für Rolladen zu existiert ein weiteres, identisches nur mit den Dummy für die Schliesszeit)



# doif steuerung rolladen Wohnzimmer zu
define di_steuerung_og_wz_ro1_close DOIF ([[du_og_wz_ro1_closetime:state]] and [du_og_wz_ro1_mode:state] eq "Zeit") (set OG_WZ_RO1 pct 10) DOELSEIF ([{sunrise("CIVIL",0,"16:30","19:00")}] and [du_og_wz_ro1_mode:state] eq "Winter") (set OG_WZ_RO1 pct 10)
attr di_steuerung_og_wz_ro1_close alias Steuerung Rolladen Wohnzimmer zu
attr di_steuerung_og_wz_ro1_close group Rolladen_Wohnzimmer
attr di_steuerung_og_wz_ro1_close room LichtRollo


Dummy Schlieszeit:

#Close time Wohnzimmer
define du_og_wz_ro1_closetime dummy
attr du_og_wz_ro1_closetime alias 3-Rolladen Wohnzimmer zu
attr du_og_wz_ro1_closetime group Rolladen_Wohnzimmer
attr du_og_wz_ro1_closetime room LichtRollo
attr du_og_wz_ro1_closetime setList state:16:00,16:15,16:30,16:45,17:00,17:15,17:30,17:45,18:00,18:15,18:30,18:45,19:00,19:15,19:30,19:45,20:00,20:15,20:30,20:45,21:00,21:15,21:30,21:45,22:00,22:15,22:30,22:45,23:00,23:15,23:30,23:45
attr du_og_wz_ro1_closetime webCmd state


Dummy für Modus:

#Modus Rolladen Wohnzimmer
define du_og_wz_ro1_mode dummy
attr du_og_wz_ro1_mode alias 1-Rolladen Wohnzimmer Modus
attr du_og_wz_ro1_mode group Rolladen_Wohnzimmer
attr du_og_wz_ro1_mode room LichtRollo
attr du_og_wz_ro1_mode setList state:Aus,Zeit,Winter,Sommer
attr du_og_wz_ro1_mode webCmd state


Ich habe das Gefühl, es fehlt irgendwo der "Trigger" um die Aktion starten zu lassen, aber ich hänge hier etwas fest.

Es wäre super, wenn hier jemand der experten mal einen Blick drüber werfen könnte.

Danke und Gruß
Jens
Die Zeiten sind sauber gesetzt, damit wird dein Modul auf jeden Fall um diese Zeit getriggert. Da du das Attribut do always nicht gesetzt hast, kann das Schalten immer nur im Wechsel stattfinden, es wird also niemals zwei mal cmd_1 nacheinander geschaltet. Bei dir dürfte das Setzen des Attributes do always unkritisch sein, da du keine zyklischen Trigger in der Definition hast.

Gruß

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

nettiger

Halo zusammen,

erstmal Danke für die Hilfe

mit den do always sieht die Sache schonmal ganz gut aus....die Rolladen sind heute andend runter gefahren und ich bin guter Hoffnung, dass sie moirgen früh auch wieder rauf gehen.

Das mit den Uhrzeiten bei Sunset/Sunrise war ein blöder Copy&Paste Fehler......hatte die Zeilen nur immer kopiert und vergessen, aus runrise Sunset zu machen.

Gruß
Jens