Ankündigung

Einklappen
Keine Ankündigung bisher.

ARDUINO am KNX

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

  • Mag Gyver
    antwortet
    Hallo Haka,

    zu deinem Problem mit den "unklaren" Telegrammen.

    In deinem Sketch in der Funktion Setup unter der Warteanweisung von 1000 Millisekunden stehen mehrere (Leseanfragen -> KNX) Statusabfrageanweisungen für den TP-UART.
    Wenn du beim Initialisieren deiner Anwendung die Zustandabfrage der Gruppenadressen nicht benötigst, dann kommentier diese Zeilen aus.
    Dadurch verschwinden diese "unklaren" Telegramme.


    Mit freundlichen Grüßen

    Mag Gyver
    Zuletzt geändert von Mag Gyver; 17.01.2016, 20:27.

    Einen Kommentar schreiben:


  • intelligente Haustechnik
    antwortet
    Hallo Thorsten,

    kannst Du noch mal bitte nachschauen, mit dem Code in Post #750 und dem Example GroupRead stimmt etwas nicht:

    Code:
     if (telegram->getCommand() == KNX_COMMAND_ANSWER) {
    ist offensichtlich falsch, um Werte vom Bus abzufragen.

    Mit

    Code:
     if (telegram->getCommand() == KNX_COMMAND_Write) {
    funtioniert es, müßte es nicht aber

    Code:
     if (telegram->getCommand() == KNX_COMMAND_READ) {
    heißen? War schon fast am verzweifeln, ehe mir der Unterschied zum Code von Haka in Post #754 aufgefallen war.

    Jens


    Einen Kommentar schreiben:


  • Haka
    antwortet
    Hallo zusammen,

    nach 50 Seiten (ja, es gibt sie noch, die Neulinge, die erstmal den ganzen Thread erfassen wollen) melde auch ich mich zu Wort mit meinem Projekt:
    Arduino Mega als Steuergerät für 3-4 APA102 LED Stripes, KNX Anbindung über den berühmten Siemens 5WG1 117.

    Bislang alles noch im kompletten Prototypen- / Breadboard-Mode, aber die grundsätzlichen Themen (PA zuweisen, GAs auslesen, GAs schreiben,...) funktionieren so weit ganz gut.

    Was mich ein wenig wundert sind zwei Dinge:

    Zum einen Schickt der Arduino nach einem Neustart ein komisches Telegramm auf den Bus (siehe Bild im Anhang) - ich glaube mich zu erinnern, dass es dazu mal ein paar Posts gab in diesem Thread, finde diese aber nicht mehr.

    Zum anderen scheint der Arduino zu "prellen", wenn ich über die ETS an eine GA einmalig ein "AN" oder "AUS" schicke, dann bekomme ich auf der Serial-Konsole der Arduino IDE folgenden Output:
    Code:
    TPTP-UART Test
    KNX SINGNALwert
    10/0/0
    Empfangener wert1
    KNX SINGNALwert
    10/0/0
    Empfangener wert1
    KNX SINGNALwert
    10/0/0
    Empfangener wert1
    Sieht für mich aus als ob es irgendwie dreimal verarbeitet wurde, im Gruppemonitor taucht das Telegramm nur einmal auf.

    Mein Quellcode sieht derzeit so aus (nicht schön, dafür selten)
    Code:
    // Include KNXUart Interface and APA102 LED Stripe Library
    #include <KnxTpUart.h>
    #include <APA102.h>
    
    const bool is_debug=true;
    //Initialisieren der Schnittstelle - set the Device's KNX ID
    KnxTpUart knx(&Serial1, "10.0.1");
    
    //LED: Initialize the Pins to use
    const uint8_t dataPin = 11;
    const uint8_t clockPin = 12;
    
    
    // Create an object for writing to the LED strip.
    APA102<dataPin, clockPin> ledStrip;
    
    // Set the number of LEDs to control.
    const uint16_t ledCount = 36;
    
    int target_10_0_0=0;
    int target_10_0_1=0;
    int target_10_0_2=0;
    int target_10_0_3=0;
    int target_10_0_4=0;
    int target_10_0_5[3];
    
    
    int stripe1_r =0;
    int stripe1_g =0;
    int stripe1_b =0;
    int stripe1_p =0;
    
    
    void setup() {
      //initialize DEBUG
      if(is_debug){
        Serial.begin(9600);
      Serial.println("TP-UART Test");
      }
      // Initialize the KNX UART
      Serial1.begin(19200);
      UCSR1C = UCSR1C | B00100000; // Even Parity
      knx.uartReset();
      
      
      knx.addListenGroupAddress("10/0/0"); //Global on-off
      knx.addListenGroupAddress("10/0/1"); //Global Dimmer
      knx.addListenGroupAddress("10/0/2"); //RED Dimmer
      knx.addListenGroupAddress("10/0/3"); //Green Dimmer
      knx.addListenGroupAddress("10/0/4"); //Blue Dimmer
      knx.addListenGroupAddress("10/0/5"); //RGB Value
    
    
        delay(1000);
      knx.groupRead("10/0/0");
        knx.groupRead("10/0/1");
         knx.groupRead("10/0/2");
             knx.groupRead("10/0/3");
     knx.groupRead("10/0/4");
       knx.groupRead("10/0/5");
    
      //INITIALIZE THE LED STRIPES
    
    
    }
    
    void loop() {
      /*
      knx.groupWriteBool("1/5/2", true);
      delay (5000);
      knx.groupWriteBool("1/5/2", false);
      delay (5000);  
      */
      ledMonoColor(stripe1_r,stripe1_g,stripe1_b,stripe1_p);
    
    }
    
    void ledMonoColor(int R, int G, int B, int power){
        ledStrip.startFrame();
          for(uint16_t i = 0; i < 36; i++)
      {
                    ledStrip.sendColor(R,G,B,power);
    
        }
          ledStrip.endFrame(ledCount);
    }  
    
    
    
    void serialEvent1() {
     
      //Aufruf knx.serialEvent()
     
      KnxTpUartSerialEventType eType = knx.serialEvent();
    
      //Auswertung des empfangenen Telegrammes -> nur KNX-Telegramme werden akzeptiert
     
      if (eType == KNX_TELEGRAM) {
        KnxTelegram* telegram = knx.getReceivedTelegram();
                  if(is_debug)    Serial.println("KNX SINGNALwert");
    
        // Telegrammauswertung auf KNX (bei Empfang immer notwendig)
      
        String target =
          String(0 + telegram->getTargetMainGroup())   + "/" +
          String(0 + telegram->getTargetMiddleGroup()) + "/" +
          String(0 + telegram->getTargetSubGroup());
    
        // Auswertung der Gruppenadresse des empfangenen Telegrammes und Zwischenspeicherung in Variable "target"
                          if(is_debug)Serial.println(target);
    
        if (telegram->getCommand() == KNX_COMMAND_WRITE) {
        
          // Auswertung der Leseanfrage in serialEvent() mit Datentypen
          // Auswertung des empfangenen KNX-Telegrammes mit Antwort auf Leseanfrage (Flag) -> Aktion
        
       
          if (target == "10/0/0") {
            target_10_0_0 = telegram->getBool();
            
                  if(is_debug)Serial.print("Empfangener wert");
              if(is_debug)Serial.println(target_10_0_0);
          
            // Speicherung des Inhaltes in Variable "target_5_6_0" der Antwort auf die Leseanfrage der Gruppenadresse "2/6/0"
          
            if (target_10_0_0) {
                stripe1_p=31;
    
            }
            else {
                stripe1_p=0;
    
            }
            }
            if (target == "10/0/1") {
              target_10_0_1 = telegram->get1ByteIntValue();
                if(is_debug)Serial.print("Empfangener wert auf 10/0/1 ");
                if(is_debug)Serial.println(target_10_0_1);
        
              stripe1_p=target_10_0_1*31/255;
                if(is_debug)Serial.print("Translates to ");
           if(is_debug) Serial.println(stripe1_p);
          }
           if (target == "10/0/2") {
              target_10_0_2 = telegram->get1ByteIntValue();
               if(is_debug) Serial.print("Empfangener wert auf 10/0/2 ");
               if(is_debug) Serial.println(target_10_0_2);
        
              stripe1_r=target_10_0_2;
              
          }
           if (target == "10/0/3") {
              target_10_0_3 = telegram->get1ByteIntValue();
                if(is_debug)Serial.print("Empfangener wert auf 10/0/3 ");
                if(is_debug)Serial.println(target_10_0_3);
              stripe1_g=target_10_0_3;
          }
           if (target == "10/0/4") {
              target_10_0_4 = telegram->get1ByteIntValue();
                if(is_debug)Serial.print("Empfangener wert auf 10/0/4");
                if(is_debug)Serial.println(target_10_0_4);
              stripe1_b=target_10_0_4;
          }
                 
          }
         
        
      }
    }
    Library verwende ich die von Thorsten, letzter Versionsstand.

    Viele Grüße und schonmal danke

    Hans

    You do not have permission to view this gallery.
    This gallery has 1 photos.

    Einen Kommentar schreiben:


  • tuxedo
    antwortet
    Zur Info für die KARDUINO "Follower":

    In Zusammenarbeit mit dem gerade entstehenden KNX-Arduino-Basis-Boards hab ich angefangen ein wenig um zu strukturieren. Dabei sind auch die "Organisationsmitgliedschaften" von JuMi2006 und Ing-Dom weggefallen. Ich hoffe ihr seid mir da nicht böse. Sobald ihr Zeit und Luft habt etwas aktiv beizutragen, einfach melden, dann ändern wir das wieder.

    Zum TpUart-Fork: Ich hab den mal als "deprecated" markiert (bzw. den Repository-Namen dahingehend geändert). Aktuell bastle ich an einer besseren Lösung die besser in das Gesamtbild "Ein Arduino mit Peripherie als KNX Gerät" passt.

    Stay tuned.

    Einen Kommentar schreiben:


  • Mag Gyver
    antwortet
    Hallo ThorstenGehrig,

    kein Problem. Auch Danke!

    Ja, Beispiel "Groupread" arbeitet wie es soll.

    Für die Funktionsprüfung benützte Versionen der ARDUINO IDE 1.0.5 und 1.6.5 von arduino.cc.
    Sonst vergleichen wir Äpfel mit Birnen bei irgendwelchen aufkommenden Problemen.


    Mit freundlichen Grüßen

    Mag Gyver

    Einen Kommentar schreiben:


  • ThorstenGehrig
    antwortet
    Hi Mag Gyver
    zurückgeändert auf groupRead - dein Beispiel hochgeladen und die readme angepasst.
    DANKE!
    Allerdings habe ich das nicht getestet - vielleicht holst du dir gerade mal die aktuelle Library und sagst mir ob die compilied & funktioniert?
    Gruß
    Thorsten

    Einen Kommentar schreiben:


  • Mag Gyver
    antwortet
    Hallo ThorstenGehrig,

    ja die Funktion ist für alle Datentypen.

    Beispiel:

    Code:
    /*
       Beispiel für Leseanfrage ARDUINO UNO -> KNX und Auswertung Antwort KNX -> ARDUINO UNO
      
       Version 0.2
      
       22.11.2015
      
       Testkonstellation = ARDUINO UNO <-> 5WG1 117-2AB12
    */
    
    
    #include <KnxTpUart.h>
    
    KnxTpUart knx(&Serial, "1.1.199");
    int LED = 13;
    int target_2_6_0;
    int target_5_6_0;
    
    
    void setup() {
    
      pinMode(LED, OUTPUT); // PIN 13 als Ausgang festlegen
     
      Serial.begin(19200);
      UCSR0C = UCSR0C | B00100000; // Gerade Parität
    
      knx.uartReset();
     
      knx.addListenGroupAddress("2/6/0");
      knx.addListenGroupAddress("5/6/0");
     
      // Leseanfrage auf Gruppenadresse -> alle Datentypen
     
      // Die Funktion delay(1000) nur zur Verzögerung der Initialisierungsabfrage notwendig.
      // Wenn man keine Initialisierungsabfrage möchte, sollte man die nächsten Zeilen bis Ende der Funktion aus kommentieren.
     
      delay(1000);
     
      // Leseanfrage auf Gruppenadressen -> Aufruf der Funktion Leseanfrage auch in void loop() möglich
     
      knx.groupRead("2/6/0");
      knx.groupRead("5/6/0");
    }
    
    
    void loop() {
      
    }
    
    
    void serialEvent() {
     
      //Aufruf knx.serialEvent()
     
      KnxTpUartSerialEventType eType = knx.serialEvent();
    
      //Auswertung des empfangenen Telegrammes -> nur KNX-Telegramme werden akzeptiert
     
      if (eType == KNX_TELEGRAM) {
        KnxTelegram* telegram = knx.getReceivedTelegram();
    
        // Telegrammauswertung auf KNX (bei Empfang immer notwendig)
      
        String target =
          String(0 + telegram->getTargetMainGroup())   + "/" +
          String(0 + telegram->getTargetMiddleGroup()) + "/" +
          String(0 + telegram->getTargetSubGroup());
    
        // Auswertung der Gruppenadresse des empfangenen Telegrammes und Zwischenspeicherung in Variable "target"
      
        if (telegram->getCommand() == KNX_COMMAND_ANSWER) {
        
          // Auswertung der Leseanfrage in serialEvent() mit Datentypen
          // Auswertung des empfangenen KNX-Telegrammes mit Antwort auf Leseanfrage (Flag) -> Aktion
        
          if (target == "2/6/0") {
            target_2_6_0 = telegram->getBool();
          
            // Speicherung des Inhaltes in Variable "target_2_6_0" der Antwort auf die Leseanfrage der Gruppenadresse "2/6/0"
          
            if (target_2_6_0) {
              digitalWrite(LED, HIGH);
            }
            else {
              digitalWrite(LED,LOW);
            }
          
            // Auswertung des Inhaltes und Ausgabe des Inhaltes der Gruppenadresse "2/6/0" auf PIN 13 des ARDUINO UNO
          }
          else if (target == "5/6/0") {
            target_5_6_0 = telegram->get1ByteIntValue();
          
            // Speicherung des Inhaltes in Variable "target_5_6_0" der Antwort auf die Leseanfrage der Gruppenadresse "5/6/0"
          
          }
        }
      }
    }
    Das mit Bitbucket muss ich mir erst anschauen.


    Mit freundlichen Grüßen

    Mag Gyver
    Zuletzt geändert von Mag Gyver; 27.11.2015, 18:34.

    Einen Kommentar schreiben:


  • tuxedo
    antwortet
    Der Leonardo hat zwar 32k flash, aber 4 davon gehen für den Bootloader drauf. Bleiben noch 28k. Davon geht auch einiges für den Stack drauf. Hier geht's noch, hier kann man noch gut haushalten.

    Die GAs liegen aber nicht im Flash, sondern im RAM. Und der ist nur 2,5k groß. Da sind 560byte schon rund 20%. Und da kanns dann wirklich eng werden.
    Und ein Arduino sagt einem nicht "RAM voll", der fängt dann einfach an zu spinnen und sich "komisch" zu verhalten. Aber weniger im Sinne von witzig, sondern im Sinne von: "Was soll der scheiß, gerade eben ging's doch noch... und jetzt geht irgendwie gar nix mehr und ergibt auch keinen Sinn".

    Man kann sie auch in den EEPROM auslagern und jedesmal bei bedarf einlesen. Kostet aber Zeit, die man bei zeitkritischen Anwendungen (und da gehört ein 6-kanal-dimmer eben dazu) nicht unbedingt verbraten will.

    Einen Kommentar schreiben:


  • ThorstenGehrig
    antwortet
    Hi,
    @Tuxedo: alles d´accord... aber hat ein Pro nicht 32kb - und sind dann die worst case 560byte immernoch "unkritisch"?
    Zum Thema Austeckplatine habe ich noch eine andere - simplere- Idee... muss ich aber mal noch ausarbeiten.

    mag Gyver: erledigt - allerdings habe ich die funktion umbenannt von groupRead auf groupReadBool.... wobei... ist der read-befehl so für alle Datentypen?
    Dann muss ich das nochmal zurückändern.
    Dein Beispiel fragt ja nur ab - bearbeitet aber nicht das ergebniss... vielleicht könntest du das Beispiel nochmal ergänzen?

    Ürbigens müsstest du auf Bitbucket auch direkt arbeiten können... entweder als Fork und anschließenden Pull request - oder direkt im Editor.
    (kann sein das ich doch dafür extra freischalten muss... wie ist dein Username?)

    Gruß
    Thorsten

    Einen Kommentar schreiben:


  • Mag Gyver
    antwortet
    Hallo Bonscha,

    es gibt beim Arduino Nano nur zwei Möglichkeiten.

    Erste Möglichkeit:

    FTDI in den Reset zwingen (PIN19 des FTDI nach GND schalten), damit ist die Programmierung über USB abschaltbar und zuschaltbar.
    Leider ist dies sehr knifflig wegen der Bauteilgröße.

    Zweite Möglichkeit:

    Trennen der Leiterbahnen zwischen FTDI und Arduino (RxD und TxD), damit ist die Programmierung über USB nicht mehr möglich.


    In beiden Fällen geht danach aber das Senden und Empfangen von Befehlen zwischen Arduino Nano und KNX.


    Mit freundlich Grüßen

    Mag Gyver
    Zuletzt geändert von Mag Gyver; 05.12.2015, 08:47.

    Einen Kommentar schreiben:


  • Mag Gyver
    antwortet
    Hallo ThorstenGehrig,

    dafür ist ja mein Beispiel da.

    Kannst du noch etwas in deine Library aufnehmen?

    Wenn ja, kann damit vom Arduino aus Leseanfragen auf eine Gruppenadresse abgegeben werden.

    Änderungen:

    In "Knx Tp Uart.h":

    Code:
    bool groupRead(String);
    In "Knx Tp Uart.cpp":

    Code:
    bool KnxTpUart::groupRead(String Address) {
     createKNXMessageFrame(2, KNX_COMMAND_READ, Address, 0);
     _tg->createChecksum();
     return sendMessage();
    }


    Beispielcode:


    Code:
    #include <KnxTpUart.h>
    
    KnxTpUart knx(&Serial, "1.1.199");
    
    void setup() {
      Serial.begin(19200);
      UCSR0C = UCSR0C | B00100000;
      knx.uartReset();
    }
    
    void loop() {
       knx.groupRead("2/6/0");  // Zum Senden einer Leseanfrage vom Arduino zum KNX auf der Gruppenadresse "2/6/0"
    }
    
    void serialEvent() {
      KnxTpUartSerialEventType eType = knx.serialEvent();
    }

    Vielen Dank für deine Mühen.


    Mit freundlichen Grüßen

    Mag Gyver
    Zuletzt geändert von Mag Gyver; 20.11.2015, 22:57.

    Einen Kommentar schreiben:


  • tuxedo
    antwortet
    "GA als String statt 2 byte" hab ich verstanden - aber da gehe ich nicht mit.
    Musst du ja auch nicht.

    Bisher habe ich kein Projekt gesehen was an die Grenzen kommt...
    Wenn du einen 6-Kanaliges Gerät bastelst das pro Kanal rund 10 KOs hat und allgemein nochmal 10, dann bist du schon bei 70KOs.
    Wenn alle 70 KOs eine rein 5-stellige String-GA haben (z.B. "1/2/3"), dann sind das schon mind. 350 bytes. Im Worst-Case wären es 560 bytes. Wenn man ein terminierendes 0-byte mit dazu rechnet ist es noch mehr.
    Bei der 2byte-pro-GA Version sind es lediglich 140.

    Das setzen KNX-Addresse per Button + LED Anzeige ist ja simple imzusetzen, macht ohne komplette parametrisierung (Gruppenaddressen) keinen Sinn.
    Denke das will auch niemand wirklich so haben. Wenn dann alles, oder nichts.

    Ein parametrisieren per ETS (oder selbstbautool) mit memread/memwrite/propread/wropwrite ist IMHO sehr ambitioniert - ich halte das eher notwendig für den Vertieb von fertigen Lösungen und weniger für den "DIY" bereich.
    Einstellungssache. Für kleine Bastelprojekte mit 1-3 KOs muss man das nicht unbedingt haben. Aber wenn es mal mehr sind, und ein breites Publikum das DIY Gerät in AUgenschein nimmt, ist das sicher nicht verkehrt ein Tool zu haben.


    Die hinzukommende komplexität (sowohl von a als auch b) sehe ich die selbstbau-Zielgruppe weiter schrumpfen...
    Wie gesagt: Kleinst-Projekte sind da sicher anders. Wenn das Tool dazu kommt, dann ist es auch eine Frage der API. Die bisherige Basis "DKA KNX-TPUART" bietet da leider wenig gute voraussetzungen. Es gibt andere Umsetzungen die da strukturierter gearbeitet haben. Mehr dazu später...

    Für meinen Geschmack muss der Zugang so einfach wie möglich sein.
    Stimme ich dir voll zu.

    Um das zu Erreichen hat in meinen Augen das beste Potential eine Aufsteckplatine für den BCU mit integiertem Arduino - oder eine fertige Platine mit TP-UPART und Arduino.
    Hierzu gibt es bereits eine laufende Diskussion hier im DIY Bereich.

    Weitere diskussionen dazu sollten wir Auslagern
    Öhm *kopfkratz* Wurde doch schon getan, oder? Guckst du hier: https://knx-user-forum.de/forum/%C3%...ceiver-onboard


    Einen Kommentar schreiben:


  • ThorstenGehrig
    antwortet
    "GA als String statt 2 byte" hab ich verstanden - aber da gehe ich nicht mit.
    Bisher habe ich kein Projekt gesehen was an die Grenzen kommt...

    Das setzen KNX-Addresse per Button + LED Anzeige ist ja simple imzusetzen, macht ohne komplette parametrisierung (Gruppenaddressen) keinen Sinn.
    Ein parametrisieren per ETS (oder selbstbautool) mit memread/memwrite/propread/wropwrite ist IMHO sehr ambitioniert - ich halte das eher notwendig für den Vertieb von fertigen Lösungen und weniger für den "DIY" bereich.
    Die hinzukommende komplexität (sowohl von a als auch b) sehe ich die selbstbau-Zielgruppe weiter schrumpfen...
    Für meinen Geschmack muss der Zugang so einfach wie möglich sein.

    Um das zu Erreichen hat in meinen Augen das beste Potential eine Aufsteckplatine für den BCU mit integiertem Arduino - oder eine fertige Platine mit TP-UPART und Arduino.
    Dazu eine "Library" an Beispielsprojekten (ich hab ja schonmal mit RFID-Leser, Regenmengenzähler und VOC-Sensor 3 Stück geliefert).

    Weitere diskussionen dazu sollten wir Auslagern - und ein KNX-Stammtisch wäre sicherlich ein guter Ort ;-)
    (heute in Kemmern/Frankenstammtisch?)

    Gruß
    Thorsten

    Einen Kommentar schreiben:


  • tuxedo
    antwortet
    Ob jemand die Kardino-Lib aktualisiert (https://github.com/KNX-on-Arduino ) weiß ich nicht.
    Übrigens: "blöder Name" - der wird schon mehrfach verwendet...
    Ich bin da nicht dabei... (vielleicht kann mir ja mal jemand auf dem Stammtisch den Fork näherbringen).
    Die groupWrite2ByteInt (und Answer)-Befehle sind da wohl noch kaputt.
    Bin aktuell noch an was anderem dran. Darf sich aber gerne jemand dran austoben und einen Pull-Request machen.

    Der Sinn und Zweck des Forks wurde hier schon mehrfach erwähnt:

    "Große" Applikationen passen mit dem Ansatz "GA als String statt 2 byte" nicht sonderlich gut in den kleinen Speicher der AVRs. Strings sind da einfach zu verschwenderisch.
    Und zum anderen wurde in dem Fork schon der Versuch unternommen memread/memwrite/propread/propwrite umzusetzen, was auch ansatzweise schon funktioniert.

    Zum Namen: naja, irgendwas ist ja immer...

    Einen Kommentar schreiben:


  • ThorstenGehrig
    antwortet
    Hi alle,
    ich habe in meiner Library mal die ganzen examples angepasst.
    Gerade für Empfangen von Telegrammen zum Schreiben (z.B. Aktor) oder Antworten auf KNX-Read-Requests.
    Danke an Mag Gyver für das schöne Skelet - ich hab so einiges wiederverwendet :-)

    Hier nochmal der Link für alle "Späteinsteiger": https://bitbucket.org/thorstengehrig...knx-user-forum

    Ob jemand die Kardino-Lib aktualisiert (https://github.com/KNX-on-Arduino ) weiß ich nicht.
    Übrigens: "blöder Name" - der wird schon mehrfach verwendet...
    Ich bin da nicht dabei... (vielleicht kann mir ja mal jemand auf dem Stammtisch den Fork näherbringen).
    Die groupWrite2ByteInt (und Answer)-Befehle sind da wohl noch kaputt.

    Gruß
    Thorsten

    Einen Kommentar schreiben:

Lädt...
X