Ankündigung

Einklappen
Keine Ankündigung bisher.

ARDUINO am KNX

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

  • mars
    antwortet
    nein passt schon, LED_BUILTIN ist eine vordefinierte Konstante
    (ist evtl. nicht der richtige Name dafür, aber der Copiler meckert nicht und kanns richtig umsetzten - 13 stimmt z.B. beim Uno, ist evtl. bei anderen Arduinos oder dem ESP8266 anders definiert)

    Einen Kommentar schreiben:


  • NetFritz
    antwortet
    Hallo
    Fehlt nicht noch vor void setup()
    int LED_BUILTIN = 13;
    Gruß NetFritz

    Einen Kommentar schreiben:


  • mars
    antwortet
    ... Danke Mag Gyver und Resümee:

    mein Sketch aus #810 geht bei Dir
    Dein Sketch aus #685 leicht modifiziert (PA, GA und interner LED) gibt:
    Code:
    #include <KnxTpUart.h>
    
    KnxTpUart knx(&Serial, "1.1.5");
    
    boolean test;
    
    void setup() {
      pinMode(LED_BUILTIN, OUTPUT);
      Serial.begin(19200);
      UCSR0C = UCSR0C | B00100000;
      knx.uartReset();
      knx.addListenGroupAddress("15/0/0");
    }
    
    void loop() {
    }
    
    void serialEvent() {
      KnxTpUartSerialEventType eType = knx.serialEvent();
      if (eType == KNX_TELEGRAM) {
        KnxTelegram* telegram = knx.getReceivedTelegram();
        String target = String(0 + telegram->getTargetMainGroup()) + "/" + String(0 + telegram->getTargetMiddleGroup()) + "/" + String(0 + telegram->getTargetSubGroup());
        if (telegram->getCommand() == KNX_COMMAND_WRITE) {
          if (target == "15/0/0") {
            test = telegram->getBool();
            digitalWrite(LED_BUILTIN, (test) ? HIGH : LOW);
          }
        }
      }
    }
    Tipps aus #686ff ziehen nicht, da ich Arduino und PC trenne (keine USB-Verbindung); Stromversorgung des Arduino kommt aus der BCU.
    Ich habe jetzt nur den Uno genommen, um "kompatibel" zu bleiben ...

    ... und immer noch das gleiche Ergebnis:
    Senden vom Arduino auf den Bus geht - Empfang vom Bus an den Arduino geht nicht

    Ich habe das "unbestimmte Gefühl", dass "irgendwo anders" klemmt - nicht am/im Arduino sondern ab der BCU in Richtung Bus.
    Ich fange mal an zu spinnen:
    - Kann die BCU als "Einbahnstraße" arbeiten?
    - Kann der Bus Telegramme "unterdrücken"?

    Ist mir völlig rätselhaft. Hast Du (oder noch wer) Tipps, was / wie ich noch testen kann?

    Danke Marco

    Einen Kommentar schreiben:


  • Mag Gyver
    antwortet
    Hallo mars,

    ähm. Passt schon, habe ich nach dem Kopieren selber gelöscht.

    Entschuldigung, mein Fehler. Man sollte die Taste "Entf" nur einmal drücken.
    Aber doppelt hält manchmal besser!?

    Update:

    Dein Sketch im Post # 810 funktioniert auf dem Arduino Uno ohne Probleme.
    Leider habe ich keinen Arduino ProMini 5V 16Mhz zum Testen.



    Mit freundlichen Grüßen

    Mag Gyver
    Zuletzt geändert von Mag Gyver; 07.03.2016, 21:37. Grund: Sketch tested with Arduino Uno and Siemens 5WG1 117-2AB12 -> O.K.

    Einen Kommentar schreiben:


  • mars
    antwortet
    vielen Dank erst Mal und gleich noch eine Frage:

    ...fehlt die Raute
    welchen Sketch meinst Du? Rauten sind doch vor dem "include" in beiden Sketches?

    Posts #685 bis #688 sehe ich mir gleich mal an und werde morgen mal probieren und ...
    ... das mit dem Nano ist mir klar / bekannt - darum der ProMini, der besser in ein kleines (REG-)Gehäuse geht.

    Gruß Marco

    Einen Kommentar schreiben:


  • Mag Gyver
    antwortet
    Hallo mars,

    zu deinen Problemen.

    Dein Sketch kann so nicht funktioniert.

    Vor dem

    Code:
    include <KnxTpUart.h>
    fehlt die Raute.


    Beachte hierbei bitte Post #685 bis Post #688 für den Arduino Uno.
    In diesen Post befindet sich auch ein Sketch zum Empfangen der funktioniert garantiert.

    Danach sollte auch das Empfangen mit dem Arduino Uno funktionieren.

    Mit dem ProMini habe ich keine Erfahrung, diesen benütze ich nicht.


    Nur zur Information:

    Der Arduino Nano geht nur für das Senden, beim Empfangem stört der FTDI-Baustein.


    Ja, beim nicht fehlerfreien Empfangen läuft die Library auch in den Zweig "eType == UNKNOWN".


    Mit freundlichen Grüßen

    Mag Gyver
    Zuletzt geändert von Mag Gyver; 07.03.2016, 20:45.

    Einen Kommentar schreiben:


  • mars
    antwortet
    Empfang vom Bus klappt nicht

    Aber erst mal "Hallo" in diesen Thread und vielen Dank für die Idee und die Arbeit zur Umsetzung.

    Ich habe bisher mit der KnxTpUart-Library eine kleine Wetterstation gebastelt, die zyklisch die aktuellen Messwerte auf den Bus sendet. Das habe ich mit meiner copy&paste-Programmierung recht gut und zügig hinbekommen.

    Jetzt wollte ich einen Schritt weiter gehen und per GA (Schalt-)Befehle an den Arduino senden.
    Zum Test habe ich (auf Grundlage des Beispiels "ReceiveKNXTelegrams") ein kleines Sketch erstellt und geladen:

    Code:
    #include <KnxTpUart.h>
    
    // Initialize the KNX TP-UART library on the Serial port of Arduino Uno
    // and with KNX physical address 1.1.5
    KnxTpUart knx(&Serial, "1.1.5");
    
    int LED = LED_BUILTIN;
    
    void setup() {
      pinMode(LED, OUTPUT);
      digitalWrite(LED, LOW);
    
      Serial.begin(19200);
      UCSR0C = UCSR0C | B00100000; // Even Parity
    
      knx.uartReset();
     
      knx.addListenGroupAddress("15/0/0");
    }
    
    
    void loop() {
      // nothing in the loop. This example is only to receive telegrams
    }
    
    void serialEvent() {
      KnxTpUartSerialEventType eType = knx.serialEvent();
      if (eType == TPUART_RESET_INDICATION) {
      } else if (eType == UNKNOWN) {
      } else 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());
    
        // Here you have the telegram and can do whatever you want
        if (telegram->getCommand() == KNX_COMMAND_WRITE) {
          // Auswertung des empfangenen KNX-Telegrammes mit Schreibbefehl (Flag) -> Aktion
          if (target == "15/0/0") {
            int received_15_0_0 = telegram->getBool();
            if (received_15_0_0) {
              digitalWrite(LED, HIGH);
            }
            else {
              digitalWrite(LED, LOW);
            }
          }
        }
      }
    }
    Jetzt sollte ich im ETS-Gruppenmonitor mittels beschreiben der GA 15/0/0 die eingebaute LED schalten können - dies klappt aber nicht !?

    Zum Test mal ein kleines Sende-Sketch geladen:

    Code:
    // EIN-/AUS-Schalten der GA 15/0/0 (DPT 1)  
    #define GA "15/0/0"  
    
    #include <KnxTpUart.h>      // Bibliothek zur KNX-Anbindung
    // Initalisierung der KNX TP-UART library ...
    // ... mit der Physikal. Adresse "1.1.5"
    KnxTpUart knx(&Serial, "1.1.5");
    
    void setup() {
      Serial.begin(19200);          // init. serielle Schnittstelle
      UCSR0C = UCSR0C | B00100000;  // Parität even
      knx.uartReset();              // UART initialisieren
    }
    
    void loop() {
      knx.groupWriteBool(GA, 1);
      delay (2500);
      knx.groupWriteBool(GA, 0);
      delay (2500);  
    }
    ... und OK, die GA schaltet im Gruppenmonitor abwechseld zwischen 0 und 1

    ... also Verkabelung zwischen Arduino und BCU sowie Busverbindung usw. OK

    dann noch
    1) das erste Sketch auf verschiedener Hardware getestet:
    - ich habe zwei verschiedene BCUs versucht
    - zwei ProMinis und einen Uno ausprobiert

    2) zur Sicherheit noch mal die neueste Version (am Sonntag / 6.3.16) runtergeladen und installiert

    3) nochmals diesen Thread durchgelesen (und hoffentlich nichts übersehen ;-)

    ... und immer das gleiche Ergebniss: senden geht, empfangen nicht

    Ich habe leider keinen Mega o.ä. da, um Serial1 zur Fehlersuche zu nutzen. So habe ich ein paar Sketche gebastelt, die mittels LEDs an diversen Ausgängen zeigen, sollen, in welchen Programmteil verzweigt wird. Hierdurch konnte ich herausfinden, dass das Sketch immer in den Zweig "eType == UNKNOWN" läuft, also keine gültigen KNX-Telegramme ankommen.
    Sollte / muss ich mir noch einen Mega zum Testen bestellen? (Wollte ich vermeiden, da ich vermute, dass ich nur zum gleichen Ergebnis komme.)

    Habt Ihr noch Tipps für mich, wo / wie ich weiter suchen kann (ich habe inzwischen wohl schon einen recht vernebelten Blick auf das Problem)?
    Danke schon Mal.

    Gruß Marco

    Einen Kommentar schreiben:


  • Mag Gyver
    antwortet
    Hallo ThorstenGehrig,

    meine kleinen Projekte sind bei mir im Haus verbaut.
    • Digitales Schlüsselbrett mit I-Button´s
    • Übergabe Zeit und Datum vom KNX-Bus an ein Fremdsystem mit Synchronisierungstelegram
    • Synchronisierung und Ansteuerung einer Uhr mit 86 LED´s
    • Erkennung einer akustischen Meldung zum Starten einer Schaltsequenz auf KNX
    • Kopplung zwischen Siemens Logo 0BA7 und KNX
    • Kopplung Heizung und KNX über einen eigenwilligen Heizungssteuerungsbus
    • u.s.w
    Dinge die man halt nicht mehr vermissen möchte, wenn man Diese erst einmal hat.

    Eigentlich hat dein Code alles erst ins rollen gebracht.
    Ich hatte schon lange nach einem Code für EIB/KNX auf dem ATmega 328P oder dieser ATmega-Reihe gesucht.
    Eben für kleine Projekte, was es nicht zu kaufen gibt und/oder nie hergestellt werden wird.

    @ intelligente Haustechnik

    Rob Tillaart hat eine Library geschrieben (mit vielen Beispielen), vielleicht hilft dir davon etwas. Link siehe weiter unten.
    Hat mir bei meinen I-Button´s auch geholfen.
    Code:
    http://forum.arduino.cc/index.php?topic=333923
    Code-Schnipsel können ein gute Basis sein, um die Sache aus einem anderen Winkel zu betrachten.



    Mit freundlichen Grüßen

    Mag Gyver
    Zuletzt geändert von Mag Gyver; 02.03.2016, 19:27.

    Einen Kommentar schreiben:


  • intelligente Haustechnik
    antwortet
    Hallo Thorsten,

    danke für die Info und Codeunterstützung.

    Ganz kurz noch dazu: Ist der von mir eingesetzte havesend-Code nicht dazu da, mehrfaches Senden zu verhindern?

    Mit der Buslast hast Du natürlich recht, da gehen auch größere Zeitabstände, da man ja nicht wirklich aller 1 sek einen Temperaturwert braucht. Oder wie du schon richtig schreibst, senden bei Änderung...

    Punkt 2 erledigt, da ohne mein Zutun der Fehler? von gestern nicht wieder aufgetreten ist
    Punkt 3 erledigt


    Jens

    Einen Kommentar schreiben:


  • ThorstenGehrig
    antwortet
    Hi,
    @MacGyver: super. Genau so habe ich mir open source collaboration vorgestellt: nicht nur hinweise auf Bugs und "Anforderungen" - sondern auch eigene Implementierungen (auch wenn es manchmal Spaß macht sich durch die KNX spec durchzuwühlen...). Ich habe eben erst, beim nochmaligen durchlesen, gesehen das du im vorletzten commit schon neue Telegrammarten hinzugefügt hast (set3ByteDate) - und nun noch 4-Bit Dim-Telegramme.
    Super! Verrätst du und noch deine Projekte wo du das Einsetzt?
    Außerdem habe ich dir Admin/Commit rechte gegeben... die Code qualität passt und ein rollback ist ja jederzeit möglich.

    @Jens: allzuviele deiner Fragen kann ich zwar nicht beantworten - da ich mich nicht mit 1Wire auf dem Arudino beschäftigt habe... trotzdem eine info:
    du schreibst "float success = knx.group...." - dabei gibt es auf eiin knx.groupWrite ... nur ein 0 (fail) oder 1 (success) zurück.
    Mit float definierst du die variable aber als float - int würde aber reichen.
    (hat alles nichts mit deinen anderen Fragen zu tun).
    ... wenn ich mir den code genauer ansehe macht du das "doppelt gemoppelt" mit dem "haveSend".
    Also eigentlich müsste auch statt das:
    Code:
        haveSent = false;
        if (!haveSent) {
          float success = knx.groupWrite2ByteFloat("2/3/2", (Tc_100 / 100)); //Isttemp Schlafen
          haveSent = true;
        }
    auch das gehen:
    Code:
        haveSent = false;
        if (!haveSent) {
          haveSent = knx.groupWrite2ByteFloat("2/3/2", (Tc_100 / 100)); //Isttemp Schlafen
        }
    da du aber "haveSend" garnicht auswertest - kannst du auch noch einfacher:
    Code:
          haveSend = knx.groupWrite2ByteFloat("2/3/2", (Tc_100 / 100)); //Isttemp Schlafen
    Weiterhin - wenn ich den code mal "trocken" lese: ich vermute mal der Loop liest jede sekunde den "nächsten" 1-Wire aus? Und anschließend schaust du ob es Schlafen/Bad/Wohnen ist - und schreibst den Wert auf den Bus.
    Das würde jede Sekunde einen Wert bedeuten ... eine Ziemliche buslast.
    Wenn das funktioniert solltest du die Werte speichern und nur bei änderung über x% erneut senden - oder nach Zeit y.

    Falls man den "OneWire::crc8 (data, 8) HEX);" kannst du den auch ohne Serial.print ausführen.
    Einfach "int test = Serial.print( OneWire::crc8( data, 8), HEX);" verwenden... so müsste der letzte Teil so aussehen:
    Code:
      for ( i = 0; i < 9; i++) { // 9 bytes
        data[i] = ds.read();
      }
      dummy = ( OneWire::crc8( data, 8), HEX);
    Last but not least: ein solcher Demo code ist schön - aber bei der "arbeit" die noch vor dir liegt bist er sauber/final ist - macht ein eigener Thread vielleicht sinn :-)

    Gruß
    Thorsten


    Einen Kommentar schreiben:


  • intelligente Haustechnik
    antwortet
    Projektvorstellung 1-wire Sensoren über Arduino am Bus


    Hallo,

    ich habe mir die diversen 1-wire-Sketche im Netz zu Gemüte geführt und bin zu einer für mich akzeptablen Lösung gekommen, um möglichst viele Temperaturen auf den Bus zu bekommen.

    Bauteile
    Arduino R3
    SIEMENS 5WG1117-2AB12
    kleine zusammengelötete Adapterplatine mit 2 Optokopplern, um den Arduino mit dem Bus zu verbinden
    Spannungsversorgung Arduino nicht vom Bus, betrachte ich aber nicht als Problem in meinem Fall

    Als Sensoren verwende ich aktuell 3 DS18S20 mit einer Auflösung von 0,5K (ich weis, DS18B20 hat eine höhere Auflösung, die sind aber bei einer spontanen Pollinbestellung mal eben zum Testen mitbestellt worden...

    Trotz das mein Sketch fleißig Werte auf den Bus bringt, habe ich noch ein paar ungelöste Fragen an die Programmierer unter Euch:

    1. Die Adressen der Sensoren werden in ja 8 byte gesendet und empfangen. Der Einfachheit halber habe ich nur die letzten beiden byte verglichen, da sich meine Sensoren dort unterschieden haben. Kann man das so machen, wenn man den Überblick behält oder gibt es auch eine einfachere Lösung?

    2. Für den Datenverkehr habe ich Pin 10 verwendet. Trotzdem blinkt die TX-LED munter im Sekundentakt mit, auch wenn ich den KNX-Teil komplett weglasse. Wenn der Serial-Monitor aus ist, dauert es gut 5 Minuten bis die TX-LED dauerhaft leuchtet. Die Temperaturen werden aber weiterhin fleißig gesendet. Wie ist dieses Verhalten zu erklären?

    3. Die im gesamten Sketch enthaltenen Serial.print() sind nur zum Anschauen auf dem Serialmonitor der Arduino-Ide gedacht. Dachte ich. Und habe sie alle kaltgestellt, weil ich Sie nur am Anfang benötigt habe. Wenn ich das im Sketch ganz unten befindliche
    Code:
    Serial.print( OneWire::crc8( data, 8), HEX);
    auch kaltstelle, erhalte ich die tollsten Temperaturwerte. Woran liegt das oder habe ich hier einen Denkfehler?

    4. Wo zeigen sich hier die Grenzen hinsichtlich Anzahl der Sensoren und Performance, wenn man bedenkt, daß der Arduino nur diese Aufgabe hat. Ich glaube, Wintermute hatte sich in einem früheren Beitrag negativ dazu geäußert?


    Letzte Frage an alle:
    Ist diese Projektvorstellung einen eigenen Thread wert, um den Originalthread nicht noch mehr aufzublähen?
    Gehören Sketche wie der Nachfolgende nicht genauso in die Rubrik Code-Schnipsel?

    Jens

    Code:
    #include <OneWire.h>
    #include <KnxTpUart.h>
    
    // Initialize the KNX TP-UART library on the Serial1 port of Arduino
    KnxTpUart knx(&Serial, "1.1.199");
    
    
    // DS18S20 Temperaturchip i/o
    // DS18B20 Temperaturchip i/o
    
    OneWire ds(10); // an pin 10
    
    int haveSent = 0;
    
    byte i;
    
    byte present = 0;
    
    byte data[12];
    
    byte addr[8];
    
    int HighByte, LowByte, TReading, SignBit;
    
    float Tc_100, a;
    
    
    
    
    
    
    void setup() {
    
    // inputs/outputs initialisieren
    
    // seriellen port starten
    
    
    Serial.begin(19200);
    UCSR0C = UCSR0C | B00100000; // Even Parity
    
    knx.uartReset();
    
    }
    
    
    
    
    void loop() {
    
    // Sensoren suchen
    
    delay(1000); //alle 1sek eine Messung
    
    if ( !ds.search(addr)) {
    
    // Serial.print("Keine weiteren Addressen.\n");
    
    ds.reset_search();
    
    return;
    
    }
    
    // Hier stehen die Adressen der Temperatursensoren
    
    // Serial.print("Adresse =");
    
    // for( i = 0; i < 8; i++) {
    
    // Serial.print(addr[i], DEC);
    
    // Serial.print(" ");
    
    // }
    
    // Serial.println(" ");
    
    
    // if ( OneWire::crc8( addr, 7) != addr[7]) {
    
    // Serial.print("CRC nicht gültig!\n");
    
    // return;
    
    // }
    
    /* Hier wird die Gerätefamilie ermittelt
    
    if ( addr[0] == 0x10) {
    
    Serial.print("Gerät ist aus der DS18S20 Familie.\n");
    
    }
    
    else if ( addr[0] == 0x28) {
    
    Serial.print("Gerät ist aus der DS18B20 Familie.\n");
    
    }
    
    else {
    
    Serial.print("Gerätefamilie nicht erkannt : 0x");
    
    Serial.println(addr[0],HEX);
    
    return;
    
    }
    
    */
    
    // man sollte ein ds.depower() hier machen, aber ein reset tut das auch
    
    ds.reset();
    
    ds.select(addr);
    
    ds.write(0x44,1); // start Konvertierung, mit power-on am Ende
    
    present = ds.reset();
    
    ds.select(addr);
    
    ds.write(0xBE); // Wert lesen
    
    LowByte = data[0];
    HighByte = data[1];
    TReading = (HighByte << 8) + LowByte;
    SignBit = TReading & 0x8000; // test most sig bit
    
    if (SignBit) {// negative
    //TReading = (TReading ^ 0xffff) + 1; // 2's comp
    TReading = !TReading + 1;
    TReading = (TReading * -1);
    }
    
    // Tc_100 = (6 * TReading) + TReading / 4; // mal (100 * 0.0625) oder 6.25 bei ds18B20
    // Tc_100 = (TReading*100/2); //bei ds18s20
    
    Tc_100 = (TReading*100/2);
    
    if (addr[6] == 0 && addr[7] == 135){
    delay (100);
    haveSent = false;
    if (!haveSent) {
    float success = knx.groupWrite2ByteFloat("2/3/2", (Tc_100 / 100)); //Isttemp Schlafen
    haveSent = true;
    }
    }
    else if (addr[6] == 0 && addr[7] == 2){
    delay (100);
    haveSent = false;
    if (!haveSent) {
    float success = knx.groupWrite2ByteFloat("5/3/2", (Tc_100 / 100)); //Isttemp Bad
    haveSent = true;
    }
    }
    else if (addr[6] == 0 && addr[7] == 252){
    delay (100);
    haveSent = false;
    if (!haveSent) {
    float success = knx.groupWrite2ByteFloat("7/3/2", (Tc_100 / 100)); //Isttemp Wohnen
    haveSent = true;
    }
    }
    
    // Serial.println(" ");
    
    // Serial.print("P=");
    
    // Serial.print(present,HEX);
    
    // Serial.print(" ");
    
    for ( i = 0; i < 9; i++) { // 9 bytes
    
    data[i] = ds.read();
    
    // Serial.print(data[i], HEX);
    
    // Serial.print(" ");
    
    }
    // Serial.println(" ");
    // Serial.print("CRC=");
    
    Serial.print( OneWire::crc8( data, 8), HEX);
    
    // Serial.println();
    // Serial.println(" ");
    
    }

    Einen Kommentar schreiben:


  • Mag Gyver
    antwortet
    Hallo ThorstenGehrig,

    habe auf Bitbucket noch einen weiteren pull requests gestartet.

    Habe die Schreibfunktionen

    Code:
    bool groupWrite4BitInt(String, int);
    bool groupWrite4BitDim(String, bool, byte);
    und die Antwortfunktionen (Die Antwortfunktionen sind eigentlich nicht notwendig, aber man weis ja nie)

    Code:
    /*
    bool groupAnswer4BitInt(String, int);
    bool groupAnswer4BitDim(String, bool, byte);
    */
    sowie die dazugehörigen Rückgabefunktionen

    Code:
    int get4BitIntValue();
    bool get4BitDirectionValue();
    byte get4BitStepsValue();
    in die Library aufgenommen.

    Aufnahme der neuen Funktionen in Readme.
    Anpassung und Prüfung der Examples mit neuem Code.

    Dadurch kann man 4 Bit Werte auf den KNX-Bus Senden oder Empfangen. Es stehen zwei grundsätzliche Funktionen zur Verfügung.
    1. Senden + Empfangen + (Antworten) als gemeinsamer 4 Bit Wert bei Eingabe- und Rückgabe
    2. Senden + Empfangen + (Antworten) Richtung / Schritte getrennt Eingabe- und Rückgabe, jedoch wird immer der komplette 4 Bit Wert gesendet bzw. empfangen
    Näheres hierzu finden man im ReceiveKNXTelegrams.ino



    Mit freundlichen Grüßen

    Mag Gyver

    Einen Kommentar schreiben:


  • ThorstenGehrig
    antwortet
    Passt schon. Bei mir ist es nicht viel anders ;-)

    Einen Kommentar schreiben:


  • Mag Gyver
    antwortet
    Hallo ThorstenGehrig,

    das mit den Rechten halte ich persönlich für nicht sinnvoll. Es sollte ja Jemand das noch gegenprüfen oder zumindest überfliegen.

    Ich benütze deinen Code als Vorlage für meinen kleinen Projekte, deshalb versuche ich sinnvolle Sachen direkt zu integrieren.
    Darüberhinaus könnten noch Andere davon profitieren.

    Wie gesagt, Programmieren ist schon eine ganze Weile her. Mache dies nicht beruflich.

    Viel Spaß in Barcelona auf der Handymesse !


    Mit freundlichen Grüßen

    Mag Gyver

    Einen Kommentar schreiben:


  • ThorstenGehrig
    antwortet
    Cheapau.
    Danke :-)
    Ich kann dir gerne commit rechte geben - die Qualität gefällt mir!
    Grüße aus Barcelona (morgen fängt der MWC an)

    Einen Kommentar schreiben:

Lädt...
X