Hallo zusammen,
ich möchte gerne den Ladevorgang meiner Wallbox über das Webportal starten und stoppen.
Leider hat die Box keine API o.ä., also bleibt nur HTTPMOD.
Für mich eine echte Herausforderung!
Ich habe inzwischen den Login hinbekommen und brauche jetzt aber Hilfe.
So sieht der HTML-Body aus:
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html><head><title>ECU v2.1.43</title>
<meta http-equiv="content-type" content="text/html; charset=UTF-8">
<meta http-equiv="expires" content="0">
<meta http-equiv="cache-control" content="no-cache">
<meta http-equiv="pragma" content="no-cache">
<script type="text/javascript" src="./public/java.js"></script>
<link rel="stylesheet" type="text/css" href="./public/style.css">
<link rel="stylesheet" type="text/css" href="./public/style_fw.css">
<link rel="icon" type="image/png" href="./public/icons/favicon.png">
</head>
<body>
<div class="sheet"><div class="head">
<img src="./public/icons/top_bar.jpg" alt="home"><div id="button_home"><a href="cgi_s_home" target="_parent" title="home"></a></div>
<div id="button_de"><a href="cgi_c_lang_de" target="_parent" title="Deutsch">
<img src="./public/icons/de.png" alt="Deutsch" style="border: 0px"></a></div>
<div id="button_gb"><a href="cgi_c_lang_en" target="_parent" title="Englisch">
<img src="./public/icons/gb.png" alt="Englisch" style="border: 0px"></a></div>
</div>
<div class="navi">
<div class="menu"><a href="cgi_s_ecu.overview" target="_parent"> ECU</a></div>
<div class="menu"><a href="cgi_s_network.general" target="_parent"> Netzwerk</a></div>
<div class="menu"><a href="cgi_s_periphery.overview" target="_parent"> Peripherie</a></div>
<div class="menuactive"><a href="cgi_s_ldp1.session" target="_parent"> LDP1</a></div>
<div class="submenu"><a href="cgi_s_ldp1.session" target="_parent"> Session</a></div>
<div class="submenu"><a href="cgi_s_ldp1.common" target="_parent"> Allgemein</a></div>
<div class="submenu"><a href="cgi_s_ldp1.authentication" target="_parent"> Authentifizierung</a></div>
<div class="submenu"><a href="cgi_s_ldp1.meter" target="_parent"> Zähler</a></div>
<div class="submenu"><a href="cgi_s_ldp1.rfid" target="_parent"> RFID</a></div>
<div class="submenu"><a href="cgi_s_ldp1.load_management" target="_parent"> Lastmanagement</a></div>
<div class="submenuactive"><a href="cgi_s_ldp1.remote_control" target="_parent"> Remote control</a></div>
<div class="menu"><a href="cgi_s_system.system_data" target="_parent"> System</a></div>
</div>
<div class="main">
<div class="box">
<h1>Remote control</h1>
</div>
<div class="box">
<table>
<tr><td>PWM Status:</td><td>C</td></tr><tr><td>Aktuelles Tastverhältnis:</td><td>100 ‰</td></tr><tr><td>Lastschütz:</td><td>geschlossen</td></tr><tr><td>Steckerverriegelung:</td><td>geschlossen</td></tr><tr><td>Widerstand Ladekabel:</td><td>680 Ω</td></tr><tr><td>Statuswort Ladepunkt:</td><td>0x001c0021c560ac08</td></tr>
</table>
</div>
<div class="box">
<form method=POST action="cgi_s_ldp1.remote_control"> <input type="submit" value="Aktualisieren"></form>
</div>
<form method="POST" action=cgi_c_ldp1.remote_control>
<div class="box"><table>
<tr><td>Max. Wartezeit für zeitversetztes Laden:</td><td><input type="text" value="0" name="waittime" maxlength="10" size="10"> Minuten</td></tr>
<tr><td>Maximale mögliche Ladedauer :</td><td><input type="text" value="0" name="chargetime" maxlength="10" size="10"> Minuten</td></tr>
<tr><td>Contract ID:</td><td><input type="text" value="" name="contractID" maxlength="128" size="40"></td></tr>
<tr><td>RFID UID:</td><td><input type="text" value="" name="rfid_uid" maxlength="20" size="20"></td></tr>
<tr><td>Remote Ladevorgang</td><td><input type="radio" name="start_stop" value="1" checked onclick="fade_(0,0)"> Stop <input type="radio" name="start_stop" value="0" onclick="fade_(0,0)"> Start</td></tr>
<tr><td>Max. Strom [A]:</td><td><input type="text" value="50" name="currentByContract" maxlength="10" size="10"></td></tr>
<tr><td>Reservierung</td><td><input type="hidden" value="0"><input id="CHECKBOX__0_0" type="checkbox" name="ldp_reservation_flag" value="1" onclick="fade_(0,0)"><tr><td>Frei Text 1:</td><td><input type="text" value="" name="userfreetext1" maxlength="60" size="40"></td></tr>
<tr><td>Frei Text 2:</td><td><input type="text" value="" name="userfreetext2" maxlength="60" size="40"></td></tr>
<tr><td>Session ID:</td><td><input type="text" value="" name="sessionUUID" maxlength="41" size="40"></td></tr>
<tr><td>ESID:</td><td><input type="text" value="" name="esid" maxlength="128" size="40"></td></tr>
</table>
</div><div class="box"><input type="submit" value="OK"> Einstellungen übernehmen</div>
</form>
</div></div>
</body>
</html>
Ich möchte gerne über einen virtuellen Button in Fhem jeweils das Feld "Contract ID:" und "RFID UID:" immer mit dem gleichen Zahlenwert füllen, danach den RadioButton "Remote Ladevorgang" auf Start oder Stop setzen und dann die Box "OK" drücken.
Wie gehe ich dann das an? Get das mit Set oder Put?
Danke für eure Hilfe!
VG
Christian
Hallo, hat den keiner eine Idee dazu? Geht das überhaupt?
Danke für einen Hinweis.
VG
Christian
Hallo Christian,
Du solltest im Browser die entsprechenden Felder füllen und den Button anklicken und dann mitschneiden was Dein Browser an die Wallbox sendet.
Ich mache das meist mit der Burp-Suite.
Da siehst Du dann was für ein Request mit welchen Headern und welchen Daten gesendet wird.
Genau das kannst Du dann in HTTPMOD eintragen.
Gruss
Stefan
Hallo Stefan,
danke für den Hinweis.
Ich habe das jetzt mal installiert und den Post-Inhalt mitgeschnitten.
Aber ich werde nicht schlau daraus:
POST /cgi_c_ldp1.remote_control HTTP/1.1
Host: 192.168.xx.xx
Cookie: ecu_session=d8371b7830a5076e35bb1fba4fa72175
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:109.0) Gecko/20100101 Firefox/114.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,*/*;q=0.8
Accept-Language: de,en-US;q=0.7,en;q=0.3
Accept-Encoding: gzip, deflate
Content-Type: application/x-www-form-urlencoded
Content-Length: 155
Origin: https://192.168.xx.xx
Referer: https://192.168.xx.xx/cgi_c_login
Upgrade-Insecure-Requests: 1
Sec-Fetch-Dest: document
Sec-Fetch-Mode: navigate
Sec-Fetch-Site: same-origin
Sec-Fetch-User: ?1
Te: trailers
Connection: close
waittime=0&chargetime=0&contractID=xxxxxxx&rfid_uid=xxxxxx&start_stop=0¤tByContract=0&userfreetext1=&userfreetext2=&sessionUUID=&esid=
Was davon kann ich wie in HTTPMOD eintragen?
Keiner eine Idee?
Hallo Christian,
Zitat von: Chris8888 am 06 Juli 2023, 10:25:53User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:109.0) Gecko/20100101 Firefox/114.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,*/*;q=0.8
Accept-Language: de,en-US;q=0.7,en;q=0.3
Accept-Encoding: gzip, deflate
Content-Type: application/x-www-form-urlencoded
Content-Length: 155
Origin: https://192.168.xx.xx
Referer: https://192.168.xx.xx/cgi_c_login
Upgrade-Insecure-Requests: 1
Sec-Fetch-Dest: document
Sec-Fetch-Mode: navigate
Sec-Fetch-Site: same-origin
Sec-Fetch-User: ?1
Te: trailers
das sind alles Header, die Du 1:1 in HTTPMOD angeben kannst.
Wenn Du HTTPMOD anweist, sich um Cookies zu kümmern, dann sollte das auch passen.
Zitatwaittime=0&chargetime=0&contractID=xxxxxxx&rfid_uid=xxxxxx&start_stop=0¤tByContract=0&userfreetext1=&userfreetext2=&sessionUUID=&esid=
Das scheint der Body zu sein.
Fixe Anteile kannst Du so als Data angeben. Dinge, die sich ändern können, evt. als Replacements.
Gruss
Stefan
Hallo Stefan,
vielen Dank.
Ich bin um einiges weiter gekommen, aber der Startvorgang will einfach nicht gelingen.
Hier mein List:
ZitatAttributes:
enableCookies 1
reAuthRegex cgi_c_login
regexDecode UTF-8
room Entwicklung
set01Data1 waittime=0
set01Data10 esid=
set01Data2 chargetime=0
set01Data3 contractID=xx
set01Data4 rfid_uid=xx
set01Data5 start_stop=0
set01Data6 currentByContract=0
set01Data7 userfreetext1=
set01Data8 userfreetext2=
set01Data9 sessionUUID=
set01Header1 User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:109.0) Gecko/20100101 Firefox/114.0
set01Header10 Sec-Fetch-Dest: document
set01Header11 Sec-Fetch-Mode: navigate
set01Header12 Sec-Fetch-Site: same-origin
set01Header13 Sec-Fetch-User: ?1
set01Header14 Te: trailers
set01Header2 Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,*/*;q=0.8
set01Header3 Accept-Language: de,en-US;q=0.7,en;q=0.3
set01Header4 Accept-Encoding: gzip, deflate
set01Header5 Content-Type: application/x-www-form-urlencoded
set01Header6 Content-Length: 155
set01Header7 Origin: https://192.168.99.xx
set01Header8 Referer: https://192.168.99.xx/cgi_c_login
set01Header9 Upgrade-Insecure-Requests: 1
set01Name Ladevorgang
set01URL https://192.168.99.xx/cgi_s_ldp1.remote_control
showBody 1
sid01Data username=admin&password=xxx
sid01URL https://192.168.99.xx/cgi_c_login
Im Log von FHEM sieht es eigentlich gut aus:
Zitat2023.07.16 14:45:05 5: Wallbox: set called with Ladevorgang
2023.07.16 14:45:05 5: Wallbox: set found option Ladevorgang in attribute set01Name
2023.07.16 14:45:05 4: Wallbox: set will now set Ladevorgang -> 0
2023.07.16 14:45:05 5: Wallbox: AddToQueue adds type set01 to URL https://192.168.99.xx/cgi_s_ldp1.remote_control, data waittime=0
esid=
chargetime=0
contractID=xx
rfid_uid=xx
start_stop=0
currentByContract=0
userfreetext1=
userfreetext2=
sessionUUID=, header User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:109.0) Gecko/20100101 Firefox/114.0
Sec-Fetch-Dest: document
Sec-Fetch-Mode: navigate
Sec-Fetch-Site: same-origin
Sec-Fetch-User: ?1
Te: trailers
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,*/*;q=0.8
Accept-Language: de,en-US;q=0.7,en;q=0.3
Accept-Encoding: gzip, deflate
Content-Type: application/x-www-form-urlencoded
Content-Length: 155
Origin: https://192.168.99.xx
Referer: https://192.168.99.xx/cgi_c_login
Upgrade-Insecure-Requests: 1, retry 0, initial queue len: 0
2023.07.16 14:45:05 5: Wallbox: HandleSendQueue called from AddToSendQueue, qlen = 1
2023.07.16 14:45:05 5: Wallbox: HandleSendQueue is using Cookie ecu_session with path and Value 3a36399d52bde4c1c7e85912bbd4f178 (key ecu_session;, destination path is /cgi_s_ldp1.remote_control)
2023.07.16 14:45:05 5: Wallbox: DoCookies is adding Cookie header: ecu_session=3a36399d52bde4c1c7e85912bbd4f178
2023.07.16 14:45:05 4: Wallbox: HandleSendQueue sends set01 with timeout 2 to https://192.168.99.xx/cgi_s_ldp1.remote_control,
data: waittime=0
esid=
chargetime=0
contractID=xx
rfid_uid=xx
start_stop=0
currentByContract=0
userfreetext1=
userfreetext2=
sessionUUID=,
header: User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:109.0) Gecko/20100101 Firefox/114.0
Sec-Fetch-Dest: document
Sec-Fetch-Mode: navigate
Sec-Fetch-Site: same-origin
Sec-Fetch-User: ?1
Te: trailers
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,*/*;q=0.8
Accept-Language: de,en-US;q=0.7,en;q=0.3
Accept-Encoding: gzip, deflate
Content-Type: application/x-www-form-urlencoded
Content-Length: 155
Origin: https://192.168.99.xx
Referer: https://192.168.99.xx/cgi_c_login
Upgrade-Insecure-Requests: 1
Cookie: ecu_session=3a36399d52bde4c1c7e85912bbd4f178
2023.07.16 14:45:06 5: Wallbox: ReadCallback called from __ANON__
2023.07.16 14:45:06 4: Wallbox: Read callback: request type was set01 retry 0,
Leider ist die Response im Anschluss dann wieder so, als wenn ich nichts abgeschickt hätte.
Hier komme ich leider nicht weiter....
Ich wäre für jede Hilfe wirklich dankbar.....
In Deinem ersten Beispiel war es ein HTTP1.1-Request.
HTTPMOD macht ohne weitere Angabe HTTP1.0.
Das könnte noch etwas ausmachen.
Ansonsten musst Du Feld für Feld vergleichen, wo der Unterscheid ist...
Gruss
Stefan