KNX Jalousien mit Automatikbaustein

Einklappen
X
 
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge
  • Stewe
    LoxBus Spammer
    • 26.08.2015
    • 278

    KNX Jalousien mit Automatikbaustein

    Hallo liebes Forum.

    Möchte gerne meine ABB JRA/S 8.230.5.1 Jalousien Aktoren über den Automatikbaustein einsetzen.
    KNX Taster ectr. werden keine verwendet!
    Die Positionsanzeige in der Visu usw. wären mir wichtig.

    Meine Frage: hat schon jemand so etwas mit ABB Aktoren und dem Automatikbaustein am laufen?

    Bitte um eure Hinweise.


    LG SteWe
    LG SteWE
  • Gast

    #2
    Hallo Stewe

    Deine Frage ist ein absoluter Klassiker und ich kann dir diese wie folgt beantworten:

    - Die ABB-Aktoren hatte ich noch nicht im Einsatz - ich fahre aktuell mit den neusten MDT-Jalousieaktoren (inklusive Intelligenz wie Referenzfahrten, Positionen, Beschattungsberechnung, usw.)

    -> Egal was dein KNX-Jalousieaktor an Logik kann oder nicht - sofern du nicht 100% der Loxone überlässt, wird das mit der Automatikjalousie nichts.
    Daher: Aktor so "dumm" wie möglich konfigurieren (lange Fahrzeiten, keine Eingriffe/Sperren/etc.) und GAs für Auf/Ab (Langfahrt) + Stop-Befehl erstellen.
    (wenn du nen Backup fahren willst bspw. Wind-Alarm oder Frost-Alarm direkt über KNX-only .. kannst du schon eine Sperre fürs Verfahren einbauen -> dann aber nicht wundern, wenn die Loxone den echten Status der Jalousie nicht mehr kennt)

    Super funktionieren tut folgende KNX+Loxone-Lösung von den Bausteinen:
    - erweiterter KNX-Aktor für Langfahrt Auf-Befehl (x/y/1:0)
    - erweiterter KNX-Aktor für Langfahrt Ab-Befehl (x/y/1:1)
    - erweiterter KNX-Aktor für Stop-Befehl (x/y/2:1) -> je nach Aktor musst du eine 1 oder eine 0 zum Stoppen schicken.

    Stop wird über einen invertierten Monoflop realisiert.
    Detailanleitung findest du hier (Danke an Christian Fenzl): http://www.loxwiki.eu/pages/viewpage...pageId=6980172

    Kommentar

    • gwieser
      Smart Home'r
      • 26.08.2015
      • 37

      #3
      Hat schon jemand mal probiert, die "Absolute Position" und "Absolute Lamellenposition" der MDT Aktoren mit Loxone zu verheiraten? Ich versuche das gerade, da der Automatikbaustein im Zusammenhang mit KNX wohl Probleme mit dem Timing beim Verstellen der Lamellen Richtung Abdunkeln hat (Lamellen werden zu weit geschlossen), allerdings stehe ich da vor dem Problem, dass man aus dem Automatibaustein von Loxone nicht die absoluten Endwerte der Positionen raus bekommen sondern den aktuellen Wert während der Fahrt. Man könnte nun natürlich erst dann KNX-Nachrichten verschicken wenn sich diese Werte nicht mehr verändern innerhalb einer Zeiteinheit, aber dadurch verliert man die Möglichkeit, mittels Taster die Jalousien und Lamellen mit sichtbarem Feedback an der Jalousie zu bedienen (z.Bsp. genau Positionierung der Lamellen, etc.).

      Kommentar

      • Gast

        #4
        gwieser

        Ich habe das gleiche probiert in der Hoffnung doch noch eine KNX-only Jalousie in Verbindung mit dem Automatikbaustein hinzubekommen. -> Funktioniert de facto nicht.
        - Wie du bereits richtig erkannt hast pushed der Baustein lediglich die aktuell berechneten Positionswerte analog zu den gesetzten Timings raus.
        Klar so ein Hack mit "Warten bis Wert sich nicht mehr ändert" würde gehen -> jedoch passt dann deine Visu nicht mehr was unschön ist.

        Zwecks Lamellenverstellung würde ich die Kurzfahrten des Bausteins nehmen bzw. über den Analogen Eingang % Lamellenverstellung agieren. Falls die Lamellen immernoch zu träge verstellt werden ggf. nochmal die Einstellungen vom Timing des KNX-Telegramms bzw. im Aktor Mindestfahrzeit/Motorwechsel/etc. überprüfen

        Kommentar

        • gwieser
          Smart Home'r
          • 26.08.2015
          • 37

          #5
          Hi,

          ich hab mich da jetzt ein wenig mit PicoC-Code gespielt und hab da eine Lösung, die schon recht brauchbar ist. Der Code wertet sowohl Up, Down als auch die absoluten Positionen des Bausteins aus und reagiert mit kaum merkbarer Verzögerung (100ms), das heißt die Jalousie und die Visu passen zusammen. Die Positionierung der Lamellen beim Nachjustieren passen damit perfekt, der MTD-Aktor (bei mir ein Universalaktor im Modus Jalousie) hat das wirklich gut drauf und fährt zur Not auch mal kurze Wege rauf und runter um die Lamellen besser positionieren zu können.

          Ich werde das jetzt noch verfeinern und vor allem mal alle meine KNX-Jalousien damit steuern und schauen, wie es dem MS dann damit geht. Laut Doku ist ja die Anzahl der PicoC-Programme auf 8 limitiert (wobei so viele Eingänge pro Baustein zur Verfügung stehen dass 3 Jalousien mit einem Baustein berechenbar wären) und die CPU könnte belastet werden. Das will ich mir mal ansehen ob es hier in diesem Anwendungsfall zu Problemen kommen kann.

          Kommentar

          • Benjamin Jobst
            Lox Guru
            • 25.08.2015
            • 1190

            #6
            gwieser wenn du mehrere PicoC-Bausteine mit der KNX-Auswertung beschäftigst, kann es schon zu spürbaren zeitlichen Verzögerungen bei der Jalousie kommen, wenn du viele Jalousien gleichzeitig ansteuerst. Ob das allerdings tragisch ist, musst du wirklich ausprobieren.
            Habe zwecks variabler Position von Stoffrollos beim letzten Projekt auch eine Positions-Auswertung inkl. Offene-Fenster-Sperre mit PicoC umgesetzt, da dauert es ca. 1-2s von der Auswahl der Szene bis zum Fahren der Rollos. Ist aber da nicht weiter schlimm...
            MfG Benny

            Kommentar

            • Gast

              #7
              Das Problem hab ich auch noch vor mir, wobei ich nicht unbedingt die volle Automatik brauche.
              Ich will morgens einfach Lamellen halb öffnen, nachmittags auf ca. 3/4 geschlossen, nachts ganz schließen. Rolläden rauf/runter. Positionen bleiben immer unten außer bei Sturm oder wenn die Türen/Fenster öffnen.

              Kommentar

              • darkrain
                MS Profi
                • 25.08.2015
                • 509

                #8
                Gast

                na dann lege dir doch z.B. ein parr KNX Szenen an, die deine Funktionalitäten abdecken. Diese steuerst du dann einfach mit dem Miniserver und Programm erweiterter KNX Aktor an.

                Kommentar

                • Stewe
                  LoxBus Spammer
                  • 26.08.2015
                  • 278

                  #9
                  Hallo und guten Abend.

                  Wer kann mir helfen, den ABB KNX Aktor JRA/S8.230.5.1 so zu blenden, oder besser gesagt zu verblöden, damit dieser mit der LOXONE Automatikjalousie zusammenarbeitet.
                  Habe 2 Rollläden und 4 Jalousien und 2 Relais zum Schalten von Lampen.
                  Habe im Anhang die Parameter in 9 Blöcken übersichtlich zusammenkopiert, und würde mir dazu die von euch empfohlenen Werte als Eintrag wünschen.

                  Vielleicht können auch andere KNX Anwender, etwas damit anfangen.

                  Vorerst schon mal ein Danke.
                  SteWe KNX Einstellungen1 ABB JRA.doc
















                  Angehängte Dateien
                  Zuletzt geändert von Stewe; 09.07.2016, 05:58. Grund: Fotos aus der Zwischenablage einstellen funktioniert nicht!
                  LG SteWE

                  Kommentar

                  • gwieser
                    Smart Home'r
                    • 26.08.2015
                    • 37

                    #10
                    Hallo,

                    ich glaube meine Lösung ist mittlerweile brauchbar, sofern man KNX-Aktoren mit der Möglichkeit der absoluten Positionierung von Jalousie und Lamellen hat. Die 100ms Verzögerung merkt man nicht wenn man per Hand (Taster, App) steuert, im Automatikmodus merkt man logischerweise gar nix. Die Positionierung der Lamellen funktioniert mit den MTD-Aktoren absolut perfekt.

                    Mit einem "Programm"-Baustein können 3 Jalousie-Aktoren angesteuert werden, d.h. bei einem Maximum von 8 Programmbausteinen kann man 24 Aktoren ansteuern. Das sollte auch für große Häuser reichen.

                    Falls es Interesse gibt stelle ich das gerne hier vor.

                    LG,
                    Günther

                    Kommentar

                    • Gast

                      #11
                      ja bitte bitte Vielleicht mach ich's dann auch gleich richtig

                      Kommentar

                      • darkrain
                        MS Profi
                        • 25.08.2015
                        • 509

                        #12
                        gwieser - ja Bitte, das würde mich auch interessieren.

                        Kommentar

                        • gwieser
                          Smart Home'r
                          • 26.08.2015
                          • 37

                          #13
                          Sodale, ich versuch das mal hier zu erklären:

                          Hier mal der Code:
                          Code:
                          // this PicoC code allows for managing KNX blind actors with absolute positioning
                          // capabilities (e.b. MDT Universalaktor, MDT Jalousieaktor) with Loxone's own
                          // automatic blinds function blocks (German "Automatikjalousie")
                          //
                          // This code block can deal with 3 automatic blinds blocks in Loxone Config - you can use just 1,
                          // any 2 of the three or all of them at once.
                          //
                          // Inputs:
                          // AI1, AI5, AI9: connect to Q(up) of the automatic blinds block - Up command
                          // AI2, AI6, AI10: connect to Q(down) of the automatic blinds block - Down command
                          // AI3, AI7, AI11: connect to AQp of the automatic blinds block - absolute position of the blinds (Jalousie)
                          // AI4, AI8, AI12: connect to AQl of the automatic blinds block - absolute position of the blends (Lamellen)
                          // AI13: "enable" - set this to constat 1 in normal mode, or attach to a toggle switch to
                          // allow for testing on/off
                          
                          
                          // we use an array of values for the variables to loop through the possibly 3 logic input blocks
                          float lastPos[3], curPos[3], curBlendPos[3], lastBlendPos[3], curDn[3], curUp[3];
                          // curStatus: 0..no movements, 1..start moving (long movement), 2..still moving (long movement),
                          // 3..stop moving (long movement)
                          int curStatus[3];// = 0;
                          int beforePreviousCycleMoving[3];// = 0;
                          int previousCycleMoving[3];// = 0;
                          int curMoving[3];// = 0;
                          int firstLoop = 1;
                          int lastCurDn[3];// = 0;
                          int lastCurUp[3];// = 0;
                          int dirUp[3];// = 0;
                          int dirDn[3];// = 0;
                          float enabled = getinput(12);
                          int specialUpCase[3];
                          int i = 0;
                          while (TRUE) {
                              if (enabled) {
                                  i = 0;
                                  while (i<3) {
                                      // get the current position
                                      curPos[i] = getinput(i*4+2);
                                      curBlendPos[i] = getinput(i*4+3);
                                      curDn[i] = getinput(i*4+1);
                                      curUp[i] = getinput(i*4+0);
                                      // Loxone tends to use not 100% when the position of the lamella
                                      // is less then 1.0, so we round it up
                                      if (curPos[i]>0.95) {
                                          curPos[i] = 1;
                                      }
                                      if (firstLoop==1) {
                                          // this is the first run, so make sure that the blends
                                          // are aligned with Loxone
                                          setoutput(i*4+1, curBlendPos[i]*100);
                                          setoutput(i*4+0, curPos[i]*100);
                                          lastPos[i] = curPos[i];
                                          lastBlendPos[i] = curBlendPos[i];
                                      }
                                  
                                  
                                      if (curPos[i] != lastPos[i]) {
                                          curMoving[i] = 1;
                                      } else {
                                          curMoving[i] = 0;
                                      }
                                      // detect in which state we are
                                      if (curDn[i]==1) {
                                          if (lastCurDn[i]==0) {
                                              // go down
                                              curStatus[i] = 1;
                                              dirDn[i] = 1;
                                              lastCurDn[i] = 1;
                                          } else {
                                              curStatus[i] = 2;
                                          }
                                      } else {
                                          if (lastCurDn[i]==1) {
                                              lastCurDn[i]=0;
                                              curStatus[i] = 3;
                                          } else {
                                              // do nothing
                                          }
                                      }
                                      if (curUp[i]==1) {
                                          if (lastCurUp[i]==0) {
                                              // go up
                                              curStatus[i] = 1;
                                              dirUp[i] = 1;
                                              lastCurUp[i] = 1;        
                                          } else {
                                              // adding a correction for "Up"
                                              if (curPos[i]==0) {
                                                  if (specialUpCase[i]==0) {
                                                      curBlendPos[i] = 0;
                                                      curPos[i] = 0;
                                                      curStatus[i]=3;
                                                      specialUpCase[i]=1;
                                                  }
                                                  //setoutput(0,0);
                                                  //setOutput(1, 0);
                                              } else {
                                                  curStatus[i] = 2;
                                              }
                                          }
                                      } else {
                                          if(lastCurUp[i]==1) {
                                              if (specialUpCase[i]==1) {
                                                  lastCurUp[i]=0;
                                                  specialUpCase[i]=0;
                                              } else {
                                                  lastCurUp[i]=0;
                                                  curStatus[i] = 3;
                                              }
                                          } else {
                                              // do nothing
                                          }
                                      }
                          
                                      switch(curStatus[i]) {
                                          case 1:
                                              // in case we started moving, we need to identify the direction
                                              if (dirUp[i]==1) {
                                                  // we go up, so we send a full up first
                                                  //direction=0;
                                                  setoutput(i*4+1, 0);
                                                  setoutput(i*4+0, 0);
                                              }
                                              if (dirDn[i]==1) {
                                                  // we go down, so we send a full down first
                                                  //direction=1;
                                                  setoutput(i*4+1, 100);
                                                  setoutput(i*4+0, 100);
                                              }
                                              break;
                                          case 2:
                                              // still moving, nothing to do
                                              break;
                                          case 3:
                                              // stop moving, send final positions
                                              setoutput(i*4+0, curPos[i]*100);
                                              lastPos[i] = curPos[i];
                                              setoutput(i*4+1, curBlendPos[i]*100);
                                              lastBlendPos[i] = curBlendPos[i];
                                              curStatus[i] = 0;
                                              dirUp[i] = 0;
                                              dirDn[i] = 0;
                                              break;
                                          default:
                                              if (curBlendPos[i] != lastBlendPos[i]) {
                                                  setoutput(i*4+1, curBlendPos[i] * 100);
                                              }
                                      }
                                      lastPos[i] = curPos[i];
                                      lastBlendPos[i] = curBlendPos[i];
                                      i++;
                                  }
                                  if (firstLoop==1) {
                                      firstLoop = 0;
                                  }
                              }
                              enabled = getinput(12);
                              sleep(100);
                          }
                          Das ganze muss in einen "Programmbaustein" kopiert werden und bietet dann für 3 Automatikbausteine die Eingänge an (siehe Doku im Code). Die Ausgänge AQ1/5/9 verbindet man dann mit dem "Absolute Position Jalousie" des jeweiligen KNX-Aktors, und AQ2/6/10 mit "Absolute Lamellenposition" des jeweiligen KNX Aktors.

                          Hier mal ein Beispiel wie das angeschlossen wird für 2 Jalousiebausteine: Klicke auf die Grafik für eine vergrößerte Ansicht

Name: Screenshot 2016-07-12 14.21.01.png
Ansichten: 946
Größe: 210,9 KB
ID: 47851



                          Nicht wundern, in dem Beispiel wird die Jalousie ausschließlich über die Automatik und im Notfall über die Smartphone-App gesteuert, daher keine Anschlüsse für Taster etc. Die Konfiguration der Parameter der Jalousie in Loxone Config und der Aktoren über ETS4 muss übereinstimmen! Sprich die selben Zeiten für Auf und Ab, TR, etc. sonst kann es zu Problemen kommen (Stoppen während der Fahrt, dann gleich weiterfahren, etc.).

                          AI13 kann auch mit einer Konstante 1 belegt werden wenn man kein Ein/Aus des Bausteins haben will (was der Normalfall ist, hier ist das noch zu Debugging-Zwecke mit einem Virtuellen Eingang gehandhabt).

                          Wer das ausprobieren möchte nur zu! Ich bin gespannt ob das für den einen oder anderen brauchbar ist!

                          PS: Hier noch die Konfig eines Kanals am Aktor in ETS4 (die abgeschnittenen Parameter am Screenshot sind alle auf "nicht aktiv"): Klicke auf die Grafik für eine vergrößerte Ansicht

Name: Screenshot 2016-07-12 14.29.08.png
Ansichten: 675
Größe: 256,3 KB
ID: 47853
                          Zuletzt geändert von gwieser; 12.07.2016, 13:29.

                          Kommentar

                          • Matti
                            LoxBus Spammer
                            • 25.08.2015
                            • 265

                            #14
                            Hab mal in den Thread rüber gewechselt... ;-)
                            Hab das jetzt testweise für eine Jalousie mal nachgebaut.
                            Im Programm baustein sehe ich auch das sich die Werte ändern aber meine Jalousie tut nichts...
                            Welche EIS Typ kommt zur Verwendung. Habs mit EIS7 und EIS5 versucht...
                            Grüße

                            Matthias
                            gemischte KNX- und Loxoneinstallation im EFH Neubau

                            Kommentar

                            • gwieser
                              Smart Home'r
                              • 26.08.2015
                              • 37

                              #15
                              Hallo,

                              hast Du den KNX-Aktor eh auf Absolute Position umkonfiguriert und verwendest auch die neuen Kommunikationsobjekte dafür? In LoxConfig hab ich die Kommunikationsobjekte als EIS6 definiert, siehe Screenshot: Klicke auf die Grafik für eine vergrößerte Ansicht

Name: Screenshot 2016-07-12 16.47.44.png
Ansichten: 683
Größe: 84,9 KB
ID: 47873

                              Und hier noch die ETS4-Kommunikationsobjekte-Darstellung: Klicke auf die Grafik für eine vergrößerte Ansicht

Name: Screenshot 2016-07-12 16.50.48.png
Ansichten: 615
Größe: 39,1 KB
ID: 47875

                              Kommentar

                              Lädt...