HTTPMOD: reread nach set

Begonnen von iron.eagle, 09 März 2023, 20:42:11

Vorheriges Thema - Nächstes Thema

iron.eagle

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)}

Benni

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 anschauen, da hatte ich auch noch FollowGets drin:

gb#

iron.eagle

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

iron.eagle

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)}

Benni

#4
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#

iron.eagle

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.