DOIF um nach Signal an Rolladenmotor zu "warten" [gelöst]

Begonnen von DasMoritz, 24 Februar 2021, 12:07:03

Vorheriges Thema - Nächstes Thema

DasMoritz

Hallo zusammen,

ich habe dank @Sidey und dem Dooya-Modul meine Rolladen in FHEM abbilden können.
Es handelt sich um Dooya-Rolladenmotoren, die ausschließlich per Funk angesteuert werden können.

Mein Problem ist nun folgendes:
Die Rolladen möchte ich gerne alle in Alexa zur Verfügung haben (funktioniert soweit) und dort Gruppen bilden wie z.B. "Erdgeschoss", "Obergeschoss" etc. soweit auch in Ordnung.
Wenn ich die Gruppe "Erdgeschoss" mit ihren 6 Rolladen nun aber anspreche, dann erfolgt die Signalübermittlung "zeitgleich" an alle Rolläden, sodass ab und zu mal ein Signal nicht ankommt.
Ergebnis ist dann ein Rolladen der nicht korrekt reagiert.

Ich möchte nun mit DOIF jedem Rolladen einen Wert mitgeben, der "gewartet" wird.
Beispiel: Es kommt der Befehl "Alexa Rolladen Erdgeschoss 50%", dann:

Rollo Flur --> "Zu-Befehl" --> "Runningtime" --> "Stop-Befehl" --> Gehe zum nächsten Rolladen
Rollo Küche --> "Zu Befehl" --> "Runningtime" --> "Stop-Befehl" --> Gehe zum nächsten Rolladen
usw.
Die Runningtime wird dabei durch das Dooya-Modul berechnet.

Im Idealfall soll mit der Verarbeitung des nächsten Rolladens also solange gewartet werden, wiu der aktuelle Rolladen "in Bewegung" ist.
Wie kann ich das ganze per "DOIF" lösen bzw. alternativ lösen?

Meine "letzte Lösung" wäre das im ioBroker mittels Blockly und Verzögerungen zu lösen, dann habe ich jedoch pro Rollo 6 Programme:
Rollo Flur zu
Rollo Flur auf
Rollo Flur stop
Rollo Flur 25%
Rollo Flur 50%
Rollo Flur 75%

Danke,
Moritz

Danke und Gruß,
Moritz




frober

#1
In DOIF kannst das mit dem attr wait umsetzen (siehen commandref).
Edit: https://fhem.de/commandref_DE.html#DOIF_wait

Wie hast du die Rolladen zusammengefasst?

Du darfst im DOIF keine Gruppe ansprechen, sondern jeden einzeln. Per Alexa kannst du einen "Gruppenname" nennen, auf den das DOIF reagiert und dann mit Verzögerung jeden einzelnen Rollanden steuert.

Raspi 3b mit Raspbian Bullseye und relativ aktuellem Fhem,  FS20, LGW, PCA301, Zigbee, MQTT, MySensors mit RS485(CAN-Receiver) und RFM69, etc.,
einiges umgesetzt, vieles in Planung, smile

********************************************
...man wächst mit der Herausforderung...

DasMoritz

Hi,

Danke erstmal!
Ich habe die Rolladen im FHEM  gar nicht zusammengefasst sondern ich bilde in Alexa Gruppen, welche die Rolladen enthalten.
Es gibt also zehn Rollos in FHEM, die ich Alexa in der Gruppe "Erdgeschoss" gebündelt habe.

Mir fehlt trotz Blick in die commandref irgendwie der "Ansatz" um das abzubilden?

frober

Ich benutze die Module alle nicht, wenn du aber in Alexa Gruppen definiert hast, wird alles über Alexa gesteuert.
Dann kannst du NICHT mit Fhem eine Verzögerung erreichen.

Wenn, dann must du alles über Fhem steuern. D.h. ein "Signalwort" für jede "Gruppe" von Alexa an Fhem senden, das dann DOIF auslöst und die einzelnen Rolladen steuert.
Raspi 3b mit Raspbian Bullseye und relativ aktuellem Fhem,  FS20, LGW, PCA301, Zigbee, MQTT, MySensors mit RS485(CAN-Receiver) und RFM69, etc.,
einiges umgesetzt, vieles in Planung, smile

********************************************
...man wächst mit der Herausforderung...

DasMoritz

Hi,

hm, da bei mir dazwischen noch der ioBroker hängt, macht es vermutlich mehr Sinn das alles via Blockly im ioBroker abzubilden... Vermute ich mal...

frober

Wie wär's, wenn du mal beschreibst wie du alles steuerst. Wofür ist der ioBroker?

Zufällig habe ich deine anderen Posts gesehen. Du steuerst für Rolläden mit einem Signalduino aus Fhem und willst sie nacheinander fahren. Wo ist nun das Problem?

Wobei DOIF und wait wahrscheinlich für dich das einfachste wäre.
Raspi 3b mit Raspbian Bullseye und relativ aktuellem Fhem,  FS20, LGW, PCA301, Zigbee, MQTT, MySensors mit RS485(CAN-Receiver) und RFM69, etc.,
einiges umgesetzt, vieles in Planung, smile

********************************************
...man wächst mit der Herausforderung...

DasMoritz

#6
Hi @frober,

klar, gerne. Ich wollte es möglichst einfach halten und habe es daher nicht beschrieben - sorry.

Also die "Befehlskette" ist gedanklich im Moment folgende: Alexa --> ioBroker* --> FHEM --> SDuino

*den ioBroker können wir zur Ansteuerung der Rolladen gerne auch "ausklammern", er läuft aber so oder so und ich bin mit dem ioBroker und Blockly deutlich "vertrauter" als mit FHEM.

Was ist bisher geschehen?
Ich habe in FHEM per Dooya Modul / SDuino insgesamt 4 Rolläden angelernt und mittels Adapter an den ioBroker übertragen. Im ioBroker habe ich die Geräte per IoT Adapter in Richtung Alexa übertragen und dort als "Level.blind" zur Verfügung gestellt, so kann ich sowohl mit Prozentwerten als auch mit "an" und "aus" steuern.

Sofern ich einzelne Rolladen anspreche funktioniert dies hervorragend!

In Alexa habe ich dann eine Gruppe aus diesen 4 Rolläden gebildet und möchte diese gerne ansteuern. Das Ansteuern kann dabei sowohl über Prozentwerte erfolgen (Alexa, Rolläden Wohnbereich 50%) oder aber per Fahrbefehl bis zum Anschlag (Alexa, Rolläden Wohnbereich aus).

Das Problem ist nun, dass sich die Signale die der SDuino senden soll durch die Gruppe bzw. "überlagern", wie äußert sich das konkret?

Beispiel 1:
Wenn ich beispielsweise die Gruppe auf 25% setzen möchte, dann bekommt in 3 von 10 Fällen einer der Rolläden keinen Stop-Befehl nach X Sekunden sondern fährt komplett herunter.

Beispiel 2:
Wenn ich die Gruppe komplett öffnen möchte (=0%) dann entsteht auch hier wieder das Phänomen, dass gelegentlich einer der Rolläden keinen Befehl bekommt und auf seiner Position verbleibt.

Meine Vermutung ist dabei, dass sich quasi der "Runter-Befehl" von Rollo 4 mit dem "Stop-Befehl" von Rollo 1 überlagert und daher nicht ankommt.

Problematisch ist in beiden Fällen insbesondere, dass der gesetzte Wert in FHEM dadurch dann nicht mit dem tatsächlichen Wert übereinstimmt. In FHEM steht das Rollo beispielsweise auf 0%, es ist aber tatsächlich noch auf 50% da der Befehl nicht "angekommen" ist.

Wie geschrieben: Wenn ich jeden Rolladen einzeln "anspreche" funktioniert es einwandfrei. Da wir im Wohnbereich aber 6 Rolläden haben, ist das keine gute Option.

Meine Idee war daher als Workaround über "Blockly" zu gehen und für jedes Rollo entsprechend sechs Scripte anzulegen, in FHEM wären dann nur die Befehle je Rollo runter, stop, hoch, die Verzögerungen würde ich in Blockly oder Alexa lösen können.

Natürlich wäre mir eine funktionierende Lösung via FHEM lieber, sodass ich auf solche "Verrenkungen" mit Blockly verzichten kann...
Wenn ich beispielsweise auf jedes Rollo dein "DOIF" mit Wait so legen könnte, dass immer erst der jeweilige Befehl abgearbeitet wird und dann der nächste Befehl für das nächste Rollo kommt, dann wäre das schon sehr hilfreich.

Danke,
Moritz




frober

Erstmal zum Verständnis:
Fhem ist EIN Prozess, d.h. es wird Befehl für Befehl abgearbeitet. Es gibt die Möglichkeit, dass Module nonBlocking nutzen. Dann wird der Prozess geklont für diese Aufgabe um den Hauptprozess nicht zu blockieren.

Das bedeutet für dich, die Sendebefehle können sich nicht überlagern, sondern werden nacheinander abgearbeitet.
Dafür gibt es ein anderes Problem, wenn ioBrocker/Alexa sendet, bekommt evtl. Fhem das nicht mit, da es gerade beschäftigt ( blockiert) ist. Das Gleiche kann umgekehrt beim Empfang über den Signalduino passieren. Wenn die Rolladen bidirektional arbeiten ( auch den Empfang bestätigen) sollte dies  dadurch verhindert werden.

Daher ist es sinnvoll, über Alexa einen "Gruppenbefehl" zu senden der dann das DOIF auslöst und nicht alle Rolläden einer Gruppe gleichzeitig.


Jetzt zu DOIF , ich benutze es nicht, bzw. nicht mehr. Viele nutzen es, weil es sehr viele Möglichkeiten innerhalb eines Moduls bietet. Ich würde es erstmal mit wait probieren, falls dies überhaupt nötig ist (siehe oben " Abarbeitung nacheinander".)

So wie du es dir vorstellst, nächsten Rolladen erst nach Beendigung der Fahrt zu starten,  wird es mit EINEM DOIF komplex,  da wirst du evtl. mehrere brauchen.. Am besten schreibst du hierzu direkt im Unterforum.
Raspi 3b mit Raspbian Bullseye und relativ aktuellem Fhem,  FS20, LGW, PCA301, Zigbee, MQTT, MySensors mit RS485(CAN-Receiver) und RFM69, etc.,
einiges umgesetzt, vieles in Planung, smile

********************************************
...man wächst mit der Herausforderung...

DasMoritz

Hi,

okay, Danke dir!

Was mich halt wundert ist folgendes: Ich bekomme per Gruppenbefehl in Alexa --> ioBroker --> FHEM das "Set" für mehrere Rolladen zu 100% korrekt gesetzt, egal ob ich auf 0% oder auf 100% oder einen Zwischenwert gehen möchte.

Die Übermittlung von Alexa an ioBroker an FHEM scheint es also nicht zu sein, da die Werte immer korrekt gesetzt werden. Ggf. bekommt aber der setzende ioBroker nicht mit das FHEM gerade beschäftigt ist und FHEM rafft nicht, dass es einen neuen Wert hat - also genau das was du beschrieben hast.

Die Rolläden arbeiten bidirektional und bestätigen auch das Signal.

Vielleicht wäre es auch mal einen Test wert eine Gruppe in FHEM zu erstellen um die vier Rolläden mit x% anzusteuern um zu prüfen, ob es dort zu den Problemen kommt. Ich habe aber keinen Schimmer wie ich in FHEM eine Gruppe anlegen kann :-/

Aber: Ich glaube wir kommen einer Lösung näher :-)

frober

Mit structure funktioniert das, so habe ich das auch.
Raspi 3b mit Raspbian Bullseye und relativ aktuellem Fhem,  FS20, LGW, PCA301, Zigbee, MQTT, MySensors mit RS485(CAN-Receiver) und RFM69, etc.,
einiges umgesetzt, vieles in Planung, smile

********************************************
...man wächst mit der Herausforderung...

DasMoritz

Hi,

okay.
Kannst du das ein wenig genauer beschreiben bzw. mal ein Beispiel posten?
Ich bin was FHEM angeht leider einfach total "Lost in Space".

Danke dir auf jeden Fall, dass du dich dem Thema so an nimmst!

Danke und Gruß,
moritz

frober

define WZ_Roll_alle structure room WZ_Roll.1 WZ_Roll.2 WZ_Roll.3 WZ_Roll.4


https://fhem.de/commandref_DE.html#structure


Wie wär's Mal mit der Suche, Forum, Wiki, commandref und im Internet gibt es auch Blocks zu dem Thema....

Bzgl. Rolladensteuerung gibt es noch ROLLO als Hilfsmodul und ASC ( auto shutter control) zum automatisieren...
Raspi 3b mit Raspbian Bullseye und relativ aktuellem Fhem,  FS20, LGW, PCA301, Zigbee, MQTT, MySensors mit RS485(CAN-Receiver) und RFM69, etc.,
einiges umgesetzt, vieles in Planung, smile

********************************************
...man wächst mit der Herausforderung...

DasMoritz

Moin,

hier mal eine kleine Zwischenmeldung:
defmod Rollos_Erdgeschoss structure room Buero Flur GaesteWC
attr Rollos_Erdgeschoss alias Rollos_Erdgeschoss
attr Rollos_Erdgeschoss async_delay 3


Nachdem ich das "async_delay 3" eingebaut habe, funktioniert es nun anscheinend sehr gut.
Ohne "async delay" wurde von den drei Rollos immer mal eines nicht korrekt angefahren und es hat keinen Stop-, Hoch- oder Herunterfahrbefehl bekommen.
Mit dem async_delay werden die Rolladen nun mit 3 Sekunden getrennt, so kann ich auch minimale Prozentwerte (von 0% auf 10%) anscheinend korrekt ansteuern.

Ich teste das mal weiter :-)

DasMoritz

Moin,

so, ich wollte noch einmal eine Rückmeldung geben.
Ich habe nun unsere 8 Rolläden im Erdgeschoss in einer Structure in FHEM abgebildet und async_delay auf 1 Sek. gestellt.
Bei 3 Sek. hatte ich gelegentlich mal wieder den Effekt, dass ein Rollo kein Signal bekommen hat.

Ergebnis ist nun, das alle 8 Rollos in einem gestrigen Test ca. 20x komplett fehlerfrei gearbeitet haben, top :-)
Ich sehe mir mal das Thema ASC an, das scheint ja auch noch spannende Funktionen zu bieten.

Danke bis hier hin,
Moritz

frober

Das freut mich für dich.
Setze bitte den Thread auf [gelöst].

Im ersten Post den Betreff bearbeiten.
Raspi 3b mit Raspbian Bullseye und relativ aktuellem Fhem,  FS20, LGW, PCA301, Zigbee, MQTT, MySensors mit RS485(CAN-Receiver) und RFM69, etc.,
einiges umgesetzt, vieles in Planung, smile

********************************************
...man wächst mit der Herausforderung...