[erledigt] HTTPMOD - Readings Formatierung von Komma zu Dezimalpunkt

Begonnen von pschlaeppi, 25 Dezember 2023, 23:03:57

Vorheriges Thema - Nächstes Thema

pschlaeppi

Guten Tag miteinander,

Ich habe meine Stiebel-Eltron Wärmepumpe mittels ModbusAttr erschlossen, diese stellt aber vor allem die Parameter über die Wärmequelle (Erdsonde) nicht über Modbus zur Abfrage zur Verfügung. Daher frage ich diese zusätzlichen Parameter per HTTPMOD direkt aus der ISGweb ab.
Dieses klappt auch bestens und liefert die Werte über Vorlauf Temperatur, Rücklauf Temperatur, Druck und Pumpenleistung jeweils als Werte retour mit einem Komma als Dezimaltrennzeichen. Dabei werden die Werte wie in der ISGweb mit 1-2 Stellen vor dem Komma und einer Stelle nach dem Komma angezeigt und auch im Logfile gelogged.

Ich möchte diese nun gerne auch mittels Dezimalpunkt darstellen, so wie überall sonst in meiner FHEM Umgebung.
Ich habe die folgenden Formatierungs Versuche vorgenommen:
attr ISGweb reading01Format %.1foder auch
attr ISGweb reading01Expr {sprintf("%,1f", $val)}
Beide Fälle führen zum identischen Verhalten dass zwar der Dezimalpunkt angezeigt wird, aber nur noch die 1-2 Stellen vor dem Dezimalpunkt angezeigt werden. Die Stelle nach dem Dezimalpunkt wird dabei elegant "weg rationalisiert" und in jedem Fall als 0 ausgegeben. Die Werte werden auch identisch gelogged wie angezeigt.

Folgend das list der Definition des ISGweb. Aktuell ziehe ich so 4 Readings. Im Moment habe ich zu versuchs und Anschauaungszwecken die Regexe der Readings auf 2 Weisen verwendet. Dieses macht keinen Unterschied. Bei einem der Readings ist keine Formatierung gesetzt zum Vegleich:
Internals:
   BUSY       0
   DEF        http://xxx.xxx.xxx.xxx/?s=1,1
   FUUID      6588a3a7-f33f-2009-f54f-fb27cee103a3095f
   FVERSION   98_HTTPMOD.pm:0.277140/2023-06-29
   Interval   300
   LastAuthTry 2023-12-25 00:27:49
   MainURL    http://xxx.xxx.xxx.xxx/?s=1,1
   ModuleVersion 4.1.16 - 4.4.2023
   NAME       ISGweb
   NOTIFYDEV  global
   NR         2715
   NTFY_ORDER 50-ISGweb
   STATE      ???
   TYPE       HTTPMOD
   eventCount 192
   value     
   CompiledRegexes:
   HTTPCookieHash:
     PHPSESSID;/:
       Name       PHPSESSID
       Options    path=/
       Path       /
       Value      3df62767b1921bcb14300b774974dec4
   HttpUtils:
     NAME       
     addr       http://xxx.xxx.xxx.xxx:80
     auth       0
     code       200
     compress   1
     conn       
     data       
     displayurl http://xxx.xxx.xxx.xxx/?s=1,1
     header     Cookie: PHPSESSID=3df62767b1921bcb14300b774974dec4
     host       xxx.xxx.xxx.xxx
     httpheader HTTP/1.0 200 OK
Connection: close
X-Powered-By: PHP/5.3.0
Expires: Thu, 19 Nov 1981 08:52:00 GMT
Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0
Pragma: no-cache
Content-Type: text/html; charset=utf-8
Date: Mon, 25 Dec 2023 21:47:48 GMT
Server: lighttpd/1.4.19
     httpversion 1.0
     hu_blocking 0
     hu_filecount 1
     hu_port    80
     hu_portSfx
     ignoreredirects 1
     loglevel   4
     path       /?s=1,1
     protocol   http
     redirects  0
     timeout    10
     url        http://xxx.xxx.xxx.xxx/?s=1,1
     sslargs:
   QUEUE:
   READINGS:
     2023-12-25 11:32:43   LAST_ERROR      read from http://xxx.xxx.xxx.xxx:80 timed out
     2023-12-25 22:47:59   LeisteungWaermequellenpumpe 0.0
     2023-12-25 22:47:59   WaermequelleDruck 2,1
     2023-12-25 22:47:59   WaermequelleRuecklauf 11.0
     2023-12-25 22:47:59   WaermequelleVorlauf 10.0
   REQUEST:
     context    reading
     data       
     header     
     ignoreredirects 0
     num        unknown
     retryCount 0
     type       update
     url        http://xxx.xxx.xxx.xxx/?s=1,1
   defptr:
     readingBase:
       LeisteungWaermequellenpumpe reading
       WaermequelleDruck reading
       WaermequelleRuecklauf reading
       WaermequelleVorlauf reading
     readingNum:
       LeisteungWaermequellenpumpe 04
       WaermequelleDruck 03
       WaermequelleRuecklauf 01
       WaermequelleVorlauf 02
     readingOutdated:
     requestReadings:
       update:
         LeisteungWaermequellenpumpe reading 04
         WaermequelleDruck reading 03
         WaermequelleRuecklauf reading 01
         WaermequelleVorlauf reading 02
Attributes:
   alias      ISGweb
   enableControlSet 1
   enableCookies 1
   event-min-interval Waermequelle.*:900
   event-on-change-reading .*
   group      05 Waermepumpe
   icon       it_drive_removable
   reAuthRegex loginscreen
   reading01Expr {sprintf("%.1f", $val)}
   reading01Name WaermequelleRuecklauf
   reading01Regex RÜCKLAUFTEMPERATUR WÄRMEQUELLE.*\s.*value">(\-{0,1}[\d\,]+)
   reading02Format %.1f
   reading02Name WaermequelleVorlauf
   reading02Regex VORLAUFTEMPERATUR WÄRMEQUELLE.*\s.*value">(\-{0,1}[\d\,]+)
   reading03Name WaermequelleDruck
   reading03Regex WÄRMEQUELLENDRUCK.*\s.*value">(\-{0,1}[\d\,\d]+)
   reading04Format %.1f
   reading04Name LeisteungWaermequellenpumpe
   reading04Regex LEISTUNG WÄRMEQUELLENPUMPE.*\s.*value">(\-{0,1}[\d\,\d]+)
   replacement02Mode key
   replacement02Regex %%User%%
   replacement02Value User
   replacement03Mode key
   replacement03Regex %%Password%%
   replacement03Value Password
   room       Heizung
   showError  1
   sid1Data   make=send&user=%%User%%&pass=%%Password%%
   sortby     hz.wp.02
   timeout    10


Verschiedenste Suchen haben mir bisher noch keine indikation gegeben ob diese Umformatierung so möglich ist und wie sie aus sehen müsste, oder wie am einfachsten ich dieses bewerkstelligen kann.

Hätte mir allenfalls jemand von euch nen Anstupser in die richtige Richtung.

Grüsse Philipp
 





 

Ralli

#1
Denkanstoß:

Zitat von: pschlaeppi am 25 Dezember 2023, 23:03:57reading02Regex VORLAUFTEMPERATUR WÄRMEQUELLE.*\s.*value">(\-{0,1}[\d\,]+)

Versuche mal, deine Regex so anzupassen, dass direkt bei dem Erkennen der Werte das Komma durch Punkt ersetzt wird:

reading02Regex s/VORLAUFTEMPERATUR WÄRMEQUELLE.*\s.*value">(\d+),(\d+)/$1.$2/
Gruß,
Ralli

Proxmox 8.4 Cluster mit HP ED800G2i7, Intel NUC11TNHi7+NUC7i5BNH, virtualisiertes fhem 6.4 dev, virtualisierte RaspberryMatic (3.83.6.20250705) mit HB-RF-ETH 1.3.0 / RPI-RF-MOD, HM-LAN-GW (1.4.1) und HMW-GW, FRITZBOX 7490 (07.59), FBDECT, Siri und Alexa

pschlaeppi

#2
Hallo Ralli,

Habe das auf mehrere Weisen versucht, hat aber bisher so nicht funktioniert. Habe ich an folgendem Beispiel auch noch die /$2.$4/ dran funktioniert der Regex gar nicht mehr. Drum habe ich erst mal ohne diese versucht um zu schauen was passiert. Beispiel:
WÄRMEQUELLENDRUCK.*\s.*value">(\-){0,1}(\d+)(\,)(\d+)
Habe dabei auch festgestellt, wenn ich mehrere Capture Groups habe im reading0xRegex
drin, dass dann einfach durch HTTPMOD mehrere Teil Readings angelegt werden mit
jeweils den Werten der einzelnen Capture Groups drin. Habe also bei einem WaermequellenDruck
von 2,1 bar dann ein Reading erhalten das "2" beinhaltet, ein weiteres Reading mit dem
Inhalt "," und als letztes ein Reading mit dem Inhalt "1". Interpretiere mal dass mehrere
Capture Groups im reading0xRegex drin nicht funktionieren.

Habe in HTTPMOD noch gefunden dass bei Verwendung von reading01OExpr manipulationen vor der Rückgabe
der Captured Werte vorgenommen werden können:
reading01OExpr {sprintf("%.1f", $val)}
Wenn ich dieses verwende, bin ich wieder gleich weit nämlich dass alles vor dem Komma krrekt ankommt und das der Dezimalpunkt gesetzt wird, aber die Nachkommastellen gehen verloren.
Durch setzen von verbose 5 auf HTTPMOD, erhalte ich den dolgenden Log Output:
2023.12.26 19:20:30 4: ISGweb: BodyDecode is not decoding the response body (charset utf-8, bodyDecode defaults to none)
2023.12.26 19:20:30 5: ISGweb: GetCookies is looking for Cookies
2023.12.26 19:20:30 5: ISGweb: ExtractSid called, context reading, num unknown
2023.12.26 19:20:30 4: ISGweb: checking for redirects, code=200, ignore=0
2023.12.26 19:20:30 4: ISGweb: no redirects to handle
2023.12.26 19:20:30 5: ISGweb: Read callback sets LAST_REQUEST to update
2023.12.26 19:20:30 5: ISGweb: CheckAuth is checking buffer with ReAuthRegex (?^:loginscreen)
2023.12.26 19:20:30 5: ISGweb: CheckAuth decided no authentication required
2023.12.26 19:20:30 5: ISGweb: Read starts parsing response to update with defined readings: 01,02,03,04
2023.12.26 19:20:30 5: ISGweb: ExtractReading WaermequelleRuecklauf with regex /(?^:RÜCKLAUFTEMPERATUR WÄRMEQUELLE.*\s.*value">(\-{0,1}[\d]+[\,][\d]+))/...
2023.12.26 19:20:30 3: ISGweb: perl expression eval with expresion package main; my $timeDiff = $oRef->{'$timeDiff'};{sprintf('%.1f', $val)} created warning: Argument "6,1" isn't numeric in sprintf at (eval 80164) line 1.
2023.12.26 19:20:30 5: ISGweb: perl expression eval evaluated package main; my $timeDiff = $oRef->{'$timeDiff'};{sprintf('%.1f', $val)} to 6.0
2023.12.26 19:20:30 5: ISGweb: ExtractReading for reading01-1 sets WaermequelleRuecklauf to 6.0
2023.12.26 19:20:30 5: ISGweb: ExtractReading value as hex is 362e30
2023.12.26 19:20:30 5: ISGweb: ExtractReading WaermequelleVorlauf with regex /(?^:VORLAUFTEMPERATUR WÄRMEQUELLE.*\s.*value">(\-{0,1}[\d]+[\,][\d]+))/...
2023.12.26 19:20:30 3: ISGweb: perl expression eval with expresion package main; my $timeDiff = $oRef->{'$timeDiff'};{sprintf("%.1f", $val)} created warning: Argument "9,2" isn't numeric in sprintf at (eval 80165) line 1.
2023.12.26 19:20:30 5: ISGweb: perl expression eval evaluated package main; my $timeDiff = $oRef->{'$timeDiff'};{sprintf("%.1f", $val)} to 9.0
2023.12.26 19:20:30 5: ISGweb: ExtractReading for reading02-1 sets WaermequelleVorlauf to 9.0
2023.12.26 19:20:30 5: ISGweb: ExtractReading value as hex is 392e30
2023.12.26 19:20:30 5: ISGweb: ExtractReading WaermequelleDruck with regex /(?^:WÄRMEQUELLENDRUCK.*\s.*value">(\-{0,1}[\d]+[\,][\d]+))/...
2023.12.26 19:20:30 3: ISGweb: perl expression eval with expresion package main; my $timeDiff = $oRef->{'$timeDiff'};{sprintf("%.1f", $val)} created warning: Argument "2,0" isn't numeric in sprintf at (eval 80166) line 1.
2023.12.26 19:20:30 5: ISGweb: perl expression eval evaluated package main; my $timeDiff = $oRef->{'$timeDiff'};{sprintf("%.1f", $val)} to 2.0
2023.12.26 19:20:30 5: ISGweb: ExtractReading for reading03-1 sets WaermequelleDruck to 2.0
2023.12.26 19:20:30 5: ISGweb: ExtractReading value as hex is 322e30
2023.12.26 19:20:30 5: ISGweb: ExtractReading LeistungWaermequellenpumpe with regex /(?^:LEISTUNG WÄRMEQUELLENPUMPE.*\s.*value">(\-{0,1}[\d]+[\,][\d]+))/...
2023.12.26 19:20:30 3: ISGweb: perl expression eval with expresion package main; my $timeDiff = $oRef->{'$timeDiff'};{sprintf("%.1f", $val)} created warning: Argument "30,5" isn't numeric in sprintf at (eval 80167) line 1.
2023.12.26 19:20:30 5: ISGweb: perl expression eval evaluated package main; my $timeDiff = $oRef->{'$timeDiff'};{sprintf("%.1f", $val)} to 30.0
2023.12.26 19:20:30 5: ISGweb: ExtractReading for reading04-1 sets LeistungWaermequellenpumpe to 30.0
2023.12.26 19:20:30 5: ISGweb: ExtractReading value as hex is 33302e30
2023.12.26 19:20:30 4: ISGweb: Read response matched 4, unmatch 0 Reading(s)
2023.12.26 19:20:30 5: ISGweb: Read response to update matched WaermequelleRuecklauf WaermequelleVorlauf WaermequelleDruck LeistungWaermequellenpumpe
2023.12.26 19:20:30 5: ISGweb: HandleSendQueue called from ReadCallback, qlen = 0
2023.12.26 19:20:30 5: ISGweb: HandleSendQueue found no usable entry in queue

   
Wenn ich das richtig interpretiere, ist demnach das Komma auch gerade die Ursache des Fehlverhaltens da dadurch vermutlich die Rückgabe als String und nicht als numerisch behandelt wurde und deshalb sprintf fehlschlägt und nur der Ganzzahlige Teil ins Reading gesetzt wird.

Sieht allenfalls jemand noch andere Alternativen um dem Problem Herr zu werden?


Grüsse Philipp       

TomLee


pschlaeppi

Hallo TomLee,

Herzlichen Dank für diesen Ansatz.
Unerwarteterweise führt leider auch dieses nicht zum Ziel.
Mit dieser Einstellung werden alle so gesetzten Readings auf 1 gesetzt.
Leider auch keine Zusatz Info im Log warum.

2023.12.26 21:05:29 5: ISGweb: ExtractReading WaermequelleVorlauf with regex /(?^:VORLAUFTEMPERATUR WÄRMEQUELLE.*\s.*value">(\-{0,1}[\d]+[\,][\d]+))/...
2023.12.26 21:05:29 5: ISGweb: perl expression eval evaluated package main; my $timeDiff = $oRef->{'$timeDiff'};$val =~ s/,/./g; to 1
2023.12.26 21:05:29 5: ISGweb: ExtractReading for reading02-1 sets WaermequelleVorlauf to 1
2023.12.26 21:05:29 5: ISGweb: ExtractReading value as hex is 31
 

TomLee

und wenn du deinen regexp anpasst ?

WÄRMEQUELLE.*\s.*value">(\d+.\d+)

pschlaeppi

Hoi TomLee,

Ist nun ein bisschen unerwartet. Ich habe das an der Vorlauf Temperatur getestet mit folgenden Attributen gesetzt (substitute nicht gesetzt):
reading02Name WaermequelleVorlauf
reading02Regex VORLAUFTEMPERATUR WÄRMEQUELLE.*\s.*value">(\d+.\d+)

Das Resultat ist dann ganz unerwartet dass er trotzdem der Punkt in der Regex gesetzt ist, wiederum das , Retour gibt.
Ich erhalte 9,7 retour.
Hätte eigentlich erwartet das nichts retour kommt da der . nicht matched.

Auszug aus dem Log:
2023.12.26 22:01:38 5: ISGweb: ExtractReading WaermequelleVorlauf with regex /(?^:VORLAUFTEMPERATUR WÄRMEQUELLE.*\s.*value">(\d+.\d+))/...
2023.12.26 22:01:38 5: ISGweb: ExtractReading for reading02-1 sets WaermequelleVorlauf to 9,7
2023.12.26 22:01:38 5: ISGweb: ExtractReading value as hex is 392c37


Wenn ich nun wieder reading02OExpr setze entweder mit sprintf oder dem substitute, ist wieder obenstehendes Verhalten entweder auf 1 oder ohne die Stellen hinter dem Komma.


TomLee

ZitatDas Resultat ist dann ganz unerwartet dass er trotzdem der Punkt in der Regex gesetzt ist, wiederum das , Retour gibt.

Das ist nicht unerwartet, sondern so "angefordert", der Punkt ist an der Stelle irgendein beliebiges Zeichen.

Da kein List zu sehen ist vermute ich das du mein vorgeschlagenes reading01OExpr-Attribut wieder gelöscht hast. Das wird gebraucht um das Komma jetzt zu ersetzen !

pschlaeppi

#8
Hallo TomLee,

Sorry dass ich das List weggelassen hatte. Ich habe es aktuell auf allen Readings wie zuunterst im letzten Satz im vorletzten Post geschrieben mit reading01OExpr Atrribut gesetzt gehabt. Beim reading03OExpr Attribut auch mit \ vor dem komma da ich denke es müsste hier nicht maskiert sein an dieser Stelle. Dieses macht aber keinen Unterschied.
Aktuell stehen alle 4 Readings so auf 1. In der ISG Web Oberfläche sind es aber andere Werte. Wenn ich die reading0xOExpr Attribute löschen sind alle Werte wieder mit den Kommas da.

Auszug aus dem Log:
2023.12.26 23:28:40 4: ISGweb: BodyDecode is not decoding the response body (charset utf-8, bodyDecode defaults to none)
2023.12.26 23:28:40 5: ISGweb: GetCookies is looking for Cookies
2023.12.26 23:28:40 5: ISGweb: ExtractSid called, context reading, num unknown
2023.12.26 23:28:40 4: ISGweb: checking for redirects, code=200, ignore=0
2023.12.26 23:28:40 4: ISGweb: no redirects to handle
2023.12.26 23:28:40 5: ISGweb: Read callback sets LAST_REQUEST to update
2023.12.26 23:28:40 5: ISGweb: CheckAuth is checking buffer with ReAuthRegex (?^:loginscreen)
2023.12.26 23:28:40 5: ISGweb: CheckAuth decided no authentication required
2023.12.26 23:28:40 5: ISGweb: Read starts parsing response to update with defined readings: 01,02,03,04
2023.12.26 23:28:40 5: ISGweb: ExtractReading WaermequelleRuecklauf with regex /(?^:RÜCKLAUFTEMPERATUR WÄRMEQUELLE.*\s.*value">(\d+.\d+))/...
2023.12.26 23:28:40 5: ISGweb: perl expression eval evaluated package main; my $timeDiff = $oRef->{'$timeDiff'};$val =~ s/,/./g; to 1
2023.12.26 23:28:40 5: ISGweb: ExtractReading for reading01-1 sets WaermequelleRuecklauf to 1
2023.12.26 23:28:40 5: ISGweb: ExtractReading value as hex is 31
2023.12.26 23:28:40 5: ISGweb: ExtractReading WaermequelleVorlauf with regex /(?^:VORLAUFTEMPERATUR WÄRMEQUELLE.*\s.*value">(\d+.\d+))/...
2023.12.26 23:28:40 5: ISGweb: perl expression eval evaluated package main; my $timeDiff = $oRef->{'$timeDiff'};$val =~ s/,/./g; to 1
2023.12.26 23:28:40 5: ISGweb: ExtractReading for reading02-1 sets WaermequelleVorlauf to 1
2023.12.26 23:28:40 5: ISGweb: ExtractReading value as hex is 31
2023.12.26 23:28:40 5: ISGweb: ExtractReading WaermequelleDruck with regex /(?^:WÄRMEQUELLENDRUCK.*\s.*value">(\d+.\d+))/...
2023.12.26 23:28:40 5: ISGweb: perl expression eval evaluated package main; my $timeDiff = $oRef->{'$timeDiff'};$val =~ s/\,/./g to 1
2023.12.26 23:28:40 5: ISGweb: ExtractReading for reading03-1 sets WaermequelleDruck to 1
2023.12.26 23:28:40 5: ISGweb: ExtractReading value as hex is 31
2023.12.26 23:28:40 5: ISGweb: ExtractReading LeistungWaermequellenpumpe with regex /(?^:LEISTUNG WÄRMEQUELLENPUMPE.*\s.*value">(\d+.\d+))/...
2023.12.26 23:28:40 5: ISGweb: perl expression eval evaluated package main; my $timeDiff = $oRef->{'$timeDiff'};$val =~ s/,/./g; to 1
2023.12.26 23:28:40 5: ISGweb: ExtractReading for reading04-1 sets LeistungWaermequellenpumpe to 1
2023.12.26 23:28:40 5: ISGweb: ExtractReading value as hex is 31
2023.12.26 23:28:40 4: ISGweb: Read response matched 4, unmatch 0 Reading(s)
2023.12.26 23:28:40 5: ISGweb: Read response to update matched WaermequelleRuecklauf WaermequelleVorlauf WaermequelleDruck LeistungWaermequellenpumpe
2023.12.26 23:28:40 5: ISGweb: HandleSendQueue called from ReadCallback, qlen = 0
2023.12.26 23:28:40 5: ISGweb: HandleSendQueue found no usable entry in queue


Folgend das List der aktuellen Situation:
Internals:
   BUSY       0
   DEF        http://xxx.xxx.xxx.xxx/?s=1,1
   FUUID      6588a3a7-f33f-2009-f54f-fb27cee103a3095f
   FVERSION   98_HTTPMOD.pm:0.277140/2023-06-29
   Interval   300
   LastAuthTry 2023-12-25 23:50:20
   MainURL    http://xxx.xxx.xxx.xxx/?s=1,1
   ModuleVersion 4.1.16 - 4.4.2023
   NAME       ISGweb
   NOTIFYDEV  global
   NR         2715
   NTFY_ORDER 50-ISGweb
   STATE      ???
   TYPE       HTTPMOD
   eventCount 296
   value     
   CompiledRegexes:
   HTTPCookieHash:
     PHPSESSID;/:
       Name       PHPSESSID
       Options    path=/
       Path       /
       Value      6415b220628aa5e2670e0b22af546ba3
   HttpUtils:
     NAME       
     addr       http://xxx.xxx.xxx.xxx:80
     auth       0
     code       200
     compress   1
     conn       
     data       
     displayurl http://xxx.xxx.xxx.xxx/?s=1,1
     header     Cookie: PHPSESSID=6415b220628aa5e2670e0b22af546ba3
     host       xxx.xxx.xxx.xxx
     httpheader HTTP/1.0 200 OK
Connection: close
X-Powered-By: PHP/5.3.0
Expires: Thu, 19 Nov 1981 08:52:00 GMT
Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0
Pragma: no-cache
Content-Type: text/html; charset=utf-8
Date: Tue, 26 Dec 2023 22:30:22 GMT
Server: lighttpd/1.4.19
     httpversion 1.0
     hu_blocking 0
     hu_filecount 1
     hu_port    80
     hu_portSfx
     ignoreredirects 1
     loglevel   4
     path       /?s=1,1
     protocol   http
     redirects  0
     timeout    10
     url        http://xxx.xxx.xxx.xxx/?s=1,1
     sslargs:
   OLDREADINGS:
   QUEUE:
   READINGS:
     2023-12-25 11:32:43   LAST_ERROR      read from http://xxx.xxx.xxx.xxx:80 timed out
     2023-12-26 23:30:29   LAST_REQUEST    update
     2023-12-26 23:30:29   LeistungWaermequellenpumpe 1
     2023-12-26 23:30:29   MATCHED_READINGS WaermequelleRuecklauf WaermequelleVorlauf WaermequelleDruck LeistungWaermequellenpumpe
     2023-12-26 23:30:29   UNMATCHED_READINGS
     2023-12-26 23:30:29   WaermequelleDruck 1
     2023-12-26 23:30:29   WaermequelleRuecklauf 1
     2023-12-26 23:30:29   WaermequelleVorlauf 1
   REQUEST:
     context    reading
     data       
     header     
     ignoreredirects 0
     num        unknown
     retryCount 0
     type       update
     url        http://xxx.xxx.xxx.xxx/?s=1,1
   defptr:
     readingBase:
       LeistungWaermequellenpumpe reading
       LeistungWaermequellenpumpe-1 reading
       LeistungWaermequellenpumpe-2 reading
       LeistungWaermequellenpumpe-3 reading
       LeistungWaermequellenpumpe-4 reading
       WaermequelleDruck reading
       WaermequelleDruck-1 reading
       WaermequelleDruck-2 reading
       WaermequelleDruck-3 reading
       WaermequelleDruck-4 reading
       WaermequelleRuecklauf reading
       WaermequelleRuecklauf-1 reading
       WaermequelleRuecklauf-2 reading
       WaermequelleRuecklauf-3 reading
       WaermequelleRuecklauf-4 reading
       WaermequelleVorlauf reading
       WaermequelleVorlauf-1 reading
       WaermequelleVorlauf-2 reading
       WaermequelleVorlauf-3 reading
       WaermequelleVorlauf-4 reading
     readingNum:
       LeistungWaermequellenpumpe 04
       LeistungWaermequellenpumpe-1 04
       LeistungWaermequellenpumpe-2 04
       LeistungWaermequellenpumpe-3 04
       LeistungWaermequellenpumpe-4 04
       WaermequelleDruck 03
       WaermequelleDruck-1 03
       WaermequelleDruck-2 03
       WaermequelleDruck-3 03
       WaermequelleDruck-4 03
       WaermequelleRuecklauf 01
       WaermequelleRuecklauf-1 01
       WaermequelleRuecklauf-2 01
       WaermequelleRuecklauf-3 01
       WaermequelleRuecklauf-4 01
       WaermequelleVorlauf 02
       WaermequelleVorlauf-1 02
       WaermequelleVorlauf-2 02
       WaermequelleVorlauf-3 02
       WaermequelleVorlauf-4 02
     readingOutdated:
     readingSubNum:
       LeistungWaermequellenpumpe-1 -1
       LeistungWaermequellenpumpe-2 -2
       LeistungWaermequellenpumpe-3 -3
       LeistungWaermequellenpumpe-4 -4
       WaermequelleDruck-1 -1
       WaermequelleDruck-2 -2
       WaermequelleDruck-3 -3
       WaermequelleDruck-4 -4
       WaermequelleRuecklauf-1 -1
       WaermequelleRuecklauf-2 -2
       WaermequelleRuecklauf-3 -3
       WaermequelleRuecklauf-4 -4
       WaermequelleVorlauf-1 -1
       WaermequelleVorlauf-2 -2
       WaermequelleVorlauf-3 -3
       WaermequelleVorlauf-4 -4
     requestReadings:
       update:
         LeistungWaermequellenpumpe reading 04
         LeistungWaermequellenpumpe-1 reading 04-1
         LeistungWaermequellenpumpe-2 reading 04-2
         LeistungWaermequellenpumpe-3 reading 04-3
         LeistungWaermequellenpumpe-4 reading 04-4
         WaermequelleDruck reading 03
         WaermequelleDruck-1 reading 03-1
         WaermequelleDruck-2 reading 03-2
         WaermequelleDruck-3 reading 03-3
         WaermequelleDruck-4 reading 03-4
         WaermequelleRuecklauf reading 01
         WaermequelleRuecklauf-1 reading 01-1
         WaermequelleRuecklauf-2 reading 01-2
         WaermequelleRuecklauf-3 reading 01-3
         WaermequelleRuecklauf-4 reading 01-4
         WaermequelleVorlauf reading 02
         WaermequelleVorlauf-1 reading 02-1
         WaermequelleVorlauf-2 reading 02-2
         WaermequelleVorlauf-3 reading 02-3
         WaermequelleVorlauf-4 reading 02-4
Attributes:
   alias      ISGweb
   enableControlSet 1
   enableCookies 1
   event-min-interval Waermequelle.*:900
   event-on-change-reading .*
   group      05 Waermepumpe
   icon       it_drive_removable
   reAuthRegex loginscreen
   reading01Name WaermequelleRuecklauf
   reading01OExpr $val =~ s/,/./g;
   reading01Regex RÜCKLAUFTEMPERATUR WÄRMEQUELLE.*\s.*value">(\d+.\d+)
   reading02Name WaermequelleVorlauf
   reading02OExpr $val =~ s/,/./g;
   reading02Regex VORLAUFTEMPERATUR WÄRMEQUELLE.*\s.*value">(\d+.\d+)
   reading03Name WaermequelleDruck
   reading03OExpr $val =~ s/\,/./g
   reading03Regex WÄRMEQUELLENDRUCK.*\s.*value">(\d+.\d+)
   reading04Name LeistungWaermequellenpumpe
   reading04OExpr $val =~ s/,/./g;
   reading04Regex LEISTUNG WÄRMEQUELLENPUMPE.*\s.*value">(\d+.\d+)
   replacement02Mode key
   replacement02Regex %%User%%
   replacement02Value User
   replacement03Mode key
   replacement03Regex %%Password%%
   replacement03Value Password
   room       Heizung
   showError  1
   showMatched 1
   sid1Data   make=send&user=%%User%%&pass=%%Password%%
   sortby     hz.wp.02
   timeout    10
   verbose    5

TomLee

Upps, sry das hat man davon wenn man am Tablet schreibt/rumkopiert und eigentlich mit was anderem beschäftigt ist.

Man muss den Wert auch zurückgeben, das ging vorhin irgendwie unter und war mir nicht aufgefallen bei meinem Beispiel:
Zitatreading01OExpr $val =~ s/\,/./g;return $val;

Ich bin aber auch kein Experte was HTTPMOD betrifft, ich rate ja nur, die verbose 5 Ausgaben kann ich nicht wirklich deuten.

pschlaeppi

Guten Tag TomLee,

Herzlichen Dank für deinen Update. War mir bisher gar nicht so bewusst gweorden dass man den
return Wert explizite angeben muss. Habe wieder mal kräftig dazu lernen dürfen. Super Unterstützung.

Funktioniert jetzt absolut bestens. Habe die Regex jetzt noch erweitert dass auch das "-" bei negativen
Temperaturen mitkommt. Sollte die Erdsonde negativ werden, möchte ich das alarmieren können.
Habe alle Readings nun mit diesen Attributen gesetzt:
reading01Regex RÜCKLAUFTEMPERATUR WÄRMEQUELLE.*\s.*value">(\-{0,1}\d+.\d+)
reading01OExpr $val =~ s/,/./g;return $val;

Gehe ich recht in der Annahme dass es den maskierenden \ vor dem Komma nicht braucht? Alle 4 Readings laufen derzeit ohne den \.
Zitatreading01OExpr $val =~ s/\,/./g;

Werde das ganze jetzt dann noch mal raus reissen und komplett neu aufsetzen um die Artefakte der 4 Teil Readings
von dem Versuch mit mehreren Capture Groups wieder los zu werden.


Grüsse Philipp

TomLee

ZitatGehe ich recht in der Annahme dass es den maskierenden \ vor dem Komma nicht braucht?

Offensichtlich braucht man hier nicht maskieren.
Ich hab das, als ich das erste mal das Komma durch Punkt ersetzen wollte, in_gefühlt_fast_jedem_zweiten Beitrag so gefunden und einfach übernommen gehabt, ohne mir darüber Gedanken zu machen ob man escapen muss oder nicht   ;D
 
ZitatWerde das ganze jetzt dann noch mal raus reissen und komplett neu aufsetzen um die Artefakte der 4 Teil Readings
von dem Versuch mit mehreren Capture Groups wieder los zu werden.
Weiß nicht ob ich dich richtig verstehe, aber den FHEM-Befehl deletereading kennst du ?


Hab ja keine Ahnung von regulären Ausdrücken, deiner ging aber auch kürzer, mein ich. Ob das besser oder weniger gut ist, weiß ich nicht:

WÄRMEQUELLE.*\s.*value">(-?\d+.\d+)

pschlaeppi

#12
Hallo TomLee,

Danke Dir. Deletereading ist mir so weit bekannt. Das habe ich auch verwendet um die sichtbaren Readings
der 4 Capture Groups im Device zu löschen. Wenn du die beiden List im Post vergleichst findest du im zweiten List einen Haufen zusätzlicher Reading Einträge die im Device selber und der fhem.cfg nicht mehr sichtbar sind aber scheinbar irgendwie noch vorhanden sind.

Die will ich noch versuchen wieder los zu werden. Die werden mich in der Zukunft nur verwirren wenn da wieder mal was zu debuggen ist.

Danke für den Input mit dem "-", geht tatsächlich noch effizienter. Habe das entsprechend übernommen.

Grüsse Philipp