Hallo
Ich möchte gern per HTTPMOD an den Web-Server meines Heizkreisverteilers die Solltemperaturen der einzelnen Räume übergeben.
Der Web Server erwartet dabei die Temperatur als 4-stelligen Wert.
Im Browser funktioniert die Sollwertvorgabe auf 22 °C wie folgt.
http://192.168.178.38/cgi-bin/writeVal.cgi?G4.SollTemp=2200
Im FHEM kann ich das User Reading ,,Buero_Temperatur_Soll" meines HTTMOD Devices ,,Raumtemperaturen_EG_Set" ebenfalls mit
Set Raumtemperaturen_EG_Set Buero_Temperatur_Soll 2200
auf die gewünschten 22° setzen.
Um aber eben in FHEM nicht einen 4-stelligen Wert sondern einen Temperaturwert im Format 22.00 °C zu übergeben.
In meiner alten FHEM Installation von 2015 wurde das wie folgt im HTTPMOD über ein Userreading set05Expr $val *100 umrechnet.
Beispiel der Userreadings
set05Expr $val * 100
set05Max 28
set05Min 8
set05Name Buero_Temperatur_Soll
Die Umrechnung funktioniert nach neu aufgesetztem FHEM nicht mehr.
Der Befehl ,,set Raumtemperaturen_EG_Set Buero_Temperatur_Soll 24" übergibt an den Web-Server tatsächlich nur den Wert 24 und nicht 2400.
Anbei mal das Log File
2020.09.27 13:24:23 5: Raumtemperaturen_EG_Set: set called with Buero_Temperatur_Soll 24
2020.09.27 13:24:23 5: Raumtemperaturen_EG_Set: set found option Buero_Temperatur_Soll in attribute set05Name
2020.09.27 13:24:23 5: Raumtemperaturen_EG_Set: is checking value 24 against min 8
2020.09.27 13:24:23 5: Raumtemperaturen_EG_Set: set is checking value 24 against max 28
2020.09.27 13:24:23 4: Raumtemperaturen_EG_Set: set will now set Buero_Temperatur_Soll -> 24
2020.09.27 13:24:23 5: Raumtemperaturen_EG_Set: AddToQueue adds type set05 to URL http://192.168.178.38/cgi-bin/writeVal.cgi?G4.SollTemp=$val, no data, no headers, retry 0, initial queue len: 0
2020.09.27 13:24:23 5: Raumtemperaturen_EG_Set: HandleSendQueue called, qlen = 1
2020.09.27 13:24:23 4: Raumtemperaturen_EG_Set: HandleSendQueue sends set05 with timeout 2 to http://192.168.178.38/cgi-bin/writeVal.cgi?G4.SollTemp=24, No Data, No Header
2020.09.27 13:24:23 5: HttpUtils url=http://192.168.178.38/cgi-bin/writeVal.cgi?G4.SollTemp=24
2020.09.27 13:24:23 4: IP: 192.168.178.38 -> 192.168.178.38
2020.09.27 13:24:23 5: HttpUtils request header:
GET /cgi-bin/writeVal.cgi?G4.SollTemp=24 HTTP/1.0
Host: 192.168.178.38
User-Agent: fhem
Accept-Encoding: gzip,deflate
2020.09.27 13:24:23 4: http://192.168.178.38/cgi-bin/writeVal.cgi?G4.SollTemp=24: HTTP response code 200
2020.09.27 13:24:23 5: HttpUtils http://192.168.178.38/cgi-bin/writeVal.cgi?G4.SollTemp=24: Got data, length: 2
2020.09.27 13:24:23 5: HttpUtils response header:
HTTP/1.1 200 OK
Server: Keil-EWEB/2.1
Content-Type: text/html
Cache-Control: no-cache
Connection: close
2020.09.27 13:24:23 4: Raumtemperaturen_EG_Set: Read callback: request type was set05 retry 0,
header: HTTP/1.1 200 OK
Server: Keil-EWEB/2.1
Content-Type: text/html
Cache-Control: no-cache
Connection: close, body length 2
2020.09.27 13:24:23 5: Raumtemperaturen_EG_Set: Read callback: body
24
2020.09.27 13:24:23 4: Raumtemperaturen_EG_Set: Read found no charset header (bodyDecode was set to auto)
2020.09.27 13:24:23 5: Raumtemperaturen_EG_Set: GetCookies is looking for Cookies
2020.09.27 13:24:23 5: Raumtemperaturen_EG_Set: ExtractSid called, context set, num 05
2020.09.27 13:24:23 4: Raumtemperaturen_EG_Set: checking for redirects, code=200, ignore=0
2020.09.27 13:24:23 4: Raumtemperaturen_EG_Set: no redirects to handle
2020.09.27 13:24:23 5: Raumtemperaturen_EG_Set: CheckAuth decided no authentication required
Wie gesagt, damals funktionierte das reibungslos aber da ich das lange Zeit nicht mehr angefasst habe kriege ich es gerade nicht hin.
Hat sich am FHEM was geändert oder was könnte das Problem sein.
Siehe Commandref:
http://fhem.de/commandref.html#HTTPMOD
Zitat
(get|reading)[0-9]*OExpr
defines an optional expression that is used in an eval to compute / format a readings value after parsing an HTTP response
The raw value from the parsing will be in the variable $val.
If specified as readingOExpr then the attribute value is a default for all other readings that don't specify an explicit reading[0-9]*Expr.
Please note that the old syntax readingsExpr.* does not work with all features of HTTPMOD and should be avoided. It might go away in a future version of HTTPMOD.
(get|reading)[0-9]*Expr
This is the old syntax for (get|reading)[0-9]*OExpr. It should be replaced by (get|reading)[0-9]*OExpr. The set command upgradeAttributes which becomes visible when the attribute enableControlSet is set to 1, can do this renaming automatically.
Also sollte es jetzt set05OExpr statt set05Expr sein.
Hallo xenos1984
erstmal Danke für den Hinweis dass sich das offensichtlich geändert hat.
Das Problem ist nur dass auch die Änderung (auch nach Neustart) keinen Auswirkung hat.
Ein FHEM Update hat auch nichts gebracht,
Die Attribute sind wie folgt gesetzt.
set05Max 28
set05Min 8
set05Name Buero_Temperatur_Soll
set05OExpr $val * 100
set05URL http://192.168.178.38/cgi-bin/writeVal.cgi?G4.SollTemp=$val
Der Befehl:
Set Raumtemperaturen_EG_Set Buero_Temperatur_Soll 22
ruft nach wie vor die folgende URL auf:
http://192.168.178.38/cgi-bin/writeVal.cgi?G4.SollTemp=22
und nicht wie gewünscht die
http://192.168.178.38/cgi-bin/writeVal.cgi?G4.SollTemp=2200
Das Attribut enableControlSet 1 oder enableControlSet 0 hat keine Auswirkung.
Gelöst:
Es heißt nicht set05OExpr sondern set05IExpr
Danke
Ah, stimmt, ich hatte beim kopieren die falsche Zeile erwischt. Du wendest die Funktion ja auf einen Input Parameter an, nicht auf einen Output.