Hauptmenü

Ein DOIF für viele Geräte

Begonnen von Hanjo, 10 März 2019, 17:24:49

Vorheriges Thema - Nächstes Thema

Hanjo

Hallo,

ich möchte gerne eine Aktion für viele Geräte ausführen, allerdings abhängig von Gerätespezifischen Readings. Im konkreten Fall möchte ich, dass alle Jalousien morgens um 8:30 auf 85% fahren, solange sie noch unten sind. Einzelne Jalousien, die jedoch bereits oben sind sollen eben nicht wieder auf 85% fahren.

Für eine einzige Jalousie sieht das z.B. so aus:
([08:30] and [OG.SZ.Jalousie:status:d] > 85) (
set OG\.SZ\.Jalousie position 85
)


Zwar kenne ich $DEVICE, jedoch brauche ich da ja ein Event der jeweiligen Devices, mein Trigger ist aber [08:30]. Lässt sich das trotzdem irgendwie mit DOIF realisieren?

Vielen Dank & Gruß
Hanjo

Byte09

#1
Zitat von: Hanjo am 10 März 2019, 17:24:49
Hallo,

ich möchte gerne eine Aktion für viele Geräte ausführen, allerdings abhängig von Gerätespezifischen Readings. Im konkreten Fall möchte ich, dass alle Jalousien morgens um 8:30 auf 85% fahren, solange sie noch unten sind. Einzelne Jalousien, die jedoch bereits oben sind sollen eben nicht wieder auf 85% fahren.

Für eine einzige Jalousie sieht das z.B. so aus:
([08:30] and [OG.SZ.Jalousie:status:d] > 85) (
set OG\.SZ\.Jalousie position 85
)


Zwar kenne ich $DEVICE, jedoch brauche ich da ja ein Event der jeweiligen Devices, mein Trigger ist aber [08:30]. Lässt sich das trotzdem irgendwie mit DOIF realisieren?

Vielen Dank & Gruß
Hanjo


kenne mich mit doif nicht aus , weiss aber das es perlcode im ausführungsteil kann. somit wäre mein ansatz mit "devspec2array()" eine liste der betreffenden Geräte zu erstellen und diese in einer Schleife nach deinem Muster abzuarbeiten.

... ein wenig perlbewandert solltest du sein , .... alternativ reinarbeiten ( ist auf dauer hier eh alternativlos ).


gruss Byte09


edit : vorschlag von Damian ist def. der bessere (devspec)

Damian

#2
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

Hanjo

Hi,

vielen Dank!

devspec2array werde ich mir auf jeden Fall mal merken!

devspec im DOIF ist eine gute Idee, aber das filtern "> 85" finde ich nicht so elegant:

([08:30]) (
set TYPE=KNX:FILTER=NAME=(OG|EG)\.\w+\.Jalousie.*:FILTER=status=(8[6-9]|9\d|100)\b.* position 85
)


Oder gibt es noch eine bessere Variante anstatt (8[6-9]|9\d|100)\b.* ?

Die Aggregation finde ich da besser:

([08:30]) (
set [@"^(OG|EG)\.\w+\.Jalousie":status:$number > 85 and $TYPE eq "KNX" and $group eq "Jalousien"] position 85
)


Danke & Gruß

Damian

#4
Zitat von: Hanjo am 10 März 2019, 18:18:32

Die Aggregation finde ich da besser:

([08:30]) (
set [@"^(OG|EG)\.\w+\.Jalousie":status:$number > 85 and $TYPE eq "KNX" and $group eq "Jalousien"] position 85
)



Dann ist ja alles bestens, kürzer wird man es in Perl auch nicht hinbekommen ;)

Allerdings wirst du eine Fehlermeldung bekommen, wenn es kein Device gibt. In der Commandref gibt es zu Aggregation auch Beispiele mit einer foreach-Schleife.
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF