ROLLO: Seltsames Verhalten wenn stop-Befehl gesendet wird

Begonnen von arturDUS, 02 Dezember 2018, 14:48:08

Vorheriges Thema - Nächstes Thema

arturDUS

Liebe FHEM Gemeinde,
ich bin jetzt von meinem FHEM "Testsystem" in meine produktive Umgebung umgezogen. Funktioniert alles soweit und ich bin begeistert :-)

Allerdings habe ich ein Problem mit dem ROLLO Modul:

Setup: Über Kontaktausgänge von Homematik Wired Devices sind die Rolläden angeschlossen. Mit "set <Kontaktname> on" und "set <Konmtaktname> off" kann ich die Relais fürs Hoch und Runterfahren auch schalten.


Das ROLLO Modul schaltet die entsprechenden Relais auch wunderbar - abhängig davon ob ich die Rollos hoch oder runterfahren oder an eine bestimmte Position fahren möchte.
Die Definition eines Rollos sieht z.B. so aus:


define Rollo_OG_Office ROLLO
attr Rollo_OG_Office autoStop 0
attr Rollo_OG_Office commandDown set OF_K_JOFFI_R on
attr Rollo_OG_Office commandStopDown set OF_K_JOFFI_R off
attr Rollo_OG_Office commandStopUp set OF_K_JOFFI_H off
attr Rollo_OG_Office commandUp set OF_K_JOFFI_H on
attr Rollo_OG_Office devStateIcon open:fts_shutter_10:closed closed:fts_shutter_100:open half:fts_shutter_50:closed drive-up:fts_shutter_up@red:stop drive-down:fts_shutter_down@red:stop pct-100:fts_shutter_100:open pct-90:fts_shutter_80:closed pct-80:fts_shutter_80:closed pct-70:fts_shutter_70:closed pct-60:fts_shutter_60:closed pct-50:fts_shutter_50:closed pct-40:fts_shutter_40:open pct-30:fts_shutter_30:open pct-20:fts_shutter_20:open pct-10:fts_shutter_10:open pct-0:fts_shutter_10:closed
attr Rollo_OG_Office excessBottom 0
attr Rollo_OG_Office excessTop 0
attr Rollo_OG_Office fp_Gesamt 50,200,1
attr Rollo_OG_Office icon fts_shutter_1w
attr Rollo_OG_Office resetTime 3
attr Rollo_OG_Office secondsDown 24
attr Rollo_OG_Office secondsUp 27
attr Rollo_OG_Office switchTime 1
attr Rollo_OG_Office type normal
attr Rollo_OG_Office webCmd open:closed:half:stop:pct
 

Nun möchte ich die Rollos auch mit im Raum paltzierten Tastern fahren. Deswegen ahbe ich folgende drei notifys gebaut:

# Office Jalousie ...............................
define JAL_OFFI_HOCH_S_Notify notify OF_S_JOFFI_.:press_short.* set Rollo_OG_Office stop
define JAL_OFFI_HOCH_L_Notify notify OF_S_JOFFI_H:press_long.* set Rollo_OG_Office open
define JAL_OFFI_RUNTER_L_Notify notify OF_S_JOFFI_R:press_long.* set Rollo_OG_Office closed


Auch das Funktioniert eigentlich gut. Wenn ich den Taster lange nach unten drücke fährt die Jalousie nach unten und wenn ich kurz nach oben oder unten drücke, stoppt die Jalousie (und vice versa).

Das Problem ist nun dass das ROLLO Modul anscheinend die Laufzeit im Hintergrund neu (und falsch) berechnet wenn man den "STOP"-Befehl an das ROLLO Modul schickt
set <Rolloname> stop
Weil wenn ich z.B. die Jalousie von 0% (ganz oben) auf z.B. ungefähr die Hälfte fahren lasse und dann stoppe (mit dem Taster), zeigt mir der pct-Wert des ROLLO Moduls ungefähr 77% an. Wenn ich nun die Jalousie weiter fahren lasse, fährt die Jalousie nicht ganz zu sondern bleibt irgendwo mittendrin stehen (wenn ebend die pct=100% Laufzeit erreicht sind).
Fahre ich die Jalousie hingegen komplett von 0%, ohne zwischendurch zu stoppen zu, fährt die Jalousie komplett zu - So wie sie es soll.

Hat ggf. jemand eine Idee wie ich das richtig hinbekomme?

Vielen Dank,

Artur




Frank_Huber

Eventuell die Zeitwerte der Fahrtrichtungen falsch eingestellt?

Gesendet von meinem Doogee S60 mit Tapatalk


arturDUS

Hallo Frank,

Vielen Dank für Deine Antwort.

Meiner Meinung nach sind die Zeitwerte korrekt. Habe das mit einer Stopuhr gemessen.
Wenn ich z.B. zwei oder mehrmals die Jalousie zwischendurch stoppe kommen immer wieder andere "Endzustände" raus. Deswegen glaube ich das es an der "stop" Funktion liegen könnte.

Artur

Frank_Huber

Hast Du auch die reine Fehrzeit genommen? der overhead des Rollos bis zur Abschaltung gehört in excesstop und excessbottom z.B.

andernfalls hab ich keine Idee.

arturDUS

Habe nochmal geschaut. Bei meinen Rollos gibt es diese "Totzeit" nicht. Die erscheinen unmittelbar wenn sie aus dem Kasten rausfahren.


Frank_Huber

Evtl deine Aktoren zu träge?

Ich habe das Modul auch im Einsatz über GPIO (Taster und Relais.
Ich kann solch ein Verhalten bei mir nicht erkennen.

Gesendet von meinem Doogee S60 mit Tapatalk


arturDUS

#6
Ich habe mir jetzt mal ein wenig die 44_ROLLO.pm mit einem Verbose=5 debugt und da ist mir aufgefallen das bei einem STOP-Befhel auf einmal ein riesen sprung in der Zeitberechnung gemacht wird:

folgender Auszug aus der fhem.log Datei (Zur Übersicht habe ich am Anfang Zeilennummern eingefügt)

1  2018.12.02 22:58:06 5: ROLLO (Rollo_OG_Office) >> Set (pct,100)
2  2018.12.02 22:58:06 5: ROLLO (Rollo_OG_Office) >> calculatepct
3  2018.12.02 22:58:06 4: ROLLO (Rollo_OG_Office) calculated pct is 30; rest drivetime is 21
4  2018.12.02 22:58:06 5: ROLLO (Rollo_OG_Office) >> Start
5  2018.12.02 22:58:06 4: ROLLO (Rollo_OG_Office) drive from 30 to 100. command: pct-100. state: drive-down
6  2018.12.02 22:58:06 4: ROLLO (Rollo_OG_Office) pct: 30 -> 100 / direction: down
7  2018.12.02 22:58:06 5: ROLLO (Rollo_OG_Office) >> calculateDriveTime | going down: from 30 to 100
8  2018.12.02 22:58:06 4: ROLLO (Rollo_OG_Office) calculateDriveTime: oldpos=30,newpos=100,direction=down,time=30,steps=70,drivetime=24
9  2018.12.02 22:58:06 4: ROLLO (Rollo_OG_Office) execute following commands: set OF_K_JOFFI_R on; ;
10 2018.12.02 22:58:06 4: ROLLO (Rollo_OG_Office) stop in 24 seconds.
11 2018.12.02 22:58:06 5: ROLLO (Rollo_OG_Office) >> Set (pct,100)
12 2018.12.02 22:58:06 5: ROLLO (Rollo_OG_Office) >> calculatepct
13 2018.12.02 22:58:06 4: ROLLO (Rollo_OG_Office) calculated pct is 33.3333333333333; rest drivetime is 20
14 2018.12.02 22:58:06 5: ROLLO (Rollo_OG_Office) >> Start
15 2018.12.02 22:58:06 4: ROLLO (Rollo_OG_Office) drive from 33.3333333333333 to 100. command: pct-100. state: drive-down
16 2018.12.02 22:58:06 4: ROLLO (Rollo_OG_Office) pct: 33.3333333333333 -> 100 / direction: down
17 2018.12.02 22:58:06 5: ROLLO (Rollo_OG_Office) >> calculateDriveTime | going down: from 33.3333333333333 to 100
18 2018.12.02 22:58:06 4: ROLLO (Rollo_OG_Office) calculateDriveTime: oldpos=33.3333333333333,newpos=100,direction=down,time=30,steps=66.6666666666667,drivetime=23
19 2018.12.02 22:58:06 4: ROLLO (Rollo_OG_Office) execute following commands: set OF_K_JOFFI_R on; ;
20 2018.12.02 22:58:06 4: ROLLO (Rollo_OG_Office) stop in 23 seconds.
21 2018.12.02 22:58:10 5: ROLLO (Rollo_OG_Office) >> Set (stop,)
22 2018.12.02 22:58:10 4: ROLLO (Rollo_OG_Office) cmd: stop
23 2018.12.02 22:58:10 4: ROLLO (Rollo_OG_Office) desiredPos:
24 2018.12.02 22:58:10 4: ROLLO (Rollo_OG_Office) set desired pct none
25 2018.12.02 22:58:10 5: ROLLO (Rollo_OG_Office) >> calculatepct
26 2018.12.02 22:58:10 4: ROLLO (Rollo_OG_Office) calculated pct is 50; rest drivetime is 15


In Zeile 1 bekommt das Modul seinen Befehl voll auf zu fahren pct=100. Darauf hin wird in Zeile 8 ausgerechnet an welcher Position sich das Rollo befindet und es wird eine Restlaufzeit berechnet: Hier 24 Sekunden. In Zeile 18 beträgt die Fahrzeit dann nur noch 23 Sekunden.
In Zeile 21 schicke ich dann einen STOP Befehl an das Rollo und plötzlich ist die Laufzeit dann nur noch 15 Sekunden! Um diesen Wert mit der Restlaufzeit vergleichen zu können müssen nochmal 3s für die Sicherheitszeit hinzuaddiert werden also wäre die Restlaufzeit = 18 Sekunden... was aber auch einen plötzlichen riesen sprung in der Zeit darstellt: Von 23 auf 18 Sekunden.
Ich vermute es liegt daran weil in Zeile 24 das Modul plötzlich nicht mehr die korrekte pct-Position weiß und der "desired pct" auf "none" gesetzt wird.

Ich kenne mich nun leider nicht so gut mit PERL aus sodass ich den Code nicht 100% verstehe aber irgendwas muss da doch falsch laufen.

Vielen Dank für eure Rückmeldungen.

Artur



arturDUS

Ich weiß echt nicht was ich falsch parametriert habe. Warum kommt beim "Stop" immer dieser große Zeitsprung und warum sehe ich im LOG so oft den "Start" Befehl obwohl ich doch nur einmal gedrückt habe....

Bin Dankbar für jegliche Ideen wo ich schauen kann.

Artur

Frank_Huber

Passiert es auch wenn du manuell in fhem steuerst?
Oder nur über die Taster?

Gesendet von meinem Doogee S60 mit Tapatalk


arturDUS

Hallo Frank,

Was ich gemacht habe:
Das Rollo mit dem Taster von 0% in Richtung 100% gestartet. Dann auf ca. halber Höhe des Rollos mit "set <Rolloname> stop" in der Komandozeile das Rollo gestoppt (also den Befehl manuell abgesetzt den auch das Tasterevent auslösen würde).

-> Leider genau das gleiche Ergebnis wie als wenn ich den Taster lange gedrückt hätte.

Zwischenzeitlich habe ich die Befehle "set <Rolloname> open" und "set <Rolloname> closed" durch "set <Rolloname> pct 0" und "set <Rolloname> pct 100" ersetzt. Dadurch konnte ich zumindest den Fehler im Log ".... not a nummeric value.... blablabla" beheben.

Ich sehe aber immer noch zwischenzeitlich in der Log Datei:

set desired pct none


obwohl ich nichts an das Rollo geschickt habe ... was mich schon stutzig macht. Und daher vermute ich dass das ROLLO-Modul anschließend die Zeit nicht mehr korrekt berechnen kann und beim Stop-Befehl dann diese Zeitsprünge erscheinen....

Könntest Du mir vielleicht mal Dein define mit den attr eines Rollos zuschicken damit ich dsa mal vergleichen kann?


Danke für Deine Unterstützung.

Viele Grüße,

Artur



Frank_Huber

aber klar:

Rollo:
defmod Rollo5_Terrasse ROLLO
attr Rollo5_Terrasse userattr room_map structexclude
attr Rollo5_Terrasse DbLogExclude .*
attr Rollo5_Terrasse autoStop 0
attr Rollo5_Terrasse automatic-enabled off
attr Rollo5_Terrasse blockMode only-up
attr Rollo5_Terrasse commandDown set OUT_1 PortB1 on
attr Rollo5_Terrasse commandStopDown set OUT_1 PortB1 off
attr Rollo5_Terrasse commandStopUp set OUT_1 PortB0 off
attr Rollo5_Terrasse commandUp set OUT_1 PortB0 on
attr Rollo5_Terrasse devStateIcon open:fts_shutter_10:closed closed:fts_shutter_100:open half:fts_shutter_50:closed drive-up:fts_shutter_up@red:stop drive-down:fts_shutter_down@red:stop pct-100:fts_shutter_100:open pct-90:fts_shutter_80:closed pct-80:fts_shutter_80:closed pct-70:fts_shutter_70:closed pct-60:fts_shutter_60:closed pct-50:fts_shutter_50:closed pct-40:fts_shutter_40:open pct-30:fts_shutter_30:open pct-20:fts_shutter_20:open pct-10:fts_shutter_10:open pct-0:fts_shutter_10:closed
attr Rollo5_Terrasse excessBottom 2
attr Rollo5_Terrasse excessTop 4
attr Rollo5_Terrasse group Terrassentür
attr Rollo5_Terrasse resetTime 0
attr Rollo5_Terrasse room Rollo,_EG,_Terasse,_Wohnzimmer
attr Rollo5_Terrasse secondsDown 25
attr Rollo5_Terrasse secondsUp 25
attr Rollo5_Terrasse switchTime 1
attr Rollo5_Terrasse type normal
attr Rollo5_Terrasse verbose 0
attr Rollo5_Terrasse webCmd open:closed:half:stop:pct


DOIF zum steuern:
defmod Rollo_Terrasse DOIF ([GPIO_IN_12:"^on$"] and [?Rollo5_Terrasse] ne "drive-up") (set Rollo5_Terrasse open)\
DOELSEIF ([GPIO_IN_13:"^on$"] and [?Rollo5_Terrasse] ne "drive-down") (set Rollo5_Terrasse closed)\
DOELSEIF (([GPIO_IN_12:"^on$"] or [GPIO_IN_13:"^on$"]) and [?Rollo5_Terrasse] =~ "drive-down|drive-up") (set Rollo5_Terrasse stop)
attr Rollo_Terrasse DbLogExclude .*
attr Rollo_Terrasse checkReadingEvent 1
attr Rollo_Terrasse cmdpause 2:2:2
attr Rollo_Terrasse do always
attr Rollo_Terrasse group Terrassentür
attr Rollo_Terrasse room Rollo,_Terasse,_Wohnzimmer
attr Rollo_Terrasse verbose 0

arturDUS

Hallo Frank,

habe Deine  Parametrierung mal mit meiner verglichen... ist eigentlich gleich. Habe dann nochmal deine DOIFs ausprobiert.
Brachte leider keine Verbesserung.

Mir ist dann aber aufgefallen das pro Tastendruck immer zwei Events erzeugt werden. Werde also erst mal in dieser Richtung weiterforschen und deswegen dieses Thema erst mal schließen.

Vielen Dank für Deine Unterstützung,

Artur


arturDUS

.... so, anscheinend lag es dran das ich in dem "notify" für das Stoppe, open und closed einen kleinen aber entscheidenden Fehler hatte. Das notify hatte jeweils bei einem Tatsendruck zwei mal "gefeuert". Mit diesen zwei, kurz hintereinander Aufrufen der jeweiligen Befehle scheint das Modul nicht umgehen zu können bzw. die Zeitberechungen innerhalb des Moduls werden fehlerhaft.

Jetzt, wo nur ein Event das open, closed oder stop auslößt funktioniert das ROLLO-Modul wunderbar.

Viele Grüße,

Artur


GELÖST