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

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

Vorheriges Thema - Nächstes Thema

lenoxef

Hallo Fehm Gemeinde,

ich versuche nun schon seit längerem diverse iButtons --> https://de.wikipedia.org/wiki/IButton als Zutrittskontrolle zu verwenden. Genauer gesagt ich möchte damit meine Alarmanlage scharf/unscharf schalten. Da der Raspi nicht in der Nähe der Haustür ist, möchte ich das ganze gern auf einem ESP8266 (NodeMCU) laufen lassen. Dieser soll so wenig Intelligenz wie möglich besitzen. Am besten nur Einlesen und per WLAN -> MQTT die gelesenen Daten an FHEM senden. Die Auswertung, ob es sich beim gelesenen iButton um einen gültigen Key handelt, möchte ich gern in FHEM machen.

Was bisher getan wurde:

Das Einlesen der iButtons auf dem ESP8266 funktioniert und wird im SerialMonitor ausgegeben.

Über diesen Beitrag hier http://s6z.de/cms/index.php/homeautomation-homecontrol/hardwareplattformen/esp8266/113-mqtt-basic-esp8266-mqtt-example , habe ich den Broker in FHEM installiert und kann mir dem Beispielprogramm den String ,,Hello World #1 ..." zum Raspi senden. Weiter komme ich allerdings nicht.

Nächster Schritt sollte sein, dass ich in FHEM ein Reading habe welches mir den ,,Hello World"-String zeigt. Ich bräuchte da mal Hilfe bei der Definition in FHEM. Sobald das funktioniert, werde ich meine iButton Auswertung und das MQTT Beispiel kombinieren und versuchen die IDs auszuwerten.

Wenn das alles läuft, wäre die andere Richtung (FHEM steuert z.B. RGB LEDs oder ein Display am ESP8266) noch interessant.

Sollte jemand nähere Infos benötigen, einfach melden.

Vielen Dank schon mal an M. Pfannenstiel von dem der o.g. Beitrag geschrieben wurde.

Pf@nne

Moin leno,

wenn du mit deinem Button schon im ESP8266 bist, dann musst du ja die ButtonID "nur noch" als publish absetzen.....
Nimm mal dieses Template, da ist eigentlch schon alles drinn.

https://forum.fhem.de/index.php/topic,50238.0.html
https://github.com/Pfannex/ESP8266_Basic

Beim Umgang mit MQTT hilft der MQTT-Spy enorm...
https://github.com/eclipse/paho.mqtt-spy/wiki/Downloads

Schaue mal in das Template, damit solltest du realativ einfach ein Topic absetzen können.

Alternativ hänge deinen Code mit laufendem MQTT-Client mal als Anlage drann.

Gruß
Pf@nne
FHEM auf: DS415+ (Master), Raspberry Pi 2

lenoxef

Hallo Pf@anne,

danke für deine Antwort. Ich bin fast soweit ;). Ein kleines Problem habe ich gerade bei der Formatierung des Output-Strings.

Wie bekomme ich das hier:

for( i = 8; i > 0; i--) { // kopiert die einzelnen Stellen auf Temp-Variablen
     if (i=8) {STELLE[1] = addr[7];}
     if (i=7) {STELLE[2] = addr[6];}
     if (i=6) {STELLE[3] = addr[5];}
     if (i=5) {STELLE[4] = addr[4];}
     if (i=4) {STELLE[5] = addr[3];}
     if (i=3) {STELLE[6] = addr[2];}
     if (i=2) {STELLE[7] = addr[1];}
     if (i=1) {STELLE[8] = addr[0];}

// Kontrolle der einzelnen Stellen auf "Zweistelligkeit" wenn Ein-Stellig dann füge führende Null hinzu...
  if (STELLE[1] <= 0xF){Serial.print("0");}     // Fuehrende Null erzeugen
  Serial.print(STELLE[1], HEX);                 // Segment ausgeben
  //Serial.print(":");                         // ":" zwischen den Segmenten einfügen
  if (STELLE[2] <= 0xF){Serial.print("0");}     // Fuehrende Null erzeugen
  Serial.print(STELLE[2], HEX);                 // Segment ausgeben
  //Serial.print(":");                         // ":" zwischen den Segmenten einfügen
  if (STELLE[3] <= 0xF){Serial.print("0");}     // Fuehrende Null erzeugen
  Serial.print(STELLE[3], HEX);                 // Segment ausgeben
  //Serial.print(":");                         // ":" zwischen den Segmenten einfügen
  if (STELLE[4] <= 0xF){Serial.print("0");}     // Fuehrende Null erzeugen
  Serial.print(STELLE[4], HEX);                 // Segment ausgeben
  // Serial.print(":");                        // ":" zwischen den Segmenten einfügen
  // Serial.setCursor(0,2);                    // ":" zwischen den Segmenten einfügen
  if (STELLE[5] <= 0xF){Serial.print("0");}     // Fuehrende Null erzeugen
  Serial.print(STELLE[5], HEX);                 // Segment ausgeben
  // Serial.print(":");                         // ":" zwischen den Segmenten einfügen
  if (STELLE[6] <= 0xF){Serial.print("0");}     // Fuehrende Null erzeugen
  Serial.print(STELLE[6], HEX);                 // Segment ausgeben
  // Serial.print(":");                         // ":" zwischen den Segmenten einfügen
  if (STELLE[7] <= 0xF){Serial.print("0");}     // Fuehrende Null erzeugen
  Serial.print(STELLE[7], HEX);                 // Segment ausgeben
  // Serial.print(":");                         // ":" zwischen den Segmenten einfügen
  if (STELLE[8] <= 0xF){Serial.print("0");}     // Fuehrende Null erzeugen
  Serial.print(STELLE[8], HEX);                 // Segment ausgeben
  Serial.print(" ");


in ein Format welches ich mit

client.publish("outTopic", msg);

ausgeben kann?

mfg
lenoxef

digiart

Hallo!

Ich bin bei einem ähnlichen Vorhaben, nur kommen bei mir die Daten von einer RFID-Karte.
Nach der Installation und Einrichtung des MQTT-Brokers legst du zuerst ein MQTT-Device an:define mqtt MQTT 127.0.0.1:1883
attr mqtt room MQTT


Dann habe ich eine MQTT_BRIDGE definiert:define mqtt_Kartenleser MQTT_BRIDGE Kartenleser
attr mqtt_Kartenleser IODev mqtt
attr mqtt_Kartenleser publishState fhem_sub/0/kartenleser
attr mqtt_Kartenleser room RFID
attr mqtt_Kartenleser stateFormat transmission-state
attr mqtt_Kartenleser subscribeSet fhem/0/kartenleser/set

wobei fhem/0/kartenleser/set
das Topic ist, über das des ESP sendet.
Danach habe ich noch einen Dummy definiertdefmod Kartenleser dummy
attr Kartenleser room RFID

In dessen state kommt automatisch das Payload aus der MQTT_BRIDGE rein.

Für die Rückmeldung habe ich HTTP oder auch MQTT vorgesehen, da arbeite ich noch daran. Ausserdem muss ich erst rausfinden, wie ich am komfortabelsten eine Liste mit den genehmigten Karten warten kann.
Anfragen ausserhalb der Threads (PN, Mail o.ä.) werden ignoriert!

lenoxef

Hallo digiart,

das ist erst der nächste Schritt, aber das hätte ich somit auch als nächstes gefragt.. Mein Problem liegt noch auf Arduino Seite. Im SerialMoniotor sieht alles gut aus, aber da wird der Strin Zeichen für zeichen hintereinander geschrieben. Aktuell erfolgt die Ausgabe mit:

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


Ich suche jetzt nach einer Möglichkeit, die einzelnen "addr[0..7]" in einen String namens "msg" zu packen und dann mittels

client.publish("outTopic", msg);

zu senden.


digiart

Hi!

Hatte ein ähnliches "Problem" mit der MAC-Adresse, da ich den AccessPoint-Namen im Falle einer Nicht-Konfiguration des WiFi aus der MAC-Adresse generiere.
Dazu habe ich folgenden Code:

String print_hex(int val){
  char str[2];
  sprintf(str,"%02x",val);
  return str;
}

  MAC_Addr = "";
  WiFi.macAddress(MAC_array);
  for (int i = 0; i < sizeof(MAC_array); ++i){
    MAC_Addr += print_hex(MAC_array[i]);
    if (i < (sizeof(MAC_array)-1)) {
      MAC_Addr += ":";
    }
  }
  MAC_Addr.toUpperCase();

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

lenoxef

 :) :) :) :)
Perfekt!!

sprintf(str,"%02x",val);

das hat mir gefeht!

So siehts jetzt aus..

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

sprintf (msg, "%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", msg);


und funktioniert. Jetzt gehts weiter zu Fhem. Also zu deiner vorherigen Antwort.. DANKE

lenoxef

Jetzt bräuchte ich pf@nnes auszug aus der cfg..

mittels

"mosquitto_sub -d -t outTopic" in putty bekomme ich

Client mosqsub/15209-raspberry received PUBLISH (d0, q0, r0, m0, 'outTopic', ... (16 bytes))
32a79fb601000013


angezeigt. Wie muss die definition in Fhem aussehen?

mit define MyBroker MQTT 192.168.8.55:1883
define mqtt_iButton MQTT_BRIDGE iButton
attr mqtt_iButton IODev MyBroker
attr mqtt_iButton publishState mosqsub/11839-raspberry
attr mqtt_iButton room iButton Reader
attr mqtt_iButton stateFormat transmission-state
attr mqtt_iButton subscribeSet mosqsub/11839-raspberry/outTopic

defmod iButton dummy
attr iButton room iButton Reader


gehts jedenfalls nicht.

Pf@nne

Zitat von: lenoxef am 20 Februar 2017, 20:44:08
angezeigt. Wie muss die definition in Fhem aussehen?

Nimm einen MQTT_DEVICE nicht eine MQTT_BRIDGE

define mqtt_iButton MQTT_DEVICE
attr mqtt_iButton IODev MQTT_Broker
attr mqtt_iButton stateFormat state
attr mqtt_iButton subscribeReading_ID outTopic


Das reading ID sollte jetzt durch das Topic "outTopic" gefüllt werden

EDIT:
attr mqtt_iButton stateFormat ID
zeigt die ID dann auch als state an
FHEM auf: DS415+ (Master), Raspberry Pi 2

lenoxef

was lange währt wird endlich gut...

Vielen Dank an alle Beteiligten. Es funktioniert.. Die weitere Verwendung in Fhem bekomme ich sicher allein hin. Wenn interesse an dem Arduino-Code besteht, häng ich ihn gern hier an.

mfg
lenoxef

der-Lolo

Hey lenoxef, Kannst du angaben zur Performance machen? Mich würde interessieren wie lange fhem brauchen würde um z.b. das Gartentor zu öffnen...

lenoxef

Hallo Lolo,

ich würde sagen die Reaktionszeit im Pfad iButton->ESP8266(NodeMCU)->WLAN->Lan->Raspi->Fhem ist gefühlt kleiner 1s. Wenn ich einen iButton an den "Reader" halte wird das sofort in FHEM angezeigt. Was du danach noch an Aktorik hast, kann ich natürlich nicht sagen.

Gruß
lenoxef

blade-of-fire

Hallo lenoxef,

da ich zur Zeit mit ConfigurableFirmata und Arduino Nano mit meinen iButtons per owx nicht wirklich glücklich bin (https://forum.fhem.de/index.php/topic,59630.15.html), klingt das hier nach einer alternative, die iButtons abzufragen.
Du hattest ja schon angeboten, den Sketch zu posten. Ich würde das Angebot gerne annehmen.
Bin bei der Arduino-Programmierung noch sehr neu, will mich da aber mehr einarbeiten.

Danke schonmal.
VM mit Ubuntu und FHEM-Instanz (Hauptinstanz)
FHEM2FHEM
Raspberry Pi 3 B+ mit Eigenbau-Platine + Relais-Platine + Cul-Stick + FHEMDuino

Spielmann

Hallo zusammen,
blade-of-fire spricht mir aus der Seele. Ich steuere seit einem Jahr mit der ConfigurableFirmata und Arduino Mega unsere Hoftankstelle (20 x iButtons). Ich weiß nicht, wie oft ich schon neu durchgestartet habe, da die Verbindung zum Arduino mal wieder streikt. Auf der Suche nach etwas Stabileren bin ich mit Interesse auf diesen Thread gestoßen.
Ich wäre auch an dem Sketch interessiert. Evtl. könnte ich noch zur Code- KM-Stand-Eingabe einen Tastenblock und LED Anzeige per I2C einbinden (http://www.esp8266-projects.com/2016/02/mailbag-4x4-matrix-keyboard-for-esp8266.html). Mal schauen wie ich mich in die Arduino Programmierung einarbeiten kann.

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

Kein Problem, ich hänge den Sketch heute Abend hier an. Erwartet aber nichts all zu Spektakuläres.

Der Betreff dieses Beitrags lautet ja "[...] Fhem und zurück.." Ein Display, Buttons und ggf RGB-LEDs sind meienrseits auch geplant. Vieleicht ist ja einer von euch schneller oder hat schon was passendes was man mit meinem Sketch kombinieren kann.

Gruß
lenoxef

blade-of-fire

Super, ich freue mich drauf. Meist braucht man ja nur einen Denkanstoß, den man dann fortführen kann :)

@Spielmann: Es ist doch immer schön zu lesen, dass man nicht der einzige ist, der gewisse Probleme hat :)
Bei meinem Digitalen Schlüsselbrett soll dann später auch noch ein kleines LCD eine Willkommensnachricht und wichtige Infos anzeigen.

Grüße,
Blade
VM mit Ubuntu und FHEM-Instanz (Hauptinstanz)
FHEM2FHEM
Raspberry Pi 3 B+ mit Eigenbau-Platine + Relais-Platine + Cul-Stick + FHEMDuino

lenoxef

Das ist am Ende auch mein Vorhaben. Eine kleine Box mit einem 2004 LCD Display, dem iButton-Reader, ein paar Tastern zB. für das Garagentor und ein paar LEDs für diverse Zustände zB. Alarmanlage, Müllabfuhr, nicht alle Fenster geschlossen, usw.. eben Dinge, die man sehen soll, ohne auf dem Display lesen zu müssen.

Wie hast du dir dein "digitales Schlüsselbrett" vorgestellt? Vieleicht gehen die Pläne in die selbe Richtung.

Gruß
lenoxef

digiart

Einen iButton-Reader habe ich auch noch in der Art geplant und in meiner Warteliste. Als Kontaktfläche habe ich dieses Teil (https://de.aliexpress.com/item/2Pcs-Sample-DS9092-Magnetic-iButton-Probe-Reader-2pcs-1990a-f5-IBUTTON/32698056449.html?spm=2114.13010608.0.0.DCS1BC). Das war eines der wenigen Teile, die auch wirklich magnetisch sind, sodass die iButtons (https://de.aliexpress.com/item/5pcs-Ibutton-DS1990A-F5-TM1990-with-magnetic-magnet-ring-Red-handle/32634181902.html?spm=2114.13010608.0.0.ovrVOI) auch haften bleiben.
Das kommt aber dann in Bearbeitung, wenn der Kartenleser vollständig "abgefertigt" ist.

Die Idee zum iButton-Schlüsselboard ist mir gekommen, nachdem ich es in einem englischsprachigen Blog gelesen habe, den ich aber leider nicht mehr finde...
Anfragen ausserhalb der Threads (PN, Mail o.ä.) werden ignoriert!

blade-of-fire

Zitat von: lenoxef am 21 Februar 2017, 12:17:44
Wie hast du dir dein "digitales Schlüsselbrett" vorgestellt? Vieleicht gehen die Pläne in die selbe Richtung.

Das Schlüsselbrett an sich ist soweit schon fertig und Benutzbar (siehe Bild).
Ich verwende einen Arduino Nano mit ConfigurableFirmata drauf.
Daran angeschlossen sind die beiden iButtons per Onewire und jeweils RGB-Leds, Bewegungsmelder und eine Relaisplatine.
Der Knuppel rechts neben dem IButton ist der Bewegungsmelder. Die iButtons leuchten nur auf, wenn Bewegung detektiert wird. Bei uns im Flur ist es recht dunkel, daher hängt an der Releaisplatine ein LED-Stripe.
Die beiden iButtons habe ich jeweils an getrennte GPIOs des Nano angeschlossen, damit ich weiss, an welchem Reader der entsprechende Button angeschlossen ist. FHEM schaltet je nachdem, wo der jeweilige iButton angeschlossen wird die entsprechende Farbe des iButtons.
Wenn kein iButton angehängt wird, blinken die Reader weiss.

@digiart:
Ich würde folgende iButton Reader empfehlen (http://www.fuchs-shop.com/de/shop/16/1/13372377/). Diese sind zwar etwas teurer als die von Ali, allerdings kann ich bestätigen, dass sie auch einen Schlüsselbund mit vielen Schlüssel ohne Probleme halten. Außerdem ist die Lieferung innerhalb von 2 Tagen da ;)
VM mit Ubuntu und FHEM-Instanz (Hauptinstanz)
FHEM2FHEM
Raspberry Pi 3 B+ mit Eigenbau-Platine + Relais-Platine + Cul-Stick + FHEMDuino

tomster

Zitat von: digiart am 21 Februar 2017, 13:44:55
Die Idee zum iButton-Schlüsselboard ist mir gekommen, nachdem ich es in einem englischsprachigen Blog gelesen habe, den ich aber leider nicht mehr finde...

Die ganzen Teile habe ich auch noch rumliegen, weil ich mir vor ein paar Jahren auch ein digitales Schlüsselboard bauen wollte. Bei mir ist es letztendlich daran gescheitert, dass der Magnet am Leser nicht "stark" genug war, um meinen Schlüsselbund zu halten. OK, der ist nicht ganz leicht (~10 Schlüssel), aber der Halter war leider nicht zuverlässig genug. Schlüssel der Kinder sind aber kein Problem gewesen. Ungünstigerweise hat der iButton noch diese angewinkelte Plastiklasche, die den "Hebel" des Gewichts in einen für den Anwendungsfall ungünstigen Vektorwinkel bringt. Sprich: Nach einiger Zeit (oder bei "schlampigem" Hinhängen der Nachbarschlüssel) fällt der Schlüsselbund einfach runter. Einen magnetischen iButton mit grader Lasche hatte ich nicht finden können.

Wenn ihr jetzt aber mit einem "fertigen" Sketch für den ESP um die Ecke kommt, dann geh ich die Sache nochmal an. Und wenn's nur dafür ist, dass die Teile nun endlich benutzt werden könnten, auch wenn sie's gar nicht werden ;-)

--edit--
Zitat
Ich würde folgende iButton Reader empfehlen (http://www.fuchs-shop.com/de/shop/16/1/13372377/). Diese sind zwar etwas teurer als die von Ali, allerdings kann ich bestätigen, dass sie auch einen Schlüsselbund mit vielen Schlüssel ohne Probleme halten. Außerdem ist die Lieferung innerhalb von 2 Tagen da ;)

Bei dem ist aber der Magnet auf der iButton-Seite, oder? Das wollte ich vermeiden, weil ich die Befürchtung hatte, dass der blöde Magnet dann dauernd an den Schlüssel selbst "klebt"...


blade-of-fire

Zitat von: tomster am 21 Februar 2017, 14:37:20
Bei dem ist aber der Magnet auf der iButton-Seite, oder? Das wollte ich vermeiden, weil ich die Befürchtung hatte, dass der blöde Magnet dann dauernd an den Schlüssel selbst "klebt"...
Ja, der Magnet ist am iButton. Der Magnet "klebt" auch ein wenig an den Schlüsseln, aber kaum merklich. Ich musste eben gerade den Schlüssel aus der Hosentasche fischen, um zu schauen, ob das wirklich der Fall ist, weil es mir bis jetzt gar nicht aufgefallen ist ;)
VM mit Ubuntu und FHEM-Instanz (Hauptinstanz)
FHEM2FHEM
Raspberry Pi 3 B+ mit Eigenbau-Platine + Relais-Platine + Cul-Stick + FHEMDuino

tomster

Danke für diesen "Erfahrungsbericht". Dann ist die Lösung iButton magnetisch wohl der bessere Ansatz bei schweren Schlüsselbündern.
Auch wenn ich gedanklich bereits auf presence über meinen Unifi-Accesspoint und die SmartPhones der Familienmitglieder umgeschwenkt bin (die sind nämlich ausnahmslos und zu 113% immer dabei, wenn sie das Haus verlassen).
Ich möchte aber damit keine Zutrittskontrolle oder so realisieren. Bei mir dient das ganze Anwesenheits-Gedöns einzig und allein dazu, die ganzen unnötigen Stromverbraucher abzuschalten, wenn das haus verlassen wird. Meine werte Familie hat dafür nämlich keinen nennenswert ausgeprägten Sinn. Die zahlen aber auch die Strom-/ Heizungsrechnung nicht ;-)

blade-of-fire

Sehr gerne.
Das mit den Smartphones mache ich bisher auch so und das werde ich wahrscheinlich als Redundanz weiterhin verwenden. Allerdings gibt es da ein Problem. Iphones zum Beispiel schalten ihr WLan bei nicht Benutzung standardmäßig ab. Eine Fritzbox zum Beispiel weiss dann gar nicht, dass das Handy eigentlich anwesend ist. Ich befürchte, dass Android und Co irgendwann auf den Trichter kommen, dass das ein ganz tolles Feature ist und schon funktioniert das Ganze nicht mehr.
Außerdem kommt es ja auch mal vor, dass das Smartphone ausgeht, weil der Akku leer ist. Ich habe dann eigentlich keine Lust, dass die Heizung und der Fernseher abgeschaltet wird, weil meine Hausautomation denkt, ich wäre nicht mehr zuhause ;)
Daher habe ich mir rechtzeitig eine alternative gesucht. Ich betreibe das alles auch mehr aus Gründen der Energieersparnis (30%) bzw. Faulheit (20%) bzw. Spaß am basteln (50%) ;)
VM mit Ubuntu und FHEM-Instanz (Hauptinstanz)
FHEM2FHEM
Raspberry Pi 3 B+ mit Eigenbau-Platine + Relais-Platine + Cul-Stick + FHEMDuino

lenoxef

Das Foto des digitalen Schlüsselbretts zeigt mir, daß ihr die Buttons dauerhaft am "Brett" haben wollt um damit die Anwesenheit zu erfassen. Da ich mit den Buttons (noch) keine Anwesenheit erfassen möchte sendet mein Sketch bei aufgelegtem Chip jede Sekunde die ID...ist kein Chip aufgelegt, sendet er nichts.. aber das könnt ihr sicherlich auf eure Bedürfnisse anpassen. Aber die Idee gefält mir. Ich werde mal sehen was der WAF sagt. Meine "Reader" sind im übrigen auch nicht magnetisch.

Sobald ich Zuhause bin, bekommt ihr den Code.

blade-of-fire

Das sollte kein Problem sein.
Parallel zu den stationären iButtons habe ich noch 2 weitere, die schräg abgewinkelt sind. Diese werde ich dann vielleicht auch noch verwenden für so Spielereien wie ("mit dem Motorrad unterwegs").
VM mit Ubuntu und FHEM-Instanz (Hauptinstanz)
FHEM2FHEM
Raspberry Pi 3 B+ mit Eigenbau-Platine + Relais-Platine + Cul-Stick + FHEMDuino

lenoxef

So, hier der Code.

blade-of-fire

Vielen Dank.
Ich muss jetzt leider erstmal auf Hardware warten. Ich habe mir auch ein ESP8266 bestellt :)
VM mit Ubuntu und FHEM-Instanz (Hauptinstanz)
FHEM2FHEM
Raspberry Pi 3 B+ mit Eigenbau-Platine + Relais-Platine + Cul-Stick + FHEMDuino

lenoxef

Ging schneller als gedacht. Hab meinen Code noch mit dem hier https://blog.moneybag.de/fhem-mit-led-statusanzeige-led-stripe-wd2812b-esp-8266/ kombiniert. Jetzt werden die iButtons eingelesen und ich kann über {myLEDSend("blau","6,0,0,255");;} zum Beispiel die 6. RGB-LED auf Blau schalten..

Nochmal was zur Performance: Ich habe nun über zwei Notifys eine LED mit zwei Buttons ein und ausschalten lassen. Das Einlesen geht quasi sofort... der eingelesene Button ist sofort in Fhem sichtbar. Das schalten der LEDs dauert ca 1s.

Wenn jetzt noch jemand nen Codeschnipsel hat um aus FHEM herraus Nachrichten über ein 2004er LCD anzeigen zu lassen...


lenoxef

Hallo pah,

mein Display ist per I2C am NodeMCU.. nicht am Raspberry. Deine Links helfen mir da leider nicht. Oder habe ich das was falsch verstanden? Die Funktion die die ESPEasy Firmware bietet wäre ideal. Ich habe gerade die ESPEasy Firmware in der Arduino IDE offen, der benötigte Teil liegt dort als Plugin min dem Namen "_P012_LCD" vor. Leider reichen meine Programmierkenntnisse nicht aus um dieses Plugin mit meinen Sketsch zu kombinieren.

Gruß
lenoxef

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

jankir

Bist du hier weitergekommen? Ich stehe vor genau dem gleichen Problem..

eppi

Zitat von: jankir am 19 November 2018, 16:02:43
Bist du hier weitergekommen? Ich stehe vor genau dem gleichen Problem..
Nein, der Entwickler hat sich nicht gemeldet, auch im EspEasy Forum nicht...

eppi