[Gelöst] Zustand von mehreren devices mit FILTER abfragen

Begonnen von Vize, 28 Juli 2015, 17:06:11

Vorheriges Thema - Nächstes Thema

Vize

Hallo zusammen,

in meiner Beschattungssteuerung für Jalousien steht u.a. folgendes im Ausführungsteil:
set wz_105_rollo_2:FILTER=level>20,ez_105_rollo_2:FILTER=level>20 20

Kann ich das so zusammenfassen/vereinfachen?
set wz_105_rollo_2,ez_105_rollo_2 [FILTER=level>20] 20

Wenn nein, wie müsste es richtigerweise aussehen?

Danke schonmal für eure Hilfe!

Gruß
Andreas

Loredo

Hat meine Arbeit dir geholfen? ⟹ https://paypal.me/pools/c/8gDLrIWrG9

Maintainer:
FHEM-Docker Image, https://github.com/fhem, Astro(Co-Maintainer), ENIGMA2, GEOFANCY, GUEST, HP1000, Installer, LaMetric2, MSG, msgConfig, npmjs, PET, PHTV, Pushover, RESIDENTS, ROOMMATE, search, THINKINGCLEANER

Vize

Dankeschön für die schnelle Antwort!!!

Gruß
Andreas

Vize

Hallo nochmal,

hat leider doch nicht funktioniert...

Im Log folgende Meldung, und Rollos sind nicht zugefahren:
2015.07.28 22:13:42 2: di_eg_rollos_zeitautomatik: set ez_105_rollo.*,wz_105_rollo.*,ku_104_rollo,gb_103_rollo [FILTER=level>0] zu: Unknown argument [FILTER=level>0], choose one of assignHmKey clear:readings,trigger,register, usw...

Hier noch der Auszug aus dem DOIF, der scheitert:
DOELSE ((set ez_105_rollo.*,wz_105_rollo.*,ku_104_rollo,gb_103_rollo [FILTER=level>0] zu))

Wo liegt der Fehler?

Dank und Gruß
Andreas

rudolfkoenig

FILTER kann nur = und !=, ich wuerde fuer alle betroffenen Geraete ein userReading setzen, falls die Bedingung erfuellt ist, und nach diesen filtern.

Vize

Sorry, versteh ich grad nicht...

Wenn ich :[FILTER=level>0] hinter jedes device einzeln setzte, funktioniert es ja...und
ZitatFILTER kann nur =
passt doch damit auch, oder?

Ich würd es halt gern vereinfachen, um nicht hinter jedes device [FILTER=bla] schreiben zu müssen...

Gruß
Andreas

justme1968

seit einiger zeit sind auch die anderen vergleichsoperatoren eingebaut.

aber im zweiten fall fehlt der : zwischen device namen und filter. da darf kein leerzeichen sein.

gruss
  andre
hue, tradfri, alexa-fhem, homebridge-fhem, LightScene, readingsGroup, ...

https://github.com/sponsors/justme-1968

Vize

Also dann so?

DOELSE ((set ez_105_rollo.*,wz_105_rollo.*,ku_104_rollo,gb_103_rollo:[FILTER=level>0] zu))

Gruß
Andreas

FunkOdyssey

Ich klink mich hier mal rein.
Mir ist aufgefallen, dass ich bei einem gefiltertem SET auf ein Structure, das Feld STATE (welches auch in der Übersicht beim DevStateIcon angezeigt wird) den Wert "[FILTER=state!=off] off" annimmt. Ich meine, dass dies vor vielen Wochen nicht der Fall war. Sollte das STATE des Structures nicht eigentlich auch einfach nur "off" annehmen?

set struct_lampen [FILTER=state!=off] off

justme1968

@Vieze: wie kommst du eigentlich auf die eckigen klammern? kann es sein das irgendwo fhem und DOIF vermischt wird?

@FunkOdyssey: dazu gab es schon mal etwas in einem thread. ich kann mich aber gerade nicht an das ergebnis erinnern.

gruss
  andre
hue, tradfri, alexa-fhem, homebridge-fhem, LightScene, readingsGroup, ...

https://github.com/sponsors/justme-1968

Vize

Zitat von: justme1968 am 29 Juli 2015, 11:58:50
@Vieze: wie kommst du eigentlich auf die eckigen klammern? kann es sein das irgendwo fhem und DOIF vermischt wird?

Puh, ich meine, das mal irgendwo im Zusammenhang mit structure gesehen zu haben, aber ich weiß leider nicht mehr wo...Moment...
hier http://forum.fhem.de/index.php?topic=37023.0 ist ein Beispiel...und hier http://forum.fhem.de/index.php?topic=26025.0...

Aber ist es denn nun möglich, mehrere devices gleichzeitig mit FILTER anzusprechen? Und wie sieht denn nun die korrekte Syntax für meinen Fall aus?

Gruß
Andreas

justme1968

also....

die [] schreibweise ist nur für structure relevant. hier musst du ja unterscheiden ob der filter auf die auswahl der structue wirken soll oder ob sie an die jeweiligen set der einzelnen devices durchgereicht wird. der filter mit leerzeichen und [] is der der an die set der einzelnen devices weiter gereicht wird. je nach anwendung kannst du sogar beides kombiniert haben.
set meineStructure:FILTER=... [FILTER=...] abc

du hast aber keine structure. als ist diese variante nicht relevant für dich.


du musst unterscheiden ob du deine devices anhand einer regex auswählst der ob du eine mit komma getrennte liste hast. der filter ist immer teil *einer* device auswahl. also:set meinDevice:FILTER=...

die variante von oben:set <device1>,<device2>:FILTER=...ist eine liste aus device1 und gefiltertem device2. d.h. der filter wirkt sich nur auf device2 aus. das ist ziemlich sicher nicht was du möchtest.

was du möchtest ist vermutlich das folgende. hier greift der filter zusätzlich zur regex:set (ez|wz)105_rollo_2:FILTER=level>20 20

gruss
  andre
hue, tradfri, alexa-fhem, homebridge-fhem, LightScene, readingsGroup, ...

https://github.com/sponsors/justme-1968

Vize

Hallo Andre,

erstmal vielen Dank für deine ausführlichen Erklärungen...das meiste verstehe sogar ich als Anfänger...  :D

Zu der regex Geschichte noch folgendes. Ich hoffe, ich hab das richtig verstanden:
Mit set .*:FILTER=level>20 20
würde ich alles mit level>20 auf 20 setzen?

Mit set .*rollo.*:FILTER=level>20 20
würde ich alles mit rollo im Namen und level>20 auf 20 setzen?

Mit set (ez|wz).*rollo.*:FILTER=level>20 20
würde ich alles mit ez und rollo oder wz und rollo im Namen und level>20 auf 20 setzen?

Würde in meinem Fall dann auch sowas funktionieren?
DOELSE (set (ez_105_|wz_105_|ku_104_|gb_103_)rollo.*:FILTER=level>0 zu)

So langsam beginnt mein Hirn sich zu verknoten...  :-[

Danke nochmal und Gruß
Andreas

marvin78

Du kannst solche "Regexe" immer leicht mit einem list testen. Also mache mal


list (ez_105_|wz_105_|ku_104_|gb_103_)rollo.*:FILTER=level>0


Wenn dann die zu dem Zeitpunkt richtigen Devices gelistet werden, sollte auch dein Regex funktionieren.

Vize

Danke Marvin!

Dein list-Befehl zeigt mir alle geöffneten Rollos aus meiner Auswahl...

ez_105_rollo_1
ez_105_rollo_2
ez_105_rollo_3
gb_103_rollo
ku_104_rollo
wz_105_rollo_1
wz_105_rollo_2

Dann werd ich das mal so testen.

Gruß
Andreas