[Gelöst] Dimmer: Hochfahren Helligkeit geht nicht, wenn Ausschaltbedingung aktiv

Begonnen von bmwfan, 02 November 2021, 14:52:12

Vorheriges Thema - Nächstes Thema

bmwfan

Hallo,
ich verwende einen Shelly Dimmer in Verbindung mit einem Tradfry BWM, beide über zigbee2mqtt an einen MQTT2-Server angebunden, um in der Ankleide die Deckenstrahler hochzudimmen. Nach einigen Versuchen geht es inzwischen, aber wenn ich eine Ausschaltbedingung über wait in den entsprechenden DOELSEIF-Zweig einfüge, wird nicht mehr hochgedimmt.
BWM: MQTT2_zigbee_0xb4e3f9fffe752b33
Shelly Dimmer: MQTT2_shellydim2_Ankleide

Das DOIF:
Internals:
   DEF        ([MQTT2_zigbee_0xb4e3f9fffe752b33:"true"] and [?MQTT2_shellydim2_Ankleide:state] ne "on") (set MQTT2_shellydim2_Ankleide pct 8)
DOELSEIF ([MQTT2_shellydim2_Ankleide:pct] eq "8") (set MQTT2_shellydim2_Ankleide pct {([MQTT2_shellydim2_Ankleide:pct])+4})
DOELSEIF ([MQTT2_shellydim2_Ankleide:"input_0"] and [?MQTT2_shellydim2_Ankleide:pct] > 5) (set MQTT2_shellydim2_Ankleide pct 5) (set MQTT2_shellydim2_Ankleide off)
DOELSEIF ([MQTT2_shellydim2_Ankleide:"input_0"] and [?MQTT2_shellydim2_Ankleide:pct] == 5) (set MQTT2_shellydim2_Ankleide pct 8)
   FUUID      606da680-f33f-6b6f-f0e8-3bd85492bdf11e46
   MODEL      FHEM
   NAME       di_Licht_Ankleide
   NOTIFYDEV  MQTT2_zigbee_0xb4e3f9fffe752b33,MQTT2_shellydim2_Ankleide,global
   NR         1797
   NTFY_ORDER 50-di_Licht_Ankleide
   STATE      cmd_2
   TYPE       DOIF
   VERSION    24905 2021-09-01 18:35:54
   READINGS:
     2021-11-02 14:45:29   Device          MQTT2_zigbee_0xb4e3f9fffe752b33
     2021-11-02 14:42:45   cmd             2
     2021-11-02 14:42:45   cmd_event       MQTT2_shellydim2_Ankleide
     2021-11-02 14:42:45   cmd_nr          2
     2021-11-02 14:42:45   e_MQTT2_shellydim2_Ankleide_events pct: 68
     2021-11-02 14:42:45   e_MQTT2_shellydim2_Ankleide_pct 68
     2021-11-02 14:45:29   e_MQTT2_zigbee_0xb4e3f9fffe752b33_events occupancy: false
     2021-11-02 14:34:03   mode            enabled
     2021-11-02 14:42:45   state           cmd_2
     2021-11-02 14:42:46   wait_timer      no timer
   Regex:
     accu:
     collect:
     cond:
       MQTT2_shellydim2_Ankleide:
         0:
         1:
           pct        ^MQTT2_shellydim2_Ankleide$:^pct:
         2:
           &STATE     ^MQTT2_shellydim2_Ankleide$
         3:
           &STATE     ^MQTT2_shellydim2_Ankleide$
       MQTT2_zigbee_0xb4e3f9fffe752b33:
         0:
           &STATE     ^MQTT2_zigbee_0xb4e3f9fffe752b33$
         1:
         2:
         3:
   attr:
     cmdState:
     repeatcmd:
       0
       1
       0
       0
     repeatsame:
       0
       15
       0
       0
     wait:
       0:
         0
       1:
         0
       2:
         0
         1
       3:
         0
     waitdel:
   condition:
     0          ::EventDoIf('MQTT2_zigbee_0xb4e3f9fffe752b33',$hash,'true',1) and ::ReadingValDoIf($hash,'MQTT2_shellydim2_Ankleide','state') ne "on"
     1          ::ReadingValDoIf($hash,'MQTT2_shellydim2_Ankleide','pct') eq "8"
     2          ::EventDoIf('MQTT2_shellydim2_Ankleide',$hash,'input_0',1) and ::ReadingValDoIf($hash,'MQTT2_shellydim2_Ankleide','pct') > 5
     3          ::EventDoIf('MQTT2_shellydim2_Ankleide',$hash,'input_0',1) and ::ReadingValDoIf($hash,'MQTT2_shellydim2_Ankleide','pct') == 5
   do:
     0:
       0          set MQTT2_shellydim2_Ankleide pct 8
     1:
       0          set MQTT2_shellydim2_Ankleide pct {([MQTT2_shellydim2_Ankleide:pct])+4}
     2:
       0          set MQTT2_shellydim2_Ankleide pct 5
       1          set MQTT2_shellydim2_Ankleide off
     3:
       0          set MQTT2_shellydim2_Ankleide pct 8
     4:
   helper:
     DEVFILTER  ^global$|^MQTT2_shellydim2_Ankleide$|^MQTT2_zigbee_0xb4e3f9fffe752b33$
     NOTIFYDEV  global|MQTT2_shellydim2_Ankleide|MQTT2_zigbee_0xb4e3f9fffe752b33
     event      occupancy: false
     globalinit 1
     last_timer 0
     sleepdevice MQTT2_shellydim2_Ankleide
     sleepsubtimer -1
     sleeptimer -1
     timerdev   MQTT2_shellydim2_Ankleide
     timerevent pct: 8
     triggerDev MQTT2_zigbee_0xb4e3f9fffe752b33
     timerevents:
       pct: 8
       pct
     timereventsState:
       pct: 8
       pct
     triggerEvents:
       occupancy: false
     triggerEventsState:
       occupancy: false
   internals:
   readings:
     all         MQTT2_shellydim2_Ankleide:pct
   trigger:
     all         MQTT2_zigbee_0xb4e3f9fffe752b33 MQTT2_shellydim2_Ankleide
   uiState:
   uiTable:
Attributes:
   comment
cmd1: Auf Bewegungsmeldung anschalten. Start-pct muss identisch cmd2 und cmd 4 sein
cmd2: Hochfahren nach Rampe ab Start-pct (cmd 1) in repeatsame-Schrittzahl.
cmd3: Tasterbetätigung bei eingeschaltetem Shelly
cmd4: Tasterbetätigung bei ausgeschaltetem Shelly
Problem: Ausschaltkommande im cmd 2 führt zu versagen der Rampe!!
   do         always
   repeatcmd  0:1:0:0
   repeatsame 0:15:0:0
   room       2.5_OG_Ankleide,9.8.1_DOIF
   wait       0:0:0,1:0


Füge ich in den Zweig
DOELSEIF ([MQTT2_shellydim2_Ankleide:pct] eq "8") (set MQTT2_shellydim2_Ankleide pct {([MQTT2_shellydim2_Ankleide:pct])+4})

noch ein Ausschaltbefehl, mit wait verzögert, ein, wird nicht mehr gedimmt. Die Helligkeit bleibt bei der Einschaltbedingung 8 stehen.
DOELSEIF ([MQTT2_shellydim2_Ankleide:pct] eq "8") (set MQTT2_shellydim2_Ankleide pct {([MQTT2_shellydim2_Ankleide:pct])+4}) (set MQTT2_shellydim2_Ankleide off)
   repeatcmd  0:1:0:0
   repeatsame 0:15:0:0   
   wait       0:0,300:0,1:0


Kann mir jemand weiterhelfen? Geht die Logik vielleicht in Verbindung mit repeatsame und repeatcmd nicht?

Grüße Jürgen
Synology DS720+ mit Docker-Container und Haupt-FHEM, HM-LAN, Jalousienaktoren HmWired, Shelly-Devices; Raspi 3B+ mit piVCCU ohne FHEM-Instanz, CUL, JeeLink; Raspi 3B+ mit FHEM und HMUARTUSB,  Raspi 3B+ mit HMUARTGPIO, 1-wire, ebusd

Damian

Es sieht alles unnötig kompliziert aus.

Hat der Shellydimmer keinen Befehl zum langsamen Dimmen?

Wenn nicht, dann kommt man evtl. auch mit einer Zeile aus: https://forum.fhem.de/index.php/topic,90571.msg1174668.html#msg1174668
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

bmwfan

Hallo Damian,

ist wirklich sehr kompliziert, aber es läuft soweit.
Langsames Dimmen: Wenn es den Befehl gibt, kenne ich ihn nicht. Muss mal in den Shelly-Foren recherchieren.

Kannst Du sagen, warum das DOELSEIF ([MQTT2_shellydim2_Ankleide:pct] eq "8") (set MQTT2_shellydim2_Ankleide pct {([MQTT2_shellydim2_Ankleide:pct])+4}) (set MQTT2_shellydim2_Ankleide off) nicht geht? Muss evtl. bei repeatsame auch dieser Fall (zweites set mit Ausschaltbefehl) berücksichtigt werden?

Gruß Jürgen
Synology DS720+ mit Docker-Container und Haupt-FHEM, HM-LAN, Jalousienaktoren HmWired, Shelly-Devices; Raspi 3B+ mit piVCCU ohne FHEM-Instanz, CUL, JeeLink; Raspi 3B+ mit FHEM und HMUARTUSB,  Raspi 3B+ mit HMUARTGPIO, 1-wire, ebusd

Damian

Zitat von: bmwfan am 02 November 2021, 18:05:03

Kannst Du sagen, warum das DOELSEIF ([MQTT2_shellydim2_Ankleide:pct] eq "8") (set MQTT2_shellydim2_Ankleide pct {([MQTT2_shellydim2_Ankleide:pct])+4}) (set MQTT2_shellydim2_Ankleide off) nicht geht? Muss evtl. bei repeatsame auch dieser Fall (zweites set mit Ausschaltbefehl) berücksichtigt werden?


Kann ich dir nicht sagen, vermutlich wird der laufende Timer durch ein Ereignis, welches dazwischen funkt und zu einem anderen Zweig führt, unterbrochen.
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

bmwfan

Hab es mit Deinem Vorschlag
Zitatdefmod di_dimm DOIF {["button:on"];;@{$_pct}=(10,35,65,80,90,100);;set_Exec("timer",1,'fhem_set"lamp pct ".$_pct[$count]','$count < 6')}
teilweise (das hochdimmen) zum laufen gebracht, wenngleich ich mit Perl so meine Schwierigkeiten habe.  ;)

{if (["MQTT2_shellydim2_Ankleide:input_0"] and [?MQTT2_shellydim2_Ankleide:state] eq "off") {@{$_pct}=(4,9,19,35,50,75);set_Exec("AnkleideTimer",1,'fhem_set"MQTT2_shellydim2_Ankleide pct ".$_pct[$count]','$count < 6')
}
else {fhem_set("MQTT2_shellydim2_Ankleide pct 3"); set_Exec("Aus3",1,'fhem_set("MQTT2_shellydim2_Ankleide off")')}}


Leider war der Versuch am Ende nicht erfolgreich, da der Shelly die Eigenart hat, beim Einschalten auf den zuletzt gespeicherten PCT-Wert zu gehen, auch wenn ein anderer Wert im set-Befehl steht. Eingeschalten wird mit der zuletzt eingestellten Helligkeit und dann erst wird die neue Helligkeit übernommen. Damit kann natürlich eine Dimmfunktion am Morgen nicht umgesetzt werden. Ich habe das dadurch umgangen, dass ich beim Ausschalten erst auf einen niedrigen pct-Wert gegangen bin und dann erst ausgeschalten habe. Eine Erweiterung der Logik, dass nach einer gewissen Zeit (5 Min) automatisch ausgeschalten wurde, habe ich dann aber nicht hinbekommen und habe an meinem ersten Versuch weitergemacht und ihn vereinfacht.

(([MQTT2_zigbee_0xb4e3f9fffe752b33:"true"] or [MQTT2_shellydim2_Ankleide:"input_0"]) and [?MQTT2_shellydim2_Ankleide:state] ne "on")
(set MQTT2_shellydim2_Ankleide pct {([MQTT2_shellydim2_Ankleide:pct])+4}) ##Bewegung oder Schalter EIN: Licht hochdimmen
DOELSEIF ([MQTT2_shellydim2_Ankleide:"input_0"] and [?MQTT2_shellydim2_Ankleide:state] eq "on")
(set MQTT2_shellydim2_Ankleide pct 5) (set MQTT2_shellydim2_Ankleide off) ## Schalter AUS: Licht auf Einschalthelligkeit setzen und dann Ausschalten


Auch hier bekomme ich das automatsiche Ausschalten nicht mehr eingebaut. Wenn ich cmd1 um ein (set MQTT2_shellydim2_Ankleide off) sowie ein entsprechendes wait erweitere habe ich das Problem, dass wieder mit der letzten Helligkeit eingeschalten wird. Erweitere ich cmd1 um (set MQTT2_shellydim2_Ankleide pct 5) wird heruntergefahren, aber nicht mehr ausgeschalten.

Wie bekomme ich beides unter einen Hut?

Grüße Jürgen


Synology DS720+ mit Docker-Container und Haupt-FHEM, HM-LAN, Jalousienaktoren HmWired, Shelly-Devices; Raspi 3B+ mit piVCCU ohne FHEM-Instanz, CUL, JeeLink; Raspi 3B+ mit FHEM und HMUARTUSB,  Raspi 3B+ mit HMUARTGPIO, 1-wire, ebusd

Damian

Um herauszufinden, warum etwas funktioniert oder nicht funktioniert, muss man Events (aus dem Eventmonitor) und list des Moduls von diesem Zustand sehen.
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

bmwfan

Habe es jetzt hinbekommen, war aber eine schwere Geburt.  ;)

{if (([MQTT2_zigbee_0xb4e3f9fffe752b33:"true"] or [MQTT2_shellydim2_Ankleide:"input_0"]) and [?MQTT2_shellydim2_Ankleide:state] ne "on")
{@{$_pct}=(8,12,19,30,45,75);
set_Exec("Ein1",0,'fhem_set("MQTT2_shellydim2_Ankleide pct 5")');
set_Exec("AnkleideTimer",1,'fhem_set"MQTT2_shellydim2_Ankleide pct ".$_pct[$count]','$count < 6');
set_Exec("Aus1",300,'fhem_set("MQTT2_shellydim2_Ankleide pct 5")');
set_Exec("Aus2",301,'fhem_set("MQTT2_shellydim2_Ankleide off")')}
}
{if (([MQTT2_shellydim2_Ankleide:"input_0"]) and [?MQTT2_shellydim2_Ankleide:state] eq "on") {set_Exec("Aus1",0,'fhem_set("MQTT2_shellydim2_Ankleide pct 5")');
set_Exec("Aus2",1,'fhem_set("MQTT2_shellydim2_Ankleide off")')}
}


Als Attribut nur do always.

Frage: Kann in set_Exec("AnkleideTimer",1,'fhem_set"MQTT2_shellydim2_Ankleide pct ".$_pct[$count]','$count < 6'); die Zeit kleiner als 1 Sekunde eingestellt werden und wenn ja, als 0,5 oder 0.5? Ich möchte gerne mehr Stufen verwenden und dann dauert es zu lange, bis die Helligkeit auf Max. steht.

Grüße Jürgen
Synology DS720+ mit Docker-Container und Haupt-FHEM, HM-LAN, Jalousienaktoren HmWired, Shelly-Devices; Raspi 3B+ mit piVCCU ohne FHEM-Instanz, CUL, JeeLink; Raspi 3B+ mit FHEM und HMUARTUSB,  Raspi 3B+ mit HMUARTGPIO, 1-wire, ebusd

Damian

Die Sekundenangaben bei set_Exec sind nicht auf ganze Zahlen beschränkt, man kann also auch

2.3 oder 0.1 angeben.

Im Perlmodus gibt es kein do always Attribut.
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

bmwfan

Danke für die schnelle Antwort.

Jetzt geht alles wie gewünscht.

do always stand noch in den Atributen, da das DOIF ursprünglich nicht im Perl-Modus erstellt wurde.  Habe es jetzt entfernt.
Synology DS720+ mit Docker-Container und Haupt-FHEM, HM-LAN, Jalousienaktoren HmWired, Shelly-Devices; Raspi 3B+ mit piVCCU ohne FHEM-Instanz, CUL, JeeLink; Raspi 3B+ mit FHEM und HMUARTUSB,  Raspi 3B+ mit HMUARTGPIO, 1-wire, ebusd