[gelöst] Dummy über Wlan ansprechen

Begonnen von KNUT345, 23 Mai 2021, 16:09:25

Vorheriges Thema - Nächstes Thema

KNUT345

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

MadMax-FHEM

#1
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
FHEM PI3B+ Bullseye: HM-CFG-USB, 40x HM, ZWave-USB, 13x ZWave, EnOcean-PI, 15x EnOcean, HUE/deCONZ, CO2, ESP-Multisensor, Shelly, alexa-fhem, ...
FHEM PI2 Buster: HM-CFG-USB, 25x HM, ZWave-USB, 4x ZWave, EnOcean-PI, 3x EnOcean, Shelly, ha-bridge, ...
FHEM PI3 Buster (Test)

KNUT345

Wenn man immer wüsste was man suchen muss.
Danke.

MadMax-FHEM

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
FHEM PI3B+ Bullseye: HM-CFG-USB, 40x HM, ZWave-USB, 13x ZWave, EnOcean-PI, 15x EnOcean, HUE/deCONZ, CO2, ESP-Multisensor, Shelly, alexa-fhem, ...
FHEM PI2 Buster: HM-CFG-USB, 25x HM, ZWave-USB, 4x ZWave, EnOcean-PI, 3x EnOcean, Shelly, ha-bridge, ...
FHEM PI3 Buster (Test)

KNUT345

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

KNUT345

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