ESP8266: Befehl an FHEM absetzen

Begonnen von tndx, 25 März 2017, 23:14:37

Vorheriges Thema - Nächstes Thema

tndx

Hallo zusammen,

ich versuche mit einem ESP8266 einen Befehl an FHEM abzusetzen.

Meine Config: SSL aktiviert, Basic Authentification aktiviert.

Mein Code sieht folgendermaßen aus (nur die Stelle an der es klemmt, WLAN-Verbindungsaufbau und den Rest spare ich aus):

#include <ESP8266WiFi.h>

WiFiClientSecure client;

void setup() {
  const char* host = "192.168.1.1";
  int port         = 8083;
  int failcounter = 300;
  Serial.print("Waiting for a connection to host");
  while (!client.connect(host, port)) {
    delay(100);
    Serial.print(".");
    if (failcounter <= 0) {
      Serial.println();
      Serial.println("Giving up.");
      shutdown();
    }
    failcounter--;
  }
}


Der WLAN-Verbindungsaufbau funktioniert, zumindest sehe ich das Ding im Router und kann es auch anpingen. Es scheint auch Verbindungen zu FHEM aufbauen zu können, jedenfall wir das Logfile zugemüllt mit Einträgen wie:

2017.03.25 23:07:46 4: Connection accepted from WEB_192.168.1.17_27659
2017.03.25 23:07:46 4: Connection closed for WEB_192.168.1.17_27659: EOF

aber es kommt trotzdem keine Verbindung zustande, irgendwannmal gibt es irgendeinen Speicherüberlauf und das Ding wird mit "Soft WDT reset" resettet. Irgendeine Idee, warum "client.connect" keine funktionierende Verbindung zurückmeldet?

digiart

Vielleicht hilft dir hier etwas weiter:
https://www.arduino.cc/en/Reference/WiFi101SSLClient
https://www.arduino.cc/en/Reference/WiFi101ClientConnectSSL

Ausserdem vermisse ich irgendwie die Authentifizierung bei der Verbindungsaufnahme.
Anfragen ausserhalb der Threads (PN, Mail o.ä.) werden ignoriert!

tndx

Danke, hilft aber nicht weiter. Ich habe mir gestern viele Beispiele angeguckt und so wie es jetzt bei mir ist, müsste es grundsätzlich funktionieren, es scheint aber das entscheidende Detail im Code oder in der FHEM-Konfiguration zu fehlen.
Die Authentifizierung kommt im Übrigen erst später, wenn ich ein GET absetze, aber dafür muss eben erst die Verbindung stehen.

dev0

Schau Dir doch zB. mit Wireshark den Verbindungsaufbau an.

tndx

Zitat von: dev0 am 26 März 2017, 12:32:09
Schau Dir doch zB. mit Wireshark den Verbindungsaufbau an.

Das sagst Du so einfach  :) Mal davon abgesehen, dass ich mich mit dem Tool und den Netzwerkprotokollen nicht auskenne, wo muss ich Wireshark ausführen, damit ich mich in den Netzwerkverkehr einklinken kann (beide Beteiligte sind per WLAN angebunden)? Und erfolgt die Kommunikation bei aktiviertem SSL nicht verschlüsselt?

dev0

Ein Möglichkeit wäre einen Access Point auf einem Linuxsystem aufzusetzen, dort kannst Du mitschneiden und auch ssl traffic entschlüsseln (burp, mitmproxy, ...).

Bapt. Reverend Magersuppe

Wieso benutzt Du nicht ein fertiges Paket wie ESPeasy oder Sonoff-Tasmota?
--
If I was born in 1453, Leonardo da Vinci would be jealous of me.
Reverend Paul Egon Magersuppe
Aus versicherungstechnischen Gründen sind sämtliche Beiträge von mir rein spekulativer und theoretischer Natur und sollten nicht in die Tat umgesetzt werden!
Bin hier selten DRIN. AUS GRÜNDEN!

tndx

Zitat von: Bapt. Reverend Magersuppe am 26 März 2017, 22:43:30
Wieso benutzt Du nicht ein fertiges Paket wie ESPeasy oder Sonoff-Tasmota?

Das ist was Fertiges (c't IoT Button), läuft bei mir nur nicht...

ESPeasy werde ich mir auch noch anschauen, befürchte nur, dass es auch da nicht klappt, wenn irgendwas Grundlegendes fehlt...

tndx

Ich habe das Problem nun gelöst, dabei stand es gleich in dem c't-Artikel dabei:
die benutzte Bibliothek kann nur TLS Version 1.1, das wird von FHEM wohl seit Kurzem nicht mehr standardmäßig unterstützt. Setze ich das Attribut "sslVersion" auf die laut CommandRef davor genutzte Voreinstellung "SSLv23:!SSLv3:!SSLv2" funktioniert es. Kann mir vielleicht jemand sagen, hinter welchem der 3 Werte sich TLS 1.1 verbirgt? Direktes Setzen des Attributs auf "TLSv11" funktioniert nämlich nicht.