iButton als Zuganskontrolle per ESP8266 -> MQTT -> Fhem und zurück..

Begonnen von lenoxef, 19 Februar 2017, 16:25:51

Vorheriges Thema - Nächstes Thema

Spielmann

#30
Hallo lenoxef,
der ESP verbindet sich mit mqtt und folgendes wird an der seriellen Schnittstelle ausgegeben:
Zitat
Connecting to spnet
.......
WiFi connected
IP address:
192.168.178.80
Attempting MQTT connection...connected

Leider tut sich nichts wenn ich ein iButton anlege (DS1990R serial number iButton). Der Reader ist an GPIO4 (PinD2)  GPIO2 (PinD4) mit einem pull-up Widerstand (4,7k) an 3,3V angeschlossen. Passt das so? Die LED leuchtet ständig. Wenn ich den Code richtig lese, sollte doch die LED erst beim Anlegen des Buttons aufleuchten.

Inswischen tut er und bin begeistert. Anscheinend ist im code:
OneWire  ds(2)
nicht Pin2 (GPIO4) sondern Pin4 (GPIO2)


Warum zeigt eigentlich der ESP ein offenes Netz mit der SSID ESP_D0C5C9 an?

Gruß
Spielmann
FHEM mit Raspi (Zentrale)
Raspberrymatic (Heizung)
Siemens LOGO8 (Lichtsteuerung)
Philips HUE Gedöns
Diesel-Tankstelle mit fhem und ESP (eine ewige Baustelle)

lenoxef

Hallo Spielemann,

du hast natürlich recht mit der Pin/GPIO Zuordnung.. da hab ich wohl was verdreht, ich werde das heute abend ändern und neu hochladen. Das der ESP einen AP auf macht, kann ich dir allerdings nicht sagen. Das muss aus dem MQTT Beispiel kommen. Ich habe es allerdings selbst noch nicht bemerkt.

Gruß
lenoxef

digiart

Um den AP weg zu bekommen, sollte ein WiFi.mode(WIFI_STA); eingefügt werden (http://esp8266.github.io/Arduino/versions/2.1.0-rc1/doc/libraries.html).

Was mir bei deiner .ino noch aufgefallen ist, sind die letzten Zeilen:
//// gelesenen Chip auf Serial-Monitor ausgeben

  for( i = 0; i < 8; i++) {
    if (addr[i] <= 0xF){Serial.print("0");}
    Serial.print(addr[i], HEX);
    }
Serial.println();

sprintf (Key, "%02x%02x%02x%02x%02x%02x%02x%02x",addr[0],addr[1],addr[2],addr[3],addr[4],addr[5],addr[6],addr[7]);
client.publish("outTopic", Key);


Hier machst du zweimal das Gleiche, nur einmal gibst du das Ergebnis auf die serielle Schnitstelle aus, und das zweite Mal sendest du das Ergebnis per MQTT.
Zur Optimierung könnte so etwas funktionieren:
sprintf (Key, "%02x%02x%02x%02x%02x%02x%02x%02x",addr[0],addr[1],addr[2],addr[3],addr[4],addr[5],addr[6],addr[7]);
Serial.println(Key);
client.publish("outTopic", Key);
Anfragen ausserhalb der Threads (PN, Mail o.ä.) werden ignoriert!

Spielmann

Hallo lenoxef,
mir ist auch aufgefallen, dass die interne LED nicht "BUILTIN_LED" sondern "LED_BUILTIN" heißt. Habe jedoch keine Verhaltensänderung an der LED feststellen können.

@digiart: Ich war froh, dass die Ausgabe zusätzlich zum Testen/Debuggen auf der seriellen Schnittstelle lag. Ich habe Putty zum Testen parallel geöffnet. Natürlich kann man diese später entfernen.

Gruß
Spielmann
FHEM mit Raspi (Zentrale)
Raspberrymatic (Heizung)
Siemens LOGO8 (Lichtsteuerung)
Philips HUE Gedöns
Diesel-Tankstelle mit fhem und ESP (eine ewige Baustelle)

digiart

Die Ausgabe ist ja nicht entfernt, Die Umwandlung Array -> HEX-String ist IMHO nur einmal nötig, und es werden auch diejenigen Daten ausgegeben, die wirklich gesendet werden.
Anfragen ausserhalb der Threads (PN, Mail o.ä.) werden ignoriert!

lenoxef

Hallo digiart,

danke für deinen Hinweis mit dem AP. Das werde ich heute Abend gleich testet.

Auch das
sprintf (Key, "%02x%02x%02x%02x%02x%02x%02x%02x",addr[0],addr[1],addr[2],addr[3],addr[4],addr[5],addr[6],addr[7]);
Serial.println(Key);
client.publish("outTopic", Key);


ist wesentlich eleganter und wird gern übernommen. Die Formatierung durch "%02x" war für mich neu und ist sicherlich besser als auf "<=0xF" zu prüfen.

Wenn noch jemand eine Idee hat, wie man die LED komplett ausschalten kann, immer her damit.. aktuell blinkt sie wild vor sich hin.. das braucht kein Mensch.

digiart

Anfragen ausserhalb der Threads (PN, Mail o.ä.) werden ignoriert!

lenoxef

Ah, ok... da wo auch mein iButton-Reader dran hängt.. dann macht das Sinn, dass die permanent blinkt.. Wird geändert.. Danke.

Spielmann

Hallo zusammen,
ich war letzten Monat nicht ganz untätig und habe meine configurable Firmata durch ein ESP8266 mit mqtt Aufbau ersetzt. Dazu musste ich mich allerdings etwas in die Arduino Programmierung einarbeiten und konnte letztendlich mittels Pfannes Basic Library eine wesentlich bessere und stabilere Lösung finden. Da dieser Thread den Ausschlag meiner Lösung auslöste (Ich kannte den ESP8266 vorher nicht) möchte ich Interessierten meine Lösung vorstellen:

https://forum.fhem.de/index.php/topic,50238.msg618827.html#msg618827

Gruß
Spielmann 
FHEM mit Raspi (Zentrale)
Raspberrymatic (Heizung)
Siemens LOGO8 (Lichtsteuerung)
Philips HUE Gedöns
Diesel-Tankstelle mit fhem und ESP (eine ewige Baustelle)

Itschi

Hallo,

ich habe den Code von lenoxef übernommen und meinen Reder an GPIO2 (PIN4) angeschlossen.

Der Serielle Monitor gibt mit:

WiFi connected
IP address:
192.168.178.72
Attempting MQTT connection...connected


und in Fhem bekomme ich ein "iButton Reader connected" angezeigt.

Doch wenn ich einen iButton an den Reader halte wird nichts im seriellen Monitor und Fhem ausgegeben.

Gruß
Itschi

Itschi

Ah...wie dumm!
Jetzt geht es. Hatte den Reader extern versorgt. Wenn die 1-wire Data Versorgung und GND vom ESP kommen geht es natürlich.

Gruß
Itschi

rabehd

#41
Ich wollte mal hierzu Feedback geben.
Die Diskussion hier war Basis für meine Lösung.

Ich habe nur einen ESP32 und 2 iButton-Reader genommen.
Warum 2? Wir nutzen es nicht als Schlüsselbrett, sondern als Zu-/Abgangsmelder. In einer ersten Version gab es nur einen Reader. Das brachte das System etwas durcheinander, wenn es verschiedene Eingaber kurz hintereinander gab. Nun haben wir einen iButton fürs Kommen und einen fürs gehen.
Der ESP32 schläft im Normalfall und hängt an einer Powerbank.
Berührt man einen Touchsensor, dann bootet der ESP32 innerhalb von 2 Sekunden, incl. WLAN-Verbindung.
der Kommen-Reader wird auf LED grün geschaltet, der Gehen-Reader auf LED rot. 
Wird an einem Reader ein iButton erkannt, dann werden beide Reader auf LED orange geschaltet.
Die ID wird per MQTT an FHEM übermittelt, wenn dort ok, dann gehen beide LED auf grün für 15 Sekunden.
Sollte innerhalb von 180 Sekunden nichts mehr passieren, dann geht der ESP schlafen.

Da es ab und zu passiert, dass der ESP nicht schlafen geht oder bei Mehrfach-"Eingaben" hängen bleibt verzichte ich noch den Code zu veröffentlichen.
In der nächsten Stufe sollten noch LEDs per MQTT gesteuert werden, die sagen Fenster sind auf, Licht ist an...

Ergänzung September 2018:
Es läuft seit einiger Zeit ohne Probleme, auch mit 3 Status-LED über MQTT.
Ursache für das Hängenbleiben war wohl die Konfiguration von Fritzbox über FHEM. Beim Gehen wurde das Gast-WLAN abgeschaltet. Damit gab es eine kurze Unterbrechung des "normalen" WLAN...
Auch funktionierende Lösungen kann man hinterfragen.

henfri

Moin,

ich habe gerade einen Pull-Request für iButtons und EspEasy erstellt:
https://github.com/letscontrolit/ESPEasy/pull/1468

Freue mich auf euer Feedback.

Gruß,
Hendrik

eppi

Zitat von: henfri am 26 Mai 2018, 16:24:35
Moin,

ich habe gerade einen Pull-Request für iButtons und EspEasy erstellt:
https://github.com/letscontrolit/ESPEasy/pull/1468

Freue mich auf euer Feedback.

Gruß,
Hendrik
Hallo Hendrik
Ich habe heute mal bei die ESPEasy_mega-20180916_dev installiert auf einer NodeMCU. Vom Reader OneWire-Data auf GPIO-12 (D6) gehängt und OneWire-GND auf GND der NodeMCU.
Im Plugin kann ich danach keine DeviceAddress aufwählen, resp diese ist leer. Interval habe ich auf 2sec gesetzt. Im Log von ESPEasy wird auch nichts ausgegeben, wenn ein Button aufgelegt wird. Hast du einen Tipp?

Besten Dank und viele Grüsse Eppi

eppi

Nach etwas googlen habe ich herausgefunden, dass zwischen OneWire Data und 3.3V ein Resistor von 10kOhm notwenig ist. Mein iButton wird nun in ESPEASY erkannt, jedoch sendet er nichts an den Controller, welcher mit FHEM verbunden ist. Jemand eine Idee oder eine funktionierende Version von Espeasy welches dies unterstützt?
Danke und viele Grüsse eppi