Neue Version von HTTPMOD mit neuen Features zum Testen

Begonnen von StefanStrobel, 05 Dezember 2015, 08:31:32

Vorheriges Thema - Nächstes Thema

Slanesh

Hallo zusammen,

ich habe mich über das Wochenende erstmals mit dem HTTPMOD beschäftigt, um den Ladastatus meines Autos aus der Wallbox auszulesen.

List vom Device:
Internals:
   BUSY       0
   CFGFN     
   DEF        http://192.168.1.32/status.shtml 300
   FUUID      5f83e9d7-f33f-799c-ccd9-c8e850fecfb62c6e
   Interval   300
   LASTSEND   1602496391.74844
   MainURL    http://192.168.1.32/status.shtml
   ModuleVersion 4.0.06 - 26.9.2020
   NAME       HT_GA_Wallbox
   NOTIFYDEV  global
   NR         52713
   NTFY_ORDER 50-HT_GA_Wallbox
   STATE      1
   TRIGGERTIME 1602496691.74468
   TRIGGERTIME_FMT 2020-10-12 11:58:11
   TYPE       HTTPMOD
   addr       http://192.168.1.32:80
   auth       0
   code       200
   compress   1
   conn       
   data       
   displayurl http://192.168.1.32/status.shtml
   header     
   host       192.168.1.32
   httpbody   
<html><head>
<meta charset="utf-8">
<link href="./styles.css" type="text/css" rel="stylesheet" media="screen"><title>KeContact P30</title>

</head>

<body>
<h3>Status</h3>

<table class="status">
<tr>
<td class="left">
Product-ID
</td>
<td class="right">
<!--# SerNo -->KC-P30-EC240422-E0R-SN:19895047 ML:19815655
</td>
</tr>

<tr>
<td>
MAC Address
</td>
<td>
<!--# MAC -->00:60:b5:3c:79:16
</td>
</tr>
<tr>
<td>
Software
</td>
<td>
<!--# VERSION -->P30 v 3.10.7 (191213-101735) : 11358 : 318.0 : 2040003
</td>
</tr>

<tr>
<td>
Service Info
</td>
<td>
<!--# TempC -->0 : 0<br>1 : 1 : 0 : 0 : 554<br>0 : 1 : 1
</td>
</tr>

<tr>
<td>
State / Seconds
</td>
<td>
<!--# State --><b>plugged</b> : seconds : 18491722
</td>
</tr>

<tr>
<td>
Current limit (PWM | hardware setup)
</td>
<td>
<!--# Avail -->20,00A (33,3% duty cycle | 20A)
</td>
</tr>

</table>

<h3>Energy Monitor</h3>

<body>
<table class="status">

<tr>
<td class="left">
Voltage
</td>
<td class="right">
<!--# Volt -->227 | 229 | 231 V
</td>
</tr>

<tr>
<td>
Current
</td>
<td>
<!--# Curr -->0,00 | 0,00 | 0,00 A
</td>
</tr>

<tr>
<td>
RealPower | PowerFactor
</td>
<td>
<!--# Power --><b>0,00 kW | 0,0 %</b>
</td>
</tr>

<tr>
<td>
Energy (present session)
</td>
<td>
<!--# Energy --><b>26,31</b> kWh
</td>
</tr>

<tr>
<td>
Energy (total)
</td>
<td>
<!--# EnTotal --><b>26,31</b> kWh
</td>
</tr>

<tr>
<td>
Energy (housegrid meter) in | out
</td>
<td>
<!--# EnHouse -->-,--
</td>
</tr>

<tr>
<td>
Energy (solar meter) in | out
</td>
<td>
<!--# EnSolar -->-,--
</td>
</tr>
</table>

<br>
<span style="font-size:80%">Voltage and current show present values for L1 | L2 | L3<br>
Values displayed may not be used for billing purposes<br>
Energy monitor values shown as -,-- indicate : not available with this product</span>
</body></html>

   httpheader HTTP/1.0 200 OK
Server: lwIP/1.3.2 (http://www.sics.se/~adam/lwip/)
Content-type: text/html
Expires: Fri, 10 Apr 2008 14:00:00 GMT
Pragma: no-cache
   httpversion 1.0
   hu_blocking 0
   hu_filecount 59
   hu_port    80
   hu_portSfx
   ignoreredirects 1
   loglevel   4
   path       /status.shtml
   protocol   http
   redirects  0
   timeout    2
   url        http://192.168.1.32/status.shtml
   value      0
   CompiledRegexes:
   QUEUE:
   READINGS:
     2020-10-12 11:48:11   SerialNo        1
   REQUEST:
     data       
     header     
     ignoreredirects 0
     retryCount 0
     type       update
     url        http://192.168.1.32/status.shtml
     value      0
   defptr:
     readingBase:
       SerialNo   reading
     readingNum:
       SerialNo   1
     readingOutdated:
     requestReadings:
       update:
         SerialNo   reading 1
   sslargs:
Attributes:
   reading1Name State
   reading1Regex State=<!--# State -->.*
   showBody   1
   stateFormat State
   userattr   reading1Name reading1Regex


Ich würde gerne den im Body ausgegebenen Wert hinter "<!--# State -->" (z.B. charging, plugged) als Status des Devices verwenden. In der Form wie ich es hier gebaut habe, bekomme ich aber immer den Wert 1 für reading1 bzw. Device-State ausgegeben. 

Ich muss dazusagen, dass ich mich das erste Mal mit regulären Ausdrücken beschäftige und hier das Problem vermute. Den Body habe ich mit der RegEx auf https://regex101.com/ getestet. Kann es sein, dass in FHEM die Sonderzeichen (<,!,-,#) als Bestandteil der RegEx interpretiert werden und irgendwie "escaped" werden müssen?

Viele Grüße
Slanesh
Intel NUC, 2x HM-LAN, 1x CUL-USB, 2x CCU2, 1x Harmony-Hub, 20x HM-LC-Sw1PBU-FM, 5x HM-LC-SW1-PL2, JeeLink mit 15x TX-29-DTH, 7x HM-SEC-SC-2, 3x HM-LC-SW1-BA-PCB, 8x HM-SEC-SD, 3x HM-SEC-MDIR-2, 2x HM-ES-PMSw1-Pl, 8x HmIP-BWTH, 3xHM-CC-RT-DN, 16xHM-LC-Bl1PBU-FM, 8x HM-SEC-SCo, 1xHM-ES-PMSw1-SM

amenomade

Du brauchst ein "capturing group" in Klammern, um den Wert zu bekommen, sonnst kriegst Du nur 1 = "hat gematcht"

reading1Regex <!--# State --><b>(.*?)<
Pi 3B, Alexa, CUL868+Selbstbau 1/2λ-Dipol-Antenne, USB Optolink / Vitotronic, Debmatic und HM / HmIP Komponenten, Rademacher Duofern Jalousien, Fritz!Dect Thermostaten, Proteus

StefanStrobel

#932
Hallo Christian,

ich versuche das mal für mich zu übersetzen:
HTTPMOD sollte per definierbarem Set-Befehl temporäre Werte sammeln, die dann bei einem weiteren Set-Befehl gemeinsam in den HTTP-Request eingebaut werden können.
Mehrere Werte in einer Zeile wären eine Sache, die ich eher bei Fhemweb sehe. Wenn das dort unterstützt wäre, könnte man mit einem geeigneten Hint z.B. eine Liste von Werten in ein Reading setzen. Ohne das bleibt uns nach meinem Verständnis nur der Weg, der auch schon bei Dummies geht.
Das könnte dann so aussehen, dass man z.B. set05Temp 1 setzt, damit HTTPMOD den gesetzten Wert einfach in ein Reading mit dem bei set05Name angegebenen Wert setzt und keinen HTTP-Request absetzen möchte. Dann bräuchte man dafür keinen Dummy.
Ein Replacement bräuchte man aber immer noch, denn sonst kann HTTPMOD ja nicht erkennen, welcher Wert wohin gehört. Das kann aber ein einziges generisches Replacement mit Mode expression sein.
Würde das passen?

Ich hab das in der angehängten Version mal ausprobiert...

Gruss
    Stefan

ch.eick

Zitat von: StefanStrobel am 12 Oktober 2020, 18:38:14
Hallo Christian,

ich versuche das mal für mich zu übersetzen:
HTTPMOD sollte per definierbarem Set-Befehl temporäre Werte sammeln, die dann bei einem weiteren Set-Befehl gemeinsam in den HTTP-Request eingebaut werden können.
Mehrere Werte in einer Zeile wären eine Sache, die ich eher bei Fhemweb sehe. Wenn das dort unterstützt wäre, könnte man mit einem geeigneten Hint z.B. eine Liste von Werten in ein Reading setzen. Ohne das bleibt uns nach meinem Verständnis nur der Weg, der auch schon bei Dummies geht.
Das könnte dann so aussehen, dass man z.B. set05Temp 1 setzt, damit HTTPMOD den gesetzten Wert einfach in ein Reading mit dem bei set05Name angegebenen Wert setzt und keinen HTTP-Request absetzen möchte. Dann bräuchte man dafür keinen Dummy.
Ein Replacement bräuchte man aber immer noch, denn sonst kann HTTPMOD ja nicht erkennen, welcher Wert wohin gehört. Das kann aber ein einziges generisches Replacement mit Mode expression sein.
Würde das passen?

Ich hab das in der angehängten Version mal ausprobiert...

Gruss
    Stefan
Hallo Stefan,

das schau ich mit morgen dann mal an.
Ich glaube Du denkst zu kompliziert!

ZitatMehrere Werte in einer Zeile wären eine Sache, die ich eher bei Fhemweb sehe.
Das scheint aber im Dummy implementiert zu sein.

Ich verwende nur das FhemWeb und genau da wird es gebraucht.
Mit der Implementierung wie beim Dummy, kann man einfach im Fhemweb die definierten readings mit Slidern und Auswahllisten neu setzen.
Danach wird das HTTPMOD dann ganz normal ausgeführt und nutzt quasi die readings mit der replacement Möglichkeit als Variablen.

Wie gesagt wäre mehrere Pulldowns und Slider in einer set Befehlsreihe die Krönung, aber das sehe ich auch eher beim Fhemweb.
Eine select Möglichkeit hast Du ja bereits mit set**Hint drin.

Hier mal ein Dummy Beispiel, was ich für die Beeinflussung von DOIFs und die Konfiguration verwende.

defmod Pool dummy
attr Pool DbLogExclude .*
attr Pool DbLogInclude state
attr Pool alias Pool_Softube
attr Pool event-on-change-reading .*
attr Pool group PV Eigenverbrauch
attr Pool icon scene_swimming
attr Pool readingList Pool_Button PowerLevelMinTime PowerLimitOn PowerLimitOff RunTimeMin RunTimePerDay RunTimePerDaySummer RunTimePerDayWinter SetCmdOff SetCmdOn TimeStartSummer TimeStartWinter TimeEnd
attr Pool room Strom->Photovoltaik
attr Pool setList Pool_Button:uzsuToggle,on,off PowerLevelMinTime:slider,30,30,300 PowerLimitOn:slider,500,100,1500 PowerLimitOff:slider,0,100,1000 RunTimeMin:slider,300,300,7200 RunTimePerDay:slider,900,300,64800 RunTimePerDaySummer:slider,900,300,7200 RunTimePerDayWinter:slider,3600,900,64800 SetCmdOff SetCmdOn TimeStartSummer:time TimeStartWinter:time TimeEnd:time
attr Pool sortby 06
attr Pool stateFormat state
attr Pool verbose 0
attr Pool webCmd Pool_Button

setstate Pool off
setstate Pool 2020-10-12 16:06:02 Pool_Button off
setstate Pool 2019-12-02 10:31:26 PowerLevelMinTime 600
setstate Pool 2019-11-13 10:58:18 PowerLimitOff 800
setstate Pool 2019-11-06 11:49:00 PowerLimitOn 1000
setstate Pool 2020-10-06 14:16:57 RunTimeMin 3600
setstate Pool 2020-10-12 06:15:00 RunTimePerDay 28800
setstate Pool 2020-08-16 13:17:45 RunTimePerDaySummer 3600
setstate Pool 2020-10-06 14:14:13 RunTimePerDayWinter 28800
setstate Pool 2019-08-01 14:18:08 SetCmdOff set shelly02 off 0
setstate Pool 2019-08-02 09:33:06 SetCmdOn set shelly02 on 0
setstate Pool 2019-10-31 21:53:28 TimeEnd 16:00
setstate Pool 2020-10-12 07:17:00 TimeStart 09:10
setstate Pool 2020-09-03 13:01:40 TimeStartSummer 12:30
setstate Pool 2020-09-03 13:10:56 TimeStartWinter 09:10
setstate Pool 2020-10-12 16:06:02 state off

RPI4; Docker; CUNX; Eltako FSB61NP; SamsungTV H-Serie; Sonos; Vallox; Luxtronik; 3x FB7490; Stromzähler mit DvLIR; wunderground; Plenticore 10 mit BYD; EM410; SMAEM; Modbus TCP
Contrib: https://svn.fhem.de/trac/browser/trunk/fhem/contrib/ch.eick

StefanStrobel

Hallo,

Ich habe die neue Version eingecheckt und hoffe, dass es keine größeren Probleme damit gibt.

Gruss
    Stefan

ch.eick

Zitat von: StefanStrobel am 20 Oktober 2020, 19:33:27
Ich habe die neue Version eingecheckt und hoffe, dass es keine größeren Probleme damit gibt.
Ist da meine komische Idee mit dem setList und readingList auch schon mit drin?
RPI4; Docker; CUNX; Eltako FSB61NP; SamsungTV H-Serie; Sonos; Vallox; Luxtronik; 3x FB7490; Stromzähler mit DvLIR; wunderground; Plenticore 10 mit BYD; EM410; SMAEM; Modbus TCP
Contrib: https://svn.fhem.de/trac/browser/trunk/fhem/contrib/ch.eick

StefanStrobel

Hallo Christian,

set01Temp o.ä. ist da mit drin. Im Prinzip müsstest Du damit das machen können, was Du möchtest, nur eben nicht in einer setList-Zeile, sondern so wie das bei HTTPMOD üblich ist als eigene Attribute für jeden Set.
Dokumentiert habe ich es aber noch nicht und über den Namen des Attributs bin ich auch noch nicht so glücklich. Evt. wäre set01DirectReading o.ä. deutlicher.

Gruss
    Stefan

ch.eick

Zitat von: StefanStrobel am 20 Oktober 2020, 19:56:06
set01Temp o.ä. ist da mit drin. Im Prinzip müsstest Du damit das machen können, was Du möchtest, nur eben nicht in einer setList-Zeile, sondern so wie das bei HTTPMOD üblich ist als eigene Attribute für jeden Set.
Dokumentiert habe ich es aber noch nicht und über den Namen des Attributs bin ich auch noch nicht so glücklich. Evt. wäre set01DirectReading o.ä. deutlicher.
Dann müsste man aber den Wert jedes mal wieder neu setzen.

Ich denke das wird es so nicht lösen können, da man bei einem set z.B. das Jahr, den Monat und den Tag setzen können muss.
Wahrscheinlich muss ich dann doch auf die Dokumentation oder ein Muster warten, damit ich es verstehen kann.


Wie würde man so etwas in dieser Art umsetzen können???
get38Hint1 _MONTH select,1,1,12
get38Hint2 _YEAR select 2019,2020,2021,2022

%_YEAR% wird durch das reading _YEAR ersetzt
%_MONTH% wird durch das reading _MONTH ersetzt
get38URL https://%JUDO_ipaddress%:8124/?group=consumption&command=water%20monthly&msgnumber=1&token=%token%&year=%_YEAR%&month=%_MONTH%


Gruß
    Christian
RPI4; Docker; CUNX; Eltako FSB61NP; SamsungTV H-Serie; Sonos; Vallox; Luxtronik; 3x FB7490; Stromzähler mit DvLIR; wunderground; Plenticore 10 mit BYD; EM410; SMAEM; Modbus TCP
Contrib: https://svn.fhem.de/trac/browser/trunk/fhem/contrib/ch.eick

yersinia

Mit der HTTPMOD Version
98_HTTPMOD.pm 22997 2020-10-20 17:31:50Z StefanStrobel
bekomme ich folgendes Warning nach einem FHEM Start:
2020.10.21 12:26:26 1: PERL WARNING: Use of uninitialized value $d in hash element at fhem.pl line 4590.
2020.10.21 12:26:26 1: stacktrace:
2020.10.21 12:26:26 1:     main::__ANON__                      called by fhem.pl (4590)
2020.10.21 12:26:26 1:     main::AttrVal                       called by ./FHEM/98_HTTPMOD.pm (2519)
2020.10.21 12:26:26 1:     HTTPMOD::ReadyForSending            called by ./FHEM/98_HTTPMOD.pm (2556)
2020.10.21 12:26:26 1:     HTTPMOD::HandleSendQueue            called by ./FHEM/98_HTTPMOD.pm (2143)
2020.10.21 12:26:26 1:     HTTPMOD::CheckRedirects             called by ./FHEM/98_HTTPMOD.pm (2314)
2020.10.21 12:26:26 1:     HTTPMOD::ReadCallback               called by FHEM/HttpUtils.pm (639)
2020.10.21 12:26:26 1:     main::__ANON__                      called by fhem.pl (760)

Sonst scheinen die HTTPMOD Devices zu laufen.
viele Grüße, yersinia
----
FHEM 6.3 (SVN) on RPi 4B with RasPi OS Bullseye (perl 5.32.1) | FTUI
nanoCUL->2x868(1x ser2net)@tsculfw, 1x433@Sduino | MQTT2 | Tasmota | ESPEasy
VCCU->14xSEC-SCo, 7xCC-RT-DN, 5xLC-Bl1PBU-FM, 3xTC-IT-WM-W-EU, 1xPB-2-WM55, 1xLC-Sw1PBU-FM, 1xES-PMSw1-Pl

betateilchen

Das Problem ist der Funktionsaufruf in HTTPMOD (2556)


    return if (!ReadyForSending());


ohne übergebenen Parameter an ReadyForSending().

In Zeile 2497 und 2498 passiert dann folgendes:


sub ReadyForSending {
    my $hash   = shift;
    my $name   = $hash->{NAME};


Wenn man aber die Funktion ohne Parameter aufruft, gibt es keinen Inhalt für $hash, den man mit shift zuweisen könnte.
Und wenn es in $hash nix gibt, dann gibt es logischerweise auch in $name danach keinen Wert.

Trotzdem wird in Zeile 2519 versucht, einen Attributwert zu ermitteln


    my $minSendDelay = AttrVal($hash->{NAME}, "minSendDelay", 0.2);


Man hat zwar daran gedacht, einen default Wert zu definieren. Aber wenn man AttrVal() ohne definierten (!) deviceName aufruft, kommt es zur Warnung in perl.
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

StefanStrobel

Danke für den Hinweis.
Ich habe gerade ein update eingecheckt.

Gruss
    Stefan

andies

Kann mir mal jemand helfen? Ich habe das Problem, dass ich in einer Webseite (Blackboard) einmal täglich eine bestimmte URL aufrufen muss:
https://lms.fu-berlin.de/lms-apps/management/index.php/webserviceVbrick?action=toolStart&courseId=XXXXXXXXXX&invoker=aaaaaaaaaaa
Das funktioniert aber nur, wenn ich mich vorher eingelogged habe,
POST /idp-fub/profile/SAML2/Redirect/SSO;jsessionid=315B76FD353E277B92A459BF8CAED0C0?execution=e1s1 HTTP/1.1
Host: identity.fu-berlin.de

j_username=**********&j_password=**********&_eventId_proceed=

Auf diese Seite komme ich "normalerweise" durch Aufruf einer Loginseite
GET / HTTP/1.1
Host: lms.fu-berlin.de


Mein Problem ist das jsessionid da oben. Zwischen dem ersten GET und dem POST liegen in Blurp etwa 50 weitere Seiten (!), ebenso nach dem Login-Versuch. Wie handhabt man so etwas in HTTPMOD?
FHEM 6.1 auf RaspPi4 (Raspbian:  6.6.28+; Perl: v5.36.0)
SIGNALduino (433 MHz) und HM-UART (868 MHz), Sonoff, Blitzwolf, Somfy RTS, CAME-Gartentor, Volkszähler, Keyence-Sensor, Homematic-Sensoren und -thermostat, Ferraris-Zähler für Wasseruhr, Openlink-Nachbau Viessmann

ch.eick

Hallo andies,
ich hatte da letztens auch ein Problem und bin auf eine relativ creative Lösung gekommen.
Zitat
Mein Problem ist das jsessionid da oben. Zwischen dem ersten GET und dem POST liegen in Blurp etwa 50 weitere Seiten (!), ebenso nach dem Login-Versuch. Wie handhabt man so etwas in HTTPMOD?

Bei komplexeren Anmeldungen arbeite ich mit den userreadings und den dortigen Trigger Möglichkeiten.
Keys und Werte, die später benötigt werden speichere ich in readings "auth_*"

Hier sind mal die bereinigten, relevanten Attribute

attr BYD_Status DbLogExclude .*
attr BYD_Status enableControlSet 0
attr BYD_Status enableCookies 1
attr BYD_Status handleRedirects 1
attr BYD_Status httpVersion 1.1

attr BYD_Status authRetries 1
attr BYD_Status reAuthRegex Unauthorized
attr BYD_Status dontRequeueAfterAuth 1

attr BYD_Status reading01Name auth_qop
attr BYD_Status reading01Regex qop="(.*)", nonce
attr BYD_Status reading02Name auth_nonce
attr BYD_Status reading02Regex nonce="(.*)", opaque
attr BYD_Status reading03Name auth_opaque
attr BYD_Status reading03Regex opaque="(.*)",algorithm
attr BYD_Status reading04Name auth_realm
attr BYD_Status reading04Regex realm="(.*)", domain

attr BYD_Status replacement01Mode expression
attr BYD_Status replacement01Regex %IP-Address_BYD%
attr BYD_Status replacement01Value ReadingsVal("PV_Anlage_1_config","IP-Address_BYD","")
attr BYD_Status replacement03Mode reading
attr BYD_Status replacement03Regex %auth_realm%
attr BYD_Status replacement03Value auth_realm
attr BYD_Status replacement04Mode reading
attr BYD_Status replacement04Regex %auth_nonce%
attr BYD_Status replacement04Value auth_nonce
attr BYD_Status replacement05Mode reading
attr BYD_Status replacement05Regex %auth_response%
attr BYD_Status replacement05Value auth_response
attr BYD_Status replacement06Mode reading
attr BYD_Status replacement06Regex %auth_opaque%
attr BYD_Status replacement06Value auth_opaque
attr BYD_Status replacement07Mode reading
attr BYD_Status replacement07Regex %auth_nc%
attr BYD_Status replacement07Value auth_nc
attr BYD_Status replacement08Mode reading
attr BYD_Status replacement08Regex %auth_cnonce%
attr BYD_Status replacement08Value auth_cnonce

attr BYD_Status getHeader01 Authorization: Digest username="installer", realm="%auth_realm%", nonce="%auth_nonce%", uri="/asp/RunData.asp%", algorithm=MD5, response="%auth_response%", opaque="%auth_opaque%", qop="auth", nc=%auth_nc%, cnonce="%auth_cnonce%"

attr BYD_Status sid01URL http://%IP-Address_BYD%/asp/BatteryInformation.asp
attr BYD_Status sid01Header Authorization: Digest username="installer", realm="%auth_realm%", nonce="%auth_nonce%", uri="/asp/RunData.asp", algorithm=MD5, response="%auth_response%", opaque="%auth_opaque%", qop=auth, nc=%auth_nc%, cnonce="%auth_cnonce%"

attr BYD_Status sid01ParseResponse 1

attr BYD_Status userReadings auth_first_called:auth_nonce.* {my $first_called = InternalVal("$NAME","path","n.a");;;; $first_called =~ s/:/_/g;;;; $first_called =~ s/\/api\/v1//g;;;; $first_called},\
auth_HA1:auth_first_called.* {md5_hex("installer:".ReadingsVal($NAME,"auth_realm","").":<Passwort>")},\
auth_HA2:auth_HA1.* {md5_hex("GET:/asp/RunData.asp")},\
auth_response:auth_HA2.* {md5_hex(ReadingsVal($NAME,"auth_HA1","").":".ReadingsVal($NAME,"auth_nonce","").":".ReadingsVal($NAME,"auth_nc","").":".ReadingsVal($NAME,"auth_cnonce","").":".ReadingsVal($NAME,"auth_qop","").":".ReadingsVal($NAME,"auth_HA2",""))},\
auth_nc:auth_nonce.* {"00000001"},\
auth_cnonce:auth_response.* {"d789ea5b7e9a2377"},\
auth_Step1_Message:auth_nonce.* {"HTTP nonce updated"}

attr BYD_Status showBody 1
attr BYD_Status showError 1
attr BYD_Status verbose 5


Ob das so eine gute Idee ist, oder ob es dafür eine elegantere Lösung gibt wurde mir hier bisher noch nicht bestätigt, aber es funktioniert :-)

Viele Grüße
    Christian
RPI4; Docker; CUNX; Eltako FSB61NP; SamsungTV H-Serie; Sonos; Vallox; Luxtronik; 3x FB7490; Stromzähler mit DvLIR; wunderground; Plenticore 10 mit BYD; EM410; SMAEM; Modbus TCP
Contrib: https://svn.fhem.de/trac/browser/trunk/fhem/contrib/ch.eick

StefanStrobel

Hallo,

Trigger sollten eigentlich nicht nötig sein.
Man kann mehrere Schritte einfach über sid01, sid02, sid03 etc. abbilden. Wenn es nicht mehrere Variable/SessionIDs/Tokens sind, die benötigt werden, dann reicht es auch mit idRegex und $sid zu arbeiten.
Bei mehreren IDs / Tokens muss man Replecements definieren. Aber auch das sollte ohne Trigger gehen. Einfach die Readings extrahieren und dann wieder im Replacement verwenden.
siehe https://wiki.fhem.de/wiki/HTTPMOD#Advanced_configuration_to_create_a_valid_session_id_that_might_be_necessary

Gruss
   Stefan

ch.eick

Zitat von: StefanStrobel am 22 Oktober 2020, 16:50:33
Man kann mehrere Schritte einfach über sid01, sid02, sid03 etc. abbilden. Wenn es nicht mehrere Variable/SessionIDs/Tokens sind, die benötigt werden, dann reicht es auch mit idRegex und $sid zu arbeiten.
Bei mehreren IDs / Tokens muss man Replecements definieren. Aber auch das sollte ohne Trigger gehen. Einfach die Readings extrahieren und dann wieder im Replacement verwenden.
siehe https://wiki.fhem.de/wiki/HTTPMOD#Advanced_configuration_to_create_a_valid_session_id_that_might_be_necessary
Damit hatte ich begonnen, jedoch waren dann die keys und token nie in der geforderten Reihenfolge.
Des weiteren musste ich zum richtigen Zeitpunkt auch noch md5 und nonce und all son Zeug generieren.

Ich wäre natürlich gerne bereit Hilfe anzunehmen und das ganze besser zu implementieren.
Vor einigen Wochen wollte da jedoch niemand so wirklich mit ran.

Viele Grüße
     Christian
RPI4; Docker; CUNX; Eltako FSB61NP; SamsungTV H-Serie; Sonos; Vallox; Luxtronik; 3x FB7490; Stromzähler mit DvLIR; wunderground; Plenticore 10 mit BYD; EM410; SMAEM; Modbus TCP
Contrib: https://svn.fhem.de/trac/browser/trunk/fhem/contrib/ch.eick