Webinterface Wert in multiplen <DIV> Containern versteckt

Begonnen von brembs, 02 April 2015, 17:43:12

Vorheriges Thema - Nächstes Thema

brembs

Ich kann problemlos über HTTPMOD auf mein SENEC Webinterface der PV Anlage zugreifen und den HTML Code im Puffer sehen. Allerdings stehen da keine Werte, sondern die sind in einzelnen <DIV> Containern bis zu 6, 7 Ebenen tief verschachtelt verborgen (siehe angehängten Screenshot des Firefox Inspectors). Kann ich mit HTTPMOD da rankommen und wenn ja, hat jemand einen Link für eine Doku der Syntax?

Vize

Hallo zusammen,

ich möchte dieses Thema gerne nochmal reaktivieren.  ;D

Ich besitze ebenfalls einen PV-Speicher von SENEC.IES.

Das Webinterface kann ich über die lokale, zugewiesene IP-Adresse erreichen.
Dann habe ich mal im Firefox unter den Entwicklerwerkzeugen die Netzwerkanalyse der Seite gestartet.

Die einzelnen Reiter dazu befinden sich im Anhang.
Kommt man wohl per HTTPMOD an die entsprechenden Werte? Exemplarisch habe ich mal die Abfrage zur PV-Leistung unter Webinterface, Parameter und Antwort gelb markiert.
Die Daten werden wohl von http://IP.DES.SENEC.SPEICHER/lala.cgi im Sekundentakt angefordert.
Im unteren Teil der Entwickleroptionen steht auch noch "POST (XHR) SPEICHER-IP/lala.cgi"

Eine einfache HTTPMOD Definition direkt auf die IP des Speichers führt bei mir zu folgendem Log-Eintrag:
HTTP/1.0 400 Bad Request Content-Type: application/json Server: Solute Connection: close

Ich finde leider keinen Ansatz...vielleicht kann ja jemand weiterhelfen, oder einen Schubs in die richtige Richtung geben?!?

Danke schonmal für jegliche Hilfe!!!

Gruß
Andreas


brembs

Habe das Problem mittlerweile über ein von SENEC geliefertes Python Skript gelöst:

https://forum.fhem.de/index.php/topic,39258.msg322193.html#msg322193

Habe es Dir auch schon geschickt, @Vize

Vize

Ja Björn, ich weiß...  ;)

Danke nochmal dafür!

Aber vielleicht kann ja doch noch jemand bei dem HTTPMOD-Ansatz weiterhelfen???

Gruß
Andreas

frank

ZitatEine einfache HTTPMOD Definition direkt auf die IP des Speichers führt bei mir zu folgendem Log-Eintrag:
was das wohl sein soll?

ich denke, dass du die POST daten nicht definiert hast, eventuell die angabe im bild "parameter" in ein entsprechendes attribut packen, zb requestData oder getXXData.
lies noch mal aufmerksam das wiki oder commandref bezüglich POST-methode.
FHEM: 6.0(SVN) => Pi3(buster)
IO: CUL433|CUL868|HMLAN|HMUSB2|HMUART
CUL_HM: CC-TC|CC-VD|SEC-SD|SEC-SC|SEC-RHS|Sw1PBU-FM|Sw1-FM|Dim1TPBU-FM|Dim1T-FM|ES-PMSw1-Pl
IT: ITZ500|ITT1500|ITR1500|GRR3500
WebUI [HMdeviceTools.js (hm.js)]: https://forum.fhem.de/index.php/topic,106959.0.html

Vize

Zitat von: frank am 26 April 2016, 13:32:51
was das wohl sein soll?

Moin frank,

bitte nicht jedes Wort auf die Goldwaage legen...streiche das Wort "einfache" aus dem Satz...sorry.

Werde mich nochmal mit dem Wiki entsprechend befassen.
Danke für deine Hinweise!

Gruß
Andreas

Vize

Hallo,

so, hab mir nochmal das wiki zu HTTPMOD zur Brust genommen und (leider nur) folgendes erreicht:

Unter ubuntu habe ich auch mal perr Live HTTP headers den Aufruf der IP des Speichers aufgezeichnet.
Das sieht dann so aus:
http://IP.DES.SENEC.SPEICHERS/lala.cgi

POST /lala.cgi HTTP/1.1
Host: IP.DES.SENEC.SPEICHERS
User-Agent: Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:45.0) Gecko/20100101 Firefox/45.0
Accept: application/json, text/javascript, */*; q=0.01
Accept-Language: en-US,en;q=0.5
Accept-Encoding: gzip, deflate
Content-Type: application/x-www-form-urlencoded; charset=UTF-8
X-Requested-With: XMLHttpRequest
Referer: http://IP.DES.SENEC.SPEICHERS/
Content-Length: 453
Connection: keep-alive
{"STATISTIC":{"STAT_DAY_E_HOUSE":"","STAT_DAY_E_PV":"","STAT_DAY_BAT_CHARGE":"","STAT_DAY_BAT_DISCHARGE":"","STAT_DAY_E_GRID_IMPORT":"","STAT_DAY_E_GRID_EXPORT":""},"ENERGY":{"STAT_LICENSCE_IS_OK":"","STAT_STATE":"","STAT_STATE_DECODE":"","GUI_BAT_DATA_POWER":"","GUI_INVERTER_POWER":"","GUI_HOUSE_POW":"","GUI_GRID_POW":"","STAT_MAINT_REQUIRED":"","MAINT_FILTER_REQUIRED":""},"RTC":{},"LICENSE":{},"LOG":{"USER_LEVEL":""},"WIZARD":{"CONFIG_LOADED":""}}

HTTP/1.0 200 OK
Content-Type: application/json
Server: Solute
Connection: close


Dann habe ich mit franks Hinweisen ein HTTPMOD "gebaut".
Hier das entsprechende list dazu:
Internals:
   BUSY       0
   CFGFN
   CHANGED
   DEF        http://IP.DES.SENEC.SPEICHERS/lala.cgi 60
   Interval   60
   LASTSEND   1461771006.53635
   MainURL    http://IP.DES.SENEC.SPEICHERS/lala.cgi
   NAME       httpmod_senec
   NR         4301
   STATE      ???
   TRIGGERTIME 1461771126.53741
   TRIGGERTIME_FMT 2016-04-27 17:32:06
   TYPE       HTTPMOD
   addr       http://IP.DES.SENEC.SPEICHERS:80
   buf        HTTP/1.0 200 OK

Content-Type: application/json

Server: Solute

Connection: close



{"ENERGY":{"STAT_LICENSCE_IS_OK":"u8_01","STAT_STATE":"u8_15","STAT_STATE_DECODE":"u8_10","GUI_BAT_DATA_POWER":"fl_80000000","GUI_INVERTER_POWER":"fl_3E94FDF4","GUI_HOUSE_POW":"fl_43C5EB85","GUI_GRID_POW":"fl_42D1AE14","STAT_MAINT_REQUIRED":"u8_00","MAINT_FILTER_REQUIRED":"u8_00"}}
   code       200
   conn
   data       {"ENERGY":{"STAT_LICENSCE_IS_OK":"","STAT_STATE":"","STAT_STATE_DECODE":"","GUI_BAT_DATA_POWER":"","GUI_INVERTER_POWER":"","GUI_HOUSE_POW":"","GUI_GRID_POW":"","STAT_MAINT_REQUIRED":"","MAINT_FILTER_REQUIRED":""}}
   displayurl http://IP.DES.SENEC.SPEICHERS/lala.cgi
   header     Content-Type: Content-Type: application/x-www-form-urlencoded

Accept: application/json, text/javascript, */*; q=0.01
   host       IP.DES.SENEC.SPEICHERS
   httpheader HTTP/1.0 200 OK

Content-Type: application/json

Server: Solute

Connection: close
   httpversion 1.0
   hu_blocking 0
   hu_filecount 42
   ignoreredirects 0
   loglevel   4
   path       /lala.cgi
   protocol   http
   redirects  0
   timeout    2
   url        http://IP.DES.SENEC.SPEICHERS/lala.cgi
   value      0
   QUEUE:
   Readings:
   Request:
     data       {"ENERGY":{"STAT_LICENSCE_IS_OK":"","STAT_STATE":"","STAT_STATE_DECODE":"","GUI_BAT_DATA_POWER":"","GUI_INVERTER_POWER":"","GUI_HOUSE_POW":"","GUI_GRID_POW":"","STAT_MAINT_REQUIRED":"","MAINT_FILTER_REQUIRED":""}}
     header     Content-Type: Content-Type: application/x-www-form-urlencoded

Accept: application/json, text/javascript, */*; q=0.01
     ignoreredirects 0
     retryCount 0
     type       update
     url        http://IP.DES.SENEC.SPEICHERS/lala.cgi
     value      0
   Sslargs:
Attributes:
   disable    1
   requestData {"ENERGY":{"STAT_LICENSCE_IS_OK":"","STAT_STATE":"","STAT_STATE_DECODE":"","GUI_BAT_DATA_POWER":"","GUI_INVERTER_POWER":"","GUI_HOUSE_POW":"","GUI_GRID_POW":"","STAT_MAINT_REQUIRED":"","MAINT_FILTER_REQUIRED":""}}
   requestHeader1 Content-Type: Content-Type: application/x-www-form-urlencoded
   requestHeader2 Accept: application/json, text/javascript, */*; q=0.01
   userattr   requestData requestHeader1 requestHeader2


Leider befinden sich unter "buf" nicht die Werte, die auf der Seite des Speichers angezeigt werden, sondern nur kryptische Zeichenketten, z.B. "fl_80000000" oder "fl_3E94FDF4" usw., die wohl als Antwort auf den request kommen?

Hier komme ich leider nicht weiter.
Hat vielleicht noch jemand eine Idee, wie man an die Werte kommen könnte?

Danke schonmal für die Hilfe!

Gruß
Andreas

frank

das sieht doch schon gut aus. mit extractAllJson kann das bestimmt gut geparsed werden.

Zitat"fl_3E94FDF4"
ich schätze datentyp float mit 4byte hex. die hexzahl umgewandelt zeigt dann 1049951732 dezimal. dü müsstest also mal vergleichen und interpretieren.
prefix u8_ könnte unsigned integer 8bit sein. also 1byte in hex. u8_15 => 21 dezimal.

aber eventuell hast du noch etwas vergessen, zb im header, sodass auch andere darstellungen gesendet werden können. hast du mal die von stefan empfohlene burp-suite probiert?
FHEM: 6.0(SVN) => Pi3(buster)
IO: CUL433|CUL868|HMLAN|HMUSB2|HMUART
CUL_HM: CC-TC|CC-VD|SEC-SD|SEC-SC|SEC-RHS|Sw1PBU-FM|Sw1-FM|Dim1TPBU-FM|Dim1T-FM|ES-PMSw1-Pl
IT: ITZ500|ITT1500|ITR1500|GRR3500
WebUI [HMdeviceTools.js (hm.js)]: https://forum.fhem.de/index.php/topic,106959.0.html

Prof. Dr. Peter Henning

Ich würde das nicht mit JSON angehen. Sondern mir aus den "verschachtelten <div>-Containern" mit Hilfe eines kurzen XPath-Ausdrucks genau den richtigen Wert holen. Kurzanleitung dafür siehe hier:

https://wiki.selfhtml.org/wiki/XML/XSL/XPath/Einf%C3%BChrung

LG

pah

Vize

Guten Morgen,

@frank
Danke für deine Erläuterungen, muss ich mal schauen...aber

Zitat von: frank am 28 April 2016, 00:48:50hast du mal die von stefan empfohlene burp-suite probiert?

davon habe ich noch nicht gehört. Wo finde ich die denn?

@pah
Darüber hatte ich auch schon nachgedacht.
Wie von brembs (Björn) beschrieben, sehe ich die Werte zwar im Firefox-Inspektor, rufe ich aber die IP ohne lala.cgi des Speichers per HTTPMOD auf, steht in buf nur etwas von bad request oder so und nicht der html-code der Seite.
Habt ihr dazu noch Tipps für mich?

Gruß
Andreas

frank

Zitatdavon habe ich noch nicht gehört. Wo finde ich die denn?
im wiki ganz unten ist der link. http://portswigger.net/burp/

du kannst eventuell auch den data-string auf die für dich notwendigen teile reduzieren. hast du schon mal nach einer doku zu dieser api gesucht?

zum parsen musst du nun noch zusätzliche attribute setzen. entweder über xpath, json oder regex, wie es dir beliebt.  ;)
FHEM: 6.0(SVN) => Pi3(buster)
IO: CUL433|CUL868|HMLAN|HMUSB2|HMUART
CUL_HM: CC-TC|CC-VD|SEC-SD|SEC-SC|SEC-RHS|Sw1PBU-FM|Sw1-FM|Dim1TPBU-FM|Dim1T-FM|ES-PMSw1-Pl
IT: ITZ500|ITT1500|ITR1500|GRR3500
WebUI [HMdeviceTools.js (hm.js)]: https://forum.fhem.de/index.php/topic,106959.0.html

Vize

Hallo frank,

danke nochmal für die weiteren Infos...

Ich hab mir nun mal die Werte angeschaut, aber kann damit leider nix anfangen, wenn man die in dezimal umrechnet.
Ich glaube im Hintergrund werden auf dem Webinterface des Speichers auch noch verschiedene Java-Skripte aufgerufen, die wahrscheinlich die Werte auf die Anzeige umrechnen.
Schade...

Wie gesagt, wenn ich per HTTPMOD die "nackte" IP des Speichers aufrufe, bekomme ich nix in den buf, sonder nur einen Log-Eintrag:
2016.04.28 17:14:04 3: httpmod_test: Read callback: request type was update retry 0, no headers, body empty,
Error: http://XXX.XXX.XXX.XXX: malformed or unsupported URL


Zur api kann ich im Internet leider nichts finden...

Noch irgendwelche Ideen?

Gruß
Andreas

frank

hallo andreas,

an deiner stelle würde ich nicht auf den cloud-server "ausweichen", nur weil im augenblick die darstellung der daten noch unbefriedigend ist. damit provozierst du doch eigentlich nur neue probleme. sei froh, dass du lokal an die daten kommen kannst.

Zitat von: brembs am 02 April 2015, 17:43:12
Ich kann problemlos über HTTPMOD auf mein SENEC Webinterface der PV Anlage zugreifen und den HTML Code im Puffer sehen. Allerdings stehen da keine Werte, sondern die sind in einzelnen <DIV> Containern bis zu 6, 7 Ebenen tief verschachtelt verborgen (siehe angehängten Screenshot des Firefox Inspectors). Kann ich mit HTTPMOD da rankommen und wenn ja, hat jemand einen Link für eine Doku der Syntax?
das hört sich für mich danach an, dass brembs "korrekte" daten lokal abfragen konnte. er hat es nur nicht geschafft, sie in readings zu parsen.

bisher habe ich bei dir nur 2 headerzeilen gesehen. hast du den header nun schon mal komplett nachgebaut?
sollte es dennoch nur bei den hex-daten bleiben, musst du mal eine tabelle anlegen, in der du die hexdaten mit den im browser gelieferten daten gegenüberstellst. dann kann man doch sicherlich eine regel erkennen, um die daten aufzubereiten.

gruss frank
FHEM: 6.0(SVN) => Pi3(buster)
IO: CUL433|CUL868|HMLAN|HMUSB2|HMUART
CUL_HM: CC-TC|CC-VD|SEC-SD|SEC-SC|SEC-RHS|Sw1PBU-FM|Sw1-FM|Dim1TPBU-FM|Dim1T-FM|ES-PMSw1-Pl
IT: ITZ500|ITT1500|ITR1500|GRR3500
WebUI [HMdeviceTools.js (hm.js)]: https://forum.fhem.de/index.php/topic,106959.0.html

Vize

Hallo frank,

das mit dem externen "cloud-server" möchte ich eigentlich schon gerne vorbereiten, da vom Speicherhersteller in Kürze noch was am Speicher ergänzt wird, und dann kommt man wohl nicht mehr so einfach lokal an die Daten...

Ich werde nacher mal deine Hinweise mit dem header und der Tabelle angehen.
Hab gestern auf die schnelle das schonmal für einige wenige Werte gemacht, konnte aber bisher keinen wirklichen Zusammenhang zu den im webinterface dargestellten Werten feststellen...

Kannst du mir vielleicht Tipps zu meinem Versuch über den cloud-server geben (siehe post im HTTPMOD-thread)?

Danke nochmal für deine Hilfe!

Gruß
Andreas

frank

ZitatKannst du mir vielleicht Tipps zu meinem Versuch über den cloud-server geben
ich musste mich noch nie mit httpmod anmelden, daher habe ich damit null erfahrung. ich weiss nur, dass es hier und dort ein paar hinweise gibt. ich würde mit commandref und wiki beginnen und mit den namen der zuständigen attribute das forum durchsuchen.
FHEM: 6.0(SVN) => Pi3(buster)
IO: CUL433|CUL868|HMLAN|HMUSB2|HMUART
CUL_HM: CC-TC|CC-VD|SEC-SD|SEC-SC|SEC-RHS|Sw1PBU-FM|Sw1-FM|Dim1TPBU-FM|Dim1T-FM|ES-PMSw1-Pl
IT: ITZ500|ITT1500|ITR1500|GRR3500
WebUI [HMdeviceTools.js (hm.js)]: https://forum.fhem.de/index.php/topic,106959.0.html