Anfängerfrage: Starten Ladevorgang Compleo Professional per HTTPMOD

Begonnen von Chris8888, 29 Juni 2023, 21:53:15

Vorheriges Thema - Nächstes Thema

Chris8888

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">&nbsp;&nbsp;ECU</a></div>
<div class="menu"><a href="cgi_s_network.general" target="_parent">&nbsp;&nbsp;Netzwerk</a></div>
<div class="menu"><a href="cgi_s_periphery.overview" target="_parent">&nbsp;&nbsp;Peripherie</a></div>
<div class="menuactive"><a href="cgi_s_ldp1.session" target="_parent">&nbsp;&nbsp;LDP1</a></div>
<div class="submenu"><a href="cgi_s_ldp1.session" target="_parent">&nbsp;&nbsp;Session</a></div>
<div class="submenu"><a href="cgi_s_ldp1.common" target="_parent">&nbsp;&nbsp;Allgemein</a></div>
<div class="submenu"><a href="cgi_s_ldp1.authentication" target="_parent">&nbsp;&nbsp;Authentifizierung</a></div>
<div class="submenu"><a href="cgi_s_ldp1.meter" target="_parent">&nbsp;&nbsp;Z&auml;hler</a></div>
<div class="submenu"><a href="cgi_s_ldp1.rfid" target="_parent">&nbsp;&nbsp;RFID</a></div>
<div class="submenu"><a href="cgi_s_ldp1.load_management" target="_parent">&nbsp;&nbsp;Lastmanagement</a></div>
<div class="submenuactive"><a href="cgi_s_ldp1.remote_control" target="_parent">&nbsp;&nbsp;Remote control</a></div>
<div class="menu"><a href="cgi_s_system.system_data" target="_parent">&nbsp;&nbsp;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&auml;ltnis:</td><td>100 &permil;</td></tr><tr><td>Lastsch&uuml;tz:</td><td>geschlossen</td></tr><tr><td>Steckerverriegelung:</td><td>geschlossen</td></tr><tr><td>Widerstand Ladekabel:</td><td>680 &Omega;</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">&nbsp;<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&uuml;r zeitversetztes Laden:</td><td><input type="text" value="0" name="waittime" maxlength="10" size="10">&nbsp;Minuten</td></tr>
<tr><td>Maximale m&ouml;gliche Ladedauer :</td><td><input type="text" value="0" name="chargetime" maxlength="10" size="10">&nbsp;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)">&nbsp;Stop&nbsp;<input type="radio" name="start_stop" value="0" onclick="fade_(0,0)">&nbsp;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">&nbsp;&nbsp;&nbsp;Einstellungen &uuml;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
FHEM 6.0 auf einem PI4 mit div. Homematic-Komponenten, Alexa, Tablet-UI und Homebridge...und läuft einfach. Erweitert mit CCU3 und Homematic-IP...und läuft immer noch.

Chris8888

Hallo, hat den keiner eine Idee dazu? Geht das überhaupt?

Danke für einen Hinweis.

VG
Christian
FHEM 6.0 auf einem PI4 mit div. Homematic-Komponenten, Alexa, Tablet-UI und Homebridge...und läuft einfach. Erweitert mit CCU3 und Homematic-IP...und läuft immer noch.

StefanStrobel

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

Chris8888

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&currentByContract=0&userfreetext1=&userfreetext2=&sessionUUID=&esid=

Was davon kann ich wie in HTTPMOD eintragen?
FHEM 6.0 auf einem PI4 mit div. Homematic-Komponenten, Alexa, Tablet-UI und Homebridge...und läuft einfach. Erweitert mit CCU3 und Homematic-IP...und läuft immer noch.

Chris8888

FHEM 6.0 auf einem PI4 mit div. Homematic-Komponenten, Alexa, Tablet-UI und Homebridge...und läuft einfach. Erweitert mit CCU3 und Homematic-IP...und läuft immer noch.

StefanStrobel

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&currentByContract=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

Chris8888

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....
FHEM 6.0 auf einem PI4 mit div. Homematic-Komponenten, Alexa, Tablet-UI und Homebridge...und läuft einfach. Erweitert mit CCU3 und Homematic-IP...und läuft immer noch.

Chris8888

FHEM 6.0 auf einem PI4 mit div. Homematic-Komponenten, Alexa, Tablet-UI und Homebridge...und läuft einfach. Erweitert mit CCU3 und Homematic-IP...und läuft immer noch.

StefanStrobel

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