Ankündigung

Einklappen
Keine Ankündigung bisher.

ARDUINO am KNX

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

    ist die Library eigentlich auch auf einem ESP-Board lauffähig?
    Mir geht langsam der Speicher aus
    Zuletzt geändert von LostWolf; 24.05.2019, 10:30.

    Kommentar


      Zitat von mfd Beitrag anzeigen
      Vermute nicht.
      Aber: dazu müsste man zunächst passend versichert sein, dann dürfte es keine anderen/schlimmeren "Einfallstore" als das RFID-Schloss geben, und: zahlen wollen die doch ohnehin nie, selbst wenn du alles richtig gemacht hast.
      Das stimmt auch wieder

      Bist du mit deinem Problem voran gekommen?
      Ich kenne mich nicht so stark mit Arduino aus, aber es sieht nach einer Fehlzuweisung von Datentypen aus.
      Als was ist denn MFRC522::STATUS_OK deklariert?
      Und als was mfrc522.MIFARE_Read?

      Edit:
      Hab gerade in der Libary reingeschaut.
      Du verwendest ja MIFARE_Read das ist in der Libary folgendermaßen deklariert.
      StatusCode MIFARE_Read(byte blockAddr, byte *buffer, byte *bufferSize);
      Und du verwendest als buffer ein char.
      Schau mal ob es besser wird wenn du den buffer als byte deklarierst.
      Zuletzt geändert von Delta6400; 24.05.2019, 10:34.
      Gruß,
      Andreas

      Kommentar


        Delta6400 der ursprüngliche Autor des Codes hat den Sketch mittlerweile angepasst, so dass es out of the box läuft. Siehe hier:
        Arduino-RFID-Knx-dooropener

        Ich konnte das Setup mittlerweile testen, an sich genial mit den EDOMI LBS und funktionierte auf Anhieb.

        Gruß -mfd-
        KNX-UF-IconSet since 2011

        Kommentar


          Zitat von mfd Beitrag anzeigen
          Ich konnte das Setup mittlerweile testen, an sich genial mit den EDOMI LBS und funktionierte auf Anhieb.
          Das hört sich gut an
          Ich bin noch am überlegen wie ich es bei mir mache.
          Hab am Freitag einen Termin mit meiner zukünftigen Versicherung und da frag ich die mal wie es aussieht mit DIY Zutrittskontrolle.

          Gruß,
          Andreas

          Kommentar


            -- OT --
            Zitat von Delta6400 Beitrag anzeigen
            Hab am Freitag einen Termin mit meiner zukünftigen Versicherung und da frag ich die mal wie es aussieht mit DIY Zutrittskontrolle.
            Versicherungstechnisch bräuchte es wohl eine Verriegelung. Also Motorschloss, Transponderzylinder o.ä um auch "verriegeln" zu können. Alles andere gilt IMHO nicht als abgesperrt.
            Deshalb sind diese ganzen Lösungen (egal ob DIY oder nicht) aus meiner Sicht eher etwas für die Anwendung, ich bin draußen, will aber nicht immer absperren und/oder mit Schlüssel hantieren um mal schnell innen was zu holen.
            Wobei es dem potenziellen Einbrecher der die Terrassentür aufhebelt wohl egal sein dürfte in welcher Art jetzt die Haustür verriegelt war...
            ...der Versicherung dann auch?
            -- OT Ende --
            Gruß -mfd-
            KNX-UF-IconSet since 2011

            Kommentar


              -- OT --
              Zitat von mfd Beitrag anzeigen
              ...der Versicherung dann auch?
              Keine Ahnung... Deswegen frag ich mal dämlich
              Vlt gibt es da ja eine Lösung die Akzeptiert wird.
              Bei mir müsste der Einbrecher erst einmal durch ein 3 Meter hohes Tor kommen bis er auf dem Hof ist, aber das zählt ja nicht.
              -- OT Ende --

              Bearbeitet:
              --letztes OT--
              Ich hab die Antwort von meiner Versicherung.
              Generell wenn Einbruchsspuren sichtbar sind ist es generell kein Problem und es ist Versichert.
              Wenn jedoch keine Spuren sichtbar sind, Einbrecher ist mit RFID, Fingerabdruck,... eingebrochen, dann wird es kompliziert.
              In diesem Fall muss man der Versicherung beweisen, dass der Einbrecher über das System eingebrochen ist und das System sicher konzipiert worden ist.
              Als Nachweis, soweit man kein Bild im Millionen Wert oder so hat, würde eine Log-Datei oder Videoaufzeichnungen reichen.
              Hier würde die Versicherung (im Normalfall) auch nicht davon ausgehen, dass man die manipuliert hat.

              Gruß,
              Andreas
              --OT Ende--
              Zuletzt geändert von Delta6400; 17.06.2019, 11:34.
              Gruß,
              Andreas

              Kommentar


                Gibt es irgendwelche "Spezialitäten" in Kombination mit der KNX Library zu beachten?

                Ich versuche hier neben KNX Abfragen und Sendebefehlen (läuft soweit gut) so etwas wie ein paar simple Blink-Codes (BlinkWithoutDelay) zu realisieren, aber es will so gar nicht klappen. Als eigenständiger Code funktioniert dieser hingegen wunderbar.

                Code:
                const byte numberOfBlinks = 2;
                Im loop habe ich dabei so etwas wie
                Code:
                if (!blinkEnd) {
                    accessgranted();
                    }
                Und dann

                Code:
                void accessgranted(){
                  const long interval = 150; // time between blinks in ms.
                  static bool switchState = true;
                  static byte sequencePosition = 0;
                  static unsigned long previousMillis = 0;
                  unsigned long currentMillis = millis();
                  if (currentMillis - previousMillis >= interval) {
                    if (sequencePosition < numberOfBlinks * 2) { // blink
                      switchState = !switchState;
                      sequencePosition++;  
                      digitalWrite(LED, switchState);
                    }
                    else {
                      blinkEnd = true;
                      sequencePosition = 0;
                      }
                   }
                   previousMillis = currentMillis;
                }
                Die LED schaltet in diesem Fall nur einmal ein bzw. um.
                Gruß -mfd-
                KNX-UF-IconSet since 2011

                Kommentar


                  Nein, dein Fehler ist, dass du previousMillis gar keine Zeit lässt, um auf dein Intervall zu kommen, weil du es bei jedem Funktionsaufruf mit currentMillis gleichsetzt.

                  Code:
                  void accessgranted(){
                     const long interval = 150; // time between blinks in ms.
                     static bool switchState = true;
                     static byte sequencePosition = 0;
                     static unsigned long previousMillis = 0;
                     unsigned long currentMillis = millis();
                     if (currentMillis - previousMillis >= interval) {
                        if (sequencePosition < numberOfBlinks * 2) { // blink 
                           digitalWrite(LED, switchState);
                           switchState = !switchState;
                           sequencePosition++;
                           previousMillis = currentMillis;
                          }
                      else {
                        blinkEnd = true;
                        sequencePosition = 0;
                        }
                     }
                  }

                  Kommentar




                    So tut es aber auch nicht wirklich besser...? Oder was habe ich wieder übersehen?
                    Code:
                    void accessgranted(){
                       const long interval = 150; // time between blinks in ms.
                       static bool switchState = true;
                       static byte sequencePosition = 0;
                       static unsigned long previousMillis = 0;
                       unsigned long currentMillis = millis();
                       if (currentMillis - previousMillis >= interval) {
                          if (sequencePosition < numberOfBlinks * 2) { // blink
                             digitalWrite(LED, switchState);
                             switchState = !switchState;
                             sequencePosition++;
                            }
                        else {
                          blinkEnd = true;
                          sequencePosition = 0;
                          previousMillis = currentMillis;
                          }
                       }
                    }
                    Gruß -mfd-
                    KNX-UF-IconSet since 2011

                    Kommentar


                      Deklariere mal "static byte sequencePosition = 0;" global oben im Sketch als "byte sequencePosition = 0;", also außerhalb der void(). So wie ich das sehe, wird diese Variable immer mit dem Aufruf der void() erstmal auf Null gesetzt, also wird da auch nix hochgezählt. Das dürfte auch für die anderen statischen Variablen gelten.
                      Viele Grüße,
                      Stefan

                      DIY-Bastelprojekte: || >> Smelly One << || >> BURLI << ||

                      Kommentar


                        Das habe ich bereits versucht, bringt aber auch keine Änderung. Irgendwas beißt sich wohl gegenseitig.
                        Wenn die Funtkion mit Schreiben auf die entsprechende GA aufgerufen wird ergeben sich zwei kurze Blinksignale, manchmal auch nur eines, manchmal so eineinhalb ungleich lang. Immer nur etwa 100ms lang oder auch kürzer. Aber nie einheitlich. Unabhängig davon welchen Wert man für "interval" angibt.
                        Gruß -mfd-
                        KNX-UF-IconSet since 2011

                        Kommentar


                          Was mir noch auffällt: die previousMillis müssen direkt in der ersten if-Schleife gesetzt werden (ansonsten kommen immer unterschiedliche Codelaufzeiten hinzu, je nachdem ob die zweite if-Schleife oder die else-Schleife durchlaufen wird):

                          Code:
                          void accessgranted(){
                          .....
                             unsigned long currentMillis = millis();
                             if (currentMillis - previousMillis >= interval) {
                               [B] previousMillis = currentMillis;[/B]
                                if (sequencePosition < numberOfBlinks * 2) { // blink
                                   digitalWrite(LED, switchState);
                                   switchState = !switchState;
                                   sequencePosition++;
                                  }
                              else {
                                blinkEnd = true;
                                sequencePosition = 0;
                          
                                }
                             }
                          }
                          Zuletzt geändert von dreamy1; 23.08.2019, 22:21.
                          Viele Grüße,
                          Stefan

                          DIY-Bastelprojekte: || >> Smelly One << || >> BURLI << ||

                          Kommentar


                            Zitat von dreamy1 Beitrag anzeigen
                            Was mir noch auffällt: die previousMillis müssen direkt in der ersten if-Schleife gesetzt werden (ansonsten kommen immer unterschiedliche Codelaufzeiten hinzu, je nachdem ob die zweite if-Schleife oder die else-Schleife durchlaufen wird):
                            War das nicht im ursprünglichen Code so? Ich bin bald ganz verwirrt...
                            Gruß -mfd-
                            KNX-UF-IconSet since 2011

                            Kommentar


                              Also, wie es aussieht funktionieren die "static" deklarierten Sachen im ursprünglichen Code, aber das
                              Code:
                               
                               [B]previousMillis = currentMillis;[/B]
                              muss mit oben rein.
                              Danke nochmal an dreamy1

                              Zumindest tut es so einigermaßen, solange man es nicht mit den Intervallen übertreibt.

                              Also alles < 200ms schafft der Arduino wohl nicht so recht zeitnah neben den ganzen KNX-Aufgaben.*


                              Noch eine Verständnisfrage:
                              Ist es technisch bedingt normal, dass der Arduino quasi bei jedem Telegram auf dem Bus einmal bei
                              Code:
                                void eventKNX() {
                                KnxTpUartSerialEventType eType = knx.serialEvent();
                                if (eType == TPUART_RESET_INDICATION) {
                              
                                }
                                else if (eType == UNKNOWN) {
                                Serial.println("Event UNKNOWN");
                                }
                              "vorbei rennt" und "Event UNKNOWN" ruft?

                              Was im Umkehrschluss heißt, je mehr auf dem Bus los ist, desto weniger Zeit bleibt für andere Aufgaben.


                              *an der Stelle nochmal der Hinweis, ich habe bei mir derzeit die Ultra-Low-Budget/Cost Version Mini Pro mit 3,3V@8MHz im Einsatz, kein Wunder also.
                              Gruß -mfd-
                              KNX-UF-IconSet since 2011

                              Kommentar


                                Jetzt sehe ichs, da wars ganz unten...da passt es, aber nicht mehr in den folgenden Codeauszügen.

                                Zeig doch mal den letzten Stand, ist auch für den Leser verwirrend was jetzt umgesetzt ist oder nicht.
                                Viele Grüße,
                                Stefan

                                DIY-Bastelprojekte: || >> Smelly One << || >> BURLI << ||

                                Kommentar

                                Lädt...
                                X