esp8266 als Taster für FHEM

Begonnen von Kharim, 05 Januar 2017, 21:13:21

Vorheriges Thema - Nächstes Thema

Pfriemler

So, mein Button läuft auch, in zweifacher Ausführung (habe zwei NodeMCUs).

Im Sketch habe ich insgesamt folgende Änderungen vorgenommen (Zeilen auskommentiert ergänzt):

//  if ((resetInfo->reason) == 6)Ziklus[0] = 0;         // Wenn Spannung OFF // auskommentiert für Probenphase - Stromausfall soll keinen Reset herbeiführen
  if (Ziklus[0] > 32766) Ziklus[0] = 0;         // Wenn Ziklus zu groß, dann zurücksetzen

Dies sorgt dafür, dass bei einem Stromreset der Ereigniszähler nicht zurückgesetzt wird, sondern erst wenn er über einen bestimmten Wert steigt. Default sind die Buttons mit einem recht hohen Zähler belegt, der wird sich also als erstes zurücksetzen.
Dieser Schritt ist aber komplett optional.

Dann die Nachricht angepasst:

//  url = url + "UBatt=" + Ubatt;      //Parameter Bat Spannung
//  url = url + "&WachNr=" + String(Ziklus[0] - 1); //Aufwachzyklus
//  url = url + "&Empfang=" + String(rssi); //Parameter Signalstärke
//  url = url + "&Nachricht=" + urlencode(nachricht);
nachricht.replace("#B#",Ubatt);
nachricht.replace("#Z#",String(Ziklus[0]-1));
nachricht.replace("#R#",String(rssi));
url = url + "/fhem?cmd=" + urlencode(nachricht);


Im Web-Setup des Buttons trage ich ein: SSDI, Passwort, URL (z.B. "192.168.178.83:8087" - das ist meine FHEMWEB-Instanz für den Button) und als Nachricht:
set EB1 on;setreading EB1 eventnr #Z#;setreading EB1 rssi #R#;setreading EB1 batterylevel #B#
im zweiten Button alles entsprechend für EB2.

Der Sketch ersetzt dann die #x#-Tags durch die entsprechenden Werte für Eventnummer, RSSI und Batterielevel. Wenn man es nicht (mehr) mag, rekonfiguriert man den Button und lässt es weg.

In FHEM habe ich zunächst eine weitere Webinstanz definiert:
define WEBButton FHEMWEB 8087 global
attr WEBButton hiddenroom input,detail,save


und dieser eine eigene allowed-Instanz spendiert:
define allowed_MyESPButton1 allowed
attr allowed_MyESPButton1 allowedCommands set,setreading
attr allowed_MyESPButton1 allowedDevices EB1,EB2
attr allowed_MyESPButton1 room System
attr allowed_MyESPButton1 validFor WEBButton


In FHEM habe ich einfach mit "define EB1 dummy" und define EB2 dummy" zwei Dummys definiert.

Beim Einstromen der Module verbinden diese sich mit dem WLAN, rufen im obigen Beispiel z.B. auf
192.168.178.83:8087/fhem?cmd=set+EB1+on;setreading EB1+eventnr+5;setreading+EB1+rssi+-55;setreading+EB1+batterylevel+2.56

und in FHEM sieht das dann so aus:
ZitatInternals:
   NAME       EB1
   NR         684
   STATE      on
   TYPE       dummy
   Readings:
     2017-01-09 08:36:06   batterylevel    2.56V
     2017-01-09 08:36:06   eventnr         5
     2017-01-09 08:36:06   rssi            -55
     2017-01-09 08:36:06   state           on

Nun kann man auf EB1 triggern und bedarfsweise Aktionen auslösen lassen.

Zum Umweg über die FHEMWEB-Instanz:
JA, es geht offenbar doch über user:password@<url>. Ich habe mich da wohl vertippt.
Damit kann man sich die ganze Arbeit mit FHEMWEB und allowed sparen. Dann muss man aber auch damit leben, dass das user:admin in der URL verfrachtet klarschriftlich lesbar ist und von jedem, der den Button findet und das Verfahren dahinter kennt, ausgelesen werden kann.
Freilich nicht, wenn man den Sketch so frisiert wie Otto... das geht natürlich auch. Aber dann MUSS man rekompilieren, wenn sich das Passwort von FHEM mal ändert.
Mit meiner Methode lassen sich weitere Buttons mit dem gleichen Binary und ggf. erforderlichen Änderungen in FHEM (Hinzufügen neuer Dummys und Notifys) einpflegen.

Vielleicht hat ja jemand Lust zum Nachbau ...

Der Nutzen der NodeMCUs für diesen Zweck ist natürlich sehr begrenzt, Schlaf findet nicht statt, weil auf dem Board noch genug anderes Geraffel am Saugen ist. Aber den Chip per Knopf einzustromen und solange gedrückt zu halten, bis das Blinken aufhört, tut es ja nötigenfalls auch. Natürlich ist ein echter ESP8266-01 oder -07 besser dafür geeigent. Aber die Lieferfristen überbrückt der NodeMCU erst mal ...








"Änd're nie in fhem.cfg, denn das tut hier allen weh!" *** Wheezy@Raspi(3), HMWLAN+HMUART, CUL868(SlowRF) für FHT+KS+FS20, miniCUL433, Rademacher DuoFern *** "... kaum macht man es richtig, funktioniert es ..."

Kharim

Na das klingt ja sehr gut :-)
Werde versuchen es am WE nachzubauen....

Danke,
Kharim
Raspberry Pi 2 + Minibian + 2x MAX Cube CUN (868/433Mhz) + Thermostate + Fensterkontakte + Taster+RGB-LED Band über pigpiod + TFA Sensoren 30.3169/3125
Raspberry Pi 2 + Minibian +Z-Wave (USB) + Bewegungsmelder + Fensterkontakt + Sirene + SMS Steuer-/Benachrichtigung (ohne Internet)