Ankündigung

Einklappen
Keine Ankündigung bisher.

Mechanisches Türschloss öffnen/schließen über KNX

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

    #61
    Zitat von Smurf Beitrag anzeigen
    Wenn mir ein Nuki die Tür automatisch wieder absperrt (und ich darlegen kann, dass ich das so konfiguriert habe), sehe ich an der Stelle kein Problem.
    Das kann ich nicht einschätzen. Meine Vermutung wäre, dass man mit einem elektrischen Schließsystem eines bekannten Herstellers weniger Argumentationsprobleme hat, weil es Prüfzertifikate gibt, daß das Ding nach dem Stand der Technik sicher ist. Nuki erscheint mir erstmal sehr angreifbar, bis zum Nachweis des Gegenteils. Vielleicht machen die als Startup gleich alles richtig bei der Sicherheit, oder auch nicht.

    Kommentar


      #62
      Was mir zur Sicherheit gerade noch auffällt:

      Zitat 1:
      "Deine Zugangsberechtigungen befinden sich ausschließlich in deinem Nuki in deiner Wohnung und in deiner Nuki App. Es gibt keinen zentralen Speicherpunkt und keinen Master-Key für Nuki. "

      Zitat 2 (FAQ Sicherheit):
      " Wie komme ich in meine Wohnung, wenn mein Handy-Akku leer ist?
      Dann gibt es mehrere Möglichkeiten:
      • Du verwendest einfach deinen bestehenden, mechanischen Schlüssel.
      • Du bittest eine andere Person mit Zutrittsberechtigung zu deiner Tür, dir diese zu öffnen.
      • Nuki bietet dir eine Notfall-Hotline, unter der wir dir bei Angabe eines einmaligen und sicheren Passworts deine Tür öffnen können."

      Hervorhebungen sind von mir. Widerspricht sich das nicht ein wenig?

      Kommentar


        #63
        Zitat von volkerm Beitrag anzeigen
        [SIZE=12px][*]Nuki bietet dir eine Notfall-Hotline, unter der wir dir bei Angabe eines einmaligen und sicheren Passworts deine Tür öffnen können."
        Uiuiui ... wer will sowas tatsächlich haben?

        Kommentar


          #64
          das wiederspricht sich nur dann wenn die das einfach so machen können. nicht wenn man dafür vorher ihnen ein passwort geben musste und selber in der app eine konfiguration machen musste. kaba und co haben auch eure Schlüssel gespeichert, welche man aber nur kriegt wenn man ihnen die schlüsselkarte gibt.

          Kommentar


            #65
            Zitat von raphaelhuber Beitrag anzeigen
            d kaba und co haben auch eure Schlüssel gespeichert, welche man aber nur kriegt wenn man ihnen die schlüsselkarte gibt.
            Der Vergleich passt nicht wirklich, denn dort kann man nicht ferngesteuert und anonym Schlüsselkarten "ausprobieren". Deine Marketingaktion in allen Ehren, aber lass uns doch erstmal warten bis Nuki fertig ist und wir wissen, was wir bekommen.

            Kommentar


              #66
              Zitat von volkerm Beitrag anzeigen

              Der Vergleich passt nicht wirklich, denn dort kann man nicht ferngesteuert und anonym Schlüsselkarten "ausprobieren". Deine Marketingaktion in allen Ehren, aber lass uns doch erstmal warten bis Nuki fertig ist und wir wissen, was wir bekommen.
              Also wie der Vorgang genau abläuft weiss niemand von uns. Ob da nun Schlüsselkarten ausprobiert werden können etc. ist nur Spekulation.
              Marketing? Was soll den der Kommentar? Das hat mit der Sache genau so wenig zu tun wie ich mit der Firma.

              Kommentar


                #67
                Zitat von gaert Beitrag anzeigen
                Vielleicht kurz noch zum Verständnis:
                Das Arduino-Programm habe ich so gestrickt, dass ich mit 1 Aktorkanal auskomme: kurzer Impuls = Tür aufschließen und öffnen, langer Impuls = Tür abschließen. Der Impuls triggert einen Interrupt und weckt damit zugleich den Arduino aus dem Tiefschlaf (spart Strom).
                Ich hole das Thema noch mal hoch.

                Da für mich kommerzielle Lösungen auf Grund der hohen Preise definitiv vom Tisch sind, hat die Lösung von gaert mein Interesse geweckt.

                Zum dem Arduino mit Motorshield gibt im Netz recht viel, das scheint auch gar nicht so kompliziert zu sein. Die Steuerung erfolgt in allen Tutorials aber immer über die Software.

                Wie hast du das mit dem Aktor realisiert?

                Gibt es mittlerweile Fotos deiner Konstruktion?

                Gruß, Ukatz

                Kommentar


                  #68
                  Zitat von Smurf Beitrag anzeigen
                  Ich mache das anders. Wenn ich neu in die Reichweite meines WLANs komme, sage ich das via Tasker und HTTP meinem Server.
                  ... das klingt ja ziemlich clever! Wie bekommst du denn die Info, dass du neu in der Reichweite deines WLANs bist?

                  Gruß
                  Thomas

                  Kommentar


                    #69
                    Zitat von Ukatz Beitrag anzeigen

                    Ich hole das Thema noch mal hoch.

                    Da für mich kommerzielle Lösungen auf Grund der hohen Preise definitiv vom Tisch sind, hat die Lösung von gaert mein Interesse geweckt.

                    Zum dem Arduino mit Motorshield gibt im Netz recht viel, das scheint auch gar nicht so kompliziert zu sein. Die Steuerung erfolgt in allen Tutorials aber immer über die Software.

                    Wie hast du das mit dem Aktor realisiert?

                    Gibt es mittlerweile Fotos deiner Konstruktion?

                    Gruß, Ukatz
                    Die Konstruktion ist bereits seit August 2015 im Einsatz Den richtigen Schlüssel nehme ich schon gar nicht mehr mit... Leider habe ich's versäumt, Fotos während der Erstellung des Motorzylinders zu machen - aber ich kann gerne das Endergebnis knipsen. Das Arduino-Programm kann ich auch posten - kein Problem.
                    EDOMI - Intelligente Steuerung und Visualisierung KNX-basierter Elektro-Installationen (http://www.edomi.de)

                    Kommentar


                      #70
                      Hier ein kurzes Video - der Ton wurde komischer Weise nicht mit aufgenommen?! (iPhone 4... Ts ts ts)

                      https://youtu.be/ZsqQjm36vIQ

                      Das Gehäuse fehlt noch - ist in Arbeit...
                      EDOMI - Intelligente Steuerung und Visualisierung KNX-basierter Elektro-Installationen (http://www.edomi.de)

                      Kommentar


                        #71
                        Hier das Progrämmchen...

                        Das Prinzip ist einfach: Der Motorstrom wird gemessen zur Anschlagserkennung. Per Terminal kann man so ziemlich alle Parameter einstellen und experimentell ermitteln.

                        Code:
                        /*
                        
                        --------------------------------------
                        Arduino-Motorzylinder
                        (c) Dr. Christian Gärtner
                        Freeware :)
                        --------------------------------------
                        
                        Terminal: "p" => Programmiermodus starten
                        
                        Modus=0: Sleepmodus nicht aktiv
                        Modus=1: Sleepmodus aktiv (default)
                        
                        E2:
                          (auf Masse ziehen)
                          150..1000ms = Öffnen (ein zu kurzer Impuls wird ignoriert)
                          >1000ms     = Schließen
                        
                        
                        Achtung:
                        Nach einem Reset bleiben nur 5 Minuten Zeit, um per Terminal Zugriff zu bekommen - danach wird der Sleep-Modus aktiviert und die Schnittstelle funktioniert nicht mehr. Ist der Programmiermodus aktiviert, hat man unendlich viel Zeit.
                        
                        */
                        
                        #include <avr/sleep.h>
                        #include <EEPROM.h>
                        
                        //Motor1: Motorschloss
                        int motor1_direction=12;      //Pin: Motor-Drehrichtung
                        int motor1_brake=9;           //Pin: Motor-Bremse
                        int motor1_speed=3;           //Pin: Motor-Geschwindigkeit (PWM)
                        int motor1_sense=A0;          //Pin: Motor-Strommessung
                        
                        //Eingänge
                        int trigger_openclose=2;      //Pin: Eingang für Öffnen und Schließen (kurz/lang)
                        
                        
                        
                        boolean trigger_old=false;
                        int sleepTimer=0;
                        
                        //EEPROM-Variablen
                        int varEprom[20];
                        
                        //Programmiermodus
                        int key=-1;
                        boolean prgMode=false;        //true=Programmiermodus aktiv
                        int curSpeed=127;             //default: Halbe Geschwindigkeit
                        boolean motorRunning=false;
                        
                        
                        
                        void setup() {  
                         Serial.begin(9600);
                        
                         pinMode(motor1_direction,OUTPUT);
                         pinMode(motor1_brake,OUTPUT);
                         pinMode(motor1_speed,OUTPUT);
                         pinMode(motor1_sense,INPUT);
                        
                         pinMode(trigger_openclose,INPUT_PULLUP);
                         
                         load_eeprom();
                        }
                        
                        
                        
                        
                        void loop(){
                        
                         if (Serial && Serial.available()>0) {
                          key=Serial.read();
                        
                          if (key==112) { //p: Programmiermodus starten
                           sleepTimer=0;
                           prgMode=true;
                           show_menu();
                           Serial.println("Programmiermodus gestartet");
                          }
                          if (key==120) { //x: Programmiermodus beenden
                           sleepTimer=0;
                           prgMode=false;
                           Serial.println("Programmiermodus beendet");
                          }
                          if (key==118) { //v: Variable editieren (Format: "v ID Wert")
                           int v1=-1;
                           int v2=0;
                           v1=Serial.parseInt();
                           v2=Serial.parseInt();
                           if (v1>=0 && v1<=19) {
                            varEprom[v1]=v2;
                            show_menu();
                           }
                          }
                          if (key==115) { //s: alle Variablen ins Eprom speichern
                           for (int i=0;i<=19;i++) {
                            saveInt(i,varEprom[i]);
                           }
                           Serial.println("Variablen gespeichert.");
                           load_eeprom(); //zur Kontrolle
                           show_menu();
                          }
                            
                          if (key==49) { //1: Links herum drehen
                             digitalWrite(motor1_direction,HIGH);
                             digitalWrite(motor1_brake,LOW);
                             analogWrite(motor1_speed,curSpeed);  
                           motorRunning=true;
                          }
                          if (key==50) { //2: Stop
                             digitalWrite(motor1_brake,HIGH);
                             delay(1000);
                             analogWrite(motor1_speed,0);  
                             digitalWrite(motor1_brake,LOW);
                           motorRunning=false;
                           show_menu();
                          }
                          if (key==51) { //3: Rechts herum drehen
                             digitalWrite(motor1_direction,LOW);
                             digitalWrite(motor1_brake,LOW);
                             analogWrite(motor1_speed,curSpeed);  
                           motorRunning=true;
                          }
                          if (key==43) { //+: Mehr Speed
                           curSpeed=curSpeed+25;
                           if (curSpeed>255) {curSpeed=255;}
                           Serial.println(curSpeed,DEC);
                          }
                          if (key==45) { //-: Weniger Speed
                           curSpeed=curSpeed-25;
                           if (curSpeed<25) {curSpeed=25;}
                           Serial.println(curSpeed,DEC);
                          }
                          if (key==56) { //8: Öffnen (mit den aktuellen Parametern)
                             lock_open();
                          }
                          if (key==57) { //9: Schliessen (mit den aktuellen Parametern)
                             lock_close();
                          }
                            
                          if (key==32) {
                           sleepNow();
                          }
                        
                         }
                          
                         if (prgMode) {
                          //--------------------------------------------------
                          //Programmiermodus
                          //--------------------------------------------------  
                          if (motorRunning) {
                           Serial.println(analogRead(motor1_sense),DEC);
                          }
                          delay(50);
                          
                         } else {
                          //--------------------------------------------------
                          //Normaler Modus
                          //--------------------------------------------------
                           if (trigger_old==true && digitalRead(trigger_openclose)==HIGH) {
                            trigger_old=false;
                           }
                           if (trigger_old==false && digitalRead(trigger_openclose)==LOW) {
                            trigger_old=true;
                            int t=0;
                            do {
                             delay(10);
                             t++;
                            } while (digitalRead(trigger_openclose)==LOW && t<varEprom[14]);
                            
                            if (t<varEprom[14]) {
                             //kurz
                             if (t>varEprom[13]) { //Mindestdauer des Triggers
                                 lock_open();
                             }
                            } else {
                             //lang
                               lock_close();
                            }
                            sleepTimer=0;
                           }
                          
                           if (varEprom[11]==1) { //Sleepmodus freigegeben?
                            sleepTimer++;
                            if (sleepTimer>=varEprom[12]) { //nach ca. x Sekunden Inaktivität: Sleep-Modus
                             sleepNow();
                            }
                           }
                           delay(100);
                         }
                         
                        }
                        
                        
                        void wakeupNow() {
                         prgMode=false;
                        }
                        
                        void sleepNow() {
                         sleepTimer=0;
                         set_sleep_mode(SLEEP_MODE_PWR_DOWN);
                         sleep_enable();
                         attachInterrupt(1,wakeupNow,LOW);
                         sleep_mode();
                         //jetzt schläft der Bursche. Nach dem Aufwachen geht es HIER weiter!
                         sleep_disable();
                         detachInterrupt(1);
                        }
                        
                        void load_eeprom() {
                         //Variablen aus dem EEPROM laden
                         for (int i=0;i<=19;i++) {
                          varEprom[i]=loadInt(i);
                         }
                         //Defaultwerte, falls EEPROM noch leer ist
                         if (varEprom[0]<0) {varEprom[0]=90;}
                         if (varEprom[1]<0) {varEprom[1]=255;}
                         if (varEprom[2]<0) {varEprom[2]=100;}
                         if (varEprom[3]<0) {varEprom[3]=20;}
                         if (varEprom[4]<0) {varEprom[4]=255;}
                         if (varEprom[5]<0) {varEprom[5]=20;}
                         if (varEprom[6]<0) {varEprom[6]=90;}
                         if (varEprom[7]<0) {varEprom[7]=255;}
                         if (varEprom[8]<0) {varEprom[8]=60;}  
                         if (varEprom[9]<0) {varEprom[9]=128;}
                         if (varEprom[10]<0) {varEprom[10]=1;}
                         if (varEprom[11]<0) {varEprom[11]=1;}     //0=kein Sleepmodus, 1=Sleepmodus
                         if (varEprom[12]<0) {varEprom[12]=3000;}  //5 Minuten bis Sleepmodus
                         if (varEprom[13]<0) {varEprom[13]=15;}
                         if (varEprom[14]<0) {varEprom[14]=100;}
                         if (varEprom[15]<0) {varEprom[15]=0;}    //frei
                         if (varEprom[16]<0) {varEprom[16]=0;}    //frei
                         if (varEprom[17]<0) {varEprom[17]=0;}    //frei
                         if (varEprom[18]<0) {varEprom[18]=0;}    //frei
                         if (varEprom[19]<0) {varEprom[19]=0;}    //frei
                        }
                        
                        void show_menu() {
                           Serial.println("////////////////////////////////////////////////////////////////////////////////////////");
                           Serial.println("1 : Links drehen (keine Endschalter!)");
                           Serial.println("2 : Stop");
                           Serial.println("3 : Rechts drehen  (keine Endschalter!)");
                           Serial.println("+ : mehr Geschwindigkeit");
                           Serial.println("- : weniger Geschwindigkeit");
                           Serial.println("8 : Oeffnen (mit Eprom-Parametern!)");
                           Serial.println("9 : Schliessen (mit Eprom-Parametern!)");
                           Serial.println("s : Einstellungen speichern");
                           Serial.println("x : Beenden");
                           Serial.println("---------------------------------------------------------------------------");
                           Serial.println("Motorschloss-Optionen (Motor1, E4=1)");
                           Serial.println("---------------------------------------------------------------------------");
                           Serial.print("v 0 #  = Oeffnen:    Strom-Schwellenwert Anschlag 0..1023    = ");Serial.println(varEprom[0],DEC);
                           Serial.print("v 1 #  =             Geschwindigkeit 0..255                  = ");Serial.println(varEprom[1],DEC);
                           Serial.print("v 2 #  =             Dauer (1/10 s) 0..32767                 = ");Serial.println(varEprom[2],DEC);
                           Serial.print("v 3 #  =             Haltezeit Falle (1/10 s) 0..32767       = ");Serial.println(varEprom[3],DEC);
                           Serial.print("v 4 #  =             Geschwindigkeit Falle ausfahren 0..255  = ");Serial.println(varEprom[4],DEC);
                           Serial.print("v 5 #  =             Dauer Falle ausfahren (1/10 s) 0..32767 = ");Serial.println(varEprom[5],DEC);
                           Serial.print("v 6 #  = Schliessen: Strom-Schwellenwert Anschlag 0..1023    = ");Serial.println(varEprom[6],DEC);
                           Serial.print("v 7 #  =             Geschwindigkeit 0..255                  = ");Serial.println(varEprom[7],DEC);
                           Serial.print("v 8 #  =             Dauer (1/10 s) 0..32767                 = ");Serial.println(varEprom[8],DEC);
                           Serial.print("v 9 #  = Getriebe:   Geschwindigkeit Entlastung 0..255       = ");Serial.println(varEprom[9],DEC);
                           Serial.print("v 10 # =             Dauer Entlastung (1/10 s) 0..32767      = ");Serial.println(varEprom[10],DEC);
                           Serial.println("---------------------------------------------------------------------------");
                           Serial.println("Allgemeine Optionen");
                           Serial.println("---------------------------------------------------------------------------");
                           Serial.print("v 11 # = Modus: 0=kein Sleepmodus, 1=Sleepmodus aktiviert       = ");Serial.println(varEprom[11],DEC);
                           Serial.print("v 12 # =        Zeit bis Sleep-Modus aktiv wird (1/10 s)        = ");Serial.println(varEprom[12],DEC);
                           Serial.print("v 13 # =        E2: Mindest-Triggerzeit bei Oeffnen (1/10 s)    = ");Serial.println(varEprom[13],DEC);
                           Serial.print("v 14 # =        E2: Mindest-Triggerzeit bei Schliessen (1/10 s) = ");Serial.println(varEprom[14],DEC);
                        }
                        
                        
                        void lock_open() {
                         digitalWrite(motor1_direction,HIGH);
                         digitalWrite(motor1_brake,LOW);
                         analogWrite(motor1_speed,varEprom[1]);
                          
                         int t=0;
                         do {
                          delay(100);
                          t++;
                         } while (analogRead(motor1_sense)<varEprom[0] && t<varEprom[2]);
                         
                         //Getriebe entlasten, d.h. etwas in Gegenrichtung fahren und auslaufen lassen (also nicht bremsen)
                         digitalWrite(motor1_brake,HIGH);
                         delay(200);
                         digitalWrite(motor1_direction,LOW);
                         analogWrite(motor1_speed,varEprom[9]);  
                         digitalWrite(motor1_brake,LOW);
                         delay(varEprom[10]*100);
                         analogWrite(motor1_speed,0);  
                        
                         delay(varEprom[3]*100); //Haltezeit der Falle
                        
                         //Falle ausfahren
                         digitalWrite(motor1_direction,LOW);
                         digitalWrite(motor1_brake,LOW);
                         analogWrite(motor1_speed,varEprom[4]);
                          
                         delay(varEprom[5]*100); //Ausfahrzeit der Falle
                         
                         //Stop
                         digitalWrite(motor1_brake,HIGH);
                         delay(200);
                         analogWrite(motor1_speed,0);  
                         digitalWrite(motor1_brake,LOW);
                        
                         delay(250);
                        }
                        
                        
                        void lock_close() {
                         digitalWrite(motor1_direction,LOW);
                         digitalWrite(motor1_brake,LOW);
                         analogWrite(motor1_speed,varEprom[7]);
                          
                         int t=0;
                         do {
                          delay(100);
                          t++;
                         } while (analogRead(motor1_sense)<varEprom[6] && t<varEprom[8]);
                         
                         //Getriebe entlasten, d.h. etwas in Gegenrichtung fahren und auslaufen lassen (also nicht bremsen)
                         digitalWrite(motor1_brake,HIGH);
                         delay(200);
                         digitalWrite(motor1_direction,HIGH);
                         analogWrite(motor1_speed,varEprom[9]);  
                         digitalWrite(motor1_brake,LOW);
                         delay(varEprom[10]*100);
                         analogWrite(motor1_speed,0);  
                        
                         delay(250);
                        }
                        
                        
                        
                        
                        
                        void saveInt(int adr,int value) {
                         EEPROM.write((adr*2),value&0xFF);
                         EEPROM.write((adr*2)+1,(value>>8)&0xFF);
                         return;
                        }
                        
                        int loadInt(int adr) {
                         return EEPROM.read((adr*2))+((EEPROM.read((adr*2)+1)<<8)&0xFF00);
                        }
                        Zuletzt geändert von gaert; 06.01.2016, 16:20.
                        EDOMI - Intelligente Steuerung und Visualisierung KNX-basierter Elektro-Installationen (http://www.edomi.de)

                        Kommentar


                          #72
                          Zitat von gaert Beitrag anzeigen
                          Hier ein kurzes Video - der Ton wurde komischer Weise nicht mit aufgenommen?! (iPhone 4... Ts ts ts)

                          https://youtu.be/ZsqQjm36vIQ

                          Das Gehäuse fehlt noch - ist in Arbeit...
                          Eine sehr elegante Lösung … !
                          Danke und LG, Dariusz
                          GIRA | ENERTEX | MDT | MEANWELL | 24VDC LED | iBEMI | EDOMI | ETS5 | DS214+ | KNX/RS232-GW-ROTEL

                          Kommentar


                            #73
                            Danke

                            Man kann den Zylinder übrigens auch von außen per Schlüssel notfalls betätigen, da der Motor kein(!) Schneckengetriebe hat. Man braucht natürlich etwas mehr Kraft als üblich (der Motor muss ja nebst Getriebe mitgedreht werden), aber diese Option ist ja auch nur für den Notfall vorgesehen.

                            Ursprünglich wollte ich einen kräftigeren Motor einsetzen (der aktuelle ist relativ schwach und zieht max. 0.1 A) - aber bei meiner spanischen Türe ist dies nicht notwendig

                            Früher hatte ich eine Keymatic im Einsatz... Puh... Plastikschrott! Funktioniert zwar, macht aber ordentlich Krach, ist laaaaangsam und fühlt sich irgendwie nicht besonders langlebig an. Erste Risse waren auch schon im Gehäuse erkennbar. Dann hatte ich diese Idee...
                            Zuletzt geändert von gaert; 06.01.2016, 16:56.
                            EDOMI - Intelligente Steuerung und Visualisierung KNX-basierter Elektro-Installationen (http://www.edomi.de)

                            Kommentar


                              #74
                              Sieht wirklich sehr hübsch aus :-) !
                              Mit einem Edelstahlgehäuse darüber oder in der Türfarbe passender Oberfläche ...

                              Ich bräuchte mehrere Leben um „vieles“ umsetzen zu können ;-)
                              Danke und LG, Dariusz
                              GIRA | ENERTEX | MDT | MEANWELL | 24VDC LED | iBEMI | EDOMI | ETS5 | DS214+ | KNX/RS232-GW-ROTEL

                              Kommentar


                                #75
                                Hübsch - naja Wie gesagt - das Gehäuse ist noch in Arbeit (bzw. in Planung). Eilt ja nicht

                                Ich mag solche "Basteleien" irgendwie... Ich könnte ja auch einfach einen Motorzylinder nebst Steuerung kaufen, aber das macht ja keinen Spaß
                                EDOMI - Intelligente Steuerung und Visualisierung KNX-basierter Elektro-Installationen (http://www.edomi.de)

                                Kommentar

                                Lädt...
                                X