Loxone + Velux KLF 200

Einklappen
X
 
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge
  • Xmedia
    Smart Home'r
    • 03.09.2015
    • 92

    #1

    Loxone + Velux KLF 200

    Hallo zusammen,

    Ich habe bei mir zu Hause mein Smart Home mit Loxone realisiert. Da wir den Dachstock zu einem Wohnzimmer umfunktioniert haben, kamen entsprechend auch Dachfenster von Velux zum Einsatz. Steuerungstechnisch waren wir diese schon immer ein Dorn im Auge. Aber das ist ja nichts neues :-)
    Nun habe ich aktuell ein KLF 200 zu Hause zum testen. Bin aber nicht bereit ein Haufen Ein- und Ausgänge zu opfern.
    Insgesamt habe ich 8 Rollläden und 3 elektrische Fenster. Damit ich wunschgemäss alles einzeln steuern könnte bräuchte ich 3 Velux KLF 200 + ne gaaaanz viele Extensions.
    Um Lösungen zu finden habe ich einige Sachen durchsucht:
    Synology + FHEM + Tahoma Box (Bin Linux-technisch aber nicht so top)
    Velux KLF 200 + Openhab + Synology + Loxone

    Per Zufall bin ich auf folgende Seite gestossen (Kommentar unten):

    Dort habe ich die Person angesprochen, welche die Anbindung als KLF-200 mit einem Pico C Baustein gelöst hat.
    Nach Rücksprache würden ich euch gerne den Code zur Verfügung stellen:

    //GLOBAL DEFINES

    #define RD_BLOCK_SIZE 128



    ///GLOBAL VARS

    int DEBUG_LEVEL=0;

    char* IP_ADDRESS = „IP ADRESSE der Velux";

    char* PORT = "80";

    char streamname[100];

    sprintf(streamname, "/dev/tcp/%s/%s/", IP_ADDRESS, PORT);





    ///GENERAL HELPER Functions

    //execCommand executes the TCP Command (Http Request) and returns the response in the responseBuffer

    void execCommand(char* pTcpCmd ,char* responseBuffer, int responseBufferSize){

    char szCommandBuffer[1024];

    STREAM* pTcpStream = stream_create(streamname,0,0);

    stream_write(pTcpStream,pTcpCmd,strlen(pTcpCmd)); // write to output buffer

    stream_flush(pTcpStream); // flush output buffer



    //Reading response

    char szBuffer[400];

    char szTmpBuffer[RD_BLOCK_SIZE];

    int nCnt;

    int nBytesReceived = 0;

    // read stream

    do

    {

    nCnt = stream_read(pTcpStream,szTmpBuffer,RD_BLOCK_SIZE,4 000);



    if (nCnt + nBytesReceived > responseBufferSize)

    {

    nBytesReceived = -1;

    break; //File is too large

    }

    else if(nCnt > 0)

    {

    strncpy((char*)szBuffer + nBytesReceived, szTmpBuffer, nCnt);

    strncpy((char*)responseBuffer + nBytesReceived, szTmpBuffer, nCnt); //Vielleicht

    nBytesReceived += nCnt;

    }

    }

    while (nCnt > 0);



    }



    //AUTH Function return token

    void authenticate(char* tokenBuffer){

    char tempBuffer[1024];

    char szCommandBuffer[1024];

    char szResponeBuffer[1024];

    char* body="{"action":"login","params":{"password":\“DEI N PASSWORT BEI VELUX"}}";



    sprintf(szCommandBuffer, "POST /api/v1/auth HTTP/1.1\r\nHost: %s\r\nConnection: keep-alive\r\n Content-Type: application/json;charset=utf-8\r\n Content-Length: %d\r\n\r\n%s",

    IP_ADDRESS, strlen(body), body);



    //execute http command

    execCommand(szCommandBuffer,szResponeBuffer,1024);



    printf("Velux API: login");



    if (DEBUG_LEVEL > 0) printf(szCommandBuffer);

    if (DEBUG_LEVEL > 0) printf("szResponeBuffer:");

    if (DEBUG_LEVEL > 0) printf(szResponeBuffer);



    tempBuffer = strstrskip(szResponeBuffer,"token":"");

    strncpy (tokenBuffer, tempBuffer, 24);

    if (DEBUG_LEVEL > 0) printf("tokenBuffer");

    if (DEBUG_LEVEL > 0) printf(tokenBuffer);



    }





    //LOGOUT Function return token

    void logout(char* tokenBuffer){



    char szCommandBuffer[1024];

    char szResponeBuffer[1024];

    char* body="{"action":"logout","params":{}}";



    sprintf(szCommandBuffer, "POST /api/v1/auth HTTP/1.1\r\nHost: %s\r\nConnection: keep-alive\r\n Connection-Type: application/json;charset=utf-8\r\n Content-Length: %d\r\n\r\n%s",

    IP_ADDRESS, strlen(body), body);



    //execute http command

    execCommand(szCommandBuffer,szResponeBuffer,1024);



    printf("Velux API: logout");



    }





    //Run a Velux Program

    void runWindowProgram(int progNr){

    char szTokenBuffer[1024];

    authenticate(szTokenBuffer);

    //TODO some error handling, if no token was set

    // if (DEBUG_LEVEL > 0) printf("Token %c", szTokenBuffer);



    char szCommandBuffer[1024];

    char szResponeBuffer[1024];

    //TODO how to add the program progNr int to char?

    int veluxProgNr = progNr + 1;



    char* bodystart="{"action":"run","params":{"id":";

    char* bodyend="}}";



    if (veluxProgNr < 10) int length = strlen(bodystart) + strlen(bodyend) + 1;

    if (veluxProgNr > 9) int length = strlen(bodystart) + strlen(bodyend) + 2;



    sprintf(szCommandBuffer, "POST /api/v1/scenes HTTP/1.1\r\nHost: %s\r\nConnection: keep-alive\r\nContent-Length: %d\r\nAuthorization: Bearer %s\r\n\r\n%s%d%s",

    IP_ADDRESS, length, szTokenBuffer, bodystart, veluxProgNr, bodyend);



    execCommand(szCommandBuffer,szResponeBuffer,1024);



    if (DEBUG_LEVEL > 0) printf("szCommandBuffer");

    if (DEBUG_LEVEL > 0) printf(szCommandBuffer);



    printf("Velux API: Run program: %d", veluxProgNr);



    //Logout

    logout(szTokenBuffer);



    }





    //GLOBALS FOR EVENT LOOP

    int nEvent;

    float f1;

    //MAIN EVENT LOOP

    //RUNS FOREVER

    while (1==1) {



    nEvent = getinputevent();



    int i;

    for (i = 0; i < 12; i++)

    {

    if (nEvent & 0x8 << i)



    {

    f1 = getinput(i);

    printf("Velux API: Input Event received at %d with %f ",i+1 ,f1);

    if(f1 > 0.5f){

    runWindowProgram(i);

    }

    }

    }

    //GIVE others time to run

    sleep(100);

    }

  • Xmedia
    Smart Home'r
    • 03.09.2015
    • 92

    #2
    Ich bin selber kein Programmierer - Hut ab für diese Leistung :-)
    Bei mir funktioniert der Code auf Anhieb.
    Folgende Punkte habe ich dazu:

    - Die IP des KLF-200 muss noch definiert werden
    - Das Passwort des KLF 200 muss noch eingepflegt werden
    - Vorab müssen die Programme auf dem KLF-200 definiert sein
    - Bis ein Befehl umgesetzt wird, vergehen 5-7 sec.
    - Es kann nur ein Befehl nach dem anderen ausgeführt werden
    - Das Programm 0 beim KLF-200 kann aktuell nicht angesprochen werden
    - Da der Baustein nur 13 Eingänge besitzt, können auch nur 13 Programme angesteuert werden mit einem Baustein
    - Eingang 1 entspricht Programm 1 beim KLF-200

    Kommentar

    • Xmedia
      Smart Home'r
      • 03.09.2015
      • 92

      #3
      An alle Pico-C Cracks :-)
      Ich hätte noch folgende Wünsche für eine mögliche Anpassung:

      - Besteht die Möglichkeit, dass man die Ausführungszeit irgendwie reduzieren kann anhand des Pico-C Codes?
      - Aktuell ist der Baustein beim KLF 200 immer angemeldet - Dies bedeutet, dass man sich über den Browser nicht mehr anmelden kann.
      Lässt sich dies ändern, dass sich der auszuführende Befehl zuerst anmeldet, ausführt und dann wieder abmeldet - ohne Zeitverlust??
      - Kann man eine Sicherheit einbauen, dass bei mehrfachen Befehlen die Ausführungen nacheinander abgearbeitet werden, ohne dass eine Fehlermeldung auf dem KLF-200 entsteht?
      - Ist es auch möglich noch eine Rückmeldung mit einzubauen? (Textausgabe, etc. ???)

      Kommentar

      • Xmedia
        Smart Home'r
        • 03.09.2015
        • 92

        #4
        Ich hoffe, dass ich dem einen oder anderen helfen konnte, indem ich den den Code weitergeleitet habe. Vielleicht entsteht ja daraus noch was. 😉

        Vielen Dank nochmals am Bruno, welcher den Code geschrieben hat. So kann man mit einer KLF-Box alle Velux-Fenster steuern, ohne Limitierung.

        gruss
        Xmedia

        Kommentar

        • Labmaster
          Lox Guru
          • 20.01.2017
          • 2574

          #5
          Also vom schnellen drüberfliegen, sehen ich im Code jedenfalls keine mutwillige Verzögerung,
          Was auffällt ist, das für einen Zugriff immerhin drei POSTs abgesetzt werden müssen, das kann mitunter (je nachdem wie schnell die KLF Box reagiert) schon zu Verzögerungen führen.
          Wenn man die Verbindung nun jedes mal auch noch schließen würde, könnte das zu zusätzlicher Verzögerung führen, das müsste man ausprobieren.
          In den 3 POSTs steht ....%s\r\nConnection: keep-alive\r\nContent-Length: ....
          da könnte man mal versuchen das "Connection: keep-alive\r\n" zu entfernen

          Kommentar

          • technikblog
            LoxBus Spammer
            • 13.01.2016
            • 277

            #6
            Hallo zusammen,
            wollte gerade einen Beitrag darüber schreiben, weil ich mit den Herren auch schon länger in Kontakt bin und gestern bei mir alles lief. Das habe ich dann dokumentiert, ihr dürft gerne ANmerkungen machen, denke eine saubere Dokumentation dürfte hier helfen für die nächsten die es gerne umsetzen:

            How To Anleitung zur Einbindung von Velux Produkten wie Dachfenster und Rollos in Loxone mittels Velux KLF200 Interface.
            Nachrüster-EFH: MS, Extension, EnOcean, Awaptec Switches, Loxberry, Zählterinterface Air, 2 Loxone 3 Phasenzähler, Eastron Sdm630 Modbus, Photovoltaik 9.82kWp, Eigenverbrauchsoptimierung mit Loxone

            Projekte: Photovoltaik-Anlage, Keba P30 Wallbox, VW e-Golf Test, myStrom WiFi Switch einbinden

            Kommentar


            • Labmaster
              Labmaster kommentierte
              Kommentar bearbeiten
              Naja, aber 5s bis 10s bis das KLF200 anspricht, daß wäre bei mir längts schon wieder (durchs Fenster des selbigen Herstellers) raus geflogen

            • technikblog
              technikblog kommentierte
              Kommentar bearbeiten
              Bedienung im KLF200 Webinterface hat keine verzögerung, nur über die Netzwerkbefehle aus Loxone heraus. Insofern nehme ich an, da gibt es noch Optimierungspotential.

              Zu Velux: Sind in der Schweiz sehr verbreitet, meines Erachtens auch hochwertig und gut, nur Einbindung in Systeme ist seeehr schlecht...
          • Xmedia
            Smart Home'r
            • 03.09.2015
            • 92

            #7

            technikblog
            Vielen Dank für deinen Beitrag.
            Bezüglich den Bugs kann ich Dir nur zustimmen! Sobald 1 Befehl ausgeführt wird, wenn einer zuvor noch am laufen ist, hängt sich die Box auf.
            Bin aber überrascht, dass Du bei 2 Rolläden nicht über das KLF 50 gehst?! Aber egal :-)
            Sofern die Firmware nicht angepasst wird, ist das KLF 200 keine Lösung - zu Fehleranfällig bei der LAN-Lösung
            Melde mich gerne noch direkt bei Dir :-)

            Labmaster Vielen Dank für den Input bezüglich Login/Logout:
            Hat Prima funktioniert nach einiger Zeit kann man auf das Interface wieder zugreifen und eventuelle Konfigurationen vornehmen

            Kommentar

            • Gast

              #8
              Hallo zusammen,
              aktuell habe ich ein ähnliches Problem mit der Ansteuerung von Somfy io Antrieben. Wäre hier ein Pico Baustein an eine TaHoma Box von Somfy auch machbar?
              Bin kein Software Entwickler, aber evtl. hat hier schon jemand was in der Richtung gemacht.
              Im Forum habe ich dazu bisher nur Lösungen mit FHEM gefunden.

              Kommentar

              • technikblog
                LoxBus Spammer
                • 13.01.2016
                • 277

                #9
                Was länger währt oder so... KLF200 API
                Nachrüster-EFH: MS, Extension, EnOcean, Awaptec Switches, Loxberry, Zählterinterface Air, 2 Loxone 3 Phasenzähler, Eastron Sdm630 Modbus, Photovoltaik 9.82kWp, Eigenverbrauchsoptimierung mit Loxone

                Projekte: Photovoltaik-Anlage, Keba P30 Wallbox, VW e-Golf Test, myStrom WiFi Switch einbinden

                Kommentar

                • Xmedia
                  Smart Home'r
                  • 03.09.2015
                  • 92

                  #10
                  Wäre mit der API auch eine Lösung über Pico-C möglich?

                  Kommentar


                  • jousch
                    jousch kommentierte
                    Kommentar bearbeiten
                    Gibt es dazu bereits ein Update? Hat jemand bereits das über Pico-C geschafft? Ich stehe kurz vor Kauf von zwei KLF 200
                • Micha
                  Dumb Home'r
                  • 02.09.2015
                  • 14

                  #11
                  Hallo zusammen,

                  erstmal vielen Dank für die tolle Arbeit hier. Dank der Hilfe des Forums habe ich als Laie alle Wünsche in Loxone umsetzen können. Dieses Mal fehlt es mir wohl einfach an Fachwissen. Ich wollte keinen neuen Thread eröffnen, da es hier gut reinpasst:

                  Um meine Dachfenster in Loxone einzubinden, habe ich mir ein VELUX KLF200 Interface besorgt. Da es schon die neue Firmware hatte, funktioniert die Script Lösung nicht mehr, sondern nur noch via API.
                  Da ich auch noch einen Raspberry Pi mit OPENHAB2 nutze, bin ich den Umweg über OPENHAB gegangen - hier gibt es ein VELUX Binding, das ich schließlich zum Laufen bekommen habe: Über Openhab kann ich meine Dachfenster steuern :-)

                  Jetzt zum Problem: Ich möchte das ganze natürlich auch in Loxone einbauen, was über die REST API Schnittstelle geschieht.
                  Dieser Befehl funktioniert auch prompt ohne Verzögerung:

                  HTML-Code:
                  curl -X POST --header "Content-Type: text/plain" --header "Accept: application/json" -d "ON" "http://*IPOpenhab:8080*/rest/items/DachfensterKuechelueften"
                  Leider weiß ich nun nicht, wie ich das korrekt als HTTP Post Befehl in den Virtuellen Ausgang packe, dafür kenne ich mich zu wenig aus.
                  Klicke auf die Grafik für eine vergrößerte Ansicht

Name: Virtueller Ausgang.JPG
Ansichten: 3871
Größe: 79,2 KB
ID: 210164
                  Klicke auf die Grafik für eine vergrößerte Ansicht

Name: Befehl.JPG
Ansichten: 3446
Größe: 194,0 KB
ID: 210165

                  Könnte mir jemand von euch weiterhelfen, wo ich welchen Teil eintragen muss?
                  Herzlichen Dank!

                  Kommentar

                  • KevinKrueger
                    Extension Master
                    • 26.01.2016
                    • 199

                    #12
                    Guten Abend !

                    Hat sich inzwischen mal jemand an die API rangetraut ? Ich hab da ja leider so wenig Ahnung von ...

                    Viele Grüße
                    Kevin

                    Kommentar

                    • challo
                      LoxBus Spammer
                      • 21.09.2016
                      • 372

                      #13
                      Verwende die API über fhem. Dort gibt es eine Implementierung. Läuft echt super. Fhem habe ich auf dem loxberry laufen.

                      Kommentar

                      • udgesbou
                        Dumb Home'r
                        • 24.07.2022
                        • 20

                        #14
                        Zitat von challo
                        Verwende die API über fhem. Dort gibt es eine Implementierung. Läuft echt super. Fhem habe ich auf dem loxberry laufen.
                        Servus, per FHEM kann ich meine Rollos auch steuern, allerdings scheitere ich nun an Loxone Irgendwann sollten sie per Glastaster steuerbar sein. Mir würde es aber schon erstmal reichen, wenn es per Loxone-Config funktioniert oder per Visualisierung

                        Kannst du mir vielleicht ein Beispiel schicken, wie das ganze in Loxone aussehen müsste? *fleh"


                        Danke und Grüße

                        Kommentar

                      • NCom
                        Dumb Home'r
                        • 24.05.2017
                        • 18

                        #15
                        Hallo vielleicht kann ich dir helfen, ich steuere mit Loxone über FHEM meine Fritz!DECT Steckdosen.

                        Der Raspberry hat die IP: 192.168.3.172, Loxone IP: 192.168.3.173 die habe ich im FHEM freigeschaltet
                        (und natürlich meinen PC zum testen )

                        Code:
                        define WEBapi FHEMWEB 9086 global
                        attr WEBapi allowfrom 192.168.3.173|127.0.0.1
                        attr WEBapi csrfToken none​
                        Und dann als virtuellen Ausgang in Loxone eingefügt.

                        Klicke auf die Grafik für eine vergrößerte Ansicht

Name: 0001.png
Ansichten: 827
Größe: 82,2 KB
ID: 374146Klicke auf die Grafik für eine vergrößerte Ansicht

Name: 0002.png
Ansichten: 797
Größe: 108,7 KB
ID: 374147
                        Klicke auf die Grafik für eine vergrößerte Ansicht

Name: 0003.png
Ansichten: 803
Größe: 514,3 KB
ID: 374148

                        Klicke auf die Grafik für eine vergrößerte Ansicht

Name: 0004.png
Ansichten: 828
Größe: 187,1 KB
ID: 374149



                        Kommentar

                        Lädt...