Neue Version von HTTPMOD mit neuen Features zum Testen

Begonnen von StefanStrobel, 05 Dezember 2015, 08:31:32

Vorheriges Thema - Nächstes Thema

ch.eick

#825
Hi,

ich hatte mir zuerst die readings generieren lassen, bekam dann aber 4-5 Stück pro Eintrag.
Dann habe ich sie bereinigt und den Namen für die readings passend gewählt. Nun hat das get20 rund 30 readings, die aber bei jedem get** durchgetestet werden.
Ich hätte gerne bei get20... die reading20-**[JSON|NAME] .


reading2001JSON 01_processdata_01_value
reading2001Name Statistic_Autarky_Day
reading2002JSON 01_processdata_02_value
reading2002Name Statistic_Autarky_Month
reading2003JSON 01_processdata_03_value
reading2003Name Statistic_Autarky_Total
reading2004JSON 01_processdata_04_value
reading2004Name Statistic_Autarky_Year


Dann gibt es z.B. ein get31... , get32... , get33.... und es kommt jeweils ein ähnlicher JSON String zurück, der aber im richtigen reading landen soll

[{"id":"Battery:Type","value":"4"}]
[{"id":"Battery:MinHomeComsumption","value":"50.0"}]
[{"id":"Battery:MinSoc","value":"15"}]


Mit regex könnte ich jetzt natürlich je ein reading definieren, was dann den Wert zugewiesen bekommt, dann kann ich aber nicht mehr die JSON Funktionalität nutzen.
Es kann auch sein, dass ich noch die JSON Werte in einem Request abfragen kann, dann wäre die Idee von oben sicherlich einfacher, sofern es sowas gibt.

attr PV_Anlage_1_API reading31Name Battery_Type
attr PV_Anlage_1_API reading31Regex Battery:Type","value":"(\d)
attr PV_Anlage_1_API reading32Name Battery_MinHomeComsumption
attr PV_Anlage_1_API reading32Regex Battery:MinHomeComsumption","value":"(\d+.\d+)
attr PV_Anlage_1_API reading33Name Battery_Strategy
attr PV_Anlage_1_API reading33Regex Battery:Strategy","value":"(\d+)
attr PV_Anlage_1_API reading34Name Battery_MinSoc
attr PV_Anlage_1_API reading34Regex Battery:MinSoc","value":"(\d+)
attr PV_Anlage_1_API reading35Name Battery_SmartBatteryControl_Enable
attr PV_Anlage_1_API reading35Regex Battery:SmartBatteryControl:Enable","value":"(\d+)
attr PV_Anlage_1_API reading36Name Battery_DynamicSoc_Enable
attr PV_Anlage_1_API reading36Regex Battery:DynamicSoc:Enable","value":"(\d+)


Das Ergebnis sieht dann so aussehen.

Battery_Type 4
Battery_MinHomeComsumption 50.0
Battery_MinSoc 15
RPI4; Docker; CUNX; Eltako FSB61NP; SamsungTV H-Serie; Sonos; Vallox; Luxtronik; 3x FB7490; Stromzähler mit DvLIR; wunderground; Plenticore 10 mit BYD; EM410; SMAEM; Modbus TCP
Contrib: https://svn.fhem.de/trac/browser/trunk/fhem/contrib/ch.eick

amenomade

In get20JSON passt auch eine Regex, zB
get20JSON 01_processdata_0._value
Die Readings kannst Du dann nw mit
get20-1Name Statistic_Autarky_Day
get20-2Name Statistic_Autarky_Month
umnennen

Sowas meinst Du?

Zum weiteren Helfen hätte ich gerne ein "list" von deinem HTTPMOD und ein Beispiel vom JSON Ergebnis.
Pi 3B, Alexa, CUL868+Selbstbau 1/2λ-Dipol-Antenne, USB Optolink / Vitotronic, Debmatic und HM / HmIP Komponenten, Rademacher Duofern Jalousien, Fritz!Dect Thermostaten, Proteus

ch.eick

Hey, super,
ich glaube das ist es...

attr PV_Anlage_1_API get20JSON 01_processdata_.._value    <<<< mit .. werden alle 32 readings gelesen

attr PV_Anlage_1_API get20-1Name Statistic_Autarky_Day
attr PV_Anlage_1_API get20-2Name Statistic_Autarky_Month
attr PV_Anlage_1_API get20-3Name Statistic_Autarky_Total
...
attr PV_Anlage_1_API get20-32Name Statistic_Yield_Year


Kann man sich denn darauf verlassen, dass die readings immer in der selben Reihenfolge kommen?

Vielen Dank
     Christian
RPI4; Docker; CUNX; Eltako FSB61NP; SamsungTV H-Serie; Sonos; Vallox; Luxtronik; 3x FB7490; Stromzähler mit DvLIR; wunderground; Plenticore 10 mit BYD; EM410; SMAEM; Modbus TCP
Contrib: https://svn.fhem.de/trac/browser/trunk/fhem/contrib/ch.eick

amenomade

Zitat von: ch.eick am 05 September 2020, 18:23:13

Kann man sich denn darauf verlassen, dass die readings immer in der selben Reihenfolge kommen?

Sollte, so lange im JSON String die auch immer in der selben Reihenfolge kommen. Aber darauf hat sich schon deine alte Methode verlassen.
Pi 3B, Alexa, CUL868+Selbstbau 1/2λ-Dipol-Antenne, USB Optolink / Vitotronic, Debmatic und HM / HmIP Komponenten, Rademacher Duofern Jalousien, Fritz!Dect Thermostaten, Proteus

ch.eick

Zitat von: amenomade am 05 September 2020, 20:56:30
Sollte, so lange im JSON String die auch immer in der selben Reihenfolge kommen. Aber darauf hat sich schon deine alte Methode verlassen.
Das war auch nur so, weil die Namen nicht sprechend waren :-) Ein JSON Parser, der auch noch konfigurierbar ist, wäre da ein Träumchen.
RPI4; Docker; CUNX; Eltako FSB61NP; SamsungTV H-Serie; Sonos; Vallox; Luxtronik; 3x FB7490; Stromzähler mit DvLIR; wunderground; Plenticore 10 mit BYD; EM410; SMAEM; Modbus TCP
Contrib: https://svn.fhem.de/trac/browser/trunk/fhem/contrib/ch.eick

StefanStrobel

Hallo,

hier nochmal eine neue Version, bei der auch die readings automatisch utf8 encoded werden wenn bodyDecode nicht gesetzt und damit auf 'auto' steht und kein anderes encoding mit (reading|get|set)[0-9]*(-[0-9]+)?Decode eingestellt ist.

Zusammengefasst:
Nach dem Lesen wird ein HTTP-Body automatisch anhand des charset-Headers in der Response dekodiert.
Das kann man mit dem Attribut bodyDecode beeinflussen. Per default steht das auf 'auto'. Man kann aber auch explizit einen Wert wie 'utf8' oder auch 'none' einstellen. Bei 'none' findet keine Dekodierung statt.

Nach dem Parsen können Readings nochmal mit decode / encode bearbeitet werden.
Wenn nichts eingestellt ist und der HTTP-Body (siehe oben) dekodiert wurde, dann werden die Readings utf8 encoded.
Beeinflussen kann man das mit den Attributen (reading|get|set)[0-9]*(-[0-9]+)?Decode,  und (reading|get|set)[0-9]*(-[0-9]+)?Encode, also z.B. reading02Encode oder get05Encode für ein einzelnes Reading oder readingEncode für alle Readings.

Gruss
   Stefan

ch.eick

#831
Moin, und schon kommt das nächste Gerät :-)

Ich habe einen BYD Speicher, der mit einen Python Skript abgefragt werden kann.

Gibt es zu HTTPBasicAuth("username","password") ein equivalent im httpmod ?

Beim Trace mit Burp sehe ich keine Information zum Login. Es kommt ein Fenster mit Abfrage der Userid und des Passworts, aber ich kann die Übertragung mit dem Format nirgends sehen.

Das bekomme ich bei fehlenden Login zurück

HTTP/1.1 401 Unauthorized
Server: GoAhead-Webs
Date: Tue Sep  8 09:44:02 2020
WWW-Authenticate: Digest realm="BoxServer", domain="",qop="auth", nonce="d34576bfbef65c9195db2b559f949f5e", opaque="5ccc069c403ebaf9f0171e9517f40e41",algorithm="MD5", stale="FALSE"
Pragma: no-cache
Cache-Control: no-cache
Content-Type: text/html


EDIT: Das hier habe ich gefunden. Wie muss ich das im HTTPMOD behandeln?
https://en.wikipedia.org/wiki/Digest_access_authentication
https://www.hackingarticles.in/understanding-http-authentication-basic-digest
https://docs.microsoft.com/en-us/previous-versions/windows/it-pro/windows-server-2003/cc780170(v=ws.10)?redirectedfrom=MSDN

EDIT: Nun habe ich versucht das umzusetzten

{
my $NAME="BYD_Status_test";;
my $HA1=encode_base64("installer:".ReadingsVal($NAME,"auth_realm","").":<BYD Passwort>");;
my $HA2=md5_hex("get:/asp/RunData.asp");;
my $r=md5_hex($HA1.":".ReadingsVal($NAME,"auth_nonce","").":".$HA2);;
fhem("setreading ".$NAME." auth_HA1 ".$HA1);;
fhem("setreading ".$NAME." auth_HA2 ".$HA2);;
fhem("setreading ".$NAME." auth_nc 0000001");;
fhem("setreading ".$NAME." auth_response ".$r);;
Test program}



## Das kommt vom ersten Aufruf
auth_nonce 29a3a913f7661890358f89b197794097
auth_opaque 5ccc069c403ebaf9f0171e9517f40e41
auth_qop auth
auth_realm BoxServer

## Mit einem replacement generiere ich schon sowas
auth_HA1 aW5zdGFsbGVyOkJveFNlcnZlcjpieWQ=
auth_HA2 54e1b5993d8c43684082d55d2e599003
auth_nc 0000001
auth_response 48516bb5ff17e98b0cb90c781564f310

## Und den Header für die sid Anmeldung habe ich noch nicht


Ich denke, ich bin auf einem richtigen Weg, jedoch benötige ich Hilfe, wie der Header String dann aussehen muss, um einen login zu bekommen.

EDIT: Nach einem Login im Browser habe ich dann jetzt einen response Header gefunden, der sich bei jeder Abfrage wieder neu berechnet

Authorization: Digest username="installer", realm="BoxServer", nonce="c98ef6ed8acd191dde3d83f946d20723", uri="/asp/RunData.asp", algorithm=MD5, response="d856fd9554062aac22d3f154c41f665f", opaque="5ccc069c403ebaf9f0171e9517f40e41", qop=auth, nc=00000011, cnonce="d789ea5b7e9a2377"

Nun fehlt mir der Berechnungsweg zu diesen Werten :-(

Trace im Browser:

# General
Request URL: http://192.168.178.20/asp/RunData.asp
Request Method: GET
Status Code: 401 Unauthorized
Remote Address: 192.168.178.20:80
Referrer Policy: no-referrer-when-downgrade

# Response Headers
Cache-Control: no-cache
Content-Type: text/html
Date: Tue Sep  8 13:08:08 2020
Pragma: no-cache
Server: GoAhead-Webs
WWW-Authenticate: Digest realm="BoxServer", domain="",qop="auth", nonce="7b9ad8b5b9cb64dbb6ebaffec867cc96", opaque="5ccc069c403ebaf9f0171e9517f40e41",algorithm="MD5", stale="FALSE"

# Request Headers
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3
Accept-Encoding: gzip, deflate
Accept-Language: de-DE,de;q=0.9,en-US;q=0.8,en;q=0.7,mt;q=0.6
Connection: keep-alive
DNT: 1
Host: 192.168.178.20
Upgrade-Insecure-Requests: 1
User-Agent: Mozilla/5.0 (X11; Linux armv7l) AppleWebKit/537.36 (KHTML, like Gecko) Raspbian Chromium/78.0.3904.108 Chrome/78.0.3904.108 Safari/537.36

############## Das Login Fenster öffnet sich für UserID und Passwort
# Nach der Eingabe

# General
Request URL: http://192.168.178.20/asp/RunData.asp
Request Method: GET
Status Code: 200 OK
Remote Address: 192.168.178.20:80
Referrer Policy: no-referrer-when-downgrade

# Response Headers
Cache-Control: no-cache
Content-Type: text/html
Date: Tue Sep  8 13:12:08 2020
Pragma: no-cache
Server: GoAhead-Webs
WWW-Authenticate: Digest realm="BoxServer", domain="",qop="auth", nonce="6221f9ee6cedc8258a55f72ea22b9134", opaque="5ccc069c403ebaf9f0171e9517f40e41",algorithm="MD5", stale="FALSE"

# Request Headers
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3
Accept-Encoding: gzip, deflate
Accept-Language: de-DE,de;q=0.9,en-US;q=0.8,en;q=0.7,mt;q=0.6
Cache-Control: max-age=0
Connection: keep-alive
DNT: 1
Host: 192.168.178.20
Upgrade-Insecure-Requests: 1
User-Agent: Mozilla/5.0 (X11; Linux armv7l) AppleWebKit/537.36 (KHTML, like Gecko) Raspbian Chromium/78.0.3904.108 Chrome/78.0.3904.108 Safari/537.36

################Und dann bei jedem Update

# General
Request URL: http://192.168.178.20/asp/RunData.asp
Request Method: GET
Status Code: 200 OK
Remote Address: 192.168.178.20:80
Referrer Policy: no-referrer-when-downgrade

# Response Headers
Cache-Control: no-cache
Content-type: text/html
Date: Tue Sep  8 13:16:58 2020
Pragma: no-cache
Server: GoAhead-Webs

# Request Headers
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3
Accept-Encoding: gzip, deflate
Accept-Language: de-DE,de;q=0.9,en-US;q=0.8,en;q=0.7,mt;q=0.6
Authorization: Digest username="installer", realm="BoxServer", nonce="4ea52d3c19eaf2367902e8cfa27537f9", uri="/asp/RunData.asp", algorithm=MD5, response="e079a1305a02f29213146159f0155cfd", opaque="5ccc069c403ebaf9f0171e9517f40e41", qop=auth, nc=00000002, cnonce="52d88b546fca0900"
Cache-Control: max-age=0
Connection: keep-alive
DNT: 1
Host: 192.168.178.20
Upgrade-Insecure-Requests: 1
User-Agent: Mozilla/5.0 (X11; Linux armv7l) AppleWebKit/537.36 (KHTML, like Gecko) Raspbian Chromium/78.0.3904.108 Chrome/78.0.3904.108 Safari/537.36




RPI4; Docker; CUNX; Eltako FSB61NP; SamsungTV H-Serie; Sonos; Vallox; Luxtronik; 3x FB7490; Stromzähler mit DvLIR; wunderground; Plenticore 10 mit BYD; EM410; SMAEM; Modbus TCP
Contrib: https://svn.fhem.de/trac/browser/trunk/fhem/contrib/ch.eick

wires.io

Ich möchte per FHEM einen Sonoff DIY Switch über das REST API ansteuern, habe die Requests zunächst erfolgreich mit Postman getestet und die Pakete im Wireshark gesehen. Wenn ich das mit u.g. Konfiguration probiere, reagiert der Schalter nicht, findet Wireshark keine Pakete und meldet FHEM:
Zitatsonoffdiy: Read callback: Error: read from http://192.168.178.93:8081 timed out

defmod sonoffdiy HTTPMOD none 0
attr sonoffdiy userattr set01Data set01Header set01Method:GET,POST,PUT set01Name set01NoArg:0,1 set01URL set02Data set02Header set02Method:GET,POST,PUT set02Name set02NoArg:0,1 set02URL
attr sonoffdiy set01Data { "deviceid": "", "data": { "switch": "off" } }
attr sonoffdiy set01Header Content-Length: 47
attr sonoffdiy set01Method POST
attr sonoffdiy set01Name off
attr sonoffdiy set01NoArg 1
attr sonoffdiy set01URL http://192.168.178.93:8081/zeroconf/switch
attr sonoffdiy set02Data { "deviceid": "", "data": { "switch": "on" } }
attr sonoffdiy set02Header Content-Length: 46
attr sonoffdiy set02Method POST
attr sonoffdiy set02Name on
attr sonoffdiy set02NoArg 1
attr sonoffdiy set02URL http://192.168.178.93:8081/zeroconf/switch


Was läuft schief?

ch.eick

Hallo zusammen,
ich habe gerade meinen Post nochmal aktualisiert und ein verbose 5 Log angehängt.
Jetzt kommt schon ein "Wrong Password" :-) , dann sollte etwas mit dem Hash und den Keys nicht ganz so richtig sein.

Über Hilfe würde ich mich sehr freuen
    Christian
RPI4; Docker; CUNX; Eltako FSB61NP; SamsungTV H-Serie; Sonos; Vallox; Luxtronik; 3x FB7490; Stromzähler mit DvLIR; wunderground; Plenticore 10 mit BYD; EM410; SMAEM; Modbus TCP
Contrib: https://svn.fhem.de/trac/browser/trunk/fhem/contrib/ch.eick

ch.eick

Zitat von: wires.io am 08 September 2020, 16:06:03
Ich möchte per FHEM einen Sonoff DIY Switch über das REST API ansteuern, habe die Requests zunächst erfolgreich mit Postman getestet und die Pakete im Wireshark gesehen. Wenn ich das mit u.g. Konfiguration probiere, reagiert der Schalter nicht, findet Wireshark keine Pakete und meldet FHEM:
defmod sonoffdiy HTTPMOD none 0
attr sonoffdiy userattr set01Data set01Header set01Method:GET,POST,PUT set01Name set01NoArg:0,1 set01URL set02Data set02Header set02Method:GET,POST,PUT set02Name set02NoArg:0,1 set02URL
attr sonoffdiy set01Data { "deviceid": "", "data": { "switch": "off" } }
attr sonoffdiy set01Header Content-Length: 47
attr sonoffdiy set01Method POST
attr sonoffdiy set01Name off
attr sonoffdiy set01NoArg 1
attr sonoffdiy set01URL http://192.168.178.93:8081/zeroconf/switch
attr sonoffdiy set02Data { "deviceid": "", "data": { "switch": "on" } }
attr sonoffdiy set02Header Content-Length: 46
attr sonoffdiy set02Method POST
attr sonoffdiy set02Name on
attr sonoffdiy set02NoArg 1
attr sonoffdiy set02URL http://192.168.178.93:8081/zeroconf/switch


Was läuft schief?
Hallo,
Du solltest noch ein Logfile dazu legen :-)
Den set01Header und set02Header kannst du weglassen, weil der berechnet wird.
Die set01Method ist meine ich auch nicht nötig, da durch set02Data automatisch ein POST gemacht wird.
Ist der Date String ohne eine deviceid so richtig?
RPI4; Docker; CUNX; Eltako FSB61NP; SamsungTV H-Serie; Sonos; Vallox; Luxtronik; 3x FB7490; Stromzähler mit DvLIR; wunderground; Plenticore 10 mit BYD; EM410; SMAEM; Modbus TCP
Contrib: https://svn.fhem.de/trac/browser/trunk/fhem/contrib/ch.eick

amenomade

Pi 3B, Alexa, CUL868+Selbstbau 1/2λ-Dipol-Antenne, USB Optolink / Vitotronic, Debmatic und HM / HmIP Komponenten, Rademacher Duofern Jalousien, Fritz!Dect Thermostaten, Proteus

amenomade

 @ch.eick: deine Log zeigt, dass Du immer noch nicht authentifiziert bist.
Die Browser Log zeigt aber nicht die "POST" Request mit Authentifizierung, und die Antwort, die dann kam.

Ein "list" vom HTTPMOD Device, passend zu Log, wäre auch hilfreich.
Pi 3B, Alexa, CUL868+Selbstbau 1/2λ-Dipol-Antenne, USB Optolink / Vitotronic, Debmatic und HM / HmIP Komponenten, Rademacher Duofern Jalousien, Fritz!Dect Thermostaten, Proteus

ch.eick

Zitat von: amenomade am 08 September 2020, 18:28:38
@ch.eick: deine Log zeigt, dass Du immer noch nicht authentifiziert bist.
Die Browser Log zeigt aber nicht die "POST" Request mit Authentifizierung, und die Antwort, die dann kam.

Ein "list" vom HTTPMOD Device, passend zu Log, wäre auch hilfreich.
Ich habe da ein Problem die Daten zu liefern :-(

1)Das Log zeigt den Versuch der Anmeldung, was noch nicht geglückt ist, da die Keys wohl falsch berechnet werden.

2) Ich habe es nun geschafft, aus Burp einen gültigen Header zu kopieren, mit dem ich jetzt eine Verbindung bekomme.

attr BYD_Status_test get01Header Authorization: Digest username="installer", realm="BoxServer", nonce="2370ffe077296607d63cf6177159abdc", uri="/asp/RunData.asp", algorithm=MD5, response="a7da56c7835c90c025d6cf246a1e492f", opaque="5ccc069c403ebaf9f0171e9517f40e41", qop=auth, nc=00000002, cnonce="126c7fc80a04c19e"

Was mir nicht klar ist, wie die Keys aufgebaut werden. Über die Web Seiten gibt es da vielfältige Möglichkeiten, die ich mit dem replacement teste.
Die aktuellte Meldung ist "wrong Passwort", was mir sagt, dass die Berechnung mit HA1 und HA2 so nicht stimmen kann.

Ich erzeuge mal ein Log mit dem "wrong passwort" und eins mit dem get01Header" aus dem Browser.

Die list Device sind auch in den jeweiligen Dateien.

Gruß
   Christian
RPI4; Docker; CUNX; Eltako FSB61NP; SamsungTV H-Serie; Sonos; Vallox; Luxtronik; 3x FB7490; Stromzähler mit DvLIR; wunderground; Plenticore 10 mit BYD; EM410; SMAEM; Modbus TCP
Contrib: https://svn.fhem.de/trac/browser/trunk/fhem/contrib/ch.eick

wires.io

2020.09.08 20:49:34 5: sonoffdiy: set called with on
2020.09.08 20:49:34 5: sonoffdiy: set found option on in attribute set02Name
2020.09.08 20:49:34 4: sonoffdiy: set will now set on
2020.09.08 20:49:34 5: sonoffdiy: AddToQueue adds type set02 to URL http://192.168.178.93:8081/zeroconf/switch, data { "deviceid": "", "data": { "switch": "on" } }, header Content-Length: 46, retry 0, initial queue len: 0
2020.09.08 20:49:34 5: sonoffdiy: HandleSendQueue called, qlen = 1
2020.09.08 20:49:34 5: sonoffdiy: HandleSendQueue - call with HTTP METHOD: POST
2020.09.08 20:49:34 4: sonoffdiy: HandleSendQueue sends set02 with timeout 2 to http://192.168.178.93:8081/zeroconf/switch,
data: { "deviceid": "", "data": { "switch": "on" } },
header: Content-Length: 46
2020.09.08 20:49:34 5: HttpUtils url=http://192.168.178.93:8081/zeroconf/switch
2020.09.08 20:49:34 4: IP: 192.168.178.93 -> 192.168.178.93
2020.09.08 20:49:34 5: HttpUtils request header:
POST /zeroconf/switch HTTP/1.0
Host: 192.168.178.93:8081
User-Agent: fhem
Accept-Encoding: gzip,deflate
Content-Length: 46
Content-Type: application/x-www-form-urlencoded

2020.09.08 20:49:36 3: sonoffdiy: Read callback: Error: read from http://192.168.178.93:8081 timed out
2020.09.08 20:49:36 4: sonoffdiy: Read callback: request type was set02 retry 0, no headers, no body
2020.09.08 20:49:36 5: sonoffdiy: Read callback: body empty
2020.09.08 20:49:36 4: sonoffdiy: Read found no charset header (bodyDecode was set to auto)
2020.09.08 20:49:36 5: sonoffdiy: GetCookies is looking for Cookies
2020.09.08 20:49:36 5: sonoffdiy: ExtractSid called, context set, num 02
2020.09.08 20:49:36 4: sonoffdiy: no header to look for redirects
2020.09.08 20:49:36 5: sonoffdiy: CheckAuth decided no authentication required

amenomade

Zitat von: wires.io am 08 September 2020, 20:55:05
2020.09.08 20:49:34 5: sonoffdiy: set called with on
2020.09.08 20:49:34 5: sonoffdiy: set found option on in attribute set02Name
2020.09.08 20:49:34 4: sonoffdiy: set will now set on
2020.09.08 20:49:34 5: sonoffdiy: AddToQueue adds type set02 to URL http://192.168.178.93:8081/zeroconf/switch, data { "deviceid": "", "data": { "switch": "on" } }, header Content-Length: 46, retry 0, initial queue len: 0
2020.09.08 20:49:34 5: sonoffdiy: HandleSendQueue called, qlen = 1
2020.09.08 20:49:34 5: sonoffdiy: HandleSendQueue - call with HTTP METHOD: POST
2020.09.08 20:49:34 4: sonoffdiy: HandleSendQueue sends set02 with timeout 2 to http://192.168.178.93:8081/zeroconf/switch,
data: { "deviceid": "", "data": { "switch": "on" } },
header: Content-Length: 46
2020.09.08 20:49:34 5: HttpUtils url=http://192.168.178.93:8081/zeroconf/switch
2020.09.08 20:49:34 4: IP: 192.168.178.93 -> 192.168.178.93
2020.09.08 20:49:34 5: HttpUtils request header:
POST /zeroconf/switch HTTP/1.0
Host: 192.168.178.93:8081
User-Agent: fhem
Accept-Encoding: gzip,deflate
Content-Length: 46
Content-Type: application/x-www-form-urlencoded

2020.09.08 20:49:36 3: sonoffdiy: Read callback: Error: read from http://192.168.178.93:8081 timed out
2020.09.08 20:49:36 4: sonoffdiy: Read callback: request type was set02 retry 0, no headers, no body
2020.09.08 20:49:36 5: sonoffdiy: Read callback: body empty
2020.09.08 20:49:36 4: sonoffdiy: Read found no charset header (bodyDecode was set to auto)
2020.09.08 20:49:36 5: sonoffdiy: GetCookies is looking for Cookies
2020.09.08 20:49:36 5: sonoffdiy: ExtractSid called, context set, num 02
2020.09.08 20:49:36 4: sonoffdiy: no header to look for redirects
2020.09.08 20:49:36 5: sonoffdiy: CheckAuth decided no authentication required


Nimm die attr setXXNoArg weg. Da wird gar keine "post" Data mitgechickt.
Pi 3B, Alexa, CUL868+Selbstbau 1/2λ-Dipol-Antenne, USB Optolink / Vitotronic, Debmatic und HM / HmIP Komponenten, Rademacher Duofern Jalousien, Fritz!Dect Thermostaten, Proteus