Modul-Entwicklung: Somfy RTS

Begonnen von thdankert, 12 Juli 2014, 21:04:31

Vorheriges Thema - Nächstes Thema

thdankert

Hallo zusammen,

nachdem mein originaler Ankündigungsthread im CUL-Entwicklerforum (http://forum.fhem.de/index.php/topic,24158.html ) schon sehr off-topic geworden ist,
eröffne ich hier einen neuen Thread, um die Weiterentwicklung des FHEM-Moduls für Somfy RTS zu koordinieren.

Mein Code dafür liegt auf github: https://github.com/thdankert/somfy-rts-fhem.

Grüße,
Thomas
RPI mit FHEM, 2x Stackable CC (868 und 433MHz)

thdankert

Hallo Elektrolurch,

danke für die Nachricht, und dein Angebot, mitzuentwickeln!

Zitat von: Elektrolurch am 12 Juli 2014, 19:55:22
Hallo Thomas,

CUL 433 ist angekommen und die 9 Somfys sind angelernt. Funktioniert alles. Leider kann man aber wohl über setList kein Menü den Somfys  direkt zuordnen. Da musste ich noch einen dummy zwischen schalten.
Hmm, da habe ich vielleicht noch einen Fehler im Modul... braucht man für setList noch irgendetwas, oder sollte das "einfach so" funktionieren?

Zitat
Ich würde gerne das Somfy-Modul erweitern und wollte das mit Dir abstimmen, damit die Versionen nicht auseinander laufen.
1. Ich würde gerne ein Attribut "slaves" einführen. Das hat folgenden Hintergrund: Ich habe die Somfys jeweils einzeln und alle auf einen gemeinsamen Kanal "Alle_Rolladen" angelernt. Jetzt wäre es aus meiner Sicht sinnvoll, wenn ich bei "Alle_Rolladen" "slaves" definiere und die Mitglieder des gemeinsamen Kanals bzgl. state und SATE korrekt setze. Derzeit mache ich das außerhalb des Moduls. Ich denke an eine zukünftige Erweiterung, bei der man dann auch über fhem mitbekommt, wenn eine  Somfy FB einen Rolladen verfährt.. Dazu müsste man ja für die FB ein  ein eigenes device anlegen und als "slaves" den Rolladen eintragen.
Lässt sich das Verhalten nicht schon in FHEM mit einer structure abbilden? Damit lassen sich doch ebenfalls Devices zusammenfassen und gemeinsam steuern.
Ich würde das ungern nachbauen.

Um die Signale einer originalen FB korrekt zuzuordnen, würde es schon reichen, einem Device noch Sub-Adressen zuordnen zu können.
Dann müsste das Modul beim Empfang eines original-FB-Befehls nur noch schauen, zu welchem Gerät die Adresse gehört, und den Status korrekt aktualisieren.

Aus meiner Sicht ist es nicht so sinnvoll, ein neues Device für die original-FBs anzulegen - da ist die Gefahr zu groß,
dass man es normal in FHEM benutzt, und dadurch die original FB nicht mehr funktionert (weil der Rolling-Code nicht mehr stimmt).

Zitat
2. Ich würde mir mal ansehen, wie man eine eigene Ausgabe für das Modul Somfy hinbekommt. Dabei würde ich setList und eventMap auswerten, z.B. so:
devStateIcon geschlossen:fts_shutter_100 gesperrt:fts_shutter_90 Sonnenschutz:fts_shutter_50 offen:fts_shutter_10
eventMap /on:geschlossen/off:offen/go-my:gesperrt/off-for-timer 5/Dämmerung/on-for-timer 7:Sonnenschutz/
group Rolladen
setList state:geschlossen,gesperrt,Dämmerung,Sonnenschutz,offen
webCmd state

Man bekäme dann ein Menü mit den Eintragungen: geschlossen,gesperrt,Dämmerung,Sonnenschutz,offen

wie ich es derzeit über einen dummy realisiere.

(Wahrscheinlich kann man einen Teil des Codes vom Modul dummy dazu verwenden, muss ich mir allerdings noch ansehen)
Ich vermute, dafür gibt es schon fertigen Code in FHEM, den ich nur noch nicht nutze, ähnlich wie die SetExtensions.
Das übersteigt aber mein bisheriges Wissen vom FHEM-Sourcecode.

Zitat
Später möchte ich gerne noch die Fahrzeiten der Rollos einbringen, so dass man auch z.B. über
set Roll1 Pos 73 eine Position anfahren kann.
Ich habe das schon für meine Markise und einem slider gebaut und funktioniert tatellos.
Das finde ich eine sehr gute Idee! Wollte ich schon selbst einbauen, bin nur noch nicht dazu gekommen...
Dann kann ich auch endlich mehr als nur die "go-my" Position anfahren.

Teile des Codes in on-/off-for-timer könnte man dafür wiederverwenden.

Zitat
Wir müssten uns nur abstimmen, damit nicht ev. Verionen auseinander laufen. Ich würde die Änderungen dann hier einstellen und Du könntest sie prüfen und dann einchecken.
Wg. Urlaub kann ich so ab Mitte August damit anfangen. Wäre das ok?

Zur Entwicklung schlage ich github vor - das eignet sich ideal, wenn mehrere Personen am gleichen Code arbeiten wollen.
Hier habe ich das bisherige Modul schon hochgeladen: https://github.com/thdankert/somfy-rts-fhem

Nenn mir einfach deinen Nutzernamen dort, und ich gebe dir Lese+Schreibrechte für das Repository.

Grüße,
Thomas
RPI mit FHEM, 2x Stackable CC (868 und 433MHz)

Elektrolurch

Hallo Thomas,

den Account habe ich unter "Elektrolurch" angelegt. Mal sehen, ob ich mit der Seite zurecht komme, da ichh auf einen Screenreader  angewiesen bin und da scheinen einige Links nur als Ikon vorhanden zu sein.

Mit den "sub - Adressen" wäre natürlich eleganter, da gebe ich Dir recht, aber das geht dann schon wieder tiefer in den Code hinein, den Du geschrieben hast.

Ich habe mir in letzter Zeit bei der readingsGroup die HTML-Erzeugung angesehen und ich denke, dasss man da einen Teil aus dem dummy-Modul verwenden könnte. Ich sehe mir mal das in den nächsten Wochen an.

Für die Fahrzeiten der Rolladen denke ich mir da folgenden Ansatz:
- Die Auf- und Abfahrzeiten sind unterschiedlich, wegen der Last der Rolladen.
- Ich würde auch die Fahrzeit von ganz geschlossen, bis zur Position wo die untere Kante des Rolladen gerade noch aufliegt, aber alle Lamellen schon auseinander gezogen sind, berücksichtigen (Lüftungsposition)
- Und dann noch die gespeicherte Position für den "stop" (go-my) Befehl.

Ist das übrigens so gewollt?
Meine Rolladen gehen mit "on" nach unten. Ich hätte das eigentlich anders herum erwartet.
Bei den Fahrtpositionen müssen wir uns noch einigen, was 0 und was 100 bedeutet.
Bei meiner Markise habe ich 0 als eingefahren und 100 als komplett ausgefahren definiert.

Gruß


Elektrolurch
configDB und Windows befreite Zone!

thdankert

Zitat von: Elektrolurch am 13 Juli 2014, 09:46:09
Hallo Thomas,

den Account habe ich unter "Elektrolurch" angelegt. Mal sehen, ob ich mit der Seite zurecht komme, da ichh auf einen Screenreader  angewiesen bin und da scheinen einige Links nur als Ikon vorhanden zu sein.

Hallo,

super, ich habe dich hinzugefügt.
Das mit der Seite tut mir leid, ich wusste nicht, dass du einen Screenreader nutzt.
Zum Arbeiten brauchst du die github-Seite aber nicht, das geht alles von der Kommandozeile aus oder mit einem grafischen Tool.

Hast du schon "git" als Versionskontrollsystem genutzt?
Wenn nicht, gibt es eine gute kurze Anleitung hier: http://rogerdudler.github.io/git-guide/
Grob gesagt: Repository clonen, deine Änderungen vornehmen, committen, und mit "git push" mir wieder zur Verfügung stellen.

Zitat
Mit den "sub - Adressen" wäre natürlich eleganter, da gebe ich Dir recht, aber das geht dann schon wieder tiefer in den Code hinein, den Du geschrieben hast.

Ich habe mir in letzter Zeit bei der readingsGroup die HTML-Erzeugung angesehen und ich denke, dasss man da einen Teil aus dem dummy-Modul verwenden könnte. Ich sehe mir mal das in den nächsten Wochen an.

Die Subadressen sind eine erste Idee von mir - ich hab das noch nicht tiefer durchdacht, vielleicht funktioniert es gar nicht.
Da bin ich für Vorschläge offen.

Zitat
Für die Fahrzeiten der Rolladen denke ich mir da folgenden Ansatz:
- Die Auf- und Abfahrzeiten sind unterschiedlich, wegen der Last der Rolladen.
- Ich würde auch die Fahrzeit von ganz geschlossen, bis zur Position wo die untere Kante des Rolladen gerade noch aufliegt, aber alle Lamellen schon auseinander gezogen sind, berücksichtigen (Lüftungsposition)
- Und dann noch die gespeicherte Position für den "stop" (go-my) Befehl.
Finde ich gut so! Die Zeit für die go-my Position musst du aber nicht speichern, das macht der Rolladen ja intern selbst.

Zitat
Ist das übrigens so gewollt?
Meine Rolladen gehen mit "on" nach unten. Ich hätte das eigentlich anders herum erwartet.
Bei den Fahrtpositionen müssen wir uns noch einigen, was 0 und was 100 bedeutet.
Bei meiner Markise habe ich 0 als eingefahren und 100 als komplett ausgefahren definiert.

Ja, das ist gewollt, scheint die gängige Konvention in FHEM zu sein.
In den anderen Modulen (Homematic, FS20) ist es auch so, on = Rollo zu, off = Rollo offen.
Über eventmap kann man das aber nach Belieben anpassen.

Die Prozente sind laut FHEMWiki (http://www.fhemwiki.de/wiki/Slider_f%C3%BCr_HM-Rollladensteuerung_anzeigen) wie folgt: 100% = Rollo offen, und 0% = Rollo geschlossen.
Das deckt sich auch mit den verfügbaren Icons in FHEM (wd_blk_shutter_open.png und wd_blk_shutter_closed.png).
Ist aber leider genau andersherum als bei deiner Markise...

Grüße,
Thomas
RPI mit FHEM, 2x Stackable CC (868 und 433MHz)

Elektrolurch

Hallo Thomas,

mit dem repository habe ich mich noch nicht beschäftigt, werde mir mal den Link ansehen und schauen, was ich da auf Kleinweich Win 8 brauche.

Zitat:
- Und dann noch die gespeicherte Position für den "stop" (go-my) Befehl.
Finde ich gut so! Die Zeit für die go-my Position musst du aber nicht speichern, das macht der Rolladen ja intern selbst.

Na, um einen go-my - Befehl bezüglich der Positionsanzeige in fhem richtig zu tracken, muss man ihn speichern.

Habe bezüglich der Ausgabe für einen Rolladen über die fhem-web mal ein wenig herum gestöbert. Irgendwie hat das wohl etwas mit der fw_summary zu tun, die man als Modul einhängen kann. Muss mal sehen, ob ich da verständliche Beispiele finde. Im dummy ist da nichts drin, wie ich ursprünglich dachte....

Gruß

Elektrolurch
configDB und Windows befreite Zone!

Elektrolurch

#5
Hallo zusammen,

ich hänge hier mal die erste Erweiterung an den post an.
Was ist neu?
1. Man kann nun auch die Rolladen über einen Positionswert verfahren. Dazu wurde das set-Kommando erweitert und vier Attribute eingeführt. Die müssen allerdings gesetzt sein, damit das "set <device> pos <wert> auch funktioniert.
<Wert> ist zwischen 0 (=offen) und 100 (der Rolladen verdeckt zu 100 % das Fenster, steht aber noch auf Lüftung).
Außerdem versteht das set nun auch "open" (=off) und "close" (=on).
Um die Fahrtzeiten der Rolladen korrekt zu errechnen, sind folgende 'Attribute zu setzen:
drive-down-time.to-100: Die Zeit von ganz "offen" bis "Rolladen ist gesperrt" (nicht in der Endposition "close")
drive-down-time-to-close: Die Fahrtzeit herunter von ganz "open" zu ganz "close". Ist meist um 3 - 5 Sekunden größer als "drive-down-time-to-100".
drive-up-time-to-100: Zeit von Endposition "close" bis zur Sperrposition- Meist 3 bis 5 Sekunden.
drive-up-time-to-open: Zeit für das Hochfahren von der Endposition "close" bis "open".

Die gewünschte Position wird dann über den set-Befehl in Fahrtzeit umgerechnet und auf den "state" des Devices abgebildet (in 10er-Schritten), damit kann man sich die Position auch über ein Ikon darstellen lassen:

devStateIcon close|pos.100:fts_shutter_100:open pos.90:fts_shutter_90:open pos.80:fts_shutter_80:open pos.70:fts_shutter_70:open pos.60:fts_shutter_60:open pos.50:fts_shutter_50:open pos.40:fts_shutter_40 pos.30:fts_shutter_30 pos.20:fts_shutter_20 pos.10:fts_shutter_10 open|pos.0:fts_shutter_10
drive-down-time-to-100 12.56
drive-down-time-to-close 16.90
drive-up-time-to-100 3.18
drive-up-time-to-open 18.27
eventMap /open:offen/close:geschlossen/pos 100:gesperrt/pos 90:Dämmerung/pos 80:Sonnenschutz/
group Rolladen
room Arbeitszimmer
verbose 3
webCmd offen:gesperrt:geschlossen:pos

# Damit gibt es ein Menü für die Positionsauswahl

Über das Event-Map geht dann auch so was:
set AzFRolladen Sonnenschutz

Problem:
Die Fahrzeiten sind abhängig von der Position, d.h. beim Herunterfahren wird der Rolladen immer schneller, je weiter er herab fährt. Umgekehrt beschleunigt er, je weiter er bereits Hochgefahren ist.
Im Ergebnis steht der Rolladen an einer etwas anderen Stelle, wenn er von ganz "offen" auf "pos 50" heruntergefahren wird, als wenn von ganz "geschlossen" auf "pos 50" gefahren wird.
Dazu lasse ich mir aber noch ev. etwas einfallen. Für die ersten "Spielereien ist es erst einmal genau genug.
Die "alten" set - Befehle on,off,on-for-timer,off-for-timer funktionieren auch noch.
Ich habe allerdings den state geändert, der wiederspiegelt nun die Position des Rolladen wieder.

@Thomas: Ich habe mir den Stand vom git herunter geladen, leider klappte es aber nicht mit dem einchecken der neuen Version. Ich denke, dass ich da in meinem git irgendwo den Usernamen hinterlegen muss.Leider steht da nix zu in der Kurzanleitung.

Leider kann ich keine CULF programmieren, sobald aber auch der Empfang von Somfy RTS - Signalen implementiert wurde, werde ich das Modul so erweitern, dass die Rolladen auch dann in fhem die korrekte Position haben, wenn sie über eine Somfy-FB verfahren wurden. Habe da schon ein wenig vorarbeit in dem Modul geleistet.
Änderung: Der state wird nun nach Erreichen der Position erst berechnet, auf Basis der Zeit zwischen dem on/off - Befehl und dem Stop-Befehl, dadurch geht die Positioniererei schon deutlich präziser.

Gruß

Elektrolurch
configDB und Windows befreite Zone!

thdankert

Hallo Elektrolurch,

super Arbeit, ich danke dir!
Ich habe es jetzt in github eingecheckt, teste es jetzt noch bei mir zuhause, und werde es danach in den FHEM-Code einchecken.

Bei der CULFW kann ich evtl. helfen, ich habe den Sende-Modus ja schon implementiert - Empfang ist leider etwas umfangreicher.

Grüße, Thomas
RPI mit FHEM, 2x Stackable CC (868 und 433MHz)

Elektrolurch

Hallo Thomas,

schön, dass es gefällt. Über die Funktion SOMFY_UpdateNewPos habe ich schon die "Vorarbeit" getroffen, damit man auch bei der Bedienung der Somfys über andere FBs die Position richtig tracken kann. Der letzte Durchbruch war am Sonntag, als ich herausgefunden habe, dass der InternalTimer ja auch Nachkommastellen verarbeiten kann, dass hat die ganze Positioniererei schon vereinfacht.
Habe heute noch eine kleine Nachbesserung vorgenommen, bei den Befehlen open und close fährt ja der Rolladen ohne Zeitsteuerung immer auf eine definierte Endposition, da kann ich mir das Berechnen ja sparen, dass habe ich noch heute eingepflegt, muss es aber noch testen, bevor ich es hochlade.
Habe die Fahrtzeiten der Rolladen gestern noch Mal genau gemessen und festgestellt, dass die bei gleichem Fenstertyp doch leicht variieren. Aber die Position wird jetzt so genau angefahren, dass man sie mit einem Metermaß nachmessen kann.

Frage: Welche Befehle muss ich in der Kommandozeile von gitap eingeben, damit ich die Versionen auch hochladen kann?
Leider, wie schon weiter oben gesagt, muss ich wohl ihm den Benutzer und den Zugriff auf Dein gitap beibringen, steht aber nicht in der Kurzanleitung.
Vielleicht ist auch die Zeitsteuerung / Programmierung von interesse, die ich hier im Forum hochgeladen habe. Da sind ein paar ganz nette Spielereien drin und die Anpassungen habe ich dokumentiert.

Gruß


Elektrolurch
configDB und Windows befreite Zone!

thdankert

Zitat von: Elektrolurch am 19 August 2014, 12:17:52
Frage: Welche Befehle muss ich in der Kommandozeile von gitap eingeben, damit ich die Versionen auch hochladen kann?

Bei github muss man erst seinen SSH-Key rüberkopieren, danach kann man mit "git commit" und "git push" seine Sachen wieder hochladen.

Ich denke es geht am einfachsten mit der App: https://windows.github.com/
Die kannst du herunterladen, und dann auf der Projektseite (https://github.com/thdankert/somfy-rts-fhem) "Clone in Desktop" drücken.

Danach kopierst du dein SOMFY-Modul rein, und die App sollte die Änderungen erkennen.
Dann einfach Committen und in der App auf "Sync" drücken.

Wenn du noch Fragen dazu hast, meld dich nochmal (gern auch per PN, dann versuchen wir es so).

Grüße,
Thomas
RPI mit FHEM, 2x Stackable CC (868 und 433MHz)

Elektrolurch

Die app hatte ich mir schon installiert, die scheint aber mit einem webkit programmiert worden zu sein, so dass mein ScreenReader schweigt und ich das Teil nicht bedienen kann.
Bei dem Kommandozeilen-Tool ist es leider so, dass die Hilfetexte so schnell durchlaufen, so dass ich die nicht "mental auswerten" kann.
Mit dem ssh-key klingt irgendwie etwas aufwendig....

Gruß

Elektrolurch
configDB und Windows befreite Zone!

thdankert

Hallo Elektrolurch,

entschuldige, ich habe nicht daran gedacht, dass du einen Screenreader nutzt.

Versuchs mal so (Git den richtigen Nutzernamen + Email beibringen):
https://help.github.com/articles/set-up-git#platform-windows

Hier nochmal fürs Terminal:
git config --global user.name "YOUR NAME"
git config --global user.email "YOUR EMAIL ADDRESS"


Und dann den Clone über HTTPS:
https://help.github.com/articles/which-remote-url-should-i-use#cloning-with-https-recommended

Bei dieser Methode muss man keine SSH-Keys irgendwohin kopieren, es wird stattdessen das Github-Passwort abgefragt.
Darüber kannst du den Clone machen (auch ohne die github-App, einfach von der Kommandozeile).

Grüße
RPI mit FHEM, 2x Stackable CC (868 und 433MHz)

Elektrolurch

Hallo Thomas,

die von mir programmierte Positionierbarkeit  der Rolladen läuft jetzt schon seit einiger Zeit ohne Probleme. Ich habe heute per "update check" gesehen, dass Du die Änderungen am Modul noch nicht offiziell in die fhem-contribution eingestellt hast. Gibt es einen Grund dafür?
Vorher mal bitte checken, ob ich hinten die erweiterten Attribute in dem html - Teil richtig beschrieben habe.

Was jetzt bei mir noch etwas störend ist, dass ich ja nicht mitbekomme, wenn ein Rolladen von einer anderen FB aus gesteuert wird. Dafür müsste ja die CULF auch um einen Empfangsteil  erweitert werden. Hast Du da schon was gemacht?

Um den Teil im Modul würde ich mich dann versuchsweise (:-= mal kümmern wollen.

Gruß

Elektrolurch
configDB und Windows befreite Zone!

thdankert

Hi,

da steckt keine Absicht dahinter, ich hatte nur noch keine Zeit, das einzubauen und einzuchecken.

Zum Empfang: das ist umfangreicher als reines Senden, vielleicht schaff ich das über Weihnachten, in die CULFW zu integrieren.
RPI mit FHEM, 2x Stackable CC (868 und 433MHz)

Bensen9

Hallo ihr beiden.

Ich teste gerade das Modul von Elektrolurch habe aber ein paar Probleme.

Meine on/off-for-Timer gehen nicht mehr mit dem neuen Modul. Bei Benutzung verhalten sie sich wie on/off.

Das runterfahren zu einer Position mit pos geht gut aber das nach oben nicht. Bin ich beispielsweise auf pos 80 und möchte danach auf pos 20 so bewegt sich der Laden nur ganz kurz und nichts weiteres passiert mehr.

Viele Grüsse Ben

Elektrolurch

Hallo,

dass mit on-for-timer sehe ich mir mal an.
Stimmt: Der Rolladen fährt bis zur Endposition, also ohne timer.
Hatte ich nicht mehr getestet, weil ja "pos" das tut, was ich brauche.

Das Runter- und Hochfahren habe ich jetzt seit mehreren Wochen in Benutzung.
Möglicherweise hast Du die Zeiten vielleicht nicht richtig eingegeben?

Es sind ja 4 Zeiten zu hinterlegen:

1. Die Zeit von offen bis zu jenem Punkt bei dem der Rolladen gerade die untere Kante berührt, also die Lamellen noch nicht zusammen geschoben sind.
Beispiel 15 sec
2. Die Zeit von offen bis ganz geschlossen - Beispiel 20 sec.
3. Die Zeit von ganz geschlossen bis zu jener Position, wo die untere Kante des Rolladens gerade das Fenster berührt, Beispiel 5.5 sek.
3
4. Die Zeit von ganz geschlossen bis ganz offen, Beispiel 21.5 s

Mit "verbose 4" sollten berechnete Werte angezeigt werden.

Gruß

Elektrolurch
configDB und Windows befreite Zone!