Shelly-1 als Heizung thermostat

Begonnen von superbert, 16 Dezember 2020, 22:43:46

Vorheriges Thema - Nächstes Thema

superbert

Den Shelly-1 hat ein externer Temperatur Sensor.

Soll-Temperatur im Shelly-1 kan ich über HTTPMOD Konfigurieren, das funktionier Einwandfrei (set undertemp / overtemp):

defmod thermostatControl HTTPMOD http://192.168.1.180/settings/ext_temperature/0?undertemp_act= 0
attr thermostatControl userattr set01Name set01TextArg:0,1 set01URL set02Name set02TextArg:0,1 set02URL
attr thermostatControl set01Name overtemp
attr thermostatControl set01TextArg 1
attr thermostatControl set01URL http://192.168.1.180/settings/ext_temperature/0?overtemp_threshold_tC=$val
attr thermostatControl set02Name undertemp
attr thermostatControl set02TextArg 1
attr thermostatControl set02URL http://192.168.1.180/settings/ext_temperature/0?undertemp_threshold_tC=$val


Ich möchte aber die Temperatur über einem Wert einstellen, zb "set RP_heatingControl desired-temp 21" sollte folgende Befehle auslösen:
set RP_heatingControl overtemp 21
set RP_heatingControl undertemp 20.5
(20.5 = 21 - 0.5 --> für Hysterise)

Ich habe seit Stunden verschiedene Versuche gemacht mit Readingsproxy...das hat aber leider nicht geklappt  :(
Ich habe ein user Reading erstellt "desired-temp" (im RP_heatingControl).

Im SetFN habe ich das folgendes versucht:

{
if ($READING eq "desired-temp") {
fhem "set thermostatControl overtemp $VALUE";
fhem "set thermostatControl undertemp $VALUE-0.5;
}
}


Die gewünschte set Befehle werden nicht ausgeführt.

Was mache Ich falsch? Gibt es eine bessere Lösung mit DOIF oder Notify?

Wenn Ich eine lösung habe, möchte Ich das Shelly-Gerät auch mittels Homebridge benützen.

amenomade

$ARGS statt $VALUE

Zitat von: CommandRef

  • setFn
perl expresion that will return the set command forwarded to the parent device. has access to $CMD, $DEVICE, $READING and $ARGS
Pi 3B, Alexa, CUL868+Selbstbau 1/2λ-Dipol-Antenne, USB Optolink / Vitotronic, Debmatic und HM / HmIP Komponenten, Rademacher Duofern Jalousien, Fritz!Dect Thermostaten, Proteus

superbert

Nach viele Versuche habe Ich mal ein Diagram gezeichnet um besser zu erklären was Ich versuche hin zu kriegen:

Ich möchte das Shelly-1 (mit externen Temperatur Sensor) als Badezimmer Thermostat nützen und einbinden als Thermostat im Homekit/Homebridge. Shelly-1 kann Status und Temperatur über MQTT übertragen. Leider ist es nicht möglich den Soll-wert über MQTT ein zu stellen.

Es ist mir gelungen mit HTTPMOD um "overtemp" und "undertemp" über http zu setzen. Um Homebridge zu benutzen muss Ich ein Gerat darstellen womit Ich HTTPMOD und MQTT kombiniere kann. Readingsproxy ist wahrscheinlich die beste Lösung, oder gibt es eine einfachere Lösung?

Der Soll-wert von das Homekit Gerät muss benützt werden um "overtemp" zu setzen, und um "undertemp" - 0.5 zu setzen (Hysterise).

Probleme:
1) Es gelingt mir nicht "setreading" von Homebridge zu bekommen. Homekit gibt nur ein "set" commando, also nur state wird gesetzt. Soll Ich setFn benützen um das alles hin zu kriegen?
2) Ist es möglich um temperature in eine userreading in Readingsproxy zu bekommen? Geht das über getFn?

defmod RP_bathroomHeating readingsProxy bathroomHeating:temperature
attr RP_bathroomHeating genericDeviceType thermostat
attr RP_bathroomHeating homebridgeMapping TargetTemperature=desired-temp,cmd=desired-temp\
CurrentTemperature=temperature
attr RP_bathroomHeating room testroom
attr RP_bathroomHeating setList desired-temp:16,16.5,17,17.5,18,18.5,19,19.5,20,20.5,21,21.5,22,22.5,23,23.5,24,24.5,25,25.5,26
attr RP_bathroomHeating userReadings desired-temp,temperature


HTTPMOD (overtemp / undertemp) und MQTT Funktioniert einwandfrei:
defmod thermostatControl HTTPMOD http://192.168.1.180/settings/ext_temperature/0?undertemp_act= 0
attr thermostatControl userattr set01TextArg:0,1 set02TextArg:0,1
attr thermostatControl room testroom
attr thermostatControl set01Name overtemp
attr thermostatControl set01TextArg 1
attr thermostatControl set01URL http://192.168.1.180/settings/ext_temperature/0?overtemp_threshold_tC=$val
attr thermostatControl set02Name undertemp
attr thermostatControl set02TextArg 1
attr thermostatControl set02URL http://192.168.1.180/settings/ext_temperature/0?undertemp_threshold_tC=$val


defmod bathroomHeating MQTT_DEVICE
attr bathroomHeating IODev Mosquitto
attr bathroomHeating event-on-update-reading temperature
attr bathroomHeating room testroom
attr bathroomHeating subscribeReading_temperature shellies/shelly1-76ED1F/ext_temperature/1

superbert

Log Eintrag (commando von Homebridge zu FHEM):

2020.12.28 11:55:30 4: WEB_127.0.0.1_58542 GET /fhem?cmd=set%20RP_bathroomHeating%20desired-temp%2021.5&fwcsrf=csrf_601224024633437&XHR=1; BUFLEN:0
2020.12.28 11:55:30 4: RP_bathroomHeating: set hash->{DEVICE} desired-temp 21.5
2020.12.28 11:55:30 4: WEB: /fhem?cmd=set%20RP_bathroomHeating%20desired-temp%2021.5&fwcsrf=csrf_601224024633437&XHR=1 / RL:64 / text/plain; charset=UTF-8 / Content-Encoding: gzip
/ Cache-Control: no-cache, no-store, must-revalidate


Wenn Ich das gleiche Commando selber eingebe, gibt es ein Fehlermeldung: "Unknown argument desired-temp, choose one of "