[Gelöst] DOIF mit structure und FILTER

Begonnen von Tabularasa, 01 November 2017, 21:47:58

Vorheriges Thema - Nächstes Thema

Tabularasa

Hallo. Habe folgenden Ausführungszweig
((set str_Rollo_EG,Rollo_OG_SZ off))
einmal eine structure und ein einzelnes Rollo.
Nun möchte ich darauf einen Filter anwenden, um nur die Rollos zu schalten, die nicht schon unten sind.
Das möchte ich irgendwie unterbringen, falls es überhaupt so gehen sollte.
((set str_Rollo_EG [FILTER=STATE!=off],Rollo_OG_SZ off))
So und auch an anderen Stellen klappt es allerdings nicht. Hat jemand eine Idee wie alle Rollos dabei mit einbezogen werden?
Danke

CoolTux

#1
Das mit dem FILTER und der Structure ist korrekt.
Du wirst das aber wohl trennen müssen

(set str_Rollo_EG [FILTER=STATE!=off] off, set Rollo_OG_SZ off)

So sollte es gehen.
Du musst nicht wissen wie es geht! Du musst nur wissen wo es steht, wie es geht.
Support me to buy new test hardware for development: https://www.paypal.com/paypalme/MOldenburg
My FHEM Git: https://git.cooltux.net/FHEM/
Das TuxNet Wiki:
https://www.cooltux.net

Ellert

Eckige Klammern in einem Befehl umschliessen die DOIF-Syntax oder set magic, da wird es wohl zu einem Konflikt kommen, wenn in eckigen Klammern ein Filter steht und nicht <device>:<reading>.

In einer Befehlsbeschreibung bezeichnen eckige Klammern  normalerweise eine optionale Angabe.

CoolTux

Das mag ja sein, dennoch ist die Syntax zum FILTER-Aufruf für eine Structure korrekt. Bleibt die Frage wie man DOIF bei bringt das die eckigen Klammern nicht für ihn sind.
Du musst nicht wissen wie es geht! Du musst nur wissen wo es steht, wie es geht.
Support me to buy new test hardware for development: https://www.paypal.com/paypalme/MOldenburg
My FHEM Git: https://git.cooltux.net/FHEM/
Das TuxNet Wiki:
https://www.cooltux.net

CoolTux

#4
Hier mal ein funktionierendes Beispiel


([setTemperaturTemplateDummy] eq "Winter")
(attr HomeMatic configTempFile Winter.cfg,UrlaubIn.cfg,UrlaubOut.cfg,WinterFROST.cfg)
(set HomeMatic tempListG restore)
(set structureHeizungsSystemWohnung [FILTER=controlMode!=auto] controlMode auto)
(set structureHeizungsSystemWohnung [FILTER=desired-temp!=6.0:FILTER=desired-temp!=19:FILTER=desired-temp!=17] desired-temp 19.0)
(save config)


DOELSEIF (
[setTemperaturTemplateDummy] eq "Urlaub")
(attr HomeMatic configTempFile UrlaubIn.cfg,Winter.cfg,UrlaubOut.cfg,WinterFROST.cfg)
(set HomeMatic tempListG restore)
(set structureHeizungsSystemWohnung [FILTER=controlMode!=auto] controlMode auto)
(set structureHeizungsSystemWohnung [FILTER=desired-temp!=6.0:FILTER=desired-temp!=19:FILTER=desired-temp!=17] desired-temp 19.0)
(save config)


DOELSEIF (
[setTemperaturTemplateDummy] eq "UrlaubAbwesend")
(attr HomeMatic configTempFile UrlaubOut.cfg,UrlaubIn.cfg,Winter.cfg,WinterFROST.cfg)
(set HomeMatic tempListG restore)
(set structureHeizungsSystemWohnung [FILTER=controlMode!=auto] controlMode auto)
(set structureHeizungsSystemWohnung [FILTER=desired-temp!=6.0:FILTER=desired-temp!=19:FILTER=desired-temp!=17] desired-temp 17.0)
(save config)


DOELSEIF (
[setTemperaturTemplateDummy] eq "WinterFROST")
(attr HomeMatic configTempFile WinterFROST.cfg,UrlaubOut.cfg,UrlaubIn.cfg,Winter.cfg)
(set HomeMatic tempListG restore)
(set structureHeizungsSystemWohnung [FILTER=controlMode!=auto] controlMode auto)
(set structureHeizungsSystemWohnung [FILTER=desired-temp!=6.0:FILTER=desired-temp!=19:FILTER=desired-temp!=17] desired-temp 20.0)
(save config)


DOELSEIF (
[setTemperaturTemplateDummy] eq "Sommer")
(set structureHeizungsSystemWohnung controlManu on)


DOELSEIF ([setTemperaturTemplateDummy] eq "HeizungAUS")
(set structureHeizungsSystemWohnung [FILTER=desired-temp!=6.0] controlManu 6.0)


DOELSE ()
Du musst nicht wissen wie es geht! Du musst nur wissen wo es steht, wie es geht.
Support me to buy new test hardware for development: https://www.paypal.com/paypalme/MOldenburg
My FHEM Git: https://git.cooltux.net/FHEM/
Das TuxNet Wiki:
https://www.cooltux.net

Damian

Zitat von: CoolTux am 02 November 2017, 05:06:26
Das mag ja sein, dennoch ist die Syntax zum FILTER-Aufruf für eine Structure korrekt. Bleibt die Frage wie man DOIF bei bringt das die eckigen Klammern nicht für ihn sind.

DOIF erkennt die eigene Syntax in eckigen Klammern. Damit wird die FILTER-Angabe korrekt durchgereicht.
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

Tabularasa

Zitat von: CoolTux am 01 November 2017, 22:21:34
Das mit dem FILTER und der Structure ist korrekt.
Du wirst das aber wohl trennen müssen

(set str_Rollo_EG [FILTER=STATE!=off] off, set Rollo_OG_SZ off)

So sollte es gehen.

OK danke. Das werde ich zuhause nachher gleich probieren. Getrennt so wie du hatte ich es auch schon, jedoch hatte ich dabei noch doppelte runde Klammern drum. Für das einzelne Rollo dann den FILTER ohne eckige Klammern, richtig?

tik-tak-tok

Hallo zusammen,

ich habe folgendes Problem.
Es existiert eine Structure (wo alle Clima Channels meiner Homematic Thermostate drin sind), diese wird in Abhängigkeit von unserer Anwesenheit gesteuert.

a)
Wenn alle abwesend => sollen alle Thermostate (welche nicht über separate DOIFs oder manuell per Handbedienung am Thermostat) heruntergeregelt wurden auf 16 Grad abgesenkt werden. Die Thermostate welche über andere DOIFs oder per Handbedienung bereits abgeregelt wurden, sollen unangetastet bleiben.

b)
Wenn wieder jemand anwesend ist sollen alle Thermostate, ausgenommen derer welche per Handbedienung oder anderem DOIF abgeregelt wurden, auf "auto" gesetzt werden.

Der Code hierzu lautet wie folgt:


([anwesend] eq "on" and [HeizungenSchalter] ne "AUS")
(set AlleHeizkoerperThermostate [FILTER=desired-temp!=<15.0:FILTER=controlMode!=auto] controlMode auto)
(set FHEM_bot message "mindestens ein Apple Jünger ist im Radius von 1,5 km, die Heizkörper in allen aktuell nicht belüfteten Räumen wurden auf Automatik gestellt.")
DOELSEIF
([alle_abwesend] eq "on" and [HeizungenSchalter] ne "AUS")
(set AlleHeizkoerperThermostate [FILTER=controlMode!=manual] controlMode manual)
(set AlleHeizkoerperThermostate [FILTER=controlMode!=manual] controlManu off)
(set AlleHeizkoerperThermostate [FILTER=controlMode!=manual] desired-temp 16)
(set FHEM_bot message "alle sind ausgeflogen, in allen aktuell nicht belüfteten Räumen wurden die Heizkörper heruntergedreht.")
DOELSE


Funktion a) funktioniert einwandfrei, Funktion b) jedoch regelt alle Thermostate der Strukture leider, also fälschlicherweise auch die jenigen welche eigentlich exkludiert sein sollen.

Kann mir jemand helfen was ich falsche mache oder wie ich den Code korrigieren muss?

Auch mit folgendem Code tritt der Fehler auf:

([anwesend] eq "on" and [HeizungenSchalter] ne "AUS")
(set AlleHeizkoerperThermostate [FILTER=controlMode!=auto] controlMode auto)
(set FHEM_bot message "mindestens ein Apple Jünger ist im Radius von 1,5 km, die Heizkörper in allen aktuell nicht belüfteten Räumen wurden auf Automatik gestellt.")
DOELSEIF
([alle_abwesend] eq "on" and [HeizungenSchalter] ne "AUS")
(set AlleHeizkoerperThermostate [FILTER=controlMode!=manual] controlMode manual)
(set AlleHeizkoerperThermostate [FILTER=controlMode!=manual] controlManu off)
(set AlleHeizkoerperThermostate [FILTER=controlMode!=manual] desired-temp 16)
(set FHEM_bot message "alle sind ausgeflogen, in allen aktuell nicht belüfteten Räumen wurden die Heizkörper heruntergedreht.")
DOELSE


Vielen Dank & beste Grüße,
Mike

amenomade

Zitatdesired-temp!=<15.0
Das kann meines Achtens nicht funktionieren: !=<

Was funktioniert nicht in der 2. Version?
Pi 3B, Alexa, CUL868+Selbstbau 1/2λ-Dipol-Antenne, USB Optolink / Vitotronic, Debmatic und HM / HmIP Komponenten, Rademacher Duofern Jalousien, Fritz!Dect Thermostaten, Proteus

Per

Zitat von: tik-tak-tok am 29 Juli 2020, 20:37:38
(set AlleHeizkoerperThermostate [FILTER=controlMode!=manual] controlMode manual)
(set AlleHeizkoerperThermostate [FILTER=controlMode!=manual] controlManu off)
(set AlleHeizkoerperThermostate [FILTER=controlMode!=manual] desired-temp 16)
Wenn ich im ersten Schritt alle, welche nicht "manual" sind, auf "manual" stelle, erübrigen sich die nachfolgenden Filter. Wenn das so nicht gewollt ist, erste Zeile weglassen oder Reihenfolge ändern.