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 %.1f
oder 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
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/
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
reading01OExpr $val =~ s/\,/./g;
?
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
und wenn du deinen regexp anpasst ?
WÄRMEQUELLE.*\s.*value">(\d+.\d+)
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.
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 !
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
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.
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
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 (https://fhem.de/commandref_modular.html#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+)
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