[ASC] Zusatz-Attribut für gepeinigte FSB61-Nutzer mit Positionsproblem

Begonnen von zife, 21 Februar 2022, 11:16:31

Vorheriges Thema - Nächstes Thema

zife

Frage und Vorschlag zu ASC/AutoShuttersControl:

Ich gehöre zu denen, die (leider) FSB61-Aktoren eingebaut haben und die - bauartbedingt - keine Position zurückmelden. Die geschätzte Position in fhem ist wohl das beste, was technisch/logisch geht - aber früher oder später eben abweichend von der Realität. Sprich: nach der ein oder anderen manuellen Taster-Fahrt ist sie am majestätischen Hinterteil - also, am A...  und ASC steuert in der Folge falsch.

Also... kein Vorwurf an einen Modulautor, sondern einfach nur dumm gelaufen...  8)

Die Hoffnung, das durch Feineinstellungen hinzubekommen, gebe ich langsam auf. Deshalb ein ganz anderer Vorschlag, gerne zur Diskussion:

Könnte man ein ASC-Rolladen-Device-Attribut einbauen ("ASC_ExtraCalibrationDrive" oder so), dass dann folgende Funktion bei diesem Rolladen auslöst:
... Wenn letzte Fahrt des Rolladens manuell und Position nicht ganz oben oder ganz unten, dann wird vor der Anfahrt einer Position erstmal ganz hoch bzw. runtergefahren, um sich so neu zu kalibrieren. Erst nach kurzer Pause (max. "shutTimeCloses" oder ASC-Attribut "ASC_DriveUpMaxDuration") folgt die Fahrt auf die Soll-Position.

Mir ist klar, dass das nicht wirklich elegant ist. Aber ich finde keine andere Lösung, um ASC parallel mit manuellen Tastern und Eltako FSB61 sinnvoll zu nutzen. Andere Ideen sind natürlich willkommen.

fhem mit EnOcean, Gardena, Vorwerk, Miele und Teufel/Raumfeld-Integration... nur meine Kinder wollen sich damit nicht anständig steuern lassen. Wer weiß Rat?

CoolTux

Bekommt denn das eigentlich benutze Modul zur Steuerung der Rollos in FHEM eine vom Taster ausgelöste Fahrt mit? Ich bin der Meinung das so etwas über das eigentliche Modul gelöst werden sollte.

Lese hier aber sehr gerne mit.
Du musst nicht wissen wie es geht! Du musst nur wissen wo es steht, wie es geht.
Support me to buy new test hardware for development: https://www.paypal.com/paypalme/MOldenburg
My FHEM Git: https://git.cooltux.net/FHEM/
Das TuxNet Wiki:
https://www.cooltux.net

Beta-User

Ergänzend zwei Gedanken dazu:
- ROLLO (hier nicht als "Zwischenschicht" sondern als "Nebenschicht") könnte evtl. helfen, den "korrekten" (oder wenigstens korrekteren) Stand der Position zu ermitteln und dann per "setreading" oder "setstate" auf das EnOcean-Ding zu schieben. Setzt halt voraus, dass der Taster Events wirft und ist ggf. ein Gefrickel...

- Wenn ASC eine Fahrt veranlasst, kannst du neuerdings den Fahrbefehl beliebig selbst manipulieren und z.B. per Perl-Funktion selbst checken, ob es sinnvoll ist, eine Kalibirerfahrt zu machen. Was nicht gehen dürfte, ist die prinzipielle Logik zu umgehen, mit der geprüft wird, ob überhaupt gefahren werden soll (Rollladen steht (vermeintlich) schon höher wie die neue Soll-Position nach oben fahren würde).
Server: HP-elitedesk@Debian 12, aktuelles FHEM@ConfigDB | CUL_HM (VCCU) | MQTT2: ZigBee2mqtt, MiLight@ESP-GW, BT@OpenMQTTGw | ZWave | SIGNALduino | MapleCUN | RHASSPY
svn: u.a Weekday-&RandomTimer, Twilight,  div. attrTemplate-files, MySensors

zife

Zitat von: CoolTux am 21 Februar 2022, 11:21:51
Bekommt denn das eigentlich benutze Modul zur Steuerung der Rollos in FHEM eine vom Taster ausgelöste Fahrt mit? Ich bin der Meinung das so etwas über das eigentliche Modul gelöst werden sollte.

Lese hier aber sehr gerne mit.
Gesteuert werden meine Rollos über das 10_EnOcean-Modul von Klaus. fhem bekommt die Tasterfahrten mit, aber die daraus folgende Positionsbestimmung ist früher oder später daneben.

Klaus hat schon ausführlich und gut in zurückliegenden Fäden argumentiert, warum eine Positionsbestimmung nicht besser hinzubekommen ist. Ich hab im EnOcean-Bereich nochmal einen "letzten" Versuch gestartet - vielleicht gibt's noch einen Trick, der mir entgangen ist. Aber groß ist meine Hoffnung da nicht.

Zitat von: Beta-User am 21 Februar 2022, 11:24:28
Ergänzend zwei Gedanken dazu:
- ROLLO (hier nicht als "Zwischenschicht" sondern als "Nebenschicht") könnte evtl. helfen, den "korrekten" (oder wenigstens korrekteren) Stand der Position zu ermitteln und dann per "setreading" oder "setstate" auf das EnOcean-Ding zu schieben. Setzt halt voraus, dass der Taster Events wirft und ist ggf. ein Gefrickel...

- Wenn ASC eine Fahrt veranlasst, kannst du neuerdings den Fahrbefehl beliebig selbst manipulieren und z.B. per Perl-Funktion selbst checken, ob es sinnvoll ist, eine Kalibirerfahrt zu machen. Was nicht gehen dürfte, ist die prinzipielle Logik zu umgehen, mit der geprüft wird, ob überhaupt gefahren werden soll (Rollladen steht (vermeintlich) schon höher wie die neue Soll-Position nach oben fahren würde).

Hmmm... ok, da muss ich mich mal tiefer eingraben. Mit ROLLO hab ich noch nichts gemacht... und mir eine Perl-Logik zu bauen, die die Kalibrierfahrt selbst ermittelt/durchführt, stellt mich vor eine gewisse (große) Herausforderung  ;D   Aber gut, ich geh mal schwanger mit der Idee und schau, was ich hinbekomme.

Mein Vorschlag zu so einer "Quick & Dirty"-Lösung kam neben o.g. eingeschränkten Fähigkeiten auch daher, dass es gemäß vergangener Threads/Posts zahlreiche Betroffene gibt, von denen viele eher im Perl-Anfänger-Status stehen ;)
fhem mit EnOcean, Gardena, Vorwerk, Miele und Teufel/Raumfeld-Integration... nur meine Kinder wollen sich damit nicht anständig steuern lassen. Wer weiß Rat?

Beta-User

Zitat von: zife am 21 Februar 2022, 11:38:35
Gesteuert werden meine Rollos über das 10_EnOcean-Modul von Klaus. fhem bekommt die Tasterfahrten mit, aber die daraus folgende Positionsbestimmung ist früher oder später daneben.

Klaus hat schon [...]
Na ja, wenn der Maintainer das Thema kennt, wird es vermutlich kaum genauer werden mit ROLLO (obwohl da afaik ziemlich viele Optionen drin sind, die Laufzeit-Einflüsse zu berücksichtigen wie Anlaufzeiten, ...) 

Zitat
und mir eine Perl-Logik zu bauen, die die Kalibrierfahrt selbst ermittelt/durchführt, stellt mich vor eine gewisse (große) Herausforderung  ;D   Aber gut, ich geh mal schwanger mit der Idee und schau, was ich hinbekomme.

Mein Vorschlag zu so einer "Quick & Dirty"-Lösung kam neben o.g. eingeschränkten Fähigkeiten auch daher, dass es gemäß vergangener Threads/Posts zahlreiche Betroffene gibt, von denen viele eher im Perl-Anfänger-Status stehen ;)
Na ja, auch bei einer q&d-Lösung müßtest du ja eine Idee haben, wie das konkret aussehen soll. Wenn du das zeigst bzw. mal skizzierst, kann man ggf. helfen, eine Lösung zu bauen, die man dann auch im "getestete Hardware"-Thread verlinken kann...
Server: HP-elitedesk@Debian 12, aktuelles FHEM@ConfigDB | CUL_HM (VCCU) | MQTT2: ZigBee2mqtt, MiLight@ESP-GW, BT@OpenMQTTGw | ZWave | SIGNALduino | MapleCUN | RHASSPY
svn: u.a Weekday-&RandomTimer, Twilight,  div. attrTemplate-files, MySensors

zife

Also, ich werd mich jetzt erstmal mit ROLLO auseinandersetzen und sehen, ob das ein Weg sein kann.
Wenn das scheitert, mache ich mich an Plan B.

Meine erste Idee zu Q&D war ja im Eingangspost skizziert... ich verstehe schon, dass das nicht die "Aufgabe" des ASC-Moduls ist. Bin nur gerade etwas verloren, wo so eine "Korrekturfahrt" nun eigentlich am besten aufgehoben wäre - als Ergänzung im EnOcean-Modul, als Ergänzung im ROLLO-Modul, als Ergänzung im ASC-Modul, als Perl-Schnipsel zur Verwendung mit dem ASC-Modul oder, oder, oder  ???

Selbst schuld... Die Geister die ich rief  ;D   Jetzt schneid ich den Elefanten erstmal in Scheiben und schau mir ROLLO genauer an.
fhem mit EnOcean, Gardena, Vorwerk, Miele und Teufel/Raumfeld-Integration... nur meine Kinder wollen sich damit nicht anständig steuern lassen. Wer weiß Rat?

Beta-User

...ohne die (konkreten) Readings zum zeitpunkt einer solchen Fahrt zu kennen ist das nicht so einfach. Das Attribut nennt sich "ASC_CommandTemplate", als Beispiel findet sich:
attr ROLLO ASC_CommandTemplate { fhem("set $name ".($pos+1024)).";set $name 0")}

Wenn du also alle Kommandos "durchlassen" willst bis auf das "mach zu":
attr ROLLO ASC_CommandTemplate { return fhem("set $name $pos") if $pos; <hier dein Schwurbel-Code für die Kalibrierfahrt samt "sleep" auf die Beendigungsbedingung + Endpositionsfahrt>}
Server: HP-elitedesk@Debian 12, aktuelles FHEM@ConfigDB | CUL_HM (VCCU) | MQTT2: ZigBee2mqtt, MiLight@ESP-GW, BT@OpenMQTTGw | ZWave | SIGNALduino | MapleCUN | RHASSPY
svn: u.a Weekday-&RandomTimer, Twilight,  div. attrTemplate-files, MySensors

zife

Danke für die Starthilfe!

Wenn ich nicht gleich konkreter werde, liegt das nur daran, dass das Projekt gerade größer wird, als anfangs gedacht - und mein Zeitrahmen wg Job & Familie nicht so üppig ist. Ich fuchs mich da mal rein! Zumindest hab ich ja nun wieder Hoffnung, ASC doch noch mit den "dummen" Aktoren zum Einsatz zu bringen  :)
fhem mit EnOcean, Gardena, Vorwerk, Miele und Teufel/Raumfeld-Integration... nur meine Kinder wollen sich damit nicht anständig steuern lassen. Wer weiß Rat?

Beta-User

...wird schon...

PS: Ich bin in der "CUL_HM-Logik" verhaftet, da ist "0" geschlossen, und 100 offen. Bitte dadurch nicht verwirren lassen, ich hoffe, das Prinzip ist jetzt jedenfalls klarer...

Generell sollte es so sein, dass sich die Familie daran gewöhnen kann, dass ASC den Job so macht, dass der Gang zum Taster unnötig wird...
Server: HP-elitedesk@Debian 12, aktuelles FHEM@ConfigDB | CUL_HM (VCCU) | MQTT2: ZigBee2mqtt, MiLight@ESP-GW, BT@OpenMQTTGw | ZWave | SIGNALduino | MapleCUN | RHASSPY
svn: u.a Weekday-&RandomTimer, Twilight,  div. attrTemplate-files, MySensors

zife

Zitat von: Beta-User am 21 Februar 2022, 12:23:59
Generell sollte es so sein, dass sich die Familie daran gewöhnen kann, dass ASC den Job so macht, dass der Gang zum Taster unnötig wird...

8)  Also... das Abbilden der Gedankengänge meiner Frau und Kinder in einer Logik dürfte noch den ein oder anderen KI-Spezialisten verschleißen...  ;D ;D ;D

Zitat von: Beta-User am 21 Februar 2022, 11:24:28
Ergänzend zwei Gedanken dazu:
- ROLLO (hier nicht als "Zwischenschicht" sondern als "Nebenschicht") könnte evtl. helfen, den "korrekten" (oder wenigstens korrekteren) Stand der Position zu ermitteln und dann per "setreading" oder "setstate" auf das EnOcean-Ding zu schieben. Setzt halt voraus, dass der Taster Events wirft und ist ggf. ein Gefrickel...

Sieht schon mal ganz gut aus, so bekomme ich zumindest eine deutlich genauere Position nach Taster-Fahrt hin. Ich bleibe dran.
fhem mit EnOcean, Gardena, Vorwerk, Miele und Teufel/Raumfeld-Integration... nur meine Kinder wollen sich damit nicht anständig steuern lassen. Wer weiß Rat?

Beta-User

Btw.: vermutlich ist dein Problem in https://forum.fhem.de/index.php/topic,126379.0.html ein Resultat aus setreading-Anweisungen, die du in diesem Zusammenhang hier absetzt...
Server: HP-elitedesk@Debian 12, aktuelles FHEM@ConfigDB | CUL_HM (VCCU) | MQTT2: ZigBee2mqtt, MiLight@ESP-GW, BT@OpenMQTTGw | ZWave | SIGNALduino | MapleCUN | RHASSPY
svn: u.a Weekday-&RandomTimer, Twilight,  div. attrTemplate-files, MySensors

zife

Danke für Idee... wäre mir auch zuzutrauen  8)

Allerdings... derzeit läuft "nur" ein zusätzliches ROLLO-Device, das ich erstmal in Kleinarbeit so justiert habe, dass die Position per Tasterfahrt halbwegs mit der Realität übereinstimmt. Es gibt hier also noch kein einziges "setreading" o.ä. ...
fhem mit EnOcean, Gardena, Vorwerk, Miele und Teufel/Raumfeld-Integration... nur meine Kinder wollen sich damit nicht anständig steuern lassen. Wer weiß Rat?

zife

So, ich mache Fortschritte. Ich habe nun ein ROLLO-Device angelegt ("Arbeitszimmer_RolladenR"), das genauere Positionen führt. Sobald sich dort das Reading "pct" ändert, überträgt ein Notify das per setreading an die Positionsangabe des eigentlichen (EnOcean)-Rolladen-Device ("Arbeitszimmer_Rolladen").

Das funktioniert soweit.

Nun kommt das ABER...
Weder fhemWEB noch mein Floorplan werden dadurch aktualisiert, obwohl fhemWEB longpoll auf 1 steht. Wenn ich das setreading per Kommandozeile absetze, ändert sich alles sofort und korrekt.

Hier mal mein NOTIFY:
defmod RolloTasterSyncSchreiben notify .*_RolladenR:pct:.* {\
   my $RolloR = $NAME;; $RolloR =~ s/RolladenR/Rolladen/;;\
   fhem ("setreading $RolloR position [$NAME:pct]")\
}
attr RolloTasterSyncSchreiben group DOIF und NOTIFY Fenster
attr RolloTasterSyncSchreiben room Funktionen

Zur Erklärung: ich wollte nur ein NOTIFY für alle Rolläden. Also reagiert es auf egal welches ROLLO-Device, erkennbar am Namen "...RolladenR". Es leitet dann daraus das eigentliche Rolladen-Device ab, indem es "RolladenR" durch "Rolladen" ersetzt - und diesem Device dann die neue Position aus dem ROLLO-Reading "pct" ins Rolladen-Reading "position" schreibt.

Ist vielleicht nicht die eleganteste/kürzeste Variante, aber naja, irgendwo muss ich ja anfangen  8)


So... also bleibt nun die Frage: wie schaffe ich es, dass fhemWEB und Floorplan ohne Reload die neue Position zeigen?
fhem mit EnOcean, Gardena, Vorwerk, Miele und Teufel/Raumfeld-Integration... nur meine Kinder wollen sich damit nicht anständig steuern lassen. Wer weiß Rat?

Beta-User

Wenn du "im Kreis herum" per Eventhandler (ROLLO ist insoweit auch einer...) Readings an ein Device schreiben willst, muss die Benennung der Eventhandler passen! Siehe z.B. auch https://forum.fhem.de/index.php/topic,126409.0.html.
Vermutlich ist es in diesem Fall das einfachste, ein kurzes "sleep" vor das "setreading" zu packen, damit das außerhalb der Event-loop ausgeführt wird.
Server: HP-elitedesk@Debian 12, aktuelles FHEM@ConfigDB | CUL_HM (VCCU) | MQTT2: ZigBee2mqtt, MiLight@ESP-GW, BT@OpenMQTTGw | ZWave | SIGNALduino | MapleCUN | RHASSPY
svn: u.a Weekday-&RandomTimer, Twilight,  div. attrTemplate-files, MySensors

zife

Ok, das werde ich probieren... danke!

Hab gerade noch an einer weiteren Baustelle zu kämpfen, das pack ich aber in einen separaten Faden, sonst zerfasert der hier endgültig.
Wenn man an einer Stelle zieht, fädelt sich der ganze Pullover auf  :P
fhem mit EnOcean, Gardena, Vorwerk, Miele und Teufel/Raumfeld-Integration... nur meine Kinder wollen sich damit nicht anständig steuern lassen. Wer weiß Rat?