FHEM Forum

FHEM => Anfängerfragen => Thema gestartet von: gestein am 22 Februar 2021, 00:19:26

Titel: HTTPMOD wie richtige Abfrage eintragen - Devolo Magic 2 Wifi
Beitrag von: gestein am 22 Februar 2021, 00:19:26
Hallo,

ich würde bei meinen Devolos gerne abfragen, welche Geräte gerade per Wifi eingeloggt ist.
Die Adapter bieten dafür eine Webansicht.
Wenn ich mir den Quelltext anschaue, dann steht dort:
<!doctype html>
<html lang="en">

<head>
  <meta charset="utf-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0" />
  <title>Webui</title>
  <base href="./">
  <link rel="stylesheet" type="text/css" href="assets/custom/customization.css" />
  <link id="favicon" rel="shortcut icon" type="image/x-icon" href="data:image/x-icon;," />
  <meta name="viewport" content="width=device-width, initial-scale=1">
<link rel="stylesheet" href="styles.b061e17a8972461828aa.css"></head>

<body>
  <app-root></app-root>
<script src="runtime.a90ff0fd1c815e6d8b1f.js" defer></script><script src="polyfills-es5.c566157a0d51a72bebf7.js" nomodule defer></script><script src="polyfills.1203deef5399a57aabc9.js" defer></script><script src="main.21c5172460c0272228fe.js" defer></script></body>

</html>


Wenn ich den Quellcode untersuche, dann kommt jede Menge html-Code, mit dem ich aber leider nix anfangen kann (siehe Bilder im Anhang).
Die Daten hätte ich schon mal gefunden, die stehen in einer Tabelle und dort in einem Feld.

Wie kann ich das extrahieren?
Ich nehme an, dass mir da HTTPMOD am besten helfen kann, aber wie gehe ich das an?

Danke für jeden Tipp.
lg, Gerhard
Titel: Antw:HTTPMOD wie richtige Abfrage eintragen - Devolo Magic 2 Wifi
Beitrag von: Wernieman am 22 Februar 2021, 08:14:12
Dein Problem wird sein, das die Daten per Script aufgerufen werden. Siehe z.B.
Zitatruntime.a90ff0fd1c815e6d8b1f.js
Titel: Antw:HTTPMOD wie richtige Abfrage eintragen - Devolo Magic 2 Wifi
Beitrag von: gestein am 22 Februar 2021, 08:47:08
Bitte entschuldige, dass ich so unbedarft frage:
Aber was heißt das dann?
Heißt das, das es mit HTTPMOD nicht funktioniert?

Und wenn ich das Script direkt aufrufe? Würde es dann klappen?

Danke, Lg, Gerhard
Titel: Antw:HTTPMOD wie richtige Abfrage eintragen - Devolo Magic 2 Wifi
Beitrag von: Wernieman am 22 Februar 2021, 09:12:23
Das Script wird im browser aufgerufen.  Du müstest gucken, welche Daten das Scipt den beim Server abfragt
Entweder Mitsniffen (Stichwort Wireshark)
Oder im Browser gucken, welche Daten  der Brwoser sich vom Server holt (Entwicklertools->Netzwerktab)

Bin jetzt auch nicht sooo fit, das ich Dir weitere Tips "aus der Ferne" geben könnte
Titel: Antw:HTTPMOD wie richtige Abfrage eintragen - Devolo Magic 2 Wifi
Beitrag von: gestein am 23 Februar 2021, 15:57:17
Danke für die Tipps.
Habe mich gestern Abend mal damit beschäftigt, komme aber nicht weiter.
Da reichen meine Kenntnisse leider bei weitem nicht aus.

Anscheinend fragt mein Browser über die Javascripts um JASON-Daten und als Antwort kommt dann z.B.:
{"jsonrpc":"2.0","id":"a44316d0-9434-4f66-ad68-c0c6b3fac3cf","result":[0,{"clients":{"E0:98:06:8D:28:BC":{"connected_time":36419,"vendor"{"name":"Espressi","description":"Espressif Inc."},"rx":{"rate":24000},"tx":{"rate":57000}}}}]}

Würde es jemandem helfen, wenn ich den vollständigen Verkehr poste?
Könnte mir dann bitte jemand beim Analysieren helfen?

Oder kennt jemand eine Möglichkeit, wie man die Seite richtig auf dem raspberry laden und dann den html-Code bekommt?

Dazu müsste ich wahrscheinlich am besten einen headless browser installieren, der javascript kann. Oder?
Und dann müsste ich den Code irgendwie abspeichern und analysieren. Oder?

Danke im Voraus
lg, Gerhard
Titel: Antw:HTTPMOD wie richtige Abfrage eintragen - Devolo Magic 2 Wifi
Beitrag von: Wernieman am 23 Februar 2021, 17:57:52
Wenn Du die Url-weißt, um diesen JSON zu kriegen, hast Du doch schon gewonnen?
Titel: Antw:HTTPMOD wie richtige Abfrage eintragen - Devolo Magic 2 Wifi
Beitrag von: gestein am 23 Februar 2021, 18:00:12
Und in den "Entwicklertools->Netzwerktab" sieht man es sogar noch besser.
Das hätte ich gleich machen sollen.

Es gibt ein Json-Objekt (heißt das so?):
jsonrpc: "2.0", id: "4260f3b7-4c60-403b-aed3-ba806059bc84", result: [0, {clients: {,...}}]}
id: "4260f3b7-4c60-403b-aed3-ba806059bc84"
jsonrpc: "2.0"
result: [0, {clients: {,...}}]
0: 0
1: {clients: {,...}}
clients: {,...}
00:0E:58:36:6D:9C: {vendor: {name: "Sonos", description: "Sonos, Inc."}, radio: "0", ssid: "PinkZeder",...}
00:0E:58:D5:53:DE: {vendor: {name: "Sonos", description: "Sonos, Inc."}, radio: "0", ssid: "PinkZeder",...}
.....
.....


Wie kann man daraus nun die richtige Definition von HTTPMOD "basteln"?

Und wo bekomme ich die URL her?
Könnte das das sein?
Request URL: http://192.168.0.xxx/ubus
Request Method: POST
Status Code: 200 OK
Remote Address: 192.168.0.xxx:80
Referrer Policy: strict-origin-when-cross-origin


Liebe Grüße
Gerhard
Titel: Antw:HTTPMOD wie richtige Abfrage eintragen - Devolo Magic 2 Wifi
Beitrag von: gestein am 23 Februar 2021, 18:10:07
Braucht man die "Request Payload" vielleicht auch noch?
{jsonrpc: "2.0", method: "call", id: "4260f3b7-4c60-403b-aed3-ba806059bc84",...}
id: "4260f3b7-4c60-403b-aed3-ba806059bc84"
jsonrpc: "2.0"
method: "call"
params: ["45ed90f660cb9b55d2a877aa9897e5c1", "network.info", "unconnected_clients", {}]


Denn ein simples defmod klappt leider nicht:
defmod Devolo_Test HTTPMOD http://192.168.0.xxx/ubus 120
attr Devolo_Test extractAllJSON 2
Titel: Antw:HTTPMOD wie richtige Abfrage eintragen - Devolo Magic 2 Wifi
Beitrag von: Wernieman am 23 Februar 2021, 18:36:42
HTTPMod kann Json direkt selber encoden. Fürs testen einfach mal alles: Stichwort extractAllJSON
Also einfach setzen
attr DeinDevice extractAllJSON 1

Was steht denn in deinem Browser, wenn Du die Url selber aufrufst?

Edit:
Meines Wissens (Bin d a aber auch erst 1 Woche beo HTTPMod dabei), ist der Parameter für extractAllJSON 1 und nicht 2
Titel: Antw:HTTPMOD wie richtige Abfrage eintragen - Devolo Magic 2 Wifi
Beitrag von: gestein am 23 Februar 2021, 18:58:10
Danke. Ich habe es immer auf "2" gesetzt.
CommandRef:
if set to 1 it will create a reading for every JSON object. The reading names will be deducted from the JSON strings hierarchically concatenated by "_".
if set to 2 it will create attributes for naming and parsing the JSON objects to make it easier to rename or remove some of them.


Ist aber - in dem Fall glaube ich - nicht so wichtig.
Denn leider sagt der log:
2021.02.23 18:48:39.560 5: Devolo_Test: AddToQueue adds type update to URL http://192.168.0.xxx/ubus, no data, no headers, retry 0, initial queue len: 0
2021.02.23 18:48:39.561 5: Devolo_Test: HandleSendQueue called from AddToSendQueue, qlen = 1
2021.02.23 18:48:39.561 4: Devolo_Test: HandleSendQueue sends update with timeout 2 to http://192.168.0.xxx/ubus, No Data, No Header
2021.02.23 18:48:39.820 5: Devolo_Test: ReadCallback called from __ANON__
2021.02.23 18:48:39.821 4: Devolo_Test: Read callback: request type was update retry 0,
header: HTTP/1.0 400 Bad Request
Connection: close
Content-Type: text/html, body length 35
2021.02.23 18:48:39.821 5: Devolo_Test: Read callback: body
<h1>Bad Request</h1>Invalid Request
2021.02.23 18:48:39.822 4: Devolo_Test: BodyDecode found no charset header (bodyDecode was set to auto)
2021.02.23 18:48:39.822 3: Devolo_Test: error while parsing JSON data: malformed JSON string, neither tag, array, object, number, string or atom, at character offset 0 (before "<h1>Bad Request</h1>...") at lib/FHEM/HTTPMOD/Utils.pm line 668.

Da fehlt also noch etwas.
Im Browser steht einfach nur "http://192.168.0.xxx/#/wifi/status".
Wenn ich diese URL im Def des Devices verwende, dann kommt der folgende Log-Eintrag:
2021.02.23 18:56:28.924 4: Devolo_Test: HandleSendQueue sends update with timeout 2 to http://192.168.0.xxx/#/wifi/status, No Data, No Header

Wenn ich die URL "http://192.168.0.xxx/ubus" im Browser aufrufe, dann kommt die Meldung:
Bad Request
Invalid Request


Danke für Deine Hilfe!
lg, Gerhard
Titel: Antw:HTTPMOD wie richtige Abfrage eintragen - Devolo Magic 2 Wifi
Beitrag von: Wernieman am 23 Februar 2021, 19:24:11
Zitat<h1>Bad Request</h1>Invalid Request
Dann brauchst Du eben mehr Infos. Was jetzt das Script sendet (oder nicht) , kann ich Dir nicht sagen. Eventuell ist auch vorher ein Login erforderlich .... da ich so ein Gerät nicht habe, kann ich Dir nicht weiterhelfen.

Eventuell man im Netz suchen, vielleicht hat jemand ein Scirpt für Linux geschrieben ... DAS kann man dann "super"  adaptieren.

Mal auf die Schnelle:
https://github.com/KiboOst/php-devoloDHC (https://github.com/KiboOst/php-devoloDHC)
Titel: Antw:HTTPMOD wie richtige Abfrage eintragen - Devolo Magic 2 Wifi
Beitrag von: gestein am 24 Februar 2021, 10:13:22
Da scheint tatsächlich noch ein Login zu passieren.

Nach anderen Lösungen habe ich auch schon gesucht.
Danke für den Hinweis auf KiboOst. Das scheint aber für Devolo Home Control zu sein.
Das kannte ich auch schon. Aber vielleicht ist da das login auch abgehandelt.

Als Idee ist mir noch eingefallen, dass ich ja mit headless browsern auf dem Raspberry arbeiten könnte.
Aber die die ich gefunden habe, scheinen kein Javascript zu können.
Zumindest konnte keiner die Seite öffnen.

lg, Gerhard