Hallo!
Ich schalte meine Rolläden über MQTT mit dem Modul Twilight mit FHEM.
Das Ganze sieht so aus:
define Rollo_BadMQTT MQTT_DEVICE
attr Rollo_BadMQTT IODev mqtt
attr Rollo_BadMQTT devStateIcon UP:shutter_open DOWN:shutter_closed SHADE:shutter_halfopen STOP:shutter_halfopen
attr Rollo_BadMQTT eventMap UP:UP DOWN:DOWN SHADE:SHADE STOP:STOP UPDOWN:UPDOWN LEARN:LEARN
attr Rollo_BadMQTT publishSet UP DOWN STOP SHADE UPDOWN LEARN cmd/jarolift/shutter/7
attr Rollo_BadMQTT room Jarolift
attr Rollo_BadMQTT stateFormat state
attr Rollo_BadMQTT subscribeReading_state stat/jarolift/shutter/7
attr Rollo_BadMQTT webCmd UP:DOWN:STOP:SHADE:UPDOWN:LEARN
[b]define Rollo_BadMQTT_UP DOIF ([{twilight("TC_TWILIGHT","sr_indoor","7:00","7:00")}]) (set Rollo_BadMQTT UP) DOELSEIF ([00:00])
define Rollo_BadMQTT_SHADE DOIF ([{twilight("TC_TWILIGHT","ss_weather","17:00","22:00")}]) (set Rollo_BadMQTT SHADE) DOELSEIF ([00:00])[/b]
Mir geht es nun um die fett markierte Steuerung mit Twilight.
Leider hat mein Dongle wohl Probleme die Funksignale an 10 Rolladen Motoren gleichzeitig abzusetzen. Erschwerend kommt hinzu. dass 2 Rolläden auf "halbgeöffnet" bleiben sollen, was nur durch das Simulieren eines längeren Tastendrucks (2-3 Sekunden) gemacht werden kann.
So öffnen bzw. schließen die Rolläden leider eher rudimentär.
Es gibt doch sicher eine Möglichkeit den ausgegebenen Wert von Twilight je Device um ein paar Sekunden zu verzögern, oder?
Nur habe ich davon leider keinen Plan, wie man das bewerkstelligen könnte.
Plan wäre, jede von Twilight vorgegebene Zeit um +5 Sekunden zu verzögern je Device....
Kann mir dabei bitte jemand helfen?
Vorneweg: m.E. ist es nicht optimal, für jedes Device zwei Logikelemente zu benutzen, um einen simplen Task (der ja bei allen gleich ist bzw. zum gleichen zeitpunkt ausgeführt werden soll, wenn ich das richtig verstanden habe) auszuführen, das ist schlecht wartbar.
Vorschlag: structure benutzen und dann die structure schalten (über ein Logikdevice, ich würde weekdayTimer statt doif nehmen); dabei kann man ein delay angeben, das zwischen den einzelnen Schaltvorgängen liegt.
Hier würde ich mir überlegen, ob es nicht Sinn macht, ein Logiklevel dazwischenzuschalten, das aus dem MQTT-Device ein ROLLO macht (mit dem ROLLO-Modul); das dürfte vermutlich gehen und du kannst anschließend auch zeitgesteuert Zwischenlevel anfahren.
Wenn das klappt, ist evtl. das neue, gerade im Betatest laufend Modul AutoShuttersControl (=> Automatisierung) was für dich ;) .
Das Kernproblem ist ja nicht das Schalten über Twilight...
Das das Ganze unstrukturiert ist gebe ich ja zu.
Trotzdem ändert es mein Kernproblem nicht.
Ich MUSS jedes einzelne Device mit ca. 5 Sekunden Verzögerung schalten...
Oder ginge das auch in einer Zeile so wie:
define AlleRollos_MQTT_UP DOIF ([{twilight("TC_TWILIGHT","sr_indoor","7:00","9:00")}]) (set Rollo_BadMQTT UP), wait 5, (set Rollo_BueroMQTT UP), wait 5, (set Rollo_BadMQTT UP) etc.......... DOELSEIF ([00:00])
"wait" war jetzt nur so ein Begriff für mich.....
Mit Rollo war ich auch am testen, bin ja immernoch dabei mit meinen Jarolift Dongle... Nur kommt da von den Entwicklern leider nicht mehr so viel in letzter Zeit so behelfe ich mir etwas anders (wobei es dort ja nur um die Readings ging in dem anderen Thread)
Mir würde die reine Steuerung erst einmal so mit Twilight reichen. Was ich bräuchte wäre nur dieses "wait 5" bevor der nächste "set" Befehlt ausgeführt wird.
ZitatIch MUSS jedes einzelne Device mit ca. 5 Sekunden Verzögerung schalten...
ZitatVorschlag: structure benutzen und dann die structure schalten (über ein Logikdevice, ich würde weekdayTimer statt doif nehmen); dabei kann man ein delay angeben, das zwischen den einzelnen Schaltvorgängen liegt.
Gruß
Thomas
DOIF hat ein wait Attribut. Ist in der Commandref sehr gut beschrieben.
Das mit DOIF und wait könnte so ähnlich gehen (ich nutze dieses Modul nicht, meine aber dass du statt des DOELSEIF auch schlicht den Runterfahrbefehl in das "Hoch"-DOIF reinnehmen könntest und das Rückstellen um 00:00 Uhr verzichten). Nur dass das wait in ein Attribut gehört (ich finde das völlig unübersichtlich; ist einer der Gründe, warum ich das nicht (mehr) nutze). Sollte aber in einem der unzähligen Anwendungsbeispiele unter verzögerter Ausführung zu finden sein.
Aber wie TomLee bereits ausgeführt hat: der Vorschlag war, alle Rolläden in eine structure zu packen und da dann das Attribut async_delay zu nutzen (hier: auf "5" zu setzen). Siehe https://fhem.de/commandref_DE.html#structure (https://fhem.de/commandref_DE.html#structure)
Dann beschränkt sich das DOIF in beiden Ausführungsteilen auf das Schalten der structure (ein Device-Name).
Habe mir nun mal die Geschichte mit structure angesehen.
Schön und gut
Nur wie verklöppel ich das mit Twilight?
Ich möchte meine Rolläder via Twilight zu der Zeit "sr_indoor bzw. ss_weather" zwischen 7:00 bis 9:00 Uhr bzw. zwischen 17:00 und 21:00 Uhr fahren lassen.
Vielleicht bin ich ja blöd, aber all die Vorschläge von euch beziehen sich doch auf feste Timer und haben mit Twilight nichts zu tun...
Oder stehe ich vollkommen auf dem Schlauch?
Wollte ich eine reine Timersteuerrung wüßte ich denke ich schon wie das geht....
Es soll aber alles nach Twilight laufen, halt nur von Device zu Device mit Verzögerung.....
Aber vielleicht habe ich auch nur eine Lang Leitung....
Nicht vergessen, poste nicht grundlos im Anfängerforum :'(
Genau so wie du es oben schon gemacht hast, nur als Device gibst du die structure an.
puuuuh, ja, so wie es aussieht stand ich etwas auf dem Schlauch
Also
define AlleRollos structure Rolladen Rollo_WohnzimmerTuerMQTT Rollo_WohnzimmerMitteMQTT Rollo_WohnzimmerRechtsMQTT etc.
attr AlleRollos async_delay5
define AlleRollos_UP DOIF ([{twilight("TC_TWILIGHT","sr_indoor","7:00","9:00")}]) (set Rolladen) DOELSEIF ([00:00])
wäre das so richtig?
Nein. Nicht set Rolladen sondern set AlleRollos
Zitatset AlleRollos
Irgendwas muss die structure doch noch auch machen, schätze doch mal "on".
na ihr laßt mich hier aber ganz schön zappeln ;D
define AlleRollos structure Rolladen Rollo_WohnzimmerTuerMQTT Rollo_WohnzimmerMitteMQTT Rollo_WohnzimmerRechtsMQTT etc.
attr AlleRollos async_delay5
define AlleRollos_UP DOIF ([{twilight("TC_TWILIGHT","sr_indoor","7:00","9:00")}]) (set AlleRollos on) DOELSEIF ([00:00])
besser?
Wobei...
"on" sollte eher "up" oder "down" oder "shade" heißen, gleiches Kommando wie vorher, richtig?
Ja natürlich. Die structure ist ja nichts weiter wie alle Rollos zusammen geführt. Deshalb sollte man ja nur Geräte gleichen Typs ein bauen.
Zitat von: CoolTux am 06 Oktober 2018, 05:59:25
Ja natürlich. Die structure ist ja nichts weiter wie alle Rollos zusammen geführt. Deshalb sollte man ja nur Geräte gleichen Typs ein bauen.
So ist es jedenfalls am einfachsten. Es gibt aber auch Möglichkeiten, Readings und Befehle umzumappen, um verschiedene Device-Arten über eine structure gleich zu behandeln. Das ist allerdings etwas, mit dem man sich beschäftigen muß.
...erst einmal vielen Dank Jungs für die Hilfestellung!
Heute Morgen gingen alle Rollos gut hoch, keins ist zu geblieben, wie als ich den Befehl an den Dongle gleichzeitig geschickt hatte.
Und wieder ein wenig mehr dazu gelernt :)
Zitat von: CoolTux am 06 Oktober 2018, 05:59:25
Die structure ist ja nichts weiter wie alle Rollos zusammen geführt. Deshalb sollte man ja nur Geräte gleichen Typs ein bauen.
Wenn statt structure LightScene nutzt ist das mit unterschiedlichen Gerätetypen vllt. etwas einfacher, LightScene kennt auch das async_delay Attribut.
Damit habe ich meinen Morgens & Abends Rollo/Lampen Zoo unter ein gemeinsammes Dach gepackt :)