Hallo Forumgemeinde,
ich habe einen Fronius Wechselrichter. Der Wechselrichter hat eine eigene Web-Oberfläche wo Einstellungen vorgenommen werden können. Der Zugriff ist Passwortgeschützt. Wie muss ich httpmod konfigurieren damit das klappt. Ich habe das Wiki dazu gelesen und auch verschiedenen Forumbeiträge studiert. Aber verstehen tue ich das nicht. Was klappt sind Daten per API auslesen. Ich will jedoch Einstellungen vornehmen. Das unterstützt die API nicht. Ich hab auch versucht mit BurpSuite den Traffic zu analysieren - komme hier jedoch auch nicht weiter. Wer kann mir hier helfen?
Was ich bisher habe ist:
defmod WR HTTPMOD http://192.168.178.25/
attr WR enableCookies 1
attr WR verbose 5
das list dazu ist
Internals:
BUSY 0
DEF http://192.168.178.25/
FUUID 6335aa22-f33f-8bd2-f525-1806d323fa090851
Interval 300
LastAuthTry 2022-10-12 20:32:49
MainURL http://192.168.178.25/
ModuleVersion 4.1.12 - 19.4.2022
NAME WR
NOTIFYDEV global
NR 111
NTFY_ORDER 50-WR
STATE ???
TYPE HTTPMOD
eventCount 3
value
CompiledRegexes:
HttpUtils:
NAME
addr http://192.168.178.25:80
auth 0
buf
code 200
compress 1
conn
data
displayurl http://192.168.178.25/
header
host 192.168.178.25
httpheader HTTP/1.0 200 OK
Content-Type: text/html
Accept-Ranges: bytes
ETag: "1063921526"
Last-Modified: Mon, 16 May 2022 16:10:41 GMT
Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0
Content-Length: 4591
Connection: close
Date: Thu, 13 Oct 2022 06:30:31 GMT
Server: webserver
httpversion 1.0
hu_blocking 0
hu_filecount 1
hu_port 80
hu_portSfx
ignoreredirects 1
loglevel 4
path /
protocol http
redirects 0
timeout 2
url http://192.168.178.25/
sslargs:
QUEUE:
READINGS:
REQUEST:
context reading
data
header
ignoreredirects 0
num unknown
retryCount 0
type update
url http://192.168.178.25/
Attributes:
enableCookies 1
verbose 5
Gruß und schon mal Danke
Jörg
Warum nicht einfach mal schauen, ob es im Forum das Thema schonmal gab, bevor man einen neuen Thread aufmacht?
Wenn ich in das Suchfeld oben rechts "Fronius" eingebe, kommen 4 Seiten mit Ergebnissen hier aus dem Forum.
Und wenn ich das richtig sehe, ist da sogar ein eigenes FHEM Modul aufgeführt.
ja, hab ich. aber die Themen die dort behandelt werden beantworten nicht meine Frage. Ich habe auch das besagte Modul ausprobiert. Das funktioniert gut. Mir geht es aber um eine bestimmte Funktion die ich in der Web-Oberfläche ein/ausschalten möchte. Ich bin mir schon bewusst, dass es nicht zielführend ist Dinge erneut zu fragen wo es schon Antworten gibt. ich beschäftige mich auch schon eine weile mit FHEM und komme mit den Forenbeiträgen in der Regel gut zurecht - aber hier bei diesem Thema komme ich einfach nicht weiter.
ich hab das vor einer Weile mal benötigt, und nach etwas trial and error hats auch geklappt:
Man nutzt die sid* Attribuge vom Modul um zu konfigurieren was zu tun ist wenn eine anfrage nicht klappt.
bei mir sah das grob so aus:
define web.gourmetta.token.Emma HTTPMOD <url>
attr web.gourmetta.token.Emma requestHeader1 Authorization: Bearer $sid
attr web.gourmetta.token.Emma reAuthJSON errorSummary
attr web.gourmetta.token.Emma sidData {"login":"<user>","password":"<password>"}
attr web.gourmetta.token.Emma sidHeader Content-Type: application/json
attr web.gourmetta.token.Emma sid1IdJSON token
attr web.gourmetta.token.Emma sid1URL <url to login page>
Die Idee dahinter ist so: HTTPMOD versucht eine ganz normale Anfrage von <url>. In meinem Fall, wenn das nicht klappt weil man nicht eingeloggt ist, kommt ein JSON-Objekt zurück, in dem das Wort "errorSummary" steht. Via reAuthJSON sagt man HTTPMOD, dass es in dem Fall erstmal über ein Login einen Token besorgen muss.
Das wiederum ist in den sid*-Attributen festgelegt.
Das Modul holt nun via der sid1URL den LoginToken, und speichert ihn in der variable $sid.
Und danach wird die eigentliche Anfrage wiederholt, diesmal nur mit der $id.
In der Commandref ist diese Funktionalität auch recht umfänglich beschrieben.
okay - wie gesagt - es handelt sich um ein Fronius Wechselrichter - die Autorisierung erfolgt über Digest.
Wenn ich in Burp den Traffic analysiere sieht ein gültiges GET so aus:
GET /config/batteries/ HTTP/1.1
Host: 192.168.178.25
Accept: application/json, text/plain, */*
Authorization: Digest username="service", realm="Webinterface area", nonce="6352373a:afc09f9fad0a9c3e4a34046b9bc0ed8f", uri="/config/batteries/", response="50028a387e5fac34443e76902b60c1a3", qop=auth, nc=00000011, cnonce="3a0fb1c4a1100d9b"
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.5249.62 Safari/537.36
Referer: http://192.168.178.25/
Accept-Encoding: gzip, deflate
Accept-Language: de-DE,de;q=0.9,en-US;q=0.8,en;q=0.7
Cookie: lang=de
Connection: close
Mein Frage ist - wie kann ich die notwendigen Daten generieren. Wenn ich eine CURL generiere funktioniert dann das GET auch - aber nur eine gewisse Zeit.