44_ROLLO: Modul zur präzisen Steuerung von Rollläden

Begonnen von KernSani, 14 Januar 2019, 00:11:37

Vorheriges Thema - Nächstes Thema

RPunkt

Hallo liebe Leute,
ich bin auf euer Modul gestossen und habe eine eher Anfängerfrage:
Im Wiki steht:
ZitatDas eigentliche ansteuern des Rollo muss mit FHEM Befehlen ausführbar sein, diese Modul ist "nur" eine Oberfläche/Bedienmodul, kein Hardwaremodul.
Wie verlinke ich aber nun das ROLLO- Modul mit den eigentlichen Befehlen?
Also mal angenommen ich habe ein DEVICE "Gartenfenster", dass über Fhem mit den Befehlen "up down stop top bottom" (Type Kopp_FC) zu bedienen ist.
Dieses Device soll nun über ROLLO bedient werden - wo oder wie bekomme ich die Verlinkung/Verbindung hin?

Gruß,
RPunkt

KernSani

Zitat von: RPunkt am 02 Februar 2019, 13:51:34
Hallo liebe Leute,
ich bin auf euer Modul gestossen und habe eine eher Anfängerfrage:
Im Wiki steht:Wie verlinke ich aber nun das ROLLO- Modul mit den eigentlichen Befehlen?
Also mal angenommen ich habe ein DEVICE "Gartenfenster", dass über Fhem mit den Befehlen "up down stop top bottom" (Type Kopp_FC) zu bedienen ist.
Dieses Device soll nun über ROLLO bedient werden - wo oder wie bekomme ich die Verlinkung/Verbindung hin?

Gruß,
RPunkt
Schau dir mal die Attribute rl_command.* an. Da schreibst du z.B.
set myKopp_FC up rein, Top und bottom wird von ROLLO selbst gesteuert...


Kurz, weil mobil
RasPi: RFXTRX, HM, zigbee2mqtt, mySensors, JeeLink, miLight, squeezbox, Alexa, Siri, ...

87insane

Hallo zusammen,

nutze das Modul nun schon ein paar monate und habe viel getestet. Nun ist es so, dass ich sonoff Schalter nutze, die mit espeasy geflasht sind. So pi mal auge stimmt die Position der rolladen. Allerdings denke ich geht es besser. Die Zeiten habe ich so genau wie möglich angepasst. Teilweise nach 2 Fahrten ändert sich aber das ganze schon.

Ich selber kann nur für espeasy sprechen. Aber da die schalter im wlan hängen und ich leider auch repeater nutze, habe ich an gewissen Stellen Delays. Bis ein schlater hinter den repeatern anfängt das Rollo laufen zu lassen, ist eine gewisse zeit um. Da es sich hier aber um Netzwerke handelt, ist der Zeitraum nicht immer der gleiche. Bedeutet, das Rollo in der küche zb soll auf pct 80 anlaufen. Aber es wird erst mal in einen Connection Error laufen und dann starten. Also noch ein paar ms mehr. Naja lange rede kurzer Sinn... Das Rollo steht dan eher auf pct 50 als 80.

Nun habe ich mir gedanken gemacht und wollte mal fragen ob es irgendwie möglich ist, dem Modul zu sagen, bitte warte das du eine Bestätigung bekommen hast für den befehlsempfang (Event) und erst dann sarte den Timer für die Fahrt. Das würde meine Rollo Positionen sicher um einiges verbessern.

Danke für Ideen oder Infos!

KernSani

Zitat von: 87insane am 18 Februar 2019, 18:33:43
Nun habe ich mir gedanken gemacht und wollte mal fragen ob es irgendwie möglich ist, dem Modul zu sagen, bitte warte das du eine Bestätigung bekommen hast für den befehlsempfang (Event) und erst dann sarte den Timer für die Fahrt. Das würde meine Rollo Positionen sicher um einiges verbessern.
Als Lösung könnte ich mir vorstellen, dass ich ein Attribut "rl_startEvent" o.ä. einbaue, wenn dieses gesetzt ist wartet ROLLO bis dieses Event ausgelöst wird und startet erst dann den Timer, allerdings dürfte das selbe Problem ja dann beim Stop eintreten (also Stop-CKommando ist lange unterwegs und der ROLLO fährt deshalb weiter als geplant).
Auf der anderen Seite fällt es mir schwer zu glauben, dass Laufzeiten in einem Netzwerk so stark schwanken... Könnte es nicht andere Gründe geben (irgendwelche blocking calls in FHEM, die das System ausbremsen o.ä.?)
 
RasPi: RFXTRX, HM, zigbee2mqtt, mySensors, JeeLink, miLight, squeezbox, Alexa, Siri, ...

87insane

Das würde in meinen Augen helfen. Genau in diese Richtung meinte ich das. Der comand müsste dann vom jeweiligem Nutzer eingegeben werden, wenn benötigt und fertig.

Wenn ein Rollo hinter den repeatern das erste ich lebe sendet ist es auch erst mal da. Wie lange genau weiß ich nicht. Allerdings über 1std. Also genug Zeit um bei rückantwort schnell genug zu sein. Als rückantwort bräuchte ich nichts. Aber ggf gibt es auch dafür einen Sinn.

Geile idee und danke, das du es ernst nimmst :)

Gesendet von meinem LG-H850 mit Tapatalk


KernSani

Zitat von: 87insane am 19 Februar 2019, 21:24:38
Das würde in meinen Augen helfen. Genau in diese Richtung meinte ich das. Der comand müsste dann vom jeweiligem Nutzer eingegeben werden, wenn benötigt und fertig.

Wenn ein Rollo hinter den repeatern das erste ich lebe sendet ist es auch erst mal da. Wie lange genau weiß ich nicht. Allerdings über 1std. Also genug Zeit um bei rückantwort schnell genug zu sein. Als rückantwort bräuchte ich nichts. Aber ggf gibt es auch dafür einen Sinn.

Geile idee und danke, das du es ernst nimmst :)
Ich habe das mal ganz rudimentär umgesetzt, um zu sehen, ob es hilft. Wenn's klappt kann ich das auch ordentlich machen. So wie ich mir das ursprünglich gedacht hatte würde größere Umbau-Massnahmen erfordern daher folgendes Konzept:
Mit dem neuen Attribut rl_wakeUpCmd musst du ein Kommando definieren, mit dem du den Rollo aufweckst (z.b. sowas wie "set derRollo stop")
Im neuen Attribut rl_startEvent definierst du in der Form Device:Event das event, dass das tatsächliche Fahren des Rollos antriggern soll (Beispiel wäre: "derRollo:stopped")
Wenn du nun (z.B.) den Rollo runterfahren willst, schickt der erstmal das wakeUpCommand und wartet dann, bis das startEvent eintrifft, erst dann macht er die ganze Positionsberechnung und startet den Rollo tatsächlich.
Das Ganze ist sehr basic implementiert (keine checks usw...) hat bei mir aber mit einem Dummy funktioniert wie geplant.
Schönes Wochenende!
RasPi: RFXTRX, HM, zigbee2mqtt, mySensors, JeeLink, miLight, squeezbox, Alexa, Siri, ...

87insane

#66
Super das du so schnell alles eingebaut hast auch wenn es nur zum testen ist.
Nun habe ich aber das Problem, dass bei mir ein EVENT auf die Schalter so passiert:

Das erste sendet das Rollo beim hoch fahren...
2019-02-23 08:59:19 ESPEasy ESPEasy_az_rollo event taste_hoch#taste_hoch

Das hier kommt als Antwort:
2019-02-23 08:59:19 ESPEasy ESPEasy_az_rollo strom_output_hoch: on

Gleiches gilt für runter. Das Modul hier, hat für alles mehrere Attribute.
rl_commandDown set ESPEasy_az_rollo event taste_runter#taste_runter
rl_commandStopDown set ESPEasy_az_rollo event taste_runter#taste_runter
rl_commandStopUp set ESPEasy_az_rollo event taste_hoch#taste_hoch
rl_commandUp set ESPEasy_az_rollo event taste_hoch#taste_hoch


Jetzt müsste ich entweder die gleichen als Trigger nehmen können oder aber hoch und runter einzeln eingeben können.
Ansonsten könne ich mit den Änderungen immer nur eine Richtung testen. Am Ende wäre das Rollo dann auch auf halb 11.

Natürlich könnte ich das Rollo einfach über GPIOs steuern. ABER dann würden die Regeln im Schalter nicht greifen und somit
wäre mein Software-Schutz gegen das doppel-Schalten von Relays weg.

Oder habe ich ggf. etwas übersehen oder falsch verstanden?


EDIT:
Hab ne Idee. Müsste nur in jedem Schalter eine Regel anlegen. Hatte das ca. so vor....

on IsAlive#IsAlive do
Sende eine Nachricht an FHEM - Hallo ich lebe (Hier weiß ich noch nicht wie ich FHEM etwas vom Schalter aus sende bzw. sage..google noch)
endon

87insane

Zitat von: KernSani am 23 Februar 2019, 00:10:11
Ich habe das mal ganz rudimentär umgesetzt, um zu sehen, ob es hilft. Wenn's klappt kann ich das auch ordentlich machen. So wie ich mir das ursprünglich gedacht hatte würde größere Umbau-Massnahmen erfordern daher folgendes Konzept:
Mit dem neuen Attribut rl_wakeUpCmd musst du ein Kommando definieren, mit dem du den Rollo aufweckst (z.b. sowas wie "set derRollo stop")
Im neuen Attribut rl_startEvent definierst du in der Form Device:Event das event, dass das tatsächliche Fahren des Rollos antriggern soll (Beispiel wäre: "derRollo:stopped")
Wenn du nun (z.B.) den Rollo runterfahren willst, schickt der erstmal das wakeUpCommand und wartet dann, bis das startEvent eintrifft, erst dann macht er die ganze Positionsberechnung und startet den Rollo tatsächlich.
Das Ganze ist sehr basic implementiert (keine checks usw...) hat bei mir aber mit einem Dummy funktioniert wie geplant.
Schönes Wochenende!

Okay habe es nun gelöst. Glaube aber mit dem Trigger Event stimmt was nicht.

rl_wakeUpCmd set ESPEasy_az_rollo taskvalueset 5 2 1
rl_startEvent ESPEasy_az_rollo:taskvalueset 5 2 1


EVENT MONITOR:
2019-02-23 12:57:07 ESPEasy ESPEasy_az_rollo taskvalueset 5 2 1

Und es passiert nichts. Wenn ich wie wild drauf rum klicke bewegt es sich. Die Position des Rollos stimmt also aktuell gar nicht mehr. Nehme das mal rauß, bis du Fragen stellst oder mir Änderungen zum testen benennst...

KernSani

Kannst du beim ROLLO device verbose 5 einstellen, nochmal probieren und die Ligausgabe posten?


Kurz, weil mobil
RasPi: RFXTRX, HM, zigbee2mqtt, mySensors, JeeLink, miLight, squeezbox, Alexa, Siri, ...

87insane

2019.02.23 13:32:11 5: ROLLO (az_rollo) >> Get
2019.02.23 13:32:26 5: ROLLO (az_rollo) >> Set (closed,)
2019.02.23 13:32:26 5: ROLLO (az_rollo) DesiredPos set to closed, ()
2019.02.23 13:32:26 5: ROLLO (az_rollo) DesiredPos now 100, closed
2019.02.23 13:32:26 5: ROLLO (az_rollo) >> Start
2019.02.23 13:32:26 5: ROLLO (az_rollo) >> wakeUpCommand set ESPEasy_az_rollo taskvalueset 5 2 1
2019.02.23 13:32:26 5: ROLLO (az_rollo) >> waiting for event ESPEasy_az_rollo:taskvalueset 5 2 1
2019.02.23 13:32:28 2: ESPEasy ESPEasy_az_rollo: Warning: Command 'taskvalueset' requires authentication but no adminpassword ist set.
2019.02.23 13:32:28 5: >>> Processing Event state: 2: 0 3: 0 4: 0 RSS: -41
2019.02.23 13:32:29 5: ROLLO (az_rollo) >> Set (closed,)
2019.02.23 13:32:29 5: ROLLO (az_rollo) DesiredPos set to closed, ()
2019.02.23 13:32:29 5: ROLLO (az_rollo) DesiredPos now 100, closed
2019.02.23 13:32:29 5: >>> Processing Event command: closed
2019.02.23 13:32:29 5: >>> Processing Event desired_pct: 100
2019.02.23 13:32:29 5: ROLLO (az_rollo) >> Start
2019.02.23 13:32:29 4: ROLLO (az_rollo) drive from 0 to 100. command: closed. state: open
2019.02.23 13:32:29 4: ROLLO (az_rollo) pct: 0 -> 100 / direction: down
2019.02.23 13:32:29 5: ROLLO (az_rollo) >> calculateDriveTime | going down: from 0 to 100
2019.02.23 13:32:29 5: ROLLO (az_rollo) netto drive time = 17
2019.02.23 13:32:29 4: ROLLO (az_rollo) calculateDriveTime: oldpos=0,newpos=100,direction=down,time=17,steps=100,drivetime=17
2019.02.23 13:32:29 4: ROLLO (az_rollo) execute following commands: set ESPEasy_az_rollo event taste_runter#taste_runter; ;
2019.02.23 13:32:29 4: ROLLO (az_rollo) stop in 17 seconds.
2019.02.23 13:32:33 5: ROLLO (az_rollo) >> Set (stop,)
2019.02.23 13:32:33 5: ROLLO (az_rollo) DesiredPos set to stop, ()
2019.02.23 13:32:33 5: ROLLO (az_rollo) DesiredPos now 100, stop
2019.02.23 13:32:33 5: ROLLO (az_rollo) >> calculatepct
2019.02.23 13:32:33 4: ROLLO (az_rollo) calculated pct is 29.4117647058823; rest drivetime is 12
2019.02.23 13:32:33 5: ROLLO (az_rollo) >> Start
2019.02.23 13:32:33 5: ROLLO (az_rollo) >> wakeUpCommand set ESPEasy_az_rollo taskvalueset 5 2 1
2019.02.23 13:32:33 5: ROLLO (az_rollo) >> waiting for event ESPEasy_az_rollo:taskvalueset 5 2 1
2019.02.23 13:32:37 5: >>> Processing Event on_time: 3698193
2019.02.23 13:32:37 5: >>> Processing Event rssi: -69
2019.02.23 13:32:37 5: >>> Processing Event current: 0.012881
2019.02.23 13:32:37 5: >>> Processing Event voltage: 240.098495
2019.02.23 13:32:37 2: ESPEasy ESPEasy_az_rollo: Warning: Command 'taskvalueset' requires authentication but no adminpassword ist set.
2019.02.23 13:32:37 5: ROLLO (az_rollo) >> Set (stop,)
2019.02.23 13:32:37 5: ROLLO (az_rollo) DesiredPos set to stop, ()
2019.02.23 13:32:37 5: ROLLO (az_rollo) DesiredPos now 29.4117647058823, stop
2019.02.23 13:32:37 5: ROLLO (az_rollo) >> calculatepct
2019.02.23 13:32:37 4: ROLLO (az_rollo) calculated pct is 29.4117647058823; rest drivetime is 8
2019.02.23 13:32:37 5: >>> Processing Event pct: 29.4117647058823
2019.02.23 13:32:37 5: >>> Processing Event pct: 29.4117647058823
2019.02.23 13:32:37 5: >>> Processing Event desired_pct: 29.4117647058823
2019.02.23 13:32:37 5: >>> Processing Event command: stop
2019.02.23 13:32:37 5: ROLLO (az_rollo) >> Start
2019.02.23 13:32:37 4: ROLLO (az_rollo) drive from 29.4117647058823 to 29.4117647058823. command: stop. state: drive-down
2019.02.23 13:32:37 4: ROLLO (az_rollo) pct: 29.4117647058823 -> 29.4117647058823 / direction: down
2019.02.23 13:32:37 5: ROLLO (az_rollo) >> Stop
2019.02.23 13:32:37 4: ROLLO (az_rollo) stops from drive-down at pct 29.4117647058823
2019.02.23 13:32:37 4: ROLLO (az_rollo) stopped by excuting the command: set ESPEasy_az_rollo event taste_runter#taste_runter
2019.02.23 13:32:37 4: ROLLO (az_rollo) updating state to pct-30
2019.02.23 13:32:41 5: ROLLO (az_rollo) >> Set (stop,)
2019.02.23 13:32:41 3: WARNING: command is stop but shutter is not driving!
2019.02.23 13:32:41 5: ROLLO (az_rollo) >> Stop
2019.02.23 13:32:41 4: ROLLO (az_rollo) stops from pct-30 at pct 29.4117647058823
2019.02.23 13:32:41 4: ROLLO (az_rollo) stopped by excuting the command: set ESPEasy_az_rollo event taste_hoch#taste_hoch
2019.02.23 13:32:41 4: ROLLO (az_rollo) updating state to pct-30
2019.02.23 13:32:42 5: ROLLO (az_rollo) >> Set (extern,open)
2019.02.23 13:32:42 5: ROLLO (az_rollo) DesiredPos set to open, ()
2019.02.23 13:32:42 5: ROLLO (az_rollo) DesiredPos now 0, open
2019.02.23 13:32:42 5: ROLLO (az_rollo) >> Start
2019.02.23 13:32:42 5: ROLLO (az_rollo) >> wakeUpCommand set ESPEasy_az_rollo taskvalueset 5 2 1
2019.02.23 13:32:42 5: ROLLO (az_rollo) >> waiting for event ESPEasy_az_rollo:taskvalueset 5 2 1
2019.02.23 13:32:42 5: >>> Processing Event state: 2: 0 3: 0 4: 0 RSS: -41 str: on str: off
2019.02.23 13:32:42 5: >>> Processing Event state: connected
2019.02.23 13:32:43 5: >>> Processing Event state: connected
2019.02.23 13:32:44 5: >>> Processing Event state: connected
2019.02.23 13:32:45 2: ESPEasy ESPEasy_az_rollo: Warning: Command 'taskvalueset' requires authentication but no adminpassword ist set.
2019.02.23 13:32:45 5: >>> Processing Event state: 2: 0 3: 0 4: 0 RSS: -41 str: on str: off
2019.02.23 13:32:48 5: >>> Processing Event mode: manual
2019.02.23 13:32:48 5: >>> Processing Event battery: ok
2019.02.23 13:32:48 5: >>> Processing Event batteryState: ok
2019.02.23 13:32:48 5: >>> Processing Event desiredTemperature: 15.0
2019.02.23 13:32:48 5: >>> Processing Event temperature: 15.2
2019.02.23 13:32:48 5: >>> Processing Event valveposition: 9
2019.02.23 13:32:48 5: >>> Processing Event state: 15.0 °C
2019.02.23 13:32:48 5: >>> Processing Event RSSI: -62.5
2019.02.23 13:32:48 5: >>> Processing Event state: connected
2019.02.23 13:32:49 5: >>> Processing Event azimuth: 193.03
2019.02.23 13:32:49 5: >>> Processing Event elevation: 28.66
2019.02.23 13:32:49 5: >>> Processing Event twilight: 100
2019.02.23 13:32:49 5: >>> Processing Event twilight_weather: 100
2019.02.23 13:32:49 5: >>> Processing Event compasspoint: south
2019.02.23 13:32:49 5: >>> Processing Event state: connected
2019.02.23 13:32:49 5: >>> Processing Event list_SHOPPING_ITEM:
2019.02.23 13:32:50 5: >>> Processing Event state: connected
2019.02.23 13:32:50 5: >>> Processing Event list_TASK:
2019.02.23 13:32:51 5: >>> Processing Event state: connected
2019.02.23 13:32:54 5: >>> Processing Event state: connected
2019.02.23 13:32:56 5: >>> Processing Event state: connected
2019.02.23 13:32:58 5: >>> Processing Event state: connected
2019.02.23 13:33:02 5: >>> Processing Event strom_output_hoch: off
2019.02.23 13:33:02 5: >>> Processing Event state: 2: 0 3: 0 4: 0 RSS: -41 str: off str: off


Das mit 2019.02.23 13:32:45 2: ESPEasy ESPEasy_az_rollo: Warning: Command 'taskvalueset' requires authentication but no adminpassword ist set.
ist doch ein Witz? Wenn ich im Gerät diesen Befehl ausführe, wird der ohne PW einfach gemacht. Der EventMonitor sagt ja auch es wurde gesetzt.

KernSani

Das sieht seltsam aus... Schau ich mir heute Abend mal im Detail an.


Kurz, weil mobil
RasPi: RFXTRX, HM, zigbee2mqtt, mySensors, JeeLink, miLight, squeezbox, Alexa, Siri, ...

KernSani

Hi nochmal,
zwei Dinge, die mich verwirren:
1. Der Befehl taskvalueset - keine AHnung was der macht (kenne ESPEasy nicht) aber egal - was ich aber nicht sehe, ist ein gleichlautendes Event...
2. Das erste Event, das nach taskvalueset kommt ist "state: 2: 0 3: 0 4: 0 RSS: -41" - kommt das vom ESPEasy?
Noch eine Frage? Nutzt du den ESPEasy zusätzlich noch mit einem Taster (der ROLLO mit "extern" Kommandos steuert)? Da ist der Kram noch nicht implementiert, sollte nur über die ROLLO Oberfläche direkt funktionieren.

Ich habe die Logausgabe angepasst, damit die verarbeiteten Events besser dargestellt werden, sonst bin ich aktuell etwas ratlos...
RasPi: RFXTRX, HM, zigbee2mqtt, mySensors, JeeLink, miLight, squeezbox, Alexa, Siri, ...

87insane

Zuerst DANKE!

Bin aktuell noch nicht wieder ganz fit und deswegen noch nicht weiter gekommen. Versuche aber mal deine Fragen zu beantworten....

Zitat1. Der Befehl taskvalueset - keine AHnung was der macht (kenne ESPEasy nicht) aber egal - was ich aber nicht sehe, ist ein gleichlautendes Event...
2. Das erste Event, das nach taskvalueset kommt ist "state: 2: 0 3: 0 4: 0 RSS: -41" - kommt das vom ESPEasy?
Noch eine Frage? Nutzt du den ESPEasy zusätzlich noch mit einem Taster (der ROLLO mit "extern" Kommandos steuert)? Da ist der Kram noch nicht implementiert, sollte nur über die ROLLO Oberfläche direkt funktionieren.

1. Such noch mehr oder weniger verzweifelt nach einem geeignetem Befehl. Problem ist, schalte ich einen GPIO würde ein EVENT erzeugt aber er würde auch etwas machen. Schalte ich ein EVENT, brauche ich natürlich eine Rückanwort vom Gerät. Hier wird aber nicht immer auch ein EVENT bei jeder Aktion erzeugt. Hab dazu mal einen Thread eröffnet. Nun müsste ich gleich mal schauen ob dort jemand schon eine gute bzw. geeignete Idee hatte. Ich selber hatte z.B. vor ein Event nur dafür als Rule zu hinterlegen. Das hat nur leider nicht so geklappt wie ich dachte. Werde aber schon was finden...

2. Ja kommt er. taskvalueset ist eigentlich nichts anderes als Taskbasierend eine Aktion durch zu führen. Das state: 2: 0 3: 0 4: 0 RSS: -41 ist eher zufällig genau da mit drin. Das liegt daran das die ESPs alle Sekunden x einen Status senden. Dafür hatte ich in dem Fall (wie die Meisten vermutlich) einfach RSSI genommen. In der FW die ich nutze, muss ich aber alle vier Felder ausfüllen. Deswegen auch noch RSSI, 2, 3, 4....  Aber siehe Punkt 1. Werde am WE, denke ich wieder fit genug sein und was finden. Danach würde ich erneut berichten.

3. Ich nutze die ESPs als Schalter. Sind Sonoff T1 EU. Genau wegen der externen/internen Berechnung ist das ja immer wieder nicht korrekt. Zum testen reicht aber wohl auch erstmal deine Variante. Mit der hier von dir gebauten Lösung, sollte das Problem bei Schaltern verschwinden, bei denen der Befehl nicht direkt ankommt sondern erst nach einem Wakeup oder nach dem erreichen dessen. Das wird sicher einigen helfen und nützlich sein.

Wie oben gesagt, melde mich sobald möglich mit Ergebnissen....

Danke, danke!

87insane

#73
ZitatHi nochmal,
zwei Dinge, die mich verwirren:
1. Der Befehl taskvalueset - keine AHnung was der macht (kenne ESPEasy nicht) aber egal - was ich aber nicht sehe, ist ein gleichlautendes Event...
2. Das erste Event, das nach taskvalueset kommt ist "state: 2: 0 3: 0 4: 0 RSS: -41" - kommt das vom ESPEasy?
Noch eine Frage? Nutzt du den ESPEasy zusätzlich noch mit einem Taster (der ROLLO mit "extern" Kommandos steuert)? Da ist der Kram noch nicht implementiert, sollte nur über die ROLLO Oberfläche direkt funktionieren.

Ich habe die Logausgabe angepasst, damit die verarbeiteten Events besser dargestellt werden, sonst bin ich aktuell etwas ratlos...


Hey und guten Morgen,

bin nun wieder halbwegs auf dem Weg der Besserung :)

Anbei mal meine Tests.

Als WakeUp habe ich nun: set ESPEasy_az_rollo status GPIO 9
Eine Antwort sollte so aussehen: ESPEasy_az_rollo GPIO9: on oder off (um es einfach zu halten habe ich erst mal: ESPEasy_az_rollo GPIO9:.*)

Habe mal ein wenig hoch/runter/stop/reset open über die FHEM Oberfläche angestoßen und das LOG anbei. Am besten sag mir einmal wie du am liebsten den Test machen wollen würdest.
Aktuell stimmen die Positionen garnicht mehr oder er will erst beim zweiten Klick stoppen usw. Vermutlich ist es noch nicht überall hinterlegt und deswegen geht es nicht so richtig.

Ich warte mal auf deinen Input....

Anbei das LOG:
2019.03.01 11:16:57 5: ROLLO (az_rollo) >> Get
2019.03.01 11:17:49 5: ROLLO (az_rollo) >> Set (closed,)
2019.03.01 11:17:49 5: ROLLO (az_rollo) DesiredPos set to closed, ()
2019.03.01 11:17:49 5: ROLLO (az_rollo) DesiredPos now 100, closed
2019.03.01 11:17:49 5: ROLLO (az_rollo) >> Start
2019.03.01 11:17:49 4: ROLLO (az_rollo) drive from 10 to 100. command: closed. state: pct-10
2019.03.01 11:17:49 4: ROLLO (az_rollo) pct: 10 -> 100 / direction: down
2019.03.01 11:17:49 5: ROLLO (az_rollo) >> calculateDriveTime | going down: from 10 to 100
2019.03.01 11:17:49 5: ROLLO (az_rollo) netto drive time = 15.3
2019.03.01 11:17:49 4: ROLLO (az_rollo) calculateDriveTime: oldpos=10,newpos=100,direction=down,time=17,steps=90,drivetime=15.3
2019.03.01 11:17:49 4: ROLLO (az_rollo) execute following commands: set ESPEasy_az_rollo event taste_runter#taste_runter; ;
2019.03.01 11:17:49 4: ROLLO (az_rollo) stop in 15.3 seconds.
2019.03.01 11:17:51 5: ROLLO (az_rollo) >> Set (stop,)
2019.03.01 11:17:51 5: ROLLO (az_rollo) DesiredPos set to stop, ()
2019.03.01 11:17:51 5: ROLLO (az_rollo) DesiredPos now 100, stop
2019.03.01 11:17:51 5: ROLLO (az_rollo) >> calculatepct
2019.03.01 11:17:51 4: ROLLO (az_rollo) calculated pct is 29.4117647058823; rest drivetime is 12
2019.03.01 11:17:51 5: ROLLO (az_rollo) >> Start
2019.03.01 11:17:51 5: ROLLO (az_rollo) >> wakeUpCommand set ESPEasy_az_rollo status GPIO 9
2019.03.01 11:17:51 5: ROLLO (az_rollo) >> waiting for event ESPEasy_az_rollo:GPIO9:.*
2019.03.01 11:17:53 5: ROLLO (az_rollo) >> Set (stop,)
2019.03.01 11:17:53 5: ROLLO (az_rollo) DesiredPos set to stop, ()
2019.03.01 11:17:53 5: ROLLO (az_rollo) DesiredPos now 29.4117647058823, stop
2019.03.01 11:17:53 5: ROLLO (az_rollo) >> calculatepct
2019.03.01 11:17:53 4: ROLLO (az_rollo) calculated pct is 29.4117647058823; rest drivetime is 10
2019.03.01 11:17:53 5: ROLLO (az_rollo) >> Start
2019.03.01 11:17:53 4: ROLLO (az_rollo) drive from 29.4117647058823 to 29.4117647058823. command: stop. state: drive-down
2019.03.01 11:17:53 4: ROLLO (az_rollo) pct: 29.4117647058823 -> 29.4117647058823 / direction: down
2019.03.01 11:17:53 5: ROLLO (az_rollo) >> Stop
2019.03.01 11:17:53 4: ROLLO (az_rollo) stops from drive-down at pct 29.4117647058823
2019.03.01 11:17:53 4: ROLLO (az_rollo) stopped by excuting the command: set ESPEasy_az_rollo event taste_runter#taste_runter
2019.03.01 11:17:53 4: ROLLO (az_rollo) updating state to pct-30
2019.03.01 11:19:27 5: ROLLO (az_rollo) >> Set (pct,0)
2019.03.01 11:19:27 5: ROLLO (az_rollo) DesiredPos set to pct, (0)
2019.03.01 11:19:27 5: ROLLO (az_rollo) DesiredPos now 0, 0
2019.03.01 11:19:27 5: ROLLO (az_rollo) DesiredPos now 0, pct-0
2019.03.01 11:19:27 5: ROLLO (az_rollo) >> Start
2019.03.01 11:19:27 5: ROLLO (az_rollo) >> wakeUpCommand set ESPEasy_az_rollo status GPIO 9
2019.03.01 11:19:27 5: ROLLO (az_rollo) >> waiting for event ESPEasy_az_rollo:GPIO9:.*
2019.03.01 11:19:32 5: ROLLO (az_rollo) >> Get
2019.03.01 11:19:38 5: ROLLO (az_rollo) >> Set (open,)
2019.03.01 11:19:38 5: ROLLO (az_rollo) DesiredPos set to open, ()
2019.03.01 11:19:38 5: ROLLO (az_rollo) DesiredPos now 0, open
2019.03.01 11:19:38 5: ROLLO (az_rollo) >> Start
2019.03.01 11:19:38 4: ROLLO (az_rollo) drive from 29.4117647058823 to 0. command: open. state: pct-30
2019.03.01 11:19:38 4: ROLLO (az_rollo) pct: 29.4117647058823 -> 0 / direction: up
2019.03.01 11:19:38 5: ROLLO (az_rollo) >> calculateDriveTime | going up: from 29.4117647058823 to 0
2019.03.01 11:19:38 5: ROLLO (az_rollo) netto drive time = 5.29411764705882
2019.03.01 11:19:38 4: ROLLO (az_rollo) calculateDriveTime: oldpos=29.4117647058823,newpos=0,direction=up,time=18,steps=29.4117647058823,drivetime=5.29411764705882
2019.03.01 11:19:38 4: ROLLO (az_rollo) execute following commands: set ESPEasy_az_rollo event taste_hoch#taste_hoch; ;
2019.03.01 11:19:38 4: ROLLO (az_rollo) stop in 5.29411764705882 seconds.
2019.03.01 11:19:43 5: ROLLO (az_rollo) >> Timer
2019.03.01 11:19:43 5: ROLLO (az_rollo) >> Stop
2019.03.01 11:19:43 4: ROLLO (az_rollo) stops from drive-up at pct 0
2019.03.01 11:19:43 4: ROLLO (az_rollo) stopped by excuting the command: set ESPEasy_az_rollo event taste_hoch#taste_hoch
2019.03.01 11:19:43 4: ROLLO (az_rollo) updating state to open
2019.03.01 11:19:50 5: ROLLO (az_rollo) >> Set (pct,10)
2019.03.01 11:19:50 5: ROLLO (az_rollo) DesiredPos set to pct, (10)
2019.03.01 11:19:50 5: ROLLO (az_rollo) DesiredPos now 10, 10
2019.03.01 11:19:50 5: ROLLO (az_rollo) DesiredPos now 10, pct-10
2019.03.01 11:19:50 5: ROLLO (az_rollo) >> Start
2019.03.01 11:19:50 5: ROLLO (az_rollo) >> wakeUpCommand set ESPEasy_az_rollo status GPIO 9
2019.03.01 11:19:50 5: ROLLO (az_rollo) >> waiting for event ESPEasy_az_rollo:GPIO9:.*
2019.03.01 11:19:56 5: ROLLO (az_rollo) >> Set (pct,0)
2019.03.01 11:19:56 5: ROLLO (az_rollo) DesiredPos set to pct, (0)
2019.03.01 11:19:56 5: ROLLO (az_rollo) DesiredPos now 0, 0
2019.03.01 11:19:56 5: ROLLO (az_rollo) DesiredPos now 0, pct-0
2019.03.01 11:19:56 5: ROLLO (az_rollo) >> Start
2019.03.01 11:19:56 4: ROLLO (az_rollo) drive from 0 to 0. command: pct-0. state: open
2019.03.01 11:19:56 4: ROLLO (az_rollo) pct: 0 -> 0 / direction: up
2019.03.01 11:19:56 5: ROLLO (az_rollo) >> calculateDriveTime | going up: from 0 to 0
2019.03.01 11:19:56 4: ROLLO (az_rollo) already at position!
2019.03.01 11:19:56 5: ROLLO (az_rollo) netto drive time = 0
2019.03.01 11:20:07 5: ROLLO (az_rollo) >> Set (closed,)
2019.03.01 11:20:07 5: ROLLO (az_rollo) DesiredPos set to closed, ()
2019.03.01 11:20:07 5: ROLLO (az_rollo) DesiredPos now 100, closed
2019.03.01 11:20:07 5: ROLLO (az_rollo) >> Start
2019.03.01 11:20:07 5: ROLLO (az_rollo) >> wakeUpCommand set ESPEasy_az_rollo status GPIO 9
2019.03.01 11:20:07 5: ROLLO (az_rollo) >> waiting for event ESPEasy_az_rollo:GPIO9:.*
2019.03.01 11:20:32 5: ROLLO (az_rollo) >> Set (closed,)
2019.03.01 11:20:32 5: ROLLO (az_rollo) DesiredPos set to closed, ()
2019.03.01 11:20:32 5: ROLLO (az_rollo) DesiredPos now 100, closed
2019.03.01 11:20:32 5: ROLLO (az_rollo) >> Start
2019.03.01 11:20:32 4: ROLLO (az_rollo) drive from 0 to 100. command: closed. state: open
2019.03.01 11:20:32 4: ROLLO (az_rollo) pct: 0 -> 100 / direction: down
2019.03.01 11:20:32 5: ROLLO (az_rollo) >> calculateDriveTime | going down: from 0 to 100
2019.03.01 11:20:32 5: ROLLO (az_rollo) netto drive time = 17
2019.03.01 11:20:32 4: ROLLO (az_rollo) calculateDriveTime: oldpos=0,newpos=100,direction=down,time=17,steps=100,drivetime=17
2019.03.01 11:20:32 4: ROLLO (az_rollo) execute following commands: set ESPEasy_az_rollo event taste_runter#taste_runter; ;
2019.03.01 11:20:32 4: ROLLO (az_rollo) stop in 17 seconds.
2019.03.01 11:20:35 5: ROLLO (az_rollo) >> Set (stop,)
2019.03.01 11:20:35 5: ROLLO (az_rollo) DesiredPos set to stop, ()
2019.03.01 11:20:35 5: ROLLO (az_rollo) DesiredPos now 100, stop
2019.03.01 11:20:35 5: ROLLO (az_rollo) >> calculatepct
2019.03.01 11:20:35 4: ROLLO (az_rollo) calculated pct is 23.5294117647059; rest drivetime is 13
2019.03.01 11:20:36 5: ROLLO (az_rollo) >> Start
2019.03.01 11:20:36 5: ROLLO (az_rollo) >> wakeUpCommand set ESPEasy_az_rollo status GPIO 9
2019.03.01 11:20:36 5: ROLLO (az_rollo) >> waiting for event ESPEasy_az_rollo:GPIO9:.*
2019.03.01 11:20:40 5: ROLLO (az_rollo) >> Set (stop,)
2019.03.01 11:20:40 5: ROLLO (az_rollo) DesiredPos set to stop, ()
2019.03.01 11:20:40 5: ROLLO (az_rollo) DesiredPos now 23.5294117647059, stop
2019.03.01 11:20:40 5: ROLLO (az_rollo) >> calculatepct
2019.03.01 11:20:40 4: ROLLO (az_rollo) calculated pct is 23.5294117647059; rest drivetime is 8
2019.03.01 11:20:40 5: ROLLO (az_rollo) >> Start
2019.03.01 11:20:40 4: ROLLO (az_rollo) drive from 23.5294117647059 to 23.5294117647059. command: stop. state: drive-down
2019.03.01 11:20:40 4: ROLLO (az_rollo) pct: 23.5294117647059 -> 23.5294117647059 / direction: down
2019.03.01 11:20:40 5: ROLLO (az_rollo) >> Stop
2019.03.01 11:20:40 4: ROLLO (az_rollo) stops from drive-down at pct 23.5294117647059
2019.03.01 11:20:40 4: ROLLO (az_rollo) stopped by excuting the command: set ESPEasy_az_rollo event taste_runter#taste_runter
2019.03.01 11:20:40 4: ROLLO (az_rollo) updating state to pct-20
2019.03.01 11:20:46 5: ROLLO (az_rollo) >> Get
2019.03.01 11:20:48 5: ROLLO (az_rollo) >> Get
2019.03.01 11:20:50 5: ROLLO (az_rollo) >> Get
2019.03.01 11:20:56 5: ROLLO (az_rollo) >> Set (pct,0)
2019.03.01 11:20:56 5: ROLLO (az_rollo) DesiredPos set to pct, (0)
2019.03.01 11:20:56 5: ROLLO (az_rollo) DesiredPos now 0, 0
2019.03.01 11:20:56 5: ROLLO (az_rollo) DesiredPos now 0, pct-0
2019.03.01 11:20:56 5: ROLLO (az_rollo) >> Start
2019.03.01 11:20:56 5: ROLLO (az_rollo) >> wakeUpCommand set ESPEasy_az_rollo status GPIO 9
2019.03.01 11:20:56 5: ROLLO (az_rollo) >> waiting for event ESPEasy_az_rollo:GPIO9:.*
2019.03.01 11:21:32 5: ROLLO (az_rollo) >> Set (open,)
2019.03.01 11:21:32 5: ROLLO (az_rollo) DesiredPos set to open, ()
2019.03.01 11:21:32 5: ROLLO (az_rollo) DesiredPos now 0, open
2019.03.01 11:21:32 5: ROLLO (az_rollo) >> Start
2019.03.01 11:21:32 4: ROLLO (az_rollo) drive from 23.5294117647059 to 0. command: open. state: pct-20
2019.03.01 11:21:32 4: ROLLO (az_rollo) pct: 23.5294117647059 -> 0 / direction: up
2019.03.01 11:21:32 5: ROLLO (az_rollo) >> calculateDriveTime | going up: from 23.5294117647059 to 0
2019.03.01 11:21:32 5: ROLLO (az_rollo) netto drive time = 4.23529411764706
2019.03.01 11:21:32 4: ROLLO (az_rollo) calculateDriveTime: oldpos=23.5294117647059,newpos=0,direction=up,time=18,steps=23.5294117647059,drivetime=4.23529411764706
2019.03.01 11:21:32 4: ROLLO (az_rollo) execute following commands: set ESPEasy_az_rollo event taste_hoch#taste_hoch; ;
2019.03.01 11:21:32 4: ROLLO (az_rollo) stop in 4.23529411764706 seconds.
2019.03.01 11:21:36 5: ROLLO (az_rollo) >> Timer
2019.03.01 11:21:36 5: ROLLO (az_rollo) >> Stop
2019.03.01 11:21:36 4: ROLLO (az_rollo) stops from drive-up at pct 0
2019.03.01 11:21:36 4: ROLLO (az_rollo) stopped by excuting the command: set ESPEasy_az_rollo event taste_hoch#taste_hoch
2019.03.01 11:21:36 4: ROLLO (az_rollo) updating state to open
2019.03.01 11:21:38 5: ROLLO (az_rollo) >> Get
2019.03.01 11:21:41 5: ROLLO (az_rollo) >> Set (open,)
2019.03.01 11:21:41 5: ROLLO (az_rollo) DesiredPos set to open, ()
2019.03.01 11:21:41 5: ROLLO (az_rollo) DesiredPos now 0, open
2019.03.01 11:21:41 5: ROLLO (az_rollo) >> Start
2019.03.01 11:21:41 5: ROLLO (az_rollo) >> wakeUpCommand set ESPEasy_az_rollo status GPIO 9
2019.03.01 11:21:41 5: ROLLO (az_rollo) >> waiting for event ESPEasy_az_rollo:GPIO9:.*

87insane

ZitatROLLO hat auch das "drive" Command, dem man mitgeben kann, wie lange in welche Richtung gefahren werden soll (als Alternative zum wait Attribut)

Als Anregung... So sieht mein notify (mit Hilfe von hier natürlich) aus...
Es handelt sich um das manuelle schalten. Das könnte man ja ein wenig manipulieren.... Namenskürzung usw. sind natürlich einfach nur drin, da es dann komplett ist:

ESPEasy_.*_rollo:strom_output_(runter|hoch):.* {
my $richtung = '';
my $zustand = '';
my $geraet = $NAME;
$geraet =~ s/^ESPEasy_//;

if ($EVTPART0 eq "strom_output_hoch:") {
  $richtung = "drive-up";
  $zustand = "open";
}
if ($EVTPART0 eq "strom_output_runter:") {
  $richtung = "drive-down";
  $zustand = "closed";
}

if ($EVTPART1 eq "on" && Value("$geraet") ne "$richtung") {
  fhem("set $geraet extern $zustand");
  fhem("$geraet extern $zustand");
}
elsif ($EVTPART1 eq "off" && Value("$geraet") eq "$richtung") {
  fhem("set $geraet extern stop");
  fhem("$geraet extern stop");
}
}


PS: Der Post hier, da es sonst immer weiter geht in dem alten...