Schalten mit mehreren Bedingungen

Begonnen von Mellowback, 11 August 2017, 15:34:11

Vorheriges Thema - Nächstes Thema

Beta-User

Die Logik zu verändern, ist m.E. eine gute Sache, erhöht allerdings vermutlich die Last etwas, da Temp-Readings üblicherweise regelmäßig aktualisiert werden.
Je nach Sensor könnte man hier auch eine "Alarm"-Funktion oä. nutzen, dann müßte man aber das Notify auf beide Devices erweitern und dann die Reaktion nach dem triggernden Device richten ::) .

Was man m.E. in jedem Fall noch abfangen sollte, ist der Fall, dass die Pumpe bereits aus ist.
statt"else {Pumpe aus}"
"ein else {Pumpe aus, wenn noch an}"
(Weiteres if, oder ein FILTER)

Gruß, Beta-User

Server: HP-elitedesk@Debian 12, aktuelles FHEM@ConfigDB | CUL_HM (VCCU) | MQTT2: ZigBee2mqtt, MiLight@ESP-GW, BT@OpenMQTTGw | ZWave | SIGNALduino | MapleCUN | RHASSPY
svn: u.a Weekday-&RandomTimer, Twilight,  div. attrTemplate-files, MySensors

Mellowback

Hallo Beta-User,

also Variante 1

"{ if (ReadingsVal("Temperatursensor_T1", "state", "no") > 35) { fhem ("set SchaltaktorFussbodenheizung_Sw_01 $EVENT")}}"


Funktioniert nur bedingt, da ich das Problem habe wenn die Temperatur unterhalb von 35°C geht die Funktion nicht mehr auf ein schalt event reagiert.

Wie würde denn die Logik "if else" für fhem aussehen ?

Grüße

Beta-User

Zitat von: Beta-User am 18 Oktober 2017, 12:14:12
Dann müßtest du die Abfrage mit einer Afrage beginnen, ob $EVENT "off" ist beginnen, und dann das if oben durch ein elsif ersetzen...

"Eigentlich" war das so gedacht, dass du selbst mal versuchst, ein wenig perl zu schreiben ::) .
Aber weil du es bist ein letztes Mal ohne, dass wenigstens der Versuch zu erkennen ist (ungetested):

{ if ($EVENT == "off" { fhem ("set SchaltaktorFussbodenheizung_Sw_01 $EVENT")} elsif (ReadingsVal("Temperatursensor_T1", "state", "no") > 35) { fhem ("set SchaltaktorFussbodenheizung_Sw_01 $EVENT")}}

Ab hier dann nur noch mit posting der eigenen code-Versuche!

Und bitte setze dich mit dem berchtigten Einwand von Wuppie68 auseinander.

Gruß, Beta-User
Server: HP-elitedesk@Debian 12, aktuelles FHEM@ConfigDB | CUL_HM (VCCU) | MQTT2: ZigBee2mqtt, MiLight@ESP-GW, BT@OpenMQTTGw | ZWave | SIGNALduino | MapleCUN | RHASSPY
svn: u.a Weekday-&RandomTimer, Twilight,  div. attrTemplate-files, MySensors

Mellowback

Klasse und Danke für den Ansatz.
Leider bekome ich beim eifügen des Code folgende Fehlermeldung (siehe Bild).

Grüße

Wuppi68

Zitat von: Mellowback am 18 Oktober 2017, 13:58:15
Klasse und Danke für den Ansatz.
Leider bekome ich beim eifügen des Code folgende Fehlermeldung (siehe Bild).

Grüße

nimm mal anstelle der Doppelten Gänsefüsschen die einfachen

Unterschied

" = Hier finden Stringersetzungen statt z.B. $Hello = "Hallo"; print "$Hello World" ergibt Hallo World
' = der Text wird so genommen wie er ist $Hello = "Hallo"; print "$Hello World" ergibt $Hello World



und zähle die "öffnenden" und "schliessenden" Gänsefüße und Klammern noch einmal genau nach
FHEM unter Proxmox als VM

Beta-User

Probier mal "eq" statt "==". Ist ja ein Stringvergleich ::) ...

Sorry.
Server: HP-elitedesk@Debian 12, aktuelles FHEM@ConfigDB | CUL_HM (VCCU) | MQTT2: ZigBee2mqtt, MiLight@ESP-GW, BT@OpenMQTTGw | ZWave | SIGNALduino | MapleCUN | RHASSPY
svn: u.a Weekday-&RandomTimer, Twilight,  div. attrTemplate-files, MySensors

Mellowback

Also ich glaube der hat mit "UmwelzpumpeOnOff:(on|off)" ein Problem.


UmwelzpumpeOnOff:(on|off) { if ($EVENT == "off" { fhem ("set SchaltaktorFussbodenheizung_Sw_01 $EVENT")} elsif (ReadingsVal("Temperatursensor_T1", "state", "no") > 35) { fhem ("set SchaltaktorFussbodenheizung_Sw_01 $EVENT")}}

Beta-User

#22
Zitat von: Beta-User am 18 Oktober 2017, 14:09:45
Probier mal "eq" statt "==". Ist ja ein Stringvergleich ::) ...

Sorry.

Nochmal fertiger code:
UmwelzpumpeOnOff:(on|off) { if ($EVENT eq "off" { fhem ("set SchaltaktorFussbodenheizung_Sw_01 $EVENT")} elsif (ReadingsVal("Temperatursensor_T1", "state", "no") > 35) { fhem ("set SchaltaktorFussbodenheizung_Sw_01 $EVENT")}}

Und bitte ggf. die Events in Code-Tags einfügen.
Server: HP-elitedesk@Debian 12, aktuelles FHEM@ConfigDB | CUL_HM (VCCU) | MQTT2: ZigBee2mqtt, MiLight@ESP-GW, BT@OpenMQTTGw | ZWave | SIGNALduino | MapleCUN | RHASSPY
svn: u.a Weekday-&RandomTimer, Twilight,  div. attrTemplate-files, MySensors

Mellowback

immer noch gleiche fehlermeldung  :(

Beta-User

OK, es fehlte auch noch eine Klammer nach "off"UmwelzpumpeOnOff:(on|off) { if ($EVENT eq "off") { fhem ("set SchaltaktorFussbodenheizung_Sw_01 $EVENT")} elsif (ReadingsVal("Temperatursensor_T1", "state", "no") > 35) { fhem ("set SchaltaktorFussbodenheizung_Sw_01 $EVENT")}}
Server: HP-elitedesk@Debian 12, aktuelles FHEM@ConfigDB | CUL_HM (VCCU) | MQTT2: ZigBee2mqtt, MiLight@ESP-GW, BT@OpenMQTTGw | ZWave | SIGNALduino | MapleCUN | RHASSPY
svn: u.a Weekday-&RandomTimer, Twilight,  div. attrTemplate-files, MySensors

Mellowback

okay, ich glaube soweit funktioniert es erstmal.
Ich werde dann nochmal testen was passiert wenn T1 die 35Grad übersteigt.

Danke

Grüße

Beta-User

Zum Testen kannst du ja auch einfach die Vergleichstemperatur (nach unten) anpassen ;) .

Aber insgesamt nochmal: wuppi68's Einwand solltest du dir bei Gelegenheit nochmal in Ruhe durchdenken.

Gruß, Beta-User
Server: HP-elitedesk@Debian 12, aktuelles FHEM@ConfigDB | CUL_HM (VCCU) | MQTT2: ZigBee2mqtt, MiLight@ESP-GW, BT@OpenMQTTGw | ZWave | SIGNALduino | MapleCUN | RHASSPY
svn: u.a Weekday-&RandomTimer, Twilight,  div. attrTemplate-files, MySensors

Otto123

Hi,

bei solchen einfachen Abfrage bevorzuge ich die kürzere IF Variante (FHEM IF)
UmwelzpumpeOnOff:(on|off) IF ($EVENT eq "off") (set SchaltaktorFussbodenheizung_Sw_01 $EVENT) ELSE ( IF ([Temperatursensor_T1] > 35) (set SchaltaktorFussbodenheizung_Sw_01 $EVENT))
https://fhem.de/commandref_DE.html#IF

Nur zur Info  :D

Gruß Otto
Viele Grüße aus Leipzig  ⇉  nächster Stammtisch an der Lindennaundorfer Mühle
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7590,WRT3200ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266,MQTT,Zigbee,deconz

Mellowback

#28
Hallo Otto,

bei deiner Variante reagiert Fhem garnicht.
Kann es sein das er Temperatursensor_T1 nicht erkennt ?
Die Daten von Temperatursensor_T1 habe ich mal als Bild mit hinterlegt muss der Code durch "temperature" ergänzt werden ?

Grüße

Otto123

Hallo Mellowback,

genau so ist es. Allerdings kann dann
Zitat(ReadingsVal("Temperatursensor_T1", "state", "no")
auch nicht funktionieren! Davon bin ich aber ausgegangen. Du hast ja gesagt der Code von Beta User funktioniert.
Also
[Temperatursensor_T1:temperature] entspricht (ReadingsVal("Temperatursensor_T1", "temperature", "no")
und
[Temperatursensor_T1] entspricht (ReadingsVal("Temperatursensor_T1", "state", "no")

Noch ein Tipp: Uns allen ist es lieber keine Screenshots anzuschauen sondern die Ausgabe von list <devicename>

Gruß Otto
Viele Grüße aus Leipzig  ⇉  nächster Stammtisch an der Lindennaundorfer Mühle
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7590,WRT3200ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266,MQTT,Zigbee,deconz