Hallo,
mittels HTTPMOD möchte ich EVCC zur Steuerung meiner Wallbox auslesen und steuern.
Die wichtigsten Werte habe ich mir zusammengesucht und möchte nun auch Änderungen vornehmen können., z.B. das Ladeziel (Target-SoC) anpassen. Das Ändern des Ladeziels funktioniert (set103URL). Allerdings dauert es bis zum nächsten reread bis der Wert auch angezeigt wird.
Ich habe den Beitrag https://forum.fhem.de/index.php/topic,123006.msg1175353.html mit dem FollowGet gefunden, jedoch verwende ich bei mir keine einzelnen gets für die Readings oder ich komme noch nicht dahinter, wie das FollowGet entsprechend anwendet.
Kann ich irgendwie das gesamte Device nach dem Set neu einlesen lassen?
Grüße
Torsten
Internals:
BUSY 0
CFGFN
DEF http://192.168.4.5:7070/api/state 60
FUUID 64079d14-f33f-6dec-538d-4ea68b360be75cd5
Interval 60
MainURL http://192.168.4.5:7070/api/state
ModuleVersion 4.1.15 - 17.12.2022
NAME Warp2
NOTIFYDEV global
NR 7047
NTFY_ORDER 50-Warp2
STATE 0.000 kW
TYPE HTTPMOD
eventCount 295
value
HttpUtils:
NAME
addr http://192.168.4.5:7070
auth 0
buf
code 200
compress 1
conn
data
displayurl http://192.168.4.5:7070/api/state
header
host 192.168.4.5
httpheader HTTP/1.0 200 OK
Content-Encoding: gzip
Content-Type: application/json; charset=UTF-8
Vary: Accept-Encoding
Date: Thu, 09 Mar 2023 19:30:39 GMT
Content-Length: 790
httpversion 1.0
hu_blocking 0
hu_filecount 1
hu_port 7070
hu_portSfx :7070
ignoreredirects 1
loglevel 4
path /api/state
protocol http
redirects 0
timeout 2
url http://192.168.4.5:7070/api/state
sslargs:
QUEUE:
READINGS:
2023-03-09 20:30:39 Auto Corsa
2023-03-09 20:30:39 Auto_SoC 0
2023-03-09 20:30:39 Auto_vorhanden 0
2023-03-09 20:30:39 Gesamtstromverbrauch 0
2023-03-09 20:30:39 Ladeleistung 0
2023-03-09 20:30:39 Lademodus minpv
2023-03-09 20:30:39 Laden 0
2023-03-09 20:30:39 Ladestrom_min 6
2023-03-09 20:30:39 Wallbox_aktiv 0
2023-03-09 20:30:39 Wallbox_verbunden 0
2023-03-09 20:30:39 Ziel_SoC 75
REQUEST:
context reading
data
header
ignoreredirects 0
num unknown
retryCount 0
type update
url http://192.168.4.5:7070/api/state
defptr:
readingBase:
Auto reading
Auto_SoC reading
Auto_vorhanden reading
Gesamtstromverbrauch reading
Ladeleistung reading
Lademodus reading
Laden reading
Ladestrom_min reading
Wallbox_aktiv reading
Wallbox_verbunden reading
Ziel_SoC reading
readingNum:
Auto 100
Auto_SoC 112
Auto_vorhanden 111
Gesamtstromverbrauch 102
Ladeleistung 101
Lademodus 107
Laden 106
Ladestrom_min 110
Wallbox_aktiv 104
Wallbox_verbunden 105
Ziel_SoC 103
readingOutdated:
requestReadings:
update:
Auto reading 100
Auto_SoC reading 112
Auto_vorhanden reading 111
Gesamtstromverbrauch reading 102
Ladeleistung reading 101
Lademodus reading 107
Laden reading 106
Ladestrom_min reading 110
Wallbox_aktiv reading 104
Wallbox_verbunden reading 105
Ziel_SoC reading 103
hmccu:
Attributes:
enableControlSet 1
enableCookies 1
enforceGoodReadingNames 1
event-on-change-reading .*
get01CheckAllReadings 1
handleRedirects 1
reading100JSON result_vehicles_0
reading100Name Auto
reading101JSON result_loadpoints_01_chargePower
reading101Name Ladeleistung
reading102JSON result_loadpoints_01_connected
reading102Name Gesamtstromverbrauch
reading103JSON result_loadpoints_01_targetSoc
reading103Name Ziel_SoC
reading104JSON result_loadpoints_01_enabled
reading104Name Wallbox_aktiv
reading105JSON result_loadpoints_01_connected
reading105Name Wallbox_verbunden
reading106JSON result_loadpoints_01_charging
reading106Name Laden
reading107JSON result_loadpoints_01_mode
reading107Name Lademodus
reading108JSON result_loadpoints_01_minCurrent
reading108Name Ladestrom_min
reading110JSON result_loadpoints_01_maxCurrent
reading110Name Ladestrom_min
reading111JSON result_loadpoints_01_vehiclePresent
reading111Name Auto_vorhanden
reading112JSON result_loadpoints_01_vehicleSoc
reading112Name Auto_SoC
room Carport
set103IMap 75:75, 80:80, 85:85, 90:90, 95:95, 100:100
set103Method POST
set103Name Ladeziel
set103URL http://192.168.4.5:7070/api/loadpoints/1/target/soc/$val
stateFormat {sprintf("%.3f kW",
ReadingsNum($name,"Ladeleistung",0)/1000)}
Du kannst die URL aus dem DEF auch in ein get packen und im DEF anstatt der URL none eintragen.
Beim get definierst du dann getXXPoll=1, damit das get automatisch mit dem angegeben Interval (in DEF) ausgeführt wird.
Das get kannst du dann außerdem auch als FollowGet nach deinem Set ausführen lassen
Kannst dir ja mal meine (ursprüngliche) PiHole-Definition (https://forum.fhem.de/index.php/topic,84031.msg1249306.html#msg1249306) anschauen, da hatte ich auch noch FollowGets drin:
gb#
Hallo Benni,
danke, das funktioniert.
Werden die anderen Readings weiterhin minütlich abgerufen?
Wie verhält es sich, wenn ich einen weiteren Werte setzen möchte? Das gleiche Get mit der URL nochmal definieren? Es kommt ja alles von einer der gleichen Seite / API-Abfrage.
Torsten
Zu früh gefreut, der Wert aktualisiert sich doch nicht nach dem Set. Ein manuelles Get danach liefert den Wert.
Kann ich prüfen, ob das FollowGet greift? Oder vielleicht ist die API nur nicht schnell genug für das FollowGet? Ist ein kurze Verzögerung möglich?
Torsten
Internals:
BUSY 0
CFGFN
DEF none 60
FUUID 640b1236-f33f-6dec-c2b0-e97658ef1b063f21
GetChainLength 11
Interval 60
MainURL
ModuleVersion 4.1.15 - 17.12.2022
NAME Warp2
NOTIFYDEV global
NR 14249
NTFY_ORDER 50-Warp2
STATE 0.000 kW
TYPE HTTPMOD
eventCount 16
value
HttpUtils:
NAME
addr http://192.168.4.5:7070
auth 0
buf
code 200
compress 1
conn
data
displayurl http://192.168.4.5:7070/api/state
header
host 192.168.4.5
httpheader HTTP/1.0 200 OK
Content-Encoding: gzip
Content-Type: application/json; charset=UTF-8
Vary: Accept-Encoding
Date: Fri, 10 Mar 2023 11:33:58 GMT
Content-Length: 814
httpversion 1.0
hu_blocking 0
hu_filecount 1
hu_port 7070
hu_portSfx :7070
ignoreredirects 1
loglevel 4
path /api/state
protocol http
redirects 0
timeout 2
url http://192.168.4.5:7070/api/state
sslargs:
QUEUE:
READINGS:
2023-03-10 12:33:58 Auto Corsa
2023-03-10 12:33:58 Auto_vorhanden 0
2023-03-10 12:33:58 Gesamtstromverbrauch 0
2023-03-10 12:33:58 Ladeleistung 0
2023-03-10 12:33:58 Lademodus minpv
2023-03-10 12:33:58 Laden 0
2023-03-10 12:33:58 Ladestand 0
2023-03-10 12:33:58 Ladestrom_min 6
2023-03-10 12:33:58 Ladeziel 95
2023-03-10 12:33:58 Wallbox_aktiv 0
2023-03-10 12:33:58 Wallbox_verbunden 0
REQUEST:
context get
data
header
ignoreredirects 0
num 103
retryCount 0
type get103
url http://192.168.4.5:7070/api/state
value
defptr:
readingBase:
Auto reading
Auto_vorhanden reading
Gesamtstromverbrauch reading
Ladeleistung reading
Lademodus reading
Laden reading
Ladestand reading
Ladestrom_min reading
Ladeziel reading
Wallbox_aktiv reading
Wallbox_verbunden reading
readingNum:
Auto 100
Auto_vorhanden 111
Gesamtstromverbrauch 102
Ladeleistung 101
Lademodus 107
Laden 106
Ladestand 112
Ladestrom_min 110
Ladeziel 103
Wallbox_aktiv 104
Wallbox_verbunden 105
readingOutdated:
requestReadings:
get103:
Auto reading 100
Auto_vorhanden reading 111
Gesamtstromverbrauch reading 102
Ladeleistung reading 101
Lademodus reading 107
Laden reading 106
Ladestand reading 112
Ladestrom_min reading 110
Ladeziel reading 103
Wallbox_aktiv reading 104
Wallbox_verbunden reading 105
hmccu:
lastpoll:
Ladeziel 1678447998.27307
Attributes:
enableControlSet 1
enableCookies 1
enforceGoodReadingNames 1
event-on-change-reading .*
get01CheckAllReadings 1
get103FollowGet Ladeziel
get103Name Ladeziel
get103Poll 1
get103URL http://192.168.4.5:7070/api/state
handleRedirects 1
reading100JSON result_vehicles_0
reading100Name Auto
reading101JSON result_loadpoints_01_chargePower
reading101Name Ladeleistung
reading102JSON result_loadpoints_01_connected
reading102Name Gesamtstromverbrauch
reading103JSON result_loadpoints_01_targetSoc
reading103Name Ladeziel
reading104JSON result_loadpoints_01_enabled
reading104Name Wallbox_aktiv
reading105JSON result_loadpoints_01_connected
reading105Name Wallbox_verbunden
reading106JSON result_loadpoints_01_charging
reading106Name Laden
reading107JSON result_loadpoints_01_mode
reading107Name Lademodus
reading108JSON result_loadpoints_01_minCurrent
reading108Name Ladestrom_min
reading110JSON result_loadpoints_01_maxCurrent
reading110Name Ladestrom_min
reading111JSON result_loadpoints_01_vehiclePresent
reading111Name Auto_vorhanden
reading112JSON result_loadpoints_01_vehicleSoc
reading112Name Ladestand
room Carport
set103Hint 75,80,85,90,95,100
set103Method POST
set103Name Ladeziel
set103URL http://192.168.4.5:7070/api/loadpoints/1/target/soc/$val
stateFormat {sprintf("%.3f kW",
ReadingsNum($name,"Ladeleistung",0)/1000)}
Du hast das FollowGet auch im get definiert, das macht ja keinen Sinn!
Du musst das FollowGet im Set angeben, denn es soll ja nach dem Set ausgeführt werden.
Und natürlich kannst du ein Get mehrfach bei unterschiedlichen Set als FollowGet angeben.
Sollte schätzungsweise so aussehen (RawDef):
defmod Warp2 HTTPMOD none 60
attr Warp2 enableControlSet 1
attr Warp2 enableCookies 1
attr Warp2 enforceGoodReadingNames 1
attr Warp2 event-on-change-reading .*
attr Warp2 get103CheckAllReadings 1
attr Warp2 get103Name Ladeziel
attr Warp2 get103Poll 1
attr Warp2 get103URL http://192.168.4.5:7070/api/state
attr Warp2 handleRedirects 1
attr Warp2 reading100JSON result_vehicles_0
attr Warp2 reading100Name Auto
attr Warp2 reading101JSON result_loadpoints_01_chargePower
attr Warp2 reading101Name Ladeleistung
attr Warp2 reading102JSON result_loadpoints_01_connected
attr Warp2 reading102Name Gesamtstromverbrauch
attr Warp2 reading103JSON result_loadpoints_01_targetSoc
attr Warp2 reading103Name Ladeziel
attr Warp2 reading104JSON result_loadpoints_01_enabled
attr Warp2 reading104Name Wallbox_aktiv
attr Warp2 reading105JSON result_loadpoints_01_connected
attr Warp2 reading105Name Wallbox_verbunden
attr Warp2 reading106JSON result_loadpoints_01_charging
attr Warp2 reading106Name Laden
attr Warp2 reading107JSON result_loadpoints_01_mode
attr Warp2 reading107Name Lademodus
attr Warp2 reading108JSON result_loadpoints_01_minCurrent
attr Warp2 reading108Name Ladestrom_min
attr Warp2 reading110JSON result_loadpoints_01_maxCurrent
attr Warp2 reading110Name Ladestrom_min
attr Warp2 reading111JSON result_loadpoints_01_vehiclePresent
attr Warp2 reading111Name Auto_vorhanden
attr Warp2 reading112JSON result_loadpoints_01_vehicleSoc
attr Warp2 reading112Name Ladestand
attr Warp2 room Carport
attr Warp2 set103FollowGet Ladeziel
attr Warp2 set103Hint 75,80,85,90,95,100
attr Warp2 set103Method POST
attr Warp2 set103Name Ladeziel
attr Warp2 set103URL http://192.168.4.5:7070/api/loadpoints/1/target/soc/$val
attr Warp2 stateFormat {sprintf("%.3f kW", ReadingsNum($name,"Ladeleistung",0)/1000)}
Ob du das CheckAllReadings wirklich brauchst, weiß ich nicht. Du hattest das für ein get01 definiert, das es aber nicht gab. Ich habe dann einfach mal angenommen, dass es wohl auch zum get103 gehört.
Wie auch immer, für die FollowGet-Funktionalität spielt das keine Rolle
gb#
Zitat von: Benni am 10 März 2023, 15:34:42
Du hast das FollowGet auch im get definiert, das macht ja keinen Sinn!
Du musst das FollowGet im Set angeben, denn es soll ja nach dem Set ausgeführt werden.
Stimmt! So wird der Wert auch sofort wieder ausgelesen. Ist mein erstes HTTPMOD-Gerät.
Danke.