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.
    • SBorg
      SBorg Forum Testing Most Active last edited by

      Also....
      Du hast den MQTT-Connect (und Test) nur im Setup. Folglich wird nur einmal beim PowerUp des ESP eine Verbindung hergestellt. Bricht sie, aus welchen Gründen auch immer, mal ab, war es das mit MQTT. Du musst zyklisch abfragen ob noch eine Verbindung besteht und ggf. neu connecten. Wenn du subscriben möchtest (also MQTT --> ESP) wäre dafür die Loop geeignet. Wenn du nur publishst (ESP --> MQTT), brauchst du ja nur tatsächlich eine Verbindung wenn du was sendest. Da wäre eine kleine Subroutine zu bevorzugen die den Connect prüft, ggf. neu verbindet und dann sendet.
      Ich habe beim Sonoff-Adapter über die Zeit festgestellt, dass dieser öfters die Verbindung abbricht wenn längere Zeit Funkstille herrscht. Der Mosquitto macht das bspw. nicht. Deswegen sende ich einfach alle 5 Minuten die Uptime des ESP in einen "Alive-Topic". Abgesehen von ping- oder radar2-Adapter sehe ich so ob der ESP noch lebt und ich habe keine (oder kaum) Abbrüche mehr. Wichtig wenn man subscribed und den ESP per ioB/MQTT steuern möchte.

      client.xxx erwartet Topic und Message als "String". Da du mqttio mittels char* als ein Character-Array definierst, kann das nicht funktionieren. Entweder du definierst es gleich als "String" oder musst das Array vor Verwendung in einen String konvertieren. Nur Anführungszeichen genügen da nicht ^^

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

        @SBorg
        Danke, das mit dem neu connecten im mqtt.0 ist ein Ansatz.
        Bei mir wird nur publishst (ESP --> MQTT) benötigt.
        String teste ich noch, client.xxx ist doch der ESP oder ?
        Daten kommen ja in IO mqtt.0 als Zahl an, nur halt immer nach 2 - 3 Sekunden Pause
        wird die Verbindung getrennt.
        Diese zicken hat der mqtt.0 schon von Anfang an gemacht.
        Bin dann für meine Sonoff umstiegen auf Sonoff Adapter als Broker.
        Dieser erstellt mir aber keinen Datenpunkt Fingerprint.
        Sonst hätte ich den Sonoff Adapter als Broker genommen.

        Mqtt_0_geht_mit_FP.jpg

        Sonoff_0_geht_nicht_FP.jpg

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

          @Ralla66 sagte in Fingerprint an einem ESP8266:

          client.xxx ist doch der ESP oder ?

          Ja, ich meinte damit die beiden client.subscribe(...)/....publish(...) Befehle.

          @Ralla66 sagte in Fingerprint an einem ESP8266:

          Daten kommen ja in IO mqtt.0 als Zahl an, nur halt immer nach 2 - 3 Sekunden Pause
          wird die Verbindung getrennt.
          Diese zicken hat der mqtt.0 schon von Anfang an gemacht.
          Bin dann für meine Sonoff umstiegen auf Sonoff Adapter als Broker.
          Dieser erstellt mir aber keinen Datenpunkt Fingerprint.
          Sonst hätte ich den Sonoff Adapter als Broker genommen.

          Witziger weise bei mir genau umgekehrt. Der Sonoff bricht bei mir immer ab und der MQTT läuft. Der Sonoff ist ein stark gestutzter MQTT-Server, kann einfach sein, dass du hier nicht einfach publishen kannst und einen "spezielleren" Aufruf benötigst. Meine Versuche damit sind aber lange hin, hat eh nie richtig funktioniert, deswegen kenne ich mich beim Sonoff auch eher schlecht aus.

          Dass der MQTT abricht könnte auch an deiner "Loop" hängen. Die fragt einzig den MQTT ab, macht das also ständig im Millisekundentakt (da sonst nichts in der Loop gemacht wird). "delay" sollte man zwar meiden, aber zu Testzwecken würde ich einfach mal 2 Sekunden Pause per delay einfügen und dann mal schauen.

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

            @SBorg
            werde das mal später mit Mqtt.0 testen, String , Delay usw.
            Sehe eher bei mir den Sonoff Adapter am start.
            Das geht ja im IO bis auf den Datenpunkt erstellen.
            Vermute mal liegt am Full Topic oder Topic und Perfix.
            Scheint nicht die richtige Syntax zu sein.
            Dann können nur diese Zeilen falsch sein.

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

            Das hatte ich auch mit Tasmota Mqtt, wenn der Fulltopic nicht passt läuft nichts.
            Ja auch logisch.
            Der gestutzte Sonoff Mqtt Server braucht wohl die genaue Syntax.
            Hatte das heute kurz angelesen bei Tasmota Theo Arends Mqtt auf Github.
            Werde da mal ansetzen.

            Teste das mal jetzt alles aus.
            Viel kann das nicht mehr sein.

            Danke noch mal 🙂

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

              @SBorg
              Sodele läuft jetzt mit Mqtt.0 .
              Bin zurück auf die Version 2.01.
              Alles Stabil.
              Schaue noch ob das auch mit dem Sonoff Adapter läuft.

              Anbei der Sketch, viel Spass damit 🙂

              Ziel erreicht, Läuft.


              /***************************************************
              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 = "Dein Netzwerk"; // Netzwerknahme
              const char* password = "Netzwerkpasswort"; // PW Netzwerk
              const char* mqttServer = "Broker IP"; // Broker PI
              const int mqttPort = 1884; // Broker PI Port
              const char* mqttUser = "Broker User"; // Broker PI Name
              const char* mqttPassword = "Broker Passwort"; // Broker PI Password

              // Ab hier nix mehr machen

              char* mqttio = "12345"; // 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);
              
              }
              

              }

              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);

              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(); 
              

              }

              Ralla66

              Nachtrag, Confidence noch eingefügt.

              // Ab hier nix mehr machen

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

              // 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);

              Confidence.jpg

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

                Kleiner Nachtrag noch,
                Datenpunkt hinzu gefügt User erkannt, Bild

                User erkannt.jpg

                Kleines Blockly dazu, Bild

                User erkannt Blockly.jpg

                🙂

                ? R 2 Replies Last reply Reply Quote 0
                • ?
                  A Former User @Ralla66 last edited by

                  @Ralla66
                  Wenn du jetzt noch ein Tutorial dazu machst 👍

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

                    Einfach mal zeigen will,
                    jetzt auch in der Visu 🙂

                    FP_VIS.jpg

                    nach einer Minute werden die Bedienelemente gesperrt.

                    FP_VIS_Gesperrt.jpg

                    1 Reply Last reply Reply Quote 0
                    • R
                      ReverZ @Ralla66 last edited by

                      @Ralla66
                      Sehr schön!
                      Ich würde das mit dem Sonoff-Adapter auch begrüssen.

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

                        Fertig ist man ja nie,
                        Sonoff Adapter schwierig, habe keine Idee mehr woran es liegt !
                        Warum der Datenpunkt nicht erstellt wird ist die Frage.
                        Da muß ein Kenner ran, meine Möglichkeiten als Beginner sind sehr begrenzt.
                        Müsste mal jemand ein Issue beim Adapter Ersteller platzieren.
                        Mit meinem 40 Jahre alten Schulenglisch bringt das nichts.

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

                          Bräuchte mal einen Tipp und Anregungen für die Visu.
                          Thema ist eigentlich Zugriffsberechtigung zur Visu.

                          Bild:

                          Party Modus.jpg

                          Würde gerne 3 Modi haben.
                          Die Modi Umschaltung kann nur der Admin per Fingerprint oder am Lappy mit Passwort.

                          • Freier Modus, Visu kann bedient werden ohne Fingerprint
                          • User Modus per Fingerprint ( Familie ), Admins ( Eltern ) dürfen alles, Kiddis dürfen nur bestimmte Views aufrufen.
                          • Party Modus, nur die Admins haben per Fingerprint Berechtigung

                          Entsteht die Frage wie kann ich einzelne View sperren.
                          Für Ideen und Anregungen wäre ich dankbar.

                          Ralla

                          Glasfaser 1 Reply Last reply Reply Quote 0
                          • Glasfaser
                            Glasfaser @Ralla66 last edited by

                            @Ralla66

                            Nur eine Idee.

                            Nimm das Script von Mic und anstatt der Tastatur füllst du den Datenpunkt vom eingelesen Fingerprint.

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

                              Gute Idee, Danke.
                              Sperrbildschirm war die Anregung.
                              Flux was eingefügt.
                              Party Modus geht jetzt 🙂 Bild ->

                              FP_Sperre.jpg

                              Blockly dazu :

                              FP Sperrbildschirm.jpg

                              Zugangsberechtigung für andere User geht bei mir schlecht da die View Bar 12 Knöpfe hat.
                              Hatte hier an ausblenden oder Gruppen gedacht.
                              Umbauen der Vis würde sehr aufwendig werden.

                              Dann bleibt nur ein Weg der gangbar seien dürfte.

                              User ist ja per Fingerprint bekannt und zugewiesen.
                              Wenn User x keine Berechtigung haben soll frage ich Data for controll vis ab.

                              User umschalten.jpg

                              Ist User x in einem nicht Berechtigten Bereich schalte ich die Visu per Blockly auf eine andere View um.

                              Das sollte gehen. Soweit die Theorie. 🙂

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

                                Alles noch ziemlich unausgewogen, suche erst den Weg.
                                Dann werden Blocklys und Visu angepasst.
                                Erste Ansätze zum User Modus.
                                Blockly -->

                                Berechtigung Vis.jpg

                                Rallas Theorie 😉

                                1 Reply Last reply Reply Quote 0
                                • 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
                                            • First post
                                              Last post

                                            Support us

                                            ioBroker
                                            Community Adapters
                                            Donate

                                            902
                                            Online

                                            31.7k
                                            Users

                                            79.8k
                                            Topics

                                            1.3m
                                            Posts

                                            19
                                            126
                                            16723
                                            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