Ankündigung

Einklappen
Keine Ankündigung bisher.

ARDUINO am KNX

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

    :-)
    Ich hab auch schonmal gegoogelt:
    Einen DCF kriegt man ja für 5€: DCF-Empfangsmodul DCF1 - Bausätze / Module - Module - - Pollin Electronic

    Welchen Code/Lib hast du im Einsatz? Bitte mal einen Link.

    Versuch doch schonmal in deinen aktuellen Code die Konvertierung einzubauen und als Hex auszugeben.
    Wenn das passt mach ich die Lib passend :-)

    Gruß
    Thorsten

    BTW: Lohnt sich das eigentlich - ein fertiges Modul ist ja auch nicht teuer:
    https://www.google.de/shopping/produ...ed=0CEoQpiswAA

    Kommentar


      Ich habe den Empfänger :
      DCF-Empfangsmodul DCF1 - Bausätze / Module - Module - - Pollin Electronic

      mit der Lib:
      Arduino DCF77 Library 0.9.7
      https://github.com/thijse/Arduino-Libraries/downloads
      Thijs Elenbaas 2012

      und dazu RTC DS3231

      Das ist deutlich billiger als der Zeitgeber und ich will ja auch was lernen dabei.


      OK, ich versuche mich an der Konvertierung


      grüße

      Kommentar


        So - ich hab noch ein bisschen gebastelt: das müsste passen:
        KnxTelegramm.cpp:
        Code:
        void KnxTelegram::setKNXTime(int day, int hours, int minutes, int seconds) {
            setPayloadLength(3);
        
            // Day um 5 byte nach links verschieben
            day = day << 5;
            // Buffer[8] füllen: die ersten 3 Bits day, die nächsten 5 hour
            buffer[8] = (day & B11100000) + (hours & B00011111);
        
            // buffer[9] füllen: 2 bits leer dann 6 bits für minuten
            buffer[9] =  minutes & B00111111;
            
            // buffer[10] füllen: 2 bits leer dann 6 bits für sekunden
            buffer[10] = seconds & B00111111;
        }
        Jetzt noch ein bisschen das "außenrum" in die Lib und es müsste gehen.
        Vielleicht komme ich heute abend dazu.

        So - "aus dem Kopf" - alles ungetestet:
        KnXTPUart.h:
        Code:
        bool groupWriteTime(int, int, int, int, int, int, int);
        KnXTPUart.cpp:
        Code:
        bool KnxTpUart::groupWriteTime(int mainGroup, int middleGroup, int subGroup, int day, int hours, int minutes, int seconds) {
        	createKNXMessageFrame(2, KNX_COMMAND_WRITE, mainGroup, middleGroup, subGroup, 0);
        	_tg->setKNXTime(day, hours, minutes, seconds);
        	_tg->createChecksum();
        	return sendMessage();
        }
        KnxTelegram.h:
        Code:
            void setKNXTime(int day, int hours, int minutes, int seconds);

        Gruß
        Thorsten

        Kommentar


          Also minutes und seconds benötigen aber jeweils 6 Bit, nicht nur 5.
          Tessi

          Kommentar


            @Tessi: gut aufgepasst.
            Also noch zwei 1er dazu an den richtigen Stellen :-)
            Danke.

            Hab's korrigiert. Nachher schau ich mal ob's läuft und baue es in die Lib ein.
            Bin noch unterwegs...

            Kommentar


              Soundaktor

              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
              Angehängte Dateien

              Kommentar


                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)

                Kommentar


                  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.

                  Kommentar


                    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

                    Kommentar


                      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

                      Kommentar


                        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

                        Kommentar


                          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.
                          Gruss Patrik alias swiss

                          Kommentar


                            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

                            Kommentar


                              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
                              Gruss Patrik alias swiss

                              Kommentar


                                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

                                Kommentar

                                Lädt...
                                X