Hallo Zusammen,
hat zufällig schon einmal jemand einen esp8266 als Taster in FHEM eingebunden?
Ich habe diese nach - http://www.mikrocontroller-elektronik.de/wlan-notruftaster-mit-dem-esp8266-modul/ - geflasht und erfolgreich die WLAN Daten eingegeben.
Ebenso eine FHEM set Adresse, wie sie aus dem WLAN heraus funktioniert.
->http://192.168.100.30:8083/fhem?cmd=set%20Button1%20on%20&
Laut Log der FritzBox logt sich der Chip ein und 2 Sekunde später auch wieder aus.
Blinkcode der blauen LED sagt - Verbindung und HTTP Aufruf ok
Aber im FHEM passiert rein gar nichts -_-
Wo liegt das Problem?
Danke,
Kharim
Spontane Idee: Du verwendest auf 8083 sicher Benutzernamen und Passwort - die sendet Dein Button aber nicht mit, wenn Du das so eingibst.
Leider ist das auch nicht so einfach:
https://forum.fhem.de/index.php/topic,9420.msg52008.html#msg52008 (https://forum.fhem.de/index.php/topic,9420.msg52008.html#msg52008)
Alternativ einen eigenen Webport aufmachen, kastrieren und nur für sowas nutzen. Aber "set" zu erlauben öffent schon wieder ganz viele Scheunentore...
Verdammt, ja ich hatte Benutzer und Passwort vergessen.
Leider geht es auch mit Nutzer:PW@192...... nicht :-(
Was meinst du mit Webport aufmachen und kastrieren?
Lies mal Doku (commandref) zu FHEMWEB. Default sind 8083-8085 definiert. Je Port können Räume ausgeblendet (würde ich hier komplett machen) und Kommandos begrenzt werden, z.B hier ausschließlich "set". Kein Passwort setzen. Ist kein Schutz, jeder kann list und alle sets machen der auf den Port kommt. Für hausinterne Skriptkiddies also nicht geeignetes...
Vielleicht gibts noch was besseres.
via Tapatalk
Hallo Kharim,
ich habe den Sketch mal ausprobiert. Ich versteh den noch nicht richtig. Aber ich befürchte der Code ist so nicht dafür zu gebrauchen :-[
Ich habe folgendes gemacht:
Ich habe ein ESP12F Entwicklungsboard genommen.
Da mir die Sache mit dem Setup und dem kreuzen der Seriellen Pins dabei zu kompliziert war, habe ich einfach alles direkt in den Sketch geschrieben:
In die Zeile
WiFi.begin(ssid, passwort);
habe ich meine Zugangsdaten reingeschrieben
In die Zeile url = url + "&Nachricht=" + urlencode(nachricht);
habe ich
url = "http://192.168.178.83:8083/fhem?cmd=set%20SD3%20toggle%20&";
Jetzt geht beim drücken der Taste meine Steckdose an und aus. ;D
Die ursprüngliche Zeile und der code davor sind aus meiner Sicht nicht geeignet aus URL und Nachricht eine sinnvolle http:// nachricht zusammen zu bauen.
Also ich denke Du musst den Sketch anpassen, oder Du machst es einfach so wie ich 8)
Und die Vermutung von Pfriemler geht glaube ich in die falsche Richtung ;)
Gruß Otto
Otto, was meinst Du damit? Meine Vermutung, dass es eine Authentifizierung braucht?
Natürlich ist mein Lösungansatz falsch, wie ich gerade feststellen muss. Denn die Authentifizierung ist ja nicht mehr bei FHEMWEB, sondern bei "allowed"-Instanzen.
Trotzdem würde ich eine zweite FHEMWEB-Instanz anlegen.
Also, Kharim, mein Vorschlag:
define WEBButton FHEMWEB 8086 global
attr WEBButton hiddenroom input,detail,save
## 8083-8085 sind ja schon belegt, ggf. höher
attr WEBButton hiddenroom input,detail,save
## mit hiddenroom input,detail,save werden bereits viele Aktionen auf dieser Seite unmöglich.
## zusätzlich vielleicht noch alle bekannten Räume listen - neue Räume tauchen dann aber dort wieder auf
define allowed_MyESPButton1 allowed
attr allowed_MyESPButton1 validFor WEBButton
attr allowed_MyESPButton1 allowedCommands set
attr allowed_MyESPButton1 allowedDevices Button1
## <- das ist der Name Deines Dummys, den du schalten willst, ggf. anpassen.
Ich habe das eben mal ausprobiert - man kann noch viel sehen, aber schalten geht wirklich nur noch Button1, kein save, kein set auf andere Geräte.
Wenn man mehrere Dummys schalten will, kann man die bei allowedDevices ergänzen.
Und zum Kommando des ESP8266:
Natürlich ist die Komposition aus dem Demo mit dem "&Nachricht=" nur passend für Empfangsseiten, die das Tag "Nachricht" erwarten.
Kharim hat aber http://192.168.100.30:8083/fhem?cmd=set%20Button1%20on%20& definiert, das klappt prima.
edit: Ja, nee ... wenn man das in das WEBsetup eingibt, gehts natürlich nicht. Das Composing ist ... wie Otto schon sagt, natürlich falsch, bzw. anpassungsbedürftig.
Kharim muss dann allerdings, wenn er meinem Vorschlag folgt, die 8083 in 8086 ändern.
edit: und im Sketch ändern (die vier Zeilen auskommentieren und die fünfte ergänzen):
Zitat
// 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);
url = url + "/fhem?cmd=" + urlencode(nachricht);
Dann müsste man im Setup als "<ip>:port" und als Nachricht "set Button1 on" oderwasauchimmer eingeben.
IDEE: für besser hielte ich, nur einen definierten Dummy zu besetzen und einen ganzen Befehlssatz zu schicken, der auch gleich Batteriespannung, WachNr und WLAN-rssi als Userreadings im Dummy einträgt, und auf einen geänderten Dummy mit Notify zu reagieren. Kann ja jeder machen wie er will.
Ziel der ganzen Aktion ist jedenfalls, ein authentifizierungsfreies Hintertürchen zu schaffen, weil FHEM meines Wissens solche Konstrukte wie "user:password@url" nicht unterstützt.
Ich habe noch zwei NodeMCUs hier liegen, weil ich für meine neuen Projekte doch noch auf die WEMOS warten muss, das werte ich vielleicht noch heute zusammenbacken und richtig testen.
Zuerst mit meiner 8083, und wenn das funktionert, bekomme ich das Weinen ...
Zitat von: Pfriemler am 07 Januar 2017, 18:56:01
Otto, was meinst Du damit? Meine Vermutung, dass es eine Authentifizierung braucht?
Exakt! Wenn die URL wie bei Kharim geht (und bei mir auch) dann geht es ohne. Das FHEMWEB ist doch per default offen.
Es sei denn Kharim hat es nicht offen und die credentials im Browser gespeichert.
Und ich denke es liegt (wie du auch gesehen hast) nicht an der URL sondern am Sketch. Vielleicht ist die "bin" auch anders, wollte ich nicht probieren, da ich keine blanken Module rumliegen habe.
Aber ich werde mir jetzt endlich mal welche bestellen 8)
Gruß Otto
Zitat von: Otto123 am 07 Januar 2017, 20:12:21
Exakt! Wenn die URL wie bei Kharim geht (und bei mir auch) dann geht es ohne. Das FHEMWEB ist doch per default offen.
das stimmt, aber Kharim hat auch im Post auf meine Vermutung geantwortet, dass er Benutzer und Passwort gesetzt hat, wie sich das übrigens dringend gehört ;D
ZitatUnd ich denke es liegt (wie du auch gesehen hast) nicht an der URL sondern am Sketch.
Ich denke, wir liegen beide richtig.
Da ich morgen was anderes zu tun habe, muss es jetzt liegen bleiben, aber ich plane den Sketch noch umzubauen, so dass er die ohnehin ermittelten Werte verwerten kann, etwa "set myDummy on;;setreading myDummy batterylevel ##BATT##;;setreading myDummy eventNr ##WAKENR##;;setreading myDummy rssi ##RSSI##". Die ##Tags werden dann vom Sketch aktualisiert. Dann ist der Sketch für jeden FHEMler individuell nutz- und konfigurierbar.
Generell ist die Idee eines so universellen und dabei so einfach konfigurierbaren Gerätes sowas von genial ...
ZitatAber ich werde mir jetzt endlich mal welche bestellen 8)
Vor allem diese kleinen.
Meine ich doch: die nackten Module. 8)
Es gibt beim Chinesen die kleinen LED Klebelampen mit Druckknopf Batteriefach usw für einen Euro.
Da hat man für quasi unter 5 € einen Dashbutton der nirgendwohin telefoniert.
Gruß Otto
Hallo Zusammen,
Zitat von: Otto123 am 07 Januar 2017, 17:18:36
Aber ich befürchte der Code ist so nicht dafür zu gebrauchen :-[
Das Gefühl habe ich langsam auch. Ich würde fast vermuten er hat ein Problem mit Leerzeichen in der URL....
Kannst du mir bitte (gerne auch als PM) genauer erklären wie du die Firmware verändert hast?
(Habe leider kein Entwicklungsboard - müsste also den Quellcode verändern, compilieren und flashen?!....)
Zitat von: Pfriemler am 07 Januar 2017, 18:56:01
Ziel der ganzen Aktion ist jedenfalls, ein authentifizierungsfreies Hintertürchen zu schaffen, weil FHEM meines Wissens solche Konstrukte wie "user:password@url" nicht unterstützt.
Ich habe es auch nochmal mit einem (temporär) ganz offenem Zugang versucht - selbes Ergebnis.
Also ich nutze "user:password@url" durchaus mit FHEM - funktioniert wunderbar in den gängigen Browsern.....
Also bleibt nur eine Veränderung des Quellcodes...
Moin Kharim,
die Frage wäre, wie hast Du denn jetzt geflashed?
Ich habe den Sketch in der Arduino IDE geöffnet. Kennst Du die IDE? Meine ersten Schritte (http://heinz-otto.blogspot.de/2016/10/mein-erstes-arduino-projekt.html).
Für den ESP muss man in der IDE den ESP Boardmanager installieren, das habe ich einfach aus einer Anleitung aus dem Internet z.B. hier https://arduino-hannover.de/2015/04/08/arduino-ide-mit-dem-esp8266/
Du musst deinen Flasher auswählen und die COM Schnittstelle.
Dann suchst Du im Sketch die beiden Zeilen, die ich oben erwähnt hatte.
Trägst dort alles direkt per String ein und drückst dann auf hochladen.
Gruß Otto
Ich muss gestehen, habe bisher kein Arduino in der Hand gehabt.
Vielleicht kann man das auch auf einem Pi umsetzen? (Muss ich mich mal belesen)
Geflasht habe ich über einen USB zu Serial Adapter nach: http://esp8266-server.de/index.html#Laden
Zitat von: Kharim am 08 Januar 2017, 12:51:37
Ich muss gestehen, habe bisher kein Arduino in der Hand gehabt.
Vielleicht kann man das auch auf einem Pi umsetzen? (Muss ich mich mal belesen)
Geflasht habe ich über einen USB zu Serial Adapter nach: http://esp8266-server.de/index.html#Laden
Hast Du mich eventuell falsch verstanden. hat nix mit Arduino zu tun.
Am Ende von deinem verlinkten Artikel ist es doch genau beschrieben.
Hast Du keinen Windows PC?
Gruß Otto
Otto123...ich glaub ich steh grad voll auf dem Schlauch.....
Du hast doch oben geschrieben....
------------
Du musst deinen Flasher auswählen und die COM Schnittstelle.
Dann suchst Du im Sketch die beiden Zeilen, die ich oben erwähnt hatte.
Trägst dort alles direkt per String ein und drückst dann auf hochladen.
------------
Du kannst also vor dem Flashen den Inhalt des Sketch (Programmcode) verändern - richtig?
Ich kann das bisher nicht, bzw wüsste nicht wie. Beide in dem Beitrag angesprochene Tools Esptool und XTCOM_UTIL können nur flashen, aber nicht das Image selbst öffnen um mir Änderungen zu ermöglichen......
Ich habe das bisher nur in einer Win7 VM mittels esptool flashen können.
Gruß,
Kharim
Zitat von: Kharim am 08 Januar 2017, 15:35:47
Du kannst also vor dem Flashen den Inhalt des Sketch (Programmcode) verändern - richtig?
Ich habe das bisher nur in einer Win7 VM mittels esptool flashen können.
Hi Kharim,
ganz unten in Deinem Link
ZitatArduino und ESP8266
Als nächstes kommt berechtigte Frage. Mit welchem Compiler wurde das Programm kompiliert? Mit Arduino IDE mit ESP8266 Unterstützung
Mann programmiert ESP8266 wie ein Arduino
Arduino IDE und WiFi Bibliothek
ja ok der Link geht zum github und englisch, habe ich vorhin nicht verfolgt.
Du musst den Flash mit der Arduino IDE machen, da kannst Du vorher editieren. Siehe mein Link https://arduino-hannover.de/2015/04/08/arduino-ide-mit-dem-esp8266/
Die IDE selbst gibt es hier https://www.arduino.cc/ unter downloads :)
Gruß Otto
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 ...
Na das klingt ja sehr gut :-)
Werde versuchen es am WE nachzubauen....
Danke,
Kharim