Readings mit Werten aus anderen Readings ersetzen

Begonnen von slor, 13 April 2021, 22:42:59

Vorheriges Thema - Nächstes Thema

slor

Hallo zusammen,

ich habe mir folgendes doif erstellt, dass bei Homematic Ventien im Boost Modus den Ventil Max Wert auf 80 setzt und nach dem Boost wieder zurück auf den vorher eingestellten.


(["V1:^.*.CONTROL_MODE:.BOOST$"])
(setreading $DEVICE Valve_last [$DEVICE:R-VALVE_MAXIMUM_POSITION])
(set $DEVICE config VALVE_MAXIMUM_POSITION=80)
(get $DEVICE config VALVE_MAXIMUM_POSITION)
DOELSE
(set $DEVICE config VALVE_MAXIMUM_POSITION=[$DEVICE:Valve_last])
(get $DEVICE config VALVE_MAXIMUM_POSITION)


Das setzen geht, allerdings beim Doelse werden die Werte nicht wieder zurückgeschrieben.
Ich vermute, dass diese Zeile nicht funktioniert: (set $DEVICE config VALVE_MAXIMUM_POSITION=[$DEVICE:Valve_last])

Ich steh auf dem Schlauch, was mir fehlt...
Fhem auf Raspberry Pi 4
CCU3 mit RaspberryMatic mit HMCCU an FHEM
HMCCU, Telegram, Conbee2 und Hue/Tradfri/Osram Lampen AQARA Sensoren, HomeConnect

Otto123

Hi,

ich weiß nicht was DOIF dort an dieser Stelle macht oder nicht. Das Konstrukt was Du verwendest nennt sich set magic.
https://fhem.de/commandref_DE.html#set
Da steht nicht, dass man Text und ein Reading kombinieren kann. Gibt es eine Fehlermeldung im Log?

Du kannst es mMn so versuchen:
(set $DEVICE {("config VALVE_MAXIMUM_POSITION=".ReadingsVal($DEVICE,'Valve_last','')})

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

slor

Danke für den Hinweis.
Leider bin ich noch nicht weitergekommen. Ich vermute da ist ein Logikfehler dring.
Ich trigger in der ersten Zeile auf Boost von jedem Gerät das V1 enthält. Bei mir die Homematic Ventile.
Der Name des Devices ist zu dem Zeitpunkt in $DEVICE.

Beim DOELSE weiß das DOIF doch gar nicht auf welches Device es reagieren soll nehme ich an?
Beziehungsweise, was passiert denn bei "sonst"? Bezieht sich das immer auf den Kontext von $DEVICE?

Das Doif springt nie in CMD2

In der Befehlszeile klappt schon mal folgendes.
{fhem("set DG_AZ_V1 config VALVE_MAXIMUM_POSITION=".ReadingsVal("DG_AZ_V1","Valve_last",""))}

Die Set Magic Vereinfachung geht auch:
set DG_AZ_V1 config VALVE_MAXIMUM_POSITION=[DG_AZ_V1:Valve_last:d]

Die Frage ist jetzt nur, wie bekomme ich das DOIF dazu den 2. Teil nach dem DOELSE auszuführen?
Fhem auf Raspberry Pi 4
CCU3 mit RaspberryMatic mit HMCCU an FHEM
HMCCU, Telegram, Conbee2 und Hue/Tradfri/Osram Lampen AQARA Sensoren, HomeConnect

xenos1984

So weit ich das sehe, triggerst du auf ein Event und nicht auf den Wert eines Readings. Der Trigger wird immer dann ausgelöst, wenn ein Event stattfindet, das auf die Bedingung im ersten Zwei passt. Dann wird der erste Zweig ausgeführt. Das gilt aber für jeden Trigger, der das DOIF auslöst - es kann nie einen Trigger geben, der das DOIF auslöst, aber nicht auf die Bedingung passt (und damit in den zweiten Zweig mit DOELSE schaltet), weil nur "passende" Trigger gesucht werden.

Du müsstest also stattdessen auf Readings triggern oder für den zweiten Zweig ein DOELSEIF mit einem passenden zweiten Event-Trigger einbauen, der das Schalten in den zweiten Zweig auslöst.

(Und natürlich attr do always.)

Otto123

Stimmt ich habe mich nur auf den zweiten Teil der Frage konzentriert. :-[

Die Frage ist: was betrachtest Du denn als ELSE? Ich würde schon den Trigger auf dem Event lassen und statt eines dummen DOELSE ein DOELSEIF mit dem passendem EVENT machen. In letzter Zeit hat sich gezeigt das DOIF mit Reading Auswertung bei Homematic quasi ein no go ist!

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

slor

Ich habe das jetzt nach langem Rumprobieren doch pro Ventil gemacht.
Problem war auch, wenn andere Ventile Manu oder Boost gemeldet haben, dass die durcheinander gewürfelt wurden.


(["DG_AZ_V1:^.*.CONTROL_MODE:.BOOST$"])
(setreading DG_AZ_V1 Valve_last [DG_AZ_V1:R-VALVE_MAXIMUM_POSITION])
(set DG_AZ_V1 config VALVE_MAXIMUM_POSITION=80)
(get DG_AZ_V1 config VALVE_MAXIMUM_POSITION)
DOELSEIF
(["DG_AZ_V1:^.*.CONTROL_MODE:.MANU$"])
(set DG_AZ_V1 config VALVE_MAXIMUM_POSITION=[DG_AZ_V1:Valve_last])
(get DG_AZ_V1 config VALVE_MAXIMUM_POSITION)
DOELSE ()
Fhem auf Raspberry Pi 4
CCU3 mit RaspberryMatic mit HMCCU an FHEM
HMCCU, Telegram, Conbee2 und Hue/Tradfri/Osram Lampen AQARA Sensoren, HomeConnect