Hallo Zusammen,
ich möchte einen ESP8266 an FHEM anbinden.
Ich hab schon einiges über ESPEasy und MQTT gelesen und sehe die Vorteile,
möchte es aber über WLAN Client und einen Dummy machen, Beispiel sieht so simple aus.
define MEINDEVICE dummy
#include "ESP8266WiFi.h"
const char* server = "192.168.1.1"; // FHEM Server
const int serverport = 8083;
const char* ssid = "MEINE_WLAN_SSID";
const char* passwort = "MEIN_WLAN_PASSWORT";
WiFiClient client;
unsigned long bewegung = 0;
void setup() {
Serial.begin (9600); // Monitor starten
Serial.println(" ");
Serial.print("Verbindungsaufbau mit: ");
Serial.println(ssid);
WiFi.begin(ssid, passwort);
while (WiFi.status() != WL_CONNECTED) {
Serial.print(".");
delay(100);
}
Serial.println(" ");
Serial.println("WLAN verbunden!");
Serial.println("IP Addresse: ");
Serial.println(WiFi.localIP());
}
void loop() {
WiFiClient client;
if (!client.connect(server, serverport)) {
Serial.println("Verbindungsfehler");
return;
}
// Daten per GET senden
String url = "/fhem?";
url += "cmd.MEINDEVICE=";
url += "set%20MEINDEVICE%20on";
Serial.println(url);
client.print(String("GET ") + url + " HTTP/1.1\r\n" +
"Host: " + server + "\r\n" +
"Connection: close\r\n\r\n");
delay(50);
// Server-Antwort ausgeben
while(client.available()){
String antwort = client.readStringUntil('\r');
Serial.print(antwort);
}
delay(1000);
}
Soweit so gut, allerdings bekomme ich nun in FHEM eine Fehlermeldung:
ZitatFHEMWEB WEB CSRF error: ne csrf_270651098521039 for client WEB_xxx
und am Client die Meldung:
Zitat
06:18:08.184 -> /fhem?cmd.Bewegung=set%20Bewegung%20on
06:18:08.219 -> HTTP/1.1 400 Bad Request
06:18:08.219 -> Content-Length: 0
06:18:08.254 -> Cache-Control: no-cache, no-store, must-revalidate
06:18:08.289 -> X-FHEM-csrfToken: csrf_270651098521039
06:18:08.359 -> Content-Type: text/html; charset=UTF-8
Wie muss ich mein Beispiel anpassen?
Danke im Voraus
Knut
Das ist ein Sicherheits-Feature bzgl. csrf: https://wiki.fhem.de/wiki/CsrfToken-HowTo
EDIT: hätte sich leicht finden lassen, wenn danach gesucht worden wäre ;)
D.h. entweder deaktivieren: NICHT RATSAM!
Oder fixen Token bei einem extra FhemWeb NUR DAFÜR: schon besser... Und u.U. noch einschränken auf bestimmte IP etc.
Oder: eben etwas im ESP programmieren den aktuellen Token zu bekommen und dann eben entsprechend mit übergeben...
EDIT: ist im Wiki ja "prinzipiell" beschrieben...
Oder ganz andersrum: ESP mit einem WebServer-Beispiel "bestücken" und dann per HTTPMOD den ESP "abfragen"...
EDIT: oder eben doch anders einbinden ;)
Gruß, Joachim
Wenn man immer wüsste was man suchen muss.
Danke.
Ich hab einfach den csrf-Fehler aus deinem Log-Auszug in Google eingekippt...
Und schwupp: kam der Link zum csrf-Token-Wiki... ;)
Und, für welche Variante hast du dich entschieden?
Gruß, Joachim
Ja, so hab ich das auch gemacht,
aber anscheinend habe ich vor lauter Antworten die Lösung nicht gesehen.
Ich habe die Variante mit der API gewählt.
Danke
Knut
Nachtrag.
Die Sache über Wlan war mir auf Dauer nicht flexibel genug,
hab auf MQTT2 umgestellt.
Nach einigen Anlaufschwierigkeiten nun super zufrieden.
Grüße
Knut