Ankündigung

Einklappen
Keine Ankündigung bisher.

ARDUINO am KNX

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

  • rel
    antwortet
    Zitat von Catter Beitrag anzeigen
    Hallo Leute,

    Wollten hier mal mein kleines Projekt vorstellen um ein Feedback zu bekommen.

    Es handelt sich um einen Sound-Aktor der 6 Eingänge hat und jeweils einen auf den Ausgang legt.
    Ich will es verwenden um zwischen den verschiedenen Eingangsquellen meiner Stereoanlage (BluRay, Fernseher, Playstation, usw) bequem hin und her schalten zu können.

    Derzeit "hört" der Aktor auf 7 verschiedenen Gruppenadressen (Input1-6 und AUS/EIN)

    Morgen spendiere ich ihm noch irgendeine Statusanzeige und integriere den Raspberry Pi als MedienCenter (vorallem für Google Music).

    Zusätzlich will ich ihn noch über Infrarot steuern können und eine Lautstärkenregelung ist auch noch geplant.

    Es ist erst der erste Prototyp und sieht deshalb noch sehr chaotisch aus (Bild im Anhang).

    Sollte das Projekt gut ankommen mach ich selbstverständlich einen eigenen Thread auf
    Ich freue mich auf euer Feedback
    Hallo,
    dein Projekt ist ja hier leider etwas untergegangen, deshalb von mir mal ein 👍 dafür. Mach mal weiter und stell das Ganze hier nochmal vor. Danke.

    Ari

    Einen Kommentar schreiben:


  • ThorstenGehrig
    antwortet
    So - meine tests waren soweit erfolgreich das ich es Eingecheckt habe.
    Kann jetzt jeder regulär auschecken.

    Wie geschrieben wir die physikalische Adresse jetzt als "1.2.3" angegeben (mit Anführungszeichen) und die Kommunikationsobjekte als "1/2/3".

    Viel erfolg!

    Gruß
    Thorsten

    Einen Kommentar schreiben:


  • JuMi2006
    antwortet
    Hallo Thorsten, die Feinheiten dahinter sind mir durchaus klar aber momentan wirklich keine Zeit. Beruf, Familie, Garten - da ist nix drin im Moment. Aber knx.groupWrite14ByteText(0/1/200, "Testtext") muss ja nicht zwangsläufig ungültig werden.

    Grüße

    Einen Kommentar schreiben:


  • ThorstenGehrig
    antwortet
    Zitat von JuMi2006 Beitrag anzeigen
    -- knx.groupWrite14ByteText(0/1/200, "Testtext");
    ++ knx.send(0/0/100, value, 1.001 );
    Ein generisches Senden unter Angabe des DPT wäre äusserst sinnvoll.
    Hm - bin mir da nicht so sicher.
    Bool sind ja DTP1.001 bis DTP1.023 und DTP1.100
    Wenn dann würde eher es eher so aussehen
    knx.send(0/0/100, value, 1)

    so richtig generisch geht das auch nicht - da ja jeder neue DTP erst implementiert werden muss.
    Dann sind die Art des übergabeparameters (int, String) und die Anzahl (z.B. bei Time) auch unterschiedlich...

    Hast du denn Zeit zum Testen der jetzigen Lib? Dann schick mir mal deine Mail - dann kriegst du die lib per email zurück.
    Ich will erst 1-2 positive Rückmeldungen bevor ich das Repository update.

    Gruß
    Thorsten

    Einen Kommentar schreiben:


  • JuMi2006
    antwortet
    Zitat von ThorstenGehrig Beitrag anzeigen
    Ich habe die Library umgestellt auf "Richtige" Adressvergabe.
    Sauber! Ich hab momentan leider einfach keine Zeit, aber das Stand auch auf meiner To-Do-Liste.
    Falls Dich die Langeweile packt:

    -- knx.groupWriteBool(0/0/100, value );
    -- knx.groupWrite14ByteText(0/1/200, "Testtext");
    ++ knx.send(0/0/100, value, 1.001 );
    ++ knx.send(0/1/200, "Testtext",14.001);

    Ein generisches Senden unter Angabe des DPT wäre äusserst sinnvoll.

    Grüße

    Einen Kommentar schreiben:


  • Schnakaus
    antwortet
    Hallo,

    ich würde testen.

    Einen Kommentar schreiben:


  • ThorstenGehrig
    antwortet
    Ich brauche mal Tester!
    Ich habe die Library umgestellt auf "Richtige" Adressvergabe.

    Initialisiert wird
    alt:
    KnxTpUart knx(&Serial1, 15,15,1);
    neu:
    KnxTpUart knx(&Serial1, "15.15.1");

    gesendet wird jetzt
    alt:
    knx.groupWriteBool(0,0,100, value );
    knx.groupWrite14ByteText(0,1,200, "Testtext");
    knx.addListenGroupAddress(0,0,14);
    ...
    neu:
    knx.groupWriteBool("0/0/100", value );
    knx.groupWrite14ByteText("0/1/200", "Testtext" );
    knx.addListenGroupAddress("0/0/14");
    ...

    So sollte das alles schöner lesbar sein - und für Einsteiger auch vertrauter aussehen.
    Bevor ich das ganze online stelle - wer will testen?
    Tester müssen nur ihr 1,2,3 durch "1/2/3" ersetzen (bzw. "1.2.3" bei der phy-Adresse)

    Und noch was: falls jemand Gründe GEGEN eine solche Umstellung hat bitte auch melden!

    Gruß
    Thorsten

    Einen Kommentar schreiben:


  • swiss
    antwortet
    Hallo Thorsten

    Danke für die schnelle Rückmeldung Damit deckt die lib aktuell alles ab was ich momentan zur Umsezung meiner Idee so bräuchte

    Einen Kommentar schreiben:


  • ThorstenGehrig
    antwortet
    Yep - die muss noch geschrieben werden (hatte ich mir heute auch schon gedacht).

    Was geht (senden):

    Bool (DPT 1 - 0 oder 1)
    groupWriteBool(Hauptgruppe, Mittelgruppe, Untergruppe, bool);

    2 ByteFloat (DPT9 - -671 088,64 to 670 760,96 )
    groupWrite2ByteFloat(Hauptgruppe, Mittelgruppe, Untergruppe, float);

    1 Byte Int (DTP 5 - 0...255)
    groupWrite1ByteInt(Hauptgruppe, Mittelgruppe, Untergruppe, int);

    2 byte Int (DTP 7 - 0…65 535])
    groupWrite2ByteInt(Hauptgruppe, Mittelgruppe, Untergruppe, int);

    4 byte Float (DTP 14 - -2147483648 to 2147483647)
    groupWrite4ByteFloat(Hauptgruppe, Mittelgruppe, Untergruppe, float);

    14 Byte text (DTP 16)
    groupWrite14ByteText(Hauptgruppe, Mittelgruppe, Untergruppe, String);

    Time (DTP 10.001)
    groupWriteTime(Hauptgruppe, Mittelgruppe, Untergruppe, Day, Hours, Minutes, Seconds);

    Dazu alle Read-Requests - bis auf Time (braucht das jemand?)

    groupAnswerBool(Hauptgruppe, Mittelgruppe, Untergruppe, bool);
    groupAnswer2ByteFloat(Hauptgruppe, Mittelgruppe, Untergruppe, float);
    groupAnswer1ByteInt(Hauptgruppe, Mittelgruppe, Untergruppe, int);
    groupAnswer2ByteInt(Hauptgruppe, Mittelgruppe, Untergruppe, int);
    groupAnswer4ByteFloat(Hauptgruppe, Mittelgruppe, Untergruppe, float);
    groupAnswer14ByteText(Hauptgruppe, Mittelgruppe, Untergruppe, String);

    Wäre gut wenn jemand die DTP angaben gegenchecken könnte.

    Gruß
    Thorsten

    Einen Kommentar schreiben:


  • swiss
    antwortet
    Ist es momentan möglich 14Byte Text über die lib zu senden?

    Und gibt es irgend wo eine Liste welche DPT unterstützt werden? Ich hätte eine solche Info in einer art README Date auf BitBuket erwartet aber leider nix gefunden.

    Einen Kommentar schreiben:


  • ThorstenGehrig
    antwortet
    Hi,

    da ich gerade "im Thema bin": gibt es noch ein Telegramtyp den jemand braucht?
    Für ein Bier beim nächsten KNX-Stammtisch wird das gerne erledigt ;-)

    Gruß
    Thorsten

    Einen Kommentar schreiben:


  • ThorstenGehrig
    antwortet
    Hi,
    also ich würde NICHT alle 60 Sekunden die Zeit auf den Bus senden - das ist unötige Buslast, oder?
    Alle Stunde oder so sollte reichen... - oder einmal täglich :-)

    knxsend ist nur eine lokale variable - die kannst du vorher definieren.
    Beim erfolgreichen senden des Telegrams wird die variable auf 1 gesetzt - bei fehler auf 0.
    Vermutlich ist das aber auch egal bei einem regelmäßgen Zeit-Telegram :-)

    Dann würde ich not deine KNX-Adresse anpassen: 15.15.20 (zeile 11) passt sicherlich nicht zu deinem Projekt, oder?

    Dann vielleicht noch ein paar Bilder & Doku (woher die Libs und welche Hardware eingesetzt wurde)- und das ganze in einen kleinen "Projektvorstellungs-Thread" - fände ich SUPER!

    Übrigens: ein sehr schönes Projekt was zeigt wie einfach / günstig ein KNX-Arduino probleme lösen kann!

    Gruß
    Thorsten

    Einen Kommentar schreiben:


  • Schnakaus
    antwortet
    Läuft mit Echtzeituhr problemlos. Der Sketch stellt die Systemuhr per RTC und schreibt alle 60 Sekunden die Zeit auf den Bus.

    nochmals Vielen Dank!

    Code:
    #include <KnxTelegram.h>
    #include <KnxTpUart.h>
    
    #include <TimeAlarms.h>
    #include <Time.h>
    
    #include <DS3232RTC.h>
    
    #include <Wire.h>
    
    KnxTpUart knx(&Serial1, 15, 15, 20);
    
    void setup() 
    {
      Serial.begin(9600);
      Serial1.begin(19200);
      UCSR1C = UCSR1C | B00100000; // Even Parity
      knx.uartReset();
      
      setSyncProvider(RTC.get); // Uhrzeit von RTC auf Arduino setzen
      
      Alarm.timerRepeat(60, Repeats);            // Timer -> alle 60sec
      
      
    }
    
    void loop() {  
    
      Alarm.delay(1000);
      
      
      
      Serial.print(weekday());
      Serial.print("-");
      Serial.print(hour());
      Serial.print(":");
      Serial.print(minute());
      Serial.print(":");
      Serial.print(second());
      Serial.println();
    
      delay(500);
     
    
    }
    
    // --------Funktionen-----------------------------------------------------------------------------
    
    
    void Repeats(){
      Serial.println("60 Sekunden Timer");
      knx.groupWriteTime(5, 0, 0, weekday(), hour(), minute(), second());
    
    }
    -Arduino Yun
    -RTC DS3231
    -Siemens BCU

    Einen Kommentar schreiben:


  • Schnakaus
    antwortet
    Hi,

    funktioniert 1A !!
    knxsend kennt er bei mir nicht. Ohne geht es.

    Code:
    knx.groupWriteTime(5, 0, 0, 7, 8, 22, 10 );
    Ich versuche jetzt die Daten von der RTC zu senden.

    Vielen Dank für die Mühe.

    Einen Kommentar schreiben:


  • ThorstenGehrig
    antwortet
    So - es ist jetzt in der Library drinnen.
    @Schnakaus: jetzt bist du an der Reihe es zu testen! - bitte aktuelle Library neu downloaden!!

    Der Aufruf ist folgendermaßen:

    knxsend = knx.groupWriteTime(0, 0, 15, 7, 24, 30, 10 );

    Wobei 0,0,15 die Zieladresse ist,
    danach kommt day, hours, minutes und seconds.

    Bei day gilt
    1= Montag
    7=Sonntag
    0=kein Tag

    Am besten mal ein kleines Test-Sketch bauen und "fest" eine Uhrzeit versenden um zu sehen ob es klappt...

    Gruß
    Thorsten

    EDIT: Gerade noch ein Bug behoben (in payload lengh). Bei mir läuft es laut eibd fehlerfrei:
    Code:
    2014-04-27 19:11:21.825,A_GroupValue_Write,1.1.7,0/0/1,CC 16 21,Sa 12:22:33,DPT_TimeOfDay,10.001,0,low,6,T_DATA_XXX_REQ,0
    2014-04-27 19:11:23.139,A_GroupValue_Write,1.1.7,0/0/1,CC 16 21,Sa 12:22:33,DPT_TimeOfDay,10.001,0,low,6,T_DATA_XXX_REQ,0
    2014-04-27 19:11:24.274,A_GroupValue_Write,1.1.7,0/0/1,CC 16 21,Sa 12:22:33,DPT_TimeOfDay,10.001,0,low,6,T_DATA_XXX_REQ,0
    (Samstag 12 Uhr 22 Min und 33 sek. sind in meinem Test-Sketch fix programmiert)

    Einen Kommentar schreiben:

Lädt...
X