Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Off Topic
    4. Fingerprint an einem ESP8266

    NEWS

    • ioBroker@Smart Living Forum Solingen, 14.06. - Agenda added

    • ioBroker goes Matter ... Matter Adapter in Stable

    • Monatsrückblick - April 2025

    Fingerprint an einem ESP8266

    This topic has been deleted. Only users with topic management privileges can see it.
    • Ralla66
      Ralla66 Most Active last edited by

      Habe noch ein wenig gespielt.
      Läuft jetzt super. Zwar kann ich keine View sperren aber wenn ein bestimmtes View aufgerufen
      wird sofort umschalten auf den Sperrbildschirm.
      Da die Umschaltung im Millisekunden Bereich liegt ist der Weg gangbar.
      Damit habe ich nun ein Zugangskontrollsystem zur Vis in dem ich User Berechtigungen erteilen kann.
      Cool. 🙂
      Viel Spass beim nachbauen,
      Danke euch allen die mit geholfen haben.
      War ein cooles Projekt das Spass gemacht hat.

      Anbei noch das Blockly zur Sperrung des Kamera View:

      Sperrbildschirm_Ein.jpg

      1 Reply Last reply Reply Quote 0
      • Ralla66
        Ralla66 Most Active last edited by Ralla66

        Kleine Verbesserung eingebaut.
        User bleibt für 5 Minuten angemeldet.
        Dann kommt der Sperrbildschirm.
        Wenn der User keine Berichtigung für ein View hat wird der View Access Denied aufgerufen.
        User bleibt weiterhin in der Bedienoberfläche angemeldet.
        Offen ist noch Abmeldebutton zum Userwechsel.
        Nachtrag, ist nicht nötig da bei erneuter Fingerprinterkennung User erkannt wechselt.
        Läuft.

        Der Ralla 🙂

        Access Denied Visu.jpg

        Samsung Tab Sperrbildschirm Bild

        Samsung_Tab_V1.jpg

        1 Reply Last reply Reply Quote 0
        • Ralla66
          Ralla66 Most Active last edited by

          Sodele, 24 Stunden Test ist durch,
          alles läuft sauber.
          Visu ist soweit angepasst.
          Modies laufen, Sperren auch.

          FP_Visu_Fertig_3107.jpg

          Hier das Blockly zum Partymodus :

          FP_fertig_Blockly_3007.jpg

          Im Access Denied View haben ich noch einen unnsichtbaren Schalter hinzugefügt.
          Könnte ja mal der Fingerprintsensor defekt sein.

          Sodele das wars, habt viel Spass damit.
          Für mich erledigt, rennt.

          Der Ralla 🙂

          1 Reply Last reply Reply Quote 0
          • C
            ChrisXY last edited by

            cool. Also ich hab ein Wiegand fingerprint den hab ich direkt mit 5v an der 5v Seite dran. Ohne auf 3V runtzerzuregeln. Klappt bisher auch ohne Probleme. Hab ein wemos pro d1 mini.
            Schönes VIS 🙂 Bin bei mir auch dran aber ich bin noch bei meinem User und Zugriffs/Zeiten Plan.

            1 Reply Last reply Reply Quote 0
            • Ralla66
              Ralla66 Most Active last edited by Ralla66

              @ChrisXY sagte in Fingerprint an einem ESP8266:

              Bin bei mir auch dran aber ich bin noch bei meinem User und Zugriffs/Zeiten Plan

              Das ist ja das schöne an IO, jeder kann alles Gestalten wie er will.
              Wollte nur einen Weg aufzeigen das es geht.
              Der ein oder andere bekommt vielleicht eine Anregung für sein Fingerprint Projekt.
              Wobei hier bestimmte User für bestimmte View sperren nicht einfach war.

              Viel Spass euch allen. 🙂
              Mir hat das richtig viel Spass gemacht.
              Cool das es läuft. 🙃

              Access_Denied_3107.jpg

              1 Reply Last reply Reply Quote 0
              • H
                Hansi1234 last edited by

                Hi Leute,
                wollt ihr dazu vielleicht noch ein Tutorial machen?

                1 Reply Last reply Reply Quote 0
                • coyote
                  coyote Most Active @Ralla66 last edited by coyote

                  @Ralla66 vielen Dank für das Script, läuft (nachdem ich den ersten Fingerprint gegrillt hab) bei mir jetzt auch. Nur der Confidence Datenpunkt kommt bei mir nicht rein. Hier mal das Script, dass aktuelle drauf ist, kannst vllt ja mal drüber schauen, warum der Datenpunkt nicht zu MQTT gepusht wird.

                  /***************************************************
                  Fingerprint am Wemos D1 mini per MQTT nach IO Broker
                  ****************************************************/
                  #include <Adafruit_Fingerprint.h>
                  #include <ESP8266WiFi.h> // Aus Wifi Mqtt
                  #include <PubSubClient.h> // Aus Wifi Mqtt
                  
                  /****************************************************
                  Pinbelegung Fingerprint Sensor ist GND,Rx,TX,Vcc
                  Am Wemos Rx ist D6 also GPIO 12
                  Am Wemos Tx ist D5 also GPIO 14
                  *****************************************************/
                  
                  SoftwareSerial mySerial(14, 12, false, 128);
                  
                  Adafruit_Fingerprint finger = Adafruit_Fingerprint(&mySerial);
                  
                  // Eigene Daten eintragen
                  
                  const char* ssid = "SSID"; // Netzwerknahme
                  const char* password = "Password"; // PW Netzwerk
                  const char* mqttServer = "192.168.XX.XX"; // Broker PI
                  const int mqttPort = 1885; // Broker PI Port
                  const char* mqttUser = "test"; // Broker PI Name
                  const char* mqttPassword = "test"; // Broker PI Password
                  
                  
                  // Ab hier nix mehr machen
                  
                  WiFiClient espClient;
                  PubSubClient client(espClient);
                  
                  // Ab hier nix mehr machen
                  
                  char* mqttio = "12345"; // Broker PI Wert
                  char* confidence = "67890"; // Broker PI Wert
                  
                  
                  
                  void setup()
                  {
                  
                  // set the data rate for the sensor serial port
                  finger.begin(57600);
                  
                  if (finger.verifyPassword()) {
                  Serial.println("Found fingerprint sensor!");
                  } else {
                  Serial.println("Did not find fingerprint sensor :(");
                  while (1) { delay(1); }
                  }
                  
                  finger.getTemplateCount();
                  Serial.print("Sensor contains "); Serial.print(finger.templateCount); Serial.println(" templates");
                  Serial.println("Waiting for valid finger...");
                  
                  Serial.begin(115200); // Baud Wemos nach IDE Serieller Monitor
                  
                  WiFi.begin(ssid, password);
                  
                  while (WiFi.status() != WL_CONNECTED) {
                  delay(500);
                  Serial.println("Connecting to WiFi..");
                  }
                  Serial.println("Connected to the WiFi network");
                  
                  client.setServer(mqttServer, mqttPort);
                  client.setCallback(callback);
                  
                  while (!client.connected()) {
                  Serial.println("Connecting to MQTT...");
                  
                  if (client.connect("ESP8266Client", mqttUser, mqttPassword )) {
                  
                    Serial.println("connected");  
                  
                  } else {
                  
                    Serial.print("failed with state ");
                    Serial.print(client.state());
                    delay(2000);
                  
                  }
                  }
                  
                  client.subscribe("Fingerprint");
                  client.publish("Fingerprint", "Test_1");
                  
                  }
                  
                  void callback(char* topic, byte* payload, unsigned int length) {
                  
                  Serial.print("Message arrived in topic: ");
                  Serial.println(topic);
                  
                  Serial.print("Message:");
                  for (int i = 0; i < length; i++) {
                  Serial.print((char)payload[i]);
                  }
                  
                  Serial.println();
                  Serial.println("-----------------------");
                  
                  }
                  
                  void loop() // run over and over again
                  {
                  getFingerprintIDez();
                  delay(50); //don't ned to run this at full speed.
                  }
                  
                  uint8_t getFingerprintID() {
                  uint8_t p = finger.getImage();
                  switch (p) {
                  case FINGERPRINT_OK:
                  Serial.println("Image taken");
                  break;
                  case FINGERPRINT_NOFINGER:
                  Serial.println("No finger detected");
                  return p;
                  case FINGERPRINT_PACKETRECIEVEERR:
                  Serial.println("Communication error");
                  return p;
                  case FINGERPRINT_IMAGEFAIL:
                  Serial.println("Imaging error");
                  return p;
                  default:
                  Serial.println("Unknown error");
                  return p;
                  }
                  
                  // OK success!
                  
                  p = finger.image2Tz();
                  switch (p) {
                  case FINGERPRINT_OK:
                  Serial.println("Image converted");
                  break;
                  case FINGERPRINT_IMAGEMESS:
                  Serial.println("Image too messy");
                  return p;
                  case FINGERPRINT_PACKETRECIEVEERR:
                  Serial.println("Communication error");
                  return p;
                  case FINGERPRINT_FEATUREFAIL:
                  Serial.println("Could not find fingerprint features");
                  return p;
                  case FINGERPRINT_INVALIDIMAGE:
                  Serial.println("Could not find fingerprint features");
                  return p;
                  default:
                  Serial.println("Unknown error");
                  return p;
                  }
                  
                  // OK converted!
                  p = finger.fingerFastSearch();
                  if (p == FINGERPRINT_OK) {
                  Serial.println("Found a print match!");
                  } else if (p == FINGERPRINT_PACKETRECIEVEERR) {
                  Serial.println("Communication error");
                  return p;
                  } else if (p == FINGERPRINT_NOTFOUND) {
                  Serial.println("Did not find a match");
                  return p;
                  } else {
                  Serial.println("Unknown error");
                  return p;
                  }
                  
                  // found a match!
                  
                  Serial.print("Found ID #"); Serial.print(finger.fingerID);
                  Serial.print(" with confidence of "); Serial.println(finger.confidence);
                  
                  sprintf(mqttio,"%d",finger.fingerID);
                  sprintf(confidence,"%d",finger.confidence);
                  
                  client.subscribe("Confidence");
                  client.publish("Confidence", confidence);
                  
                  client.subscribe("FingerprintNr");
                  client.publish("FingerprintNr", mqttio);
                  
                  return finger.fingerID;
                  }
                  
                  // returns -1 if failed, otherwise returns ID #
                  int getFingerprintIDez() {
                  uint8_t p = finger.getImage();
                  if (p != FINGERPRINT_OK) return -1;
                  
                  p = finger.image2Tz();
                  if (p != FINGERPRINT_OK) return -1;
                  
                  p = finger.fingerFastSearch();
                  if (p != FINGERPRINT_OK) return -1;
                  
                  // found a match!
                  Serial.print("Found ID #"); Serial.print(finger.fingerID);
                  Serial.print(" with confidence of "); Serial.println(finger.confidence);
                  
                  sprintf(mqttio,"%d",finger.fingerID);
                  
                   client.subscribe("FingerprintNr1"); 
                     client.publish("FingerprintNr1", mqttio);
                  
                     
                  return finger.fingerID; 
                  
                  
                  
                  
                  client.loop(); 
                  }
                  

                  EDIT: Hat sich erledigt.

                  Dieser neue Teil, muss ganz zum Schluss eingefügt werden, dann geht es auch.

                  // found a match!
                  Serial.print("Found ID #"); Serial.print(finger.fingerID);
                  Serial.print(" with confidence of "); Serial.println(finger.confidence);
                  
                  sprintf(mqttio,"%d",finger.fingerID);
                  sprintf(confidence,"%d",finger.confidence);
                  
                  client.subscribe("Confidence");
                  client.publish("Confidence", confidence);
                  
                  client.subscribe("FingerprintNr");
                  client.publish("FingerprintNr", mqttio);
                  
                  1 Reply Last reply Reply Quote 0
                  • coyote
                    coyote Most Active @SBorg last edited by

                    @SBorg sagte in Fingerprint an einem ESP8266:

                    Deswegen sende ich einfach alle 5 Minuten die Uptime des ESP in einen "Alive-Topic".

                    Hast du da mal ein BeispielCode? Das könnte ich in einem anderen Programm auch gut gebrauchen. Und auch hier bricht mir nach paar Sekunden die Verbindung zum MQTT ab,

                    1 Reply Last reply Reply Quote 0
                    • SBorg
                      SBorg Forum Testing Most Active last edited by SBorg

                         #include <NTPClient.h>
                         #include <WiFiUdp.h>
                         WiFiUDP ntpUDP;
                         NTPClient timeClient(ntpUDP,"europe.pool.ntp.org", 0, 300000); //Offset, Abfrageintervall
                      
                       timeClient.begin(); 
                      
                       timeClient.update();
                      

                      So in etwa. Ich nutze einfach NTPClient. ".begin" steht in der Setup-loop, ".update" holt dann bei mir im 5-Minuten-Zyklus (ist in der Main-loop, da ich alle 5 min. Werte vom Sensor lese) die aktuelle Uptime. Dann noch ein MQTT-Publish auf einen Topic (ich habe da einfach /x/y/z/alive ).

                      1 Reply Last reply Reply Quote 0
                      • Ralla66
                        Ralla66 Most Active last edited by Ralla66

                        Hier noch mal der gesamte Sketch mit Confidence :


                        /***************************************************
                        Fingerprint am Wemos D1 mini per MQTT nach IO Broker
                        ****************************************************/

                        #include <Adafruit_Fingerprint.h>
                        #include <ESP8266WiFi.h> // Aus Wifi Mqtt
                        #include <PubSubClient.h> // Aus Wifi Mqtt

                        /****************************************************
                        Pinbelegung Fingerprint Sensor ist GND,Rx,TX,Vcc
                        Am Wemos Rx ist D6 also GPIO 12
                        Am Wemos Tx ist D5 also GPIO 14
                        *****************************************************/

                        SoftwareSerial mySerial(14, 12, false, 128);

                        Adafruit_Fingerprint finger = Adafruit_Fingerprint(&mySerial);

                        // Eigene Daten eintragen

                        const char* ssid = "abc"; // Netzwerknahme
                        const char* password = "abc"; // PW Netzwerk
                        const char* mqttServer = "abc"; // Broker PI
                        const int mqttPort = 1883; // Broker PI Port
                        const char* mqttUser = "abc"; // Broker PI Name
                        const char* mqttPassword = "abc"; // Broker PI Password

                        // Ab hier nix mehr machen

                        char* mqttio = "12345"; // Broker PI Wert
                        char* confidence = "67890"; // Broker PI Wert

                        WiFiClient espClient;
                        PubSubClient client(espClient);

                        void setup()
                        {

                        // set the data rate for the sensor serial port
                        finger.begin(57600);

                        if (finger.verifyPassword()) {
                        Serial.println("Found fingerprint sensor!");
                        } else {
                        Serial.println("Did not find fingerprint sensor :(");
                        while (1) { delay(1); }
                        }

                        finger.getTemplateCount();
                        Serial.print("Sensor contains "); Serial.print(finger.templateCount); Serial.println(" templates");
                        Serial.println("Waiting for valid finger...");

                        Serial.begin(115200); // Baud Wemos nach IDE Serieller Monitor

                        WiFi.begin(ssid, password);

                        while (WiFi.status() != WL_CONNECTED) {
                        delay(500);
                        Serial.println("Connecting to WiFi..");
                        }
                        Serial.println("Connected to the WiFi network");

                        client.setServer(mqttServer, mqttPort);
                        client.setCallback(callback);

                        while (!client.connected()) {
                        Serial.println("Connecting to MQTT...");

                        if (client.connect("ESP8266Client", mqttUser, mqttPassword )) {

                          Serial.println("connected");  
                        
                        } else {
                        
                          Serial.print("failed with state ");
                          Serial.print(client.state());
                          delay(2000);
                        
                        }
                        

                        }

                        }

                        void callback(char* topic, byte* payload, unsigned int length) {

                        Serial.print("Message arrived in topic: ");
                        Serial.println(topic);

                        Serial.print("Message:");
                        for (int i = 0; i < length; i++) {
                        Serial.print((char)payload[i]);
                        }

                        Serial.println();
                        Serial.println("-----------------------");

                        }

                        void loop() // run over and over again
                        {
                        getFingerprintIDez();
                        delay(50); //don't ned to run this at full speed.
                        }

                        uint8_t getFingerprintID() {
                        uint8_t p = finger.getImage();
                        switch (p) {
                        case FINGERPRINT_OK:
                        Serial.println("Image taken");
                        break;
                        case FINGERPRINT_NOFINGER:
                        Serial.println("No finger detected");
                        return p;
                        case FINGERPRINT_PACKETRECIEVEERR:
                        Serial.println("Communication error");
                        return p;
                        case FINGERPRINT_IMAGEFAIL:
                        Serial.println("Imaging error");
                        return p;
                        default:
                        Serial.println("Unknown error");
                        return p;
                        }

                        // OK success!

                        p = finger.image2Tz();
                        switch (p) {
                        case FINGERPRINT_OK:
                        Serial.println("Image converted");
                        break;
                        case FINGERPRINT_IMAGEMESS:
                        Serial.println("Image too messy");
                        return p;
                        case FINGERPRINT_PACKETRECIEVEERR:
                        Serial.println("Communication error");
                        return p;
                        case FINGERPRINT_FEATUREFAIL:
                        Serial.println("Could not find fingerprint features");
                        return p;
                        case FINGERPRINT_INVALIDIMAGE:
                        Serial.println("Could not find fingerprint features");
                        return p;
                        default:
                        Serial.println("Unknown error");
                        return p;
                        }

                        // OK converted!
                        p = finger.fingerFastSearch();
                        if (p == FINGERPRINT_OK) {
                        Serial.println("Found a print match!");
                        } else if (p == FINGERPRINT_PACKETRECIEVEERR) {
                        Serial.println("Communication error");
                        return p;
                        } else if (p == FINGERPRINT_NOTFOUND) {
                        Serial.println("Did not find a match");
                        return p;
                        } else {
                        Serial.println("Unknown error");
                        return p;
                        }

                        // found a match!
                        Serial.print("Found ID #"); Serial.print(finger.fingerID);
                        Serial.print(" with confidence of "); Serial.println(finger.confidence);

                        return finger.fingerID;
                        }

                        // returns -1 if failed, otherwise returns ID #
                        int getFingerprintIDez() {
                        uint8_t p = finger.getImage();
                        if (p != FINGERPRINT_OK) return -1;

                        p = finger.image2Tz();
                        if (p != FINGERPRINT_OK) return -1;

                        p = finger.fingerFastSearch();
                        if (p != FINGERPRINT_OK) return -1;

                        // found a match!
                        Serial.print("Found ID #"); Serial.print(finger.fingerID);
                        Serial.print(" with confidence of "); Serial.println(finger.confidence);

                        sprintf(mqttio,"%d",finger.fingerID);
                        sprintf(confidence,"%d",finger.confidence);

                          client.subscribe("Confidence"); 
                           client.publish("Confidence", confidence);
                           
                         client.subscribe("FingerprintNr"); 
                           client.publish("FingerprintNr", mqttio);
                            
                        return finger.fingerID; 
                        
                        client.loop(); 
                        

                        }

                        1 Reply Last reply Reply Quote 0
                        • H
                          Hansi1234 last edited by

                          Hallo zusammen,
                          ich finde das Projekt hier sehr spannend und hätte dafür auch ein sinnvolles Einsatzgebiet. Ich würde gerne einen Fingerabdrucksensor an meine Gartenlaube hängen. Dann muss ich nicht immer meinen Schlüssel dabei haben.
                          Könnte man das auch mit einem Auslöser, zB. einer Lichtschranke oder Bewegungsmelder koppeln? Dass das Licht nicht ständig leuchtet?

                          1 Reply Last reply Reply Quote 0
                          • Ralla66
                            Ralla66 Most Active last edited by Ralla66

                            @Hansi1234
                            Was soll denn passieren wenn ein Fingerprint erkannt wurde ?
                            Was soll denn passieren wenn eine Bewegung erkannt wurde ?
                            Wann soll welches Licht ausgeschaltet werden das vom FP ?
                            Wenn ja geht das Licht nur aus wenn der FP kein Strom bekommt.
                            Könntest den Strom des FP mit Relais schalten.
                            Wenn Bewegung erkannt -> Relais ein.
                            Danach ein Timeout 2 min -> Relais aus.
                            Mit oder ohne IoBroker ?
                            Mit IOBroker relativ einfach umzusetzen.
                            Ohne mußt du die Routine / Sketch selbst umschreiben.
                            Liegt mehr oder weniger daran welche Fähigkeiten du hast.
                            Bewegungsmelder kannst du ein PIR HC-SR501 nehmen.

                            Solltest du nicht proggen können und du mit IO arbeitest, könntest du
                            2 Wemos nehmen.
                            An Wemos 2 könntest du noch Temp, Luftdruck , Wasserstand der Regentonne usw anschließen.

                            siehe Bild 🙂

                            Wemos_2_mal..jpg

                            H 1 Reply Last reply Reply Quote 0
                            • coyote
                              coyote Most Active last edited by

                              @Ralla66 Verbindungsabbrüche hast du keine mehr? Habe auch jetzt die 2.0.1 ausprobiert, ist da aber genau so

                              1 Reply Last reply Reply Quote 0
                              • Ralla66
                                Ralla66 Most Active last edited by Ralla66

                                @coyote
                                Alles ruhig bei mir, keine Verbindungsabbrüche.
                                Was steht denn im Log bei dir bezüglich Verbindung ?
                                Da sollte ja was zu sehen sein.
                                Port ist bei mir 1883 kein SSL.
                                Auf die schnelle fällt mir nur ein auf dem Wemos mal Tasmota flashen
                                und dort Mqtt einrichten.
                                Dann schauen ob diese Verbindung stabil bleibt.
                                In der Tasmota Console siehst du dann was kommuniziert wird.
                                Eben schauen ob mqtt.0 oder Routine zicken macht.
                                Wenn Tasmota auch abbricht kann das nur richtung Adapter sein.

                                coyote 1 Reply Last reply Reply Quote 0
                                • coyote
                                  coyote Most Active @Ralla66 last edited by

                                  @Ralla66 meinst du iobroker Log?

                                  Ich habe noch 3 ESP im Netzwerk hängen, die laufen aber stabil.
                                  Werde mir das morgen vllt mal anschauen, ob ich da was finde. Es ist immer ca. 6-10 Sekunden nach dem der letzte Fingerprint erkannt wurde. Löse ich alle 5 Sekunden den Fingerprint aus, bleibt die Verbindung stehen

                                  1 Reply Last reply Reply Quote 0
                                  • Ralla66
                                    Ralla66 Most Active last edited by

                                    @coyote
                                    ja IoBroker Log.
                                    Das hatte ich ja auch mit dem Verbindungsabbruch bis zum Versionswechsel.
                                    Dann kann das ja nur Npm oder js.controller oder so was sein.
                                    Da hab ich aber überhaupt keine Ahnung von.
                                    Da müssen die Profis helfen.

                                    W 1 Reply Last reply Reply Quote 0
                                    • H
                                      Hansi1234 @Ralla66 last edited by

                                      Guten Morgen Ralla66,
                                      danke für deine Auflistung. Ich habe unten deine Fragen beantwortet.

                                      @Ralla66 said in Fingerprint an einem ESP8266:

                                      @Hansi1234

                                      • Hi 🙂

                                      Was soll denn passieren wenn ein Fingerprint erkannt wurde ?

                                      • In Meinem Fall den 12V Schnapper vom Schloss öffnen. Kabel liegt bereits an.

                                      Was soll denn passieren wenn eine Bewegung erkannt wurde ?

                                      • Dann sollte der Fingerprint selber erstmal aktiviert werden (Licht vom Fingerprint geht an). Wäre aber auch nicht zwingend. Dann leuchtet der FP eben immer. Hier muss aber der retriggerbaren Monoflop beachtet werden (evtl. mit einem zusätzlichen Arduino Nano? FP -> Arduino Nano -> RPI?)

                                      Wann soll welches Licht ausgeschaltet werden das vom FP ?

                                      • Nach z.B. 2 Minuten

                                      Wenn ja geht das Licht nur aus wenn der FP kein Strom bekommt.

                                      • Das habe ich mir gedacht. Aber wie gesagt, ist nicht schlimm wenn er dauernd leuchtet.

                                      Könntest den Strom des FP mit Relais schalten.
                                      Wenn Bewegung erkannt -> Relais ein.
                                      Danach ein Timeout 2 min -> Relais aus.
                                      Mit oder ohne IoBroker ?

                                      • Mit natürlich 🙂 Habe auch schon einen Reedkontakt angebracht, welchen ich auch in io integriere.

                                      Mit IOBroker relativ einfach umzusetzen.
                                      Ohne mußt du die Routine / Sketch selbst umschreiben.
                                      Liegt mehr oder weniger daran welche Fähigkeiten du hast.

                                      • Daran wird es scheitern. Alles was ich bis jetzt umgesetzt habe, stand iwo hier im Forum oder habe ich bei Google gefunden. Außer die VIS, diese habe ich selber erstellt und passe ich selber an meine Bedürfnisse an.

                                      Bewegungsmelder kannst du ein PIR HC-SR501 nehmen.

                                      • Liegen bereits einige hier 😉

                                      Solltest du nicht proggen können und du mit IO arbeitest, könntest du
                                      2 Wemos nehmen.

                                      • Von diesen Wemos habe ich zum ersten Mal in diesem Forum gelesen. Ich würde es gerne aber alles per Kabel machen. Wireless nur wenn absolut nötig. Ein RPI mit LAN und Strom kann ich in der Laube sehr leicht unterbringen

                                      An Wemos 2 könntest du noch Temp, Luftdruck , Wasserstand der Regentonne usw anschließen.

                                      • An einem RPI aber ebenso 😉

                                      siehe Bild 🙂

                                      Wemos_2_mal..jpg

                                      • Oben habe ich bereits erfragt, warum kein UART benutzt wird. Die Antwort habe ich nicht so richtig verstanden. Aber ist auch nicht weiter wild, wenn ich den FP direkt an zB. den RPI anstecke.

                                      • Sorry für die vielen Fragen. Aber ist ja erstmal alles nur Theorie. Danke für die Hilfe

                                      1 Reply Last reply Reply Quote 0
                                      • Ralla66
                                        Ralla66 Most Active last edited by Ralla66

                                        @Hansi1234
                                        Wofür denn Uart für welche Anwendung ?
                                        Hatte ja oben geschrieben :
                                        Das ist bei den meisten NodeMCU / Wemos mit an Board über Mini Usb.
                                        TTL <-> RS232
                                        Du kannst ja in der Arduino IDE per Mini USB über einen Com Port auf dem Wemos zugreifen.
                                        Das ist ja Uart. Möglich auch an RX TX.
                                        Wlan brauchste nicht unbedingt,
                                        Lan kannste ja mit einem Arduino Uno verwirklichen.
                                        Da du nicht proggen kannst bleibt ja das Problem mit dem Sensor und deren Auswertung.
                                        Fertige Routinen kenne ich nicht mit FP,Schließer und PIR.
                                        Es gibt aber im Netz fertige Routinen für Fingerprint Door opener, ohne PIR.

                                        Na ja, ich persönlich würde mit 2 Wemos und Wlan arbeiten.
                                        So ist auch meine Statusanzeige mit FP geplant.
                                        Brauchst keine Routine umschreiben und Tasmota bietet dir ja an viele Sensoren einzubinden.
                                        Na klar kannste mit Tasmota auch Relais schalten oder Reedkontakte verwalten.
                                        Dein Projekt wird ja wachsen und irgend wann willste Led Stripes einbinden.
                                        Das bietet Tasmota ja auch.
                                        Warum einen schweren Weg gehen wenn es einfacher geht.
                                        Und denk an eine manuelle Entriegelung falls der FP mal ausfällt.

                                        Wenn du unbedingt RPI und FP nutzen möchtest ist das ein ganz eigenes Projekt.
                                        Hier ging es um Wemos ( ESP8266 ) mit FP.
                                        Dann mach bitte einen eigenen Fred auf RPI trifft FP.
                                        Eine ganz andere Welt.
                                        Denke das verwirrt viele wenn wir jetzt hier ESP und RPI mischen.
                                        Danke 🙂

                                        Link:
                                        https://tutorials-raspberrypi.de/raspberry-pi-fingerprint-sensor-authentifizierung-nutzen/

                                        L 1 Reply Last reply Reply Quote 0
                                        • W
                                          WS @Ralla66 last edited by

                                          @Ralla66 Vielen Dank für Deine Mühe!!

                                          Ich habe mir erlaubt, Deinen Sketch ein wenig zu überarbeiten. Er läuft jetzt bei mir mit allen mqtt-Versionen ohne Verbindungsabbrüche. (Habe ihn 'mal angehängt)
                                          Grüße
                                          Wolfgang


                                          /***************************************************
                                          Fingerprint am Wemos D1 mini per MQTT nach IO Broker
                                          /
                                          #include <Adafruit_Fingerprint.h>
                                          //#include <WiFiClient.h>
                                          #include <ESP8266WiFi.h> // Aus Wifi Mqtt
                                          #include <PubSubClient.h> // Aus Wifi Mqtt
                                          #include <SoftwareSerial.h>
                                          #include <NTPClient.h>
                                          /

                                          Pinbelegung Fingerprint Sensor ist GND,Rx,TX,Vcc
                                          Am Wemos Rx ist D6 also GPIO 12
                                          Am Wemos Tx ist D5 also GPIO 14
                                          *****************************************************/

                                          SoftwareSerial mySerial(14, 12, false, 128);

                                          Adafruit_Fingerprint finger = Adafruit_Fingerprint(&mySerial);

                                          // Eigene Daten eintragen

                                          const char* ssid = ""; // Netzwerknahme
                                          const char* password = ""; // PW Netzwerk
                                          const char* mqttServer = ""; // Broker PI
                                          const int mqttPort = 1883; // Broker PI Port
                                          const char* mqttUser = ""; // Broker PI Name
                                          const char* mqttPassword = ""; // Broker PI Password

                                          // Ab hier nix mehr machen

                                          char* mqttio = "12345"; // Broker PI Wert
                                          char* confidence = "67890"; // Broker PI Wert

                                          WiFiClient espClientfp;
                                          PubSubClient client(espClientfp);

                                          int cnt=300;

                                          void setup()
                                          {

                                          // set the data rate for the sensor serial port
                                          finger.begin(57600);

                                          if (finger.verifyPassword()) {
                                          Serial.println("Found fingerprint sensor!");
                                          } else {
                                          Serial.println("Did not find fingerprint sensor :(");
                                          while (1) { delay(1); }
                                          }

                                          finger.getTemplateCount();
                                          Serial.print("Sensor contains "); Serial.print(finger.templateCount); Serial.println(" templates");
                                          Serial.println("Waiting for valid finger...");

                                          Serial.begin(115200); // Baud Wemos nach IDE Serieller Monitor

                                          WiFi.begin(ssid, password);

                                          while (WiFi.status() != WL_CONNECTED) {
                                          delay(500);
                                          Serial.println("Connecting to WiFi..");
                                          }
                                          Serial.println("Connected to the WiFi network");
                                          Serial.print("=> ESP8266 IP Adresse: ");
                                          Serial.println(WiFi.localIP());

                                          client.setServer(mqttServer, mqttPort);
                                          client.setCallback(callback);

                                          }
                                          void reconnect(){

                                          while (!client.connected()) {
                                          Serial.println("Connecting to MQTT...");

                                          if (client.connect("ESP8266Clientfp", mqttUser, mqttPassword)) {

                                          Serial.println("connected");

                                          } else {

                                          Serial.print("failed with state ");
                                          Serial.print(client.state());
                                          delay(5000);
                                          }

                                          }
                                          client.subscribe("print/Confidence");
                                          client.subscribe("print/FingerprintNr1");
                                          client.publish("print/FingerprintNr1","Print verbunden");
                                          client.publish("print/Confidence","Genauigkeit verbunden");
                                          }

                                          void callback(char* topic, byte* payload, unsigned int length) {

                                          Serial.print("Message arrived in topic: ");
                                          Serial.println(topic);

                                          Serial.print("Message:");
                                          for (int i = 0; i < length; i++) {
                                          Serial.print((char)payload[i]);
                                          }

                                          Serial.println();
                                          Serial.println("-----------------------");

                                          }

                                          void loop() { // run over and over again

                                          if (!client.connected()) {
                                          reconnect();
                                          }

                                          if(cnt==0){
                                          Serial.println("Reset...");
                                          ESP.restart();
                                          }
                                          cnt--;
                                          delay(1000);
                                          Serial.println(cnt);

                                          client.loop();

                                          getFingerprintIDez();
                                          delay(50); //don't ned to run this at full speed.
                                          }

                                          uint8_t getFingerprintID() {
                                          uint8_t p = finger.getImage();
                                          switch (p) {
                                          case FINGERPRINT_OK:
                                          Serial.println("Image taken");
                                          break;
                                          case FINGERPRINT_NOFINGER:
                                          Serial.println("No finger detected");
                                          return p;
                                          case FINGERPRINT_PACKETRECIEVEERR:
                                          Serial.println("Communication error");
                                          return p;
                                          case FINGERPRINT_IMAGEFAIL:
                                          Serial.println("Imaging error");
                                          return p;
                                          default:
                                          Serial.println("Unknown error");
                                          return p;
                                          }

                                          // OK success!

                                          p = finger.image2Tz();
                                          switch (p) {
                                          case FINGERPRINT_OK:
                                          Serial.println("Image converted");
                                          break;
                                          case FINGERPRINT_IMAGEMESS:
                                          Serial.println("Image too messy");
                                          return p;
                                          case FINGERPRINT_PACKETRECIEVEERR:
                                          Serial.println("Communication error");
                                          return p;
                                          case FINGERPRINT_FEATUREFAIL:
                                          Serial.println("Could not find fingerprint features");
                                          return p;
                                          case FINGERPRINT_INVALIDIMAGE:
                                          Serial.println("Could not find fingerprint features");
                                          return p;
                                          default:
                                          Serial.println("Unknown error");
                                          return p;
                                          }

                                          // OK converted!
                                          p = finger.fingerFastSearch();
                                          if (p == FINGERPRINT_OK) {
                                          Serial.println("Found a print match!");
                                          } else if (p == FINGERPRINT_PACKETRECIEVEERR) {
                                          Serial.println("Communication error");
                                          return p;
                                          } else if (p == FINGERPRINT_NOTFOUND) {
                                          Serial.println("Did not find a match");
                                          return p;
                                          } else {
                                          Serial.println("Unknown error");
                                          return p;
                                          }
                                          }

                                          int getFingerprintIDez() {
                                          uint8_t p = finger.getImage();
                                          if (p != FINGERPRINT_OK) return -1;

                                          p = finger.image2Tz();
                                          if (p != FINGERPRINT_OK) return -1;

                                          p = finger.fingerFastSearch();
                                          if (p != FINGERPRINT_OK) return -1;

                                          sprintf(mqttio,"%d",finger.fingerID);
                                          sprintf(confidence,"%d",finger.confidence);

                                          client.subscribe("print/Confidence");
                                          client.publish("print/Confidence", confidence);

                                          client.subscribe("print/FingerprintNr1");
                                          client.publish("print/FingerprintNr1", mqttio);

                                          Serial.print("Erkannter Fingerabdruck Nr. "); Serial.print(mqttio);
                                          Serial.print(" mit einer Genauigkeit von "); Serial.println(confidence);

                                          return finger.fingerID;

                                          client.loop();
                                          }

                                          F 1 Reply Last reply Reply Quote 0
                                          • Benki
                                            Benki last edited by

                                            Servus,

                                            dank eurer Hilfe habe ich den Fingerprint-Reader jetzt halbwegs am Laufen, allerdings habe ich ein reproduzierbares, seltsames Problem:

                                            Nach fünf Scans, oder einer Wartezeit von ca. 20 Sek. passiert einfach nichts mehr. Keine Scanns werden mehr angenommen. Das passiert sowohl mit meinem umfangreichen Sketch, als auch mit dem sehr einfachen Adafruit Beispiel - Sketch. Nach Reset oder Stromlosschalten des Boards funktioniert es wieder für fünf Scans oder ca. 20 Sek. Auch ein Abklemmen der VCC-Leitung des FP-Readers für fünf Sek. reicht (meistens), um ihn wieder zum Leben zu erwecken - aber nur wieder für kurze Zeit. Hat jemand ne Idee, woran das liegen kann?

                                            Meine Konfiguration:

                                            • LoLin Wemos Mini D1 ESP8266
                                            • FP-Reader "Wald und Wiese" DY50-2V1 17-12-22 Chip: AS608 QCCF TR9S1B (3,3 - 6V)
                                            • Levelshifter baugleich wie oben angegeben
                                            • Relais (zum Öffnen eines E-Öffners einer Tür)
                                            • Display 20x4
                                            • Taster mit Pulldown-Widerstand(100K) zum Initiieren des Anlernens der Finger

                                            Verkabelung:

                                            • VCC, GND über Levelshifter, wie oben angegeben
                                            • RX, TX über D5(GPIO14) und D6(GPIO14)
                                            • Signalleitung D3, VCC 5V und GND an Relais
                                            • D1, D2 für Display + VCC 5V, GND
                                            • D7 PD-Widerstand und Taster an GND

                                            Was ich versucht habe:

                                            • nackte Verkabelung ohne Display, Taster, PD, Relais
                                            • neues Lolin Board
                                            • Lolin nodeMCU V3 12E (damit habe ich gar keinen Kontakt zum FP bekommen)
                                            • alternativen Levelshifter
                                            • verschiedene USB-Netzteile und direkt am PC

                                            Danke vorab

                                            Grüße! Benki

                                            1 Reply Last reply Reply Quote 0
                                            • First post
                                              Last post

                                            Support us

                                            ioBroker
                                            Community Adapters
                                            Donate

                                            587
                                            Online

                                            31.7k
                                            Users

                                            79.8k
                                            Topics

                                            1.3m
                                            Posts

                                            19
                                            126
                                            16702
                                            Loading More Posts
                                            • Oldest to Newest
                                            • Newest to Oldest
                                            • Most Votes
                                            Reply
                                            • Reply as topic
                                            Log in to reply
                                            Community
                                            Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen
                                            The ioBroker Community 2014-2023
                                            logo