NEWS
Fingerprint an einem ESP8266
-
Kriegste hin.
Ein dickeres Kabel vom GND Pin weg, daran deine Sammelstelle.
Erfolg noch eingefangen kriegste auch hin.
Wenn Finger angelernt lädst du die Fingerprint hoch mit
SoftwareSerial mySerial(14, 12, false, 128);
Dann ist der FP an der NodeMCU --> D5 = RX und D6 TX.
Nicht mehr RX / TX. -
Also das ist alles sehr skuril. Es hat mit einem neuen NodeMCU wunderbar funktioniert, auch an GPIO5 und 4. Dann USB-Kabel abgezogen, wieder ran, resetten..."not found"...Sketch neu drauf..."not found"...Sketch nochmal drauf...läuft...aber er bringt wieder den Communication error, aber nicht wie sonst durchgängig, sondern immer mal zwischendurch.
Ich vermute, der Fingerprint hat irgendwie ne Macke. Könnt ihr einen empfehlen, der gut ist? Im Internet finde ich auch immer nur Anleitungen von Fingerprints, die rot leuchten, meiner leuchtet blau. Die Farbe ist mir ja egal, aber wundern tut es mich trotzdem. Selbst im Video auf aliexpress, wo ich ihn gekauft habe, leuchtet er rot, was ja auch nicht ganz zum Artikel passt.
Aber an dieser Stelle super vielen Dank für eure Geduld, denn im Großen und Ganzen funktioniert es ja nun. Nun werde ich erstmal alles schön detailliert in Fritzing zeichnen, damit das auch alles festgehalten ist.
-
Zumindest laufen bei mir die FPM10A ohne Probs.
Nur Rote Anschlußkabel.
Lolin NodeMCU die nächste Frage.
Mal ne andere NodeMCU nehmen ohne VU Anschluß.
Haben meine nicht.
FP immer schön an 5 Volt betreiben um so besser der Scan und die Auswertung.
Der Helligkeit wegen.
Zu Communication Error, meist ein Problem auf der Tx Rx Leitung.
Hier Pegel sauber ?Jetzt noch nach IO Broker schaufeln per Mqtt wäre Cool.
-
@Ralla66
Ich habe an der Verkabelung ja nichts geändert. Anderen NodeMCU habe ich auch probiert. Ich kapiers selber nicht. Aber nun habe ich die Schnauze voll von diesem Fingerprint.Was meinst du mit „Pegel sauber“?
Per MQTT nach ioBroker ist die leichteste Übung, da übertrage ich schon Werte von anderen Sensoren.
-
@tööö sagte in Fingerprint an einem ESP8266:
SoftwareSerial mySerial(5, 4);
Geh mal von 4 weg.
Hier nach :
http://stefanfrings.de/esp8266/
Zitat bei NodeMCU : D4 GPIO2 muss beim Start high sein, hat 12 kΩ Pull-Up Widerstand, flackert beim StartDa könnte der Fehler liegen. Geh lieber auf 5, 6.
FP nach Mqtt würdest du wie machen ?
-
Ich habe eine Instanz vom Adapter MQTT installiert. Im Sketch dann folgenden Codeauszug:
Die relevanten Variablen (der Rest ergibt sich aus dem Code):
const char* ssid = "[DEIN SSID]"; const char* password = "[Dein WLAN-Passwort]"; const char* mqtt_server = "[IP vom ioBroker-Server"; const char* feuchtigkeitMQTT = "[Name, unter der der Wert im ioBroker im MQTT gespeichert werden soll]"; const char* zeitMQTT = "FeuchtigkeitPalmeObenZeit"; WiFiClient espClient; PubSubClient client(espClient); char charBuf[50]; WiFiUDP ntpUDP; NTPClient timeClient(ntpUDP);
Meine #includes:
#include <Smartdebug.h> #include <ESP8266WiFi.h> #include <PubSubClient.h> #include <WiFiClient.h> #include <WiFiUdp.h> #include <NTPClient.h>
wobei "Smartdebug.h" meine eigene Klasse ist, um schöner debuggen zu können und im fertigen Zustand die Debugausgaben eleganter ausschalten zu können, um Speicher zu sparen.
WLAN-Verbindung aufbauen:
void setup_wifi() { delay(10); DEBUG_PRINTLN(); DEBUG_PRINT("Connecting to "); DEBUG_PRINTLN(ssid); WiFi.begin(ssid, password); while (WiFi.status() != WL_CONNECTED) { delay(500); DEBUG_PRINT("."); } randomSeed(micros()); DEBUG_PRINTLN(""); DEBUG_PRINTLN("WiFi connected"); DEBUG_PRINTLN("IP address: "); DEBUG_PRINTLN(WiFi.localIP()); }
Falls die Verbindung zum MQTT-Server mal abbricht, wird sie hier wiederhergestellt:
void reconnect() { while (!client.connected()) { DEBUG_PRINT("Attempting MQTT connection..."); String clientIdFeuchtigkeit = feuchtigkeitMQTT; if (client.connect(clientIdFeuchtigkeit.c_str())) { DEBUG_PRINTLN("connected"); } else { DEBUG_PRINT("failed, rc="); DEBUG_PRINT(client.state()); DEBUG_PRINTLN(" try again in 5 seconds"); delay(5000); } String clientIdZeit = zeitMQTT; if (client.connect(clientIdZeit.c_str())) { DEBUG_PRINTLN("connected"); } else { DEBUG_PRINT("failed, rc="); DEBUG_PRINT(client.state()); DEBUG_PRINTLN(" try again in 5 seconds"); delay(5000); } } }
Und hier die setup-Funktion:
void setup() { timeClient.begin(); // Offset für die Zeitzone einstellen // GMT +1 = 3600 // GMT +8 = 28800 // GMT -1 = -3600 // GMT 0 = 0 timeClient.setTimeOffset(7200); DEBUG_INIT(115200); setup_wifi(); client.setServer(mqtt_server, 1883); client.setCallback(callback); feuchtigkeit = analogRead(FEUCHTIGKEIT); if (!client.connected()) { reconnect(); } client.loop(); DEBUG_PRINTLN(feuchtigkeit); String(feuchtigkeit).toCharArray(charBuf, 50); client.publish(feuchtigkeitMQTT, charBuf); while(!timeClient.update()) { timeClient.forceUpdate(); } // Zeit kommt im folgendem Format // 2018-05-28T16:00:13Z formattedDate = timeClient.getFormattedDate(); DEBUG_PRINTLN(formattedDate); int splitT = formattedDate.indexOf("T"); dayStamp = formattedDate.substring(0, splitT); timeStamp = formattedDate.substring(splitT+1, formattedDate.length()-1); String zeitAusgabe = dayStamp + " - " + timeStamp; zeitAusgabe.toCharArray(charBuf, 50); client.publish(zeitMQTT, charBuf); delay (2000); DEBUG_PRINTLN("Ich gehe nun in Schlafmodus für 60 Minuten (3600 Sekunden)"); ESP.deepSleep(3600 * 1000000); }
-
Habe noch ein wenig gebastelt.
Der Fingerprintsensor sendet nun über den Wemos nach IO Broker mqtt.0 als Broker.
Der Sketch sendet nur die reine ID. Also 1 bis xxx.
Im Blockly werde ich später Rechte und Namen vergeben.
ID 1 bis 9 haben praktisch Admin Rechte dürfen alles.
ID 10 bis 19 werden begrenzte Rechte haben.
ID 20 bis, keine Rechte, nur lesen.
Wenn keine ID erkannt keine Schaltung in der Vis möglich, praktisch Partyschutz oder so.
Läuft soweit.
Ein Problem bleibt aber noch, nach kurzer Zeit bekomme ich ein Timeout im Log :
mqtt.0 2019-07-24 17:40:56.280 info Client [ESP8266Client] connection closed: timeout
Hier raus würde ich schließen -> info Client [ESP8266Client] connection closed -<
das der Client die Verbindung schließt ???
Liegt dies am Adapter mqtt.0 oder kann das aus dem Sketch kommen.
Kann mal bitte wer drüber schauen.
Sonst ist der Sonoff Adapter mein Broker,
das läuft noch nicht hier scheint der Topic falsch zu sein.
Kann was an den Einstellungen im Mqtt.0 Adapter falsch sein ?
Bin da nicht so fit mit.Sketch:
-
Fehlersuche,
mit dem Sketch bleibt Mqtt.0 Grün.
Dann kann der Fehler timeout nur im Sketch liegen.Sketch:
Schwierig da ich nicht proggen kann.
Erkennt wer den Fehler ?Wäre ja cool einen Fingerprint in IO zu haben.
Teste jetzt mal mit Serial.begin(115200);
Was noch so auffällt.
bei geht nicht:
client.subscribe("Fingerprint_1");
client.publish("Fingerprint_1",mqttio);
mqttio ist ja char, fehlt hier "" also "mqttio" ?
geht:
client.publish("esp/test", "Hello from ESP8266");
client.subscribe("esp/test");Wobei die Hauptfrage bleibt wo kommt der timeout her ?
Ideen ?
Danach kommt wohl trockene Lektüre wie Normen lesen über Topic dran.
Bin Weg lesen
Der Ralla
-
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 ^^
-
@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. -
@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.
-
@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
-
@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.
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); -
Kleiner Nachtrag noch,
Datenpunkt hinzu gefügt User erkannt, BildKleines Blockly dazu, Bild
-
@Ralla66
Wenn du jetzt noch ein Tutorial dazu machst -
Einfach mal zeigen will,
jetzt auch in der Visunach einer Minute werden die Bedienelemente gesperrt.
-
@Ralla66
Sehr schön!
Ich würde das mit dem Sonoff-Adapter auch begrüssen. -
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. -
Bräuchte mal einen Tipp und Anregungen für die Visu.
Thema ist eigentlich Zugriffsberechtigung zur Visu.Bild:
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
-
Nur eine Idee.
Nimm das Script von Mic und anstatt der Tastatur füllst du den Datenpunkt vom eingelesen Fingerprint.