Ankündigung

Einklappen
Keine Ankündigung bisher.

Loxone Automatikjalousie und KNX

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • #31
    Ich glaube ich habe nun für mich eine brauchbar Lösung gefunden meine MDT KNX Raff Aktoren mit dem Automatikjalousie Bausstein von Loxone zu verbinden.
    Meine Anforderungen war, die komplette Kontrolle der Loxone Automatikjalousie zu geben, jedoch trotz der KNX Timing Herausforderung die Lamellenstellung passend hin zu bekommen, hierbei sollte jedoch die manuelle Steuerung über die Eingänge Up/Dw am Autojalo Baustein noch grundsätzlich funktionieren, mal von Verzögerungen bei der manuellen Verstellung durch den KNX Bus abgesehen.

    Die für mich nun beste Lösung war, die Positionshöhe und die manuelle Verstellung über Up / Down am Aktor direkt zu machen, wohlweislich, daß durch Bustiming es gegebfalls mal nicht stimmen wird. Bei der Höheeinstellung fällt das nicht wirklich auf, und beim manuelle verstellen der Lamellen (kurzes antickern) sieht man ja sofort ob es passt oder nicht.
    Die Lamellenverstellung im Automatik Betrieb läuft jedoch über die direkte Lamellenpositionsvorgabe von dem Automatikjalousiebaustein an den Aktor somit stimmt diese so gut, wie es der KNX Aktor selbst eben intern kann. (mein MDT Aktor macht das bisher wirklich gut, passene Timing Einstellungen im Aktor vorausgesetzt)

    Wie man in der Konfig sieht, benötigt man auch Infos aus dem Aktor (zumindest bei meinen MDT), in diesen Fall ob die Jalo gerade fährt oder nicht. Abhängig davon wird der Stopp am Aktor entsprechend getriggert oder nicht, da im Stillstand der Stopp Eingang zu einer Kurzfahrt führen würde.

    In der Autojalo Konfig habe ich Tdt, Tot h auf 0 gesetzt und M möglichst kurz da dies eh vom MDT Aktor sichergestellt wird, in der Loxone Logik die Pegel an den Ausgängen "Q-up" und "Q-down" jedoch möglichst schnell wieder resetet werden sollen, damit beim Lamellen verstellen nicht erst über die up/down Befehle und dann anschließend nochmal per Absolut-Lamellen-Positions Vorgabe gefahren wird.

    Alle anderen Angaben sind entsprechend den echten Verhältnissen anzupassen,
    auch im MDT Aktor, hier ist es wirklich wichtig, das die Timings jeweils sehr gut passen.

    Klicke auf die Grafik für eine vergrößerte Ansicht  Name: LoxConfig_KNXJalo_V2.JPG Ansichten: 0 Größe: 61,0 KB ID: 211008

    Klicke auf die Grafik für eine vergrößerte Ansicht  Name: LoxConfig_KNXJalo2.JPG Ansichten: 0 Größe: 76,3 KB ID: 211009

    Grundsätzlich hatte ich nun auch schon wesentlich kompliziertere Logiken erdacht und getestet, nur benötigten die jeweils so viel Platz im MS, daß ich nicht alle 23 Raffstores umsetzen konnte. Ebenso war die Wartung und Fehlersuche ein echtes Abenteuer.

    Achtung !!!
    Ich hab noch vergessen zu erwähnen, daß am Aktor für die GA der Lamellenverstellung in der Loxone Config eine "Korrektur" von 0,0 zu 1,100 eingestellt werden muß, da der Lamellen Ausgang des AutoJalo Bausteins 0 bis 1 liefert, der Aktor jedoch 0 bis 100 möchte.

    Nachtrag: (Danke an TomT für den Hinweis, siehe Kommentare unten)
    -die Monoflop Zeit habe ich auf 0.1s gestellt.
    -Wenn man im MDT Aktor die Einstellung (ETS) so vornimmt, daß das Objekt für den Verfahrstatus als 1 Objekt ausgegeben wird, kann man sich das "UND" ,also die Zusammenführung der zwei Objekte in der Loxone Config sparen.


    Noch ein Wichtiger Hinweis:
    Nach einer Änderung bzw. Neustart des Miniservers während die Jalos nicht ganz offen sind, muß man erst mal alle Jalos manuell ganz nach oben fahren bevor man die Autmatikbeschattung aktiviert oder reaktiviert um die Funktion zu prüfen. Also nicht wunder wenn nach dem Änderungen und Restart erst mal nichts passt/funktioniert. Ansonsten halt auf die nächste Beschattungsperioden Änderung warten (morgend oder Abdends) dann passiert das ja automatisch.
    Beim Testen möchte ich aber üblicherweise nicht solange warten ;-)

    Zuletzt geändert von Labmaster; 30.Aug.2019, 07:02.

    Kommentar


    • kitikonti
      kitikonti kommentierte
      Kommentar bearbeiten
      Labmaster welche Werte hast du den beim MDT Aktor eingestellt? Und welche Raffstore verwendest du, bzw welchen Motor.

    • AndyH
      AndyH kommentierte
      Kommentar bearbeiten
      Das klingt nach einer guten Lösung, um KNX und Loxone zu verbinden.
      Allerdings:
      - Nur durchführbar, falls der entsprechende KNX-Jalousieaktor die Statusmeldung ausgibt, ob gerade das Relais/der Kanal angesteuert wird, oder nicht.
      - Bei meinem Merten-Jalousieaktor leider nicht gegeben: Ich kann daher mit der Lösung nicht arbeiten bzw. nur für meinen anderen Aktor (Busch-Jäger).

    • TomT
      TomT kommentierte
      Kommentar bearbeiten
      Jetzt habe ich mich doch noch dazu durchgerungen, nochmals nachzufragen:
      Ich habe das bei allen Jalousien im Haus im Einsatz. Aber einem Phänomen komme ich nicht auf die Spur: Wenn die Lox Automatik in den Beschatungsmodus geht, sprich die entspr. Jalousien herunterfährt: die fahren ganz nach unten, warten etwas und drehen dann in die enspre. Neigung der Lamellen. Dabei fährt nach dem Zufallsprinzip die ein oder andere Jalousie wieder ganz nach oben! Lox denkt aber immer noch, die wäre unten und in Position. Meistens (auch nicht immer) kommt es beim nachjustieren der Lamellen dazu, dass die Jal wieder nach unten und in die korrekte Position fährt.... Dem WAF ist dieses Gehabe der Automatik gar nicht zuträglich, wie ihr euch denken könnt...

      Hat jemand eine grobe Idee, was ich noch alles prüfen/nachjustieren/im Programm abfangen kann?

      Danke und Gruß, TomT

  • #32
    Ich hab da in diesem Zusammenhang mal ne Frage an die Loxone Config Nerds hier ?
    Gib es ne einfach Möglichkeit das Senden eine Wertes auf einen KXN Aktor zu triggern, unabhängig davon ob sich der Wert selbst geändert hat oder nicht.
    Also ich brauche zwei Eingänge die in entsprechende Logik, einmal den zu sendenen Wert und einmal den Trigger zum senden.
    Beim Triggern darf sich aber der zu sendende Wert nicht ändern und es dürfen dabei auch keine doppelten Telegramme auf den KNX Bus gehen.
    Übersehe ich da was ganz einfaches ?

    Ne Idee ???
    Zuletzt geändert von Labmaster; 30.Aug.2019, 06:55.

    Kommentar


    • Christian Fenzl
      Christian Fenzl kommentierte
      Kommentar bearbeiten
      Mit‘m Analogspeicher.

    • Labmaster
      Labmaster kommentierte
      Kommentar bearbeiten
      Der hat aber wieder das Problem, daß Änderungen des Analogwertes den KXN nicht triggern, was ich leider ebenso auch benötige, bzw. muß ich da den Trigger hierfür dann mit nem Vergleicher und ner Verzögerugn wieder selber bauen.

  • #33
    Labmaster Ich bin mir nicht ganz sicher, ob es das ist, was Du brauchst, aber wir hatten hier schon mal die Umsetzung von KNX mit der Lichtsteuerung (+Zentral) gelöst.

    Das Problem war hier, dass eine Steuerung über den Bus nur den Status ändern, aber nicht zusätzlich ein Telegramm schicken sollte. Anbei die Lösung. Der Langzeitklick ist auf TI: 0,15, T: 0,02 V1-V4: 1.

    So hast Du eine kleine Verzögerung der Statusanzeige, aber trotzdem die Schaltfunktion über die App. Funktioniert bei mir einwandfrei.

    Kommentar


    • #34
      Nein es geht hier wirklich um den Trigger um damit KNX Kommado auf den KNX Bus geschrieben wird.
      Also angenommen ich habe ein Signal mit einm Analogwert welcher auf den Bus soll.
      Wenn ich diesen direkt mit dem KNX Aktor verbinde, dann wird jeweils ein KNX Tekegram auf dem Bus generiert sibald sich der Wert ändert. Soweit so gut.
      Ich suche nun zusätzlich eine Möglichkeit das KNX Telegram auf den Bus zu schreiben, getriggert durch ein Flanke an einem zusätzlichen Digital Signal, auch wenn sich der Analoge Wert eben nicht geändert hat.

      Ich bekomme das auch grundsätzlich hin, muß dazu aber einen Analogspeicher, eine Verzögerung + Vergleicher sowie einige Logikbausteine verwenden. Also viel Aufwand für eine kleine Aufgabe welche ich jedoch sehr sehr oft brauchen werde.
      Ich dachte eben da gibt es einen Trick oder einen Baustein den ich nicht auf dem Schirm habe ....

      Kommentar


      • #35
        Hast du die komplexe Beschaltung schon mal gebaut, damit man sich das anschauen und evt. optimieren kann.
        Das Thema ist ja von allgemeinem Interesse, vielleicht kommt was Sinnvolles dabei raus.
        LoxBerry/Plugin Support: Wenn du einen Begriff in meiner Antwort nicht auf Anhieb verstehst, bitte nicht gleich rückfragen, sondern erst die Suche im LoxWiki und bei Google bemühen.
        PN/PM: Ich bevorzuge die Beantwortung von Fragen in öffentlichen Threads, wo andere mithelfen und mitprofitieren können. Herzlichen Dank!

        Kommentar


        • #36
          Gibt es eine Möglichkeit, in diese Ansteuerung der Jalousie die echte Positions-Rückmeldung vom KNX-Aktor mit einfließen zu lassen, damit Loxone und KNX immer zu 100 % synchron sind?

          Kommentar


          • sprobst
            sprobst kommentierte
            Kommentar bearbeiten
            Woher kennt KNX den echten Zustand? Dazu müsste es ja irgendwo (Jalousie/Rolladen/Motor) Sensoren geben die etwas an KNX zurückmelden. Ansonsten schätzt auch der KNX Aktor nur an Hand von Laufzeiten oder ähnlichem...

          • Christian Fenzl
            Christian Fenzl kommentierte
            Kommentar bearbeiten
            sprobst Darum geht’s doch nicht, sondern dass der Status beim KNX-Aktor IMMER stimmt, aber der von Loxone nur, wenn du _nur_ von Loxone steuerst (und bei KNX gibt’s diesen Single-Point-Of-Failure nicht).

          • sprobst
            sprobst kommentierte
            Kommentar bearbeiten
            Stimmt, da war ja noch was... Jetzt wo Du es erwähnst - die manuelle Steuerung an meinen Aktoren ist genau aus dem Grund auch deaktiviert... :-(

        • #37
          Ich habe folgenden Aufbau:

          Der Chef ist der KNX-Jalousieaktor von MDT. In Loxone will ich aber die Visualisierung vom Automatkjalousie-Baustein verwenden. Ich hab zuerst auch in Loxone herumgedoktert, bin jetzt aber den Weg über ioBroker gegangen. Hier mein Script, anschließend die Erklärung:

          Code:
          var Jalousien = [];
          Jalousien.push({name:'J1',loxid:'1771f065-013d-89b8-ffff79aba8a7b59c',t_up:37,t_down:37,modus:null});
          Jalousien.push({name:'J2',loxid:'1771f068-023d-b2bc-ffff79aba8a7b59c',t_up:55,t_down:55,modus:null});
          Jalousien.push({name:'J3',loxid:'1771f066-01b6-9e1f-ffff79aba8a7b59c',t_up:37,t_down:37,modus:null});
          Jalousien.push({name:'J4',loxid:'1771f063-00c1-7587-ffff79aba8a7b59c',t_up:37,t_down:37,modus:null});
          Jalousien.push({name:'J5',loxid:'17712410-0191-14bd-ffff79aba8a7b59c',t_up:37,t_down:37,modus:null});
          Jalousien.push({name:'J6',loxid:'1771f14a-0320-0439-ffff79aba8a7b59c',t_up:37,t_down:37,modus:null});
          Jalousien.push({name:'J7',loxid:'1771f106-03b7-e2bb-ffffcf75c05c7cf1',t_up:55,t_down:55,modus:null});
          // Event-Handler anmelden
          for (var i in Jalousien)
          {
              let j = Jalousien[i];
              
              on({id: 'loxone.0.'+j.loxid+'.down',change: 'any'},loxone_fahrt);
              on({id: 'loxone.0.'+j.loxid+'.up',  change: 'any'},loxone_fahrt);
              on({id: 'knx.0.Beschattung.Status.Verfahrstatus_ab_'+j.nam e,  change: 'any'},knx_fahrt);
              on({id: 'knx.0.Beschattung.Status.Verfahrstatus_auf_'+j.na me, change: 'any'},knx_fahrt);
              on({id: 'knx.0.Beschattung.Status.Position_'+j.name,change : 'any'},position);
              //on({id: 'knx.0.Beschattung.Status.Lamellenposition_'+j.nam e,change: 'any'},position);
          }
          /**
           * Jalousie-Fahrt ausgelöst durch Loxone-Baustein
           */
          function loxone_fahrt (o)
          {
              var richtung = o.id.split('.').pop();
              var j;
              
              for (var i in Jalousien)
              {
                  if (Jalousien[i].loxid == o.id.split('.')[2])
                  {
                      j = Jalousien[i];
                      break;
                  }
              }
              if (!j)
              {
                  return;
              }
              
              if (j.modus == 'KNX')
              {
                  return;
              }
              else if (o.state.val)
              {
                  setState('knx.0.Beschattung.Auf_Ab.'+j.name, (richtung == 'down'));
                  j.modus = 'Loxone';
                  
              }
              else
              { 
                  // Stop
                  setState('knx.0.Beschattung.Lamellenverstellung___ Stop.'+j.name,false);
                  setTimeout(function() { j.modus = null;  }, 500);
              }
          }
          /**
           * Jalouxie-Fahrt ausgelöst durch KNX
           */
          function knx_fahrt (o)
          {
              var richtung = o.id.split('.').pop().split('_')[1].replace('ab','down').replace('auf','up');
              var name = o.id.split('.').pop().split('_').pop();
              var j;
              for (var i in Jalousien)
              {
                  if (Jalousien[i].name == name)
                  {
                      j = Jalousien[i];
                      break;
                  }
              }
              if (!j)
              {
                  return;
              }
              if (j.modus == 'Loxone')
              {   return;
              }
              else if (o.state.val)
              {
                  setState('loxone.0.'+j.loxid+'.'+richtung,true);
                  j.modus = 'KNX';
              }
              else
              {
                  setState('loxone.0.'+j.loxid+'.'+richtung,true);
                  setTimeout(function() { j.modus = null;  }, 500);
              }
          }
          /**
           * Position in Loxone nachführen
           */
          function position (o)
          {
              var name = o.id.split('.').pop().split('_').pop();
              var j;
              for (var i in Jalousien)
              {
                  if (Jalousien[i].name == name)
                  {
                      j = Jalousien[i];
                      break;
                  }
              }
              if (!j)
              {
                  return;
              }
              if (j.modus != null)
              {
                  // in 100 ms nochmal probieren ob Status frei ist
                  setTimeout(function () { position(o); },100);
                  return;
              }
              var p_knx = o.state.val;
              var p_lox = getState('loxone.0.'+j.loxid+'.position').val;
              if (Math.abs(p_knx - p_lox) > 2)
              {
                  var richtung = (p_knx < p_lox ? 'up' : 'down');
                  var dauer = Math.round(Math.abs(p_knx - p_lox) * j['t_'+richtung] * 10);
                  
                  setState('loxone.0.'+j.loxid+'.'+richtung,true);
                  j.modus = 'KNX';
                  
                  setTimeout(function ()
                  { setState('loxone.0.'+j.loxid+'.'+richtung,true);
                    j.modus = null;
                  },dauer);
              }
          }
          Im ioBroker hab ich den Loxone und den KNX-Adapter im Einsatz. Im Array "Jalousien" lege ich mir Objekte für alle Jalousien an. Da brauche ich jeweils den Namen (wird verwendet für die KNX-Gruppenadressen) und die ID im Loxone_Adapter. Dann noch die Zeiten für Auf- und Abfahrt und den Modus.

          Beim Initialisieren mache ich für jede Jalousie 2 Event-Handler auf "Up" und "Down" beim Loxone-Baustein, und dann je 2 auf die KNX-Adressen "Verfahrstatus_ab" und "Verfahrstatus_auf". Zusätzlich melde ich auch noch die KNX-Position an, dazu später mehr.

          Also wenn in Loxone der Ausgang "Auf" oder "Ab" gesetzt wird, springe ich in die Funktion "loxone_fahrt", wenn sich in KNX der Status für Auf und Ab ändert, springe ich in die Funktion "knx_fahrt".

          In den beiden Unterfunktionen suche ich mir zuerst jeweils über das globale Jalousien-Array die Zuordnung heraus. Wenn von Loxone aus bedient wurde, setze ich die entsprechende KNX-Gruppenadresse, genauso bei Stop. Wenn in der KNX-Welt bedient wurde, simuliere ich in Loxone den "Fahrbefehl".

          Wichtig ist jetzt dass ich im globalen Array den jeweiligen Modus setze. Wenn ich in Loxone starte, darf die KNX-Unterfunktion nicht noch einen Fahrbefehl generieren. Beim Stoppen hab ich ein Timeout von 500ms eingebaut, weil sich das immer ein wenig überschnitten hat.


          Zusätzlich liefert mir der KNX-Baustein nach Fahrtende die absolute Position. Auf diesen reagiere ich in der Unterfunktion "position". Da warte ich zuerst bis der Status "frei" wird. Danach lese ich mir die Loxone-Position aus. Wenn da ein Unterschied aufgetreten ist (also die absolute Position in KNX von Loxone abweicht), rechne ich mir die Differenz aus und starte eine Loxone-Fahrt und beende diese nach x Millisekunden. Zuerst wollte ich die absolute Position in Loxone setzen, der ist mir aber immer bis Endanschlag gefahren, keine Ahnung warum. Aber so funktionierts jetzt auch.


          Die automatische Beschattung übernimmt mir der KNX-Baustein. Dazu habe ich bei allen Jalousie-Bausteinen die Himmelsrichtung auf Norden eingestellt, somit ist das unwirksam. Ich setze nur über die Automatik-Bausteine die KNX-Gruppenadressen. Die Logik kann aber natürlich auch in Loxone passieren.



          Ich hoffe ich konnte mich einigermaßen verständlich ausdrücken... Vielleicht kann das ja wer brauchen.

          Kommentar


          • #38
            Inspiriert durch den Lösungsansatz von neipsi habe ich eine Integration der KNX Jalousien in die Automatikjalousie umgesetzt. Dabei wird die Jalousie- und Lamellenposition über je einen Prozentwert (0-100%) angesteuert. Der KNX Jalousie-Aktor (ABB) liefert zeitversetzt die jeweilige aktuelle Position in Prozent an Loxone zurück.
            Falls die Jalousie über Loxone bewegt wird, wird die neue Jalousieposition sofort an den KNX Aktor gesendet. Falls aber die Jalousie über den KNX Taster bedient wird, erfolgt eine Sperre der Ansteuerung der KNX Aktoren über Loxone bis die Automatikjalousie die neue Ist-Position angefahren hat. Das hat zur Folge, dass zuerst die Jalousie fährt und erst nach dem Beenden der Fahrt die Automatikjalousie in Loxone nachgezogen wird. Das ist für mich aber kein Problem, da eine manuelle Bedienung nur sehr selten erfolgt.
            Beispiel KNX Aktoren:
            1. Position Jalousie: 1/1/164 (EIS6 0-100%)
            2. Position Lamellen: 1/1/165 (EIS6 0-100%)
            Beispiel KNX Sensoren:
            1. Position Jalousie: 1/1/162 (EIS6 0-100%)
            Beispiel Loxone Config:


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

Name: image_36424.jpg
Ansichten: 127
Größe: 178,2 KB
ID: 311327

            Falls jemand dieses Beispiel testen möchte wünsche ich viel Spaß, gebe aber keine Gewähr auf Funktions- bzw. Vollständigkeit.

            Kommentar


            • #39
              @mno: leider kann ich die Bilder nicht sehen, schaut aus, als ob beim Upload was schiefgegangen ist.
              LG Christian

              Kommentar


              • mno
                mno kommentierte
                Kommentar bearbeiten
                Es handelt sich nur um das eine Bild das oben angezeigt wird. Beim Attachment "image_36425.loxone" handelt es sich um das Loxone Konfigurationsfile. Entschuldige den nicht passenden Namen.
            Lädt...
            X