hi,
habe die Beschreibung
Zitat"Kommt ein Device in mehreren Bedingungen vor, so wird immer nur ein Kommando ausgeführt, und zwar das erste, für das die dazugehörige Bedingung in der abgearbeiteten Reihenfolge wahr ist."
aus der cmdref schon verstanden, frage mich aber ob es nicht doch einen workaround gibt.
Ich wollte abhängig von twilight_weather einzelne LED einschalten :
([15:00-23:30] and [myTwilight:twilight_weather] == 99 ) (set esp_led pixel 0 {(226-int(rand(55)))} {(121-int(rand(55)))} {(int(rand(35)))}) DOELSEIF
([15:00-23:30] and [myTwilight:twilight_weather] == 98 ) (set esp_led pixel 1 {(226-int(rand(55)))} {(121-int(rand(55)))} {(int(rand(35)))}) DOELSEIF
([15:00-23:30] and [myTwilight:twilight_weather] == 97 ) (set esp_led pixel 2 {(226-int(rand(55)))} {(121-int(rand(55)))} {(int(rand(35)))}) DOELSEIF
([15:00-23:30] and [myTwilight:twilight_weather] == 96 ) (set esp_led pixel 3 {(226-int(rand(55)))} {(121-int(rand(55)))} {(int(rand(35)))}) DOELSEIF
([15:00-23:30] and [myTwilight:twilight_weather] == 95 ) (set esp_led pixel 4 {(226-int(rand(55)))} {(121-int(rand(55)))} {(int(rand(35)))}) DOELSEIF
([15:00-23:30] and [myTwilight:twilight_weather] == 94 ) (set esp_led pixel 5 {(226-int(rand(55)))} {(121-int(rand(55)))} {(int(rand(35)))})
Nun bin ich darüber gestolpert, das twilight_weather springt : 95, 91, 87 usw.
damit bleiben dann einzelne LEDs natürlich dunkel.
ich steh gerade irgendwie auf dem schlauch.
Falls jemand eine zündende idee hat, her damit.
danke.
Du könntest mit <= arbeiten?
aber auch beim <= würde doch immer nur eine zeile matchen, oder ?
Richtig... Denkfehler bei mir... dann bleibt wahrscheinlich nichts anderes, als die Vorgänger mit abzufragen, Also wenn 95 kommt, gucken ob pixel 3 schon geschaltet ist, wenn nein, dann das zusätzlich schalten etc... viel Tipparbeit ;-)
Wenn's ohne "rand" geht, oder du es bunt magst, kannst du natürlich die Vorgänger auch einfach schalten, ohne Prüfung...
So etwas komplexes würde ich in eine myUtils gießen und dann mit Perlcode arbeiten. Hier kann im einfachsten Fall mit if's arbeiten.
Zitat von: CoolTux am 25 September 2016, 16:25:39
So etwas komplexes würde ich in eine myUtils gießen und dann mit Perlcode arbeiten. Hier kann im einfachsten Fall mit if's arbeiten.
ja das wär der "notausgang"....
wenn doif ein attribut "match_multicase" oder twilight ein attribut "linear" hätte, wär es halt einfacher ;)
Hast Du schon mal erlebt das es liniare Dunkel wird auf der Erde? Und erst Recht nicht Wetterabhänging.
Du kannst eine if Abfrage innerhalb einer Zählschleife machen. Das spart Code.
linear wäre ja nur di signalisierung des wertes - die zeit zwischen den werten variabel
hätte ja sein können das es auch andere fälle gibt in denen jemand einen multi-match für DOIF gebrauchen kann.
DOIF soll ja so eine Art Statemachine sein, daher kann es eher kein multimatch geben. Du kannst innerhalb eines Match eine zusätzliche Abfrage mit FHEM IF machen.
Du könntest von einem Startwert aus, in einem Fenster, das mit 6 Aktualisierungen durchschritten wird und bei jeder Aktualisierung von [myTwilight:twilight_weather] weiterschaltet, jede Stufe durchlaufen, etwa so
([?15:00-23:30] and [myTwilight:twilight_weather] > 85 and [myTwilight:twilight_weather] < 98 and $cmd =~ "0|6") (set ...)
DOELSEIF ([?15:00-23:30] and [myTwilight:twilight_weather] > 85 and [myTwilight:twilight_weather] < 98 and $cmd == 1) (set ...)
DOELSEIF ([?15:00-23:30] and [myTwilight:twilight_weather] > 85 and [myTwilight:twilight_weather] < 98 and $cmd == 2) (set ...)
DOELSEIF ([?15:00-23:30] and [myTwilight:twilight_weather] > 85 and [myTwilight:twilight_weather] < 98 and $cmd == 3) (set ...)
DOELSEIF ([?15:00-23:30] and [myTwilight:twilight_weather] > 85 and [myTwilight:twilight_weather] < 98 and $cmd == 4) (set ...)
DOELSEIF ([?15:00-23:30] and [myTwilight:twilight_weather] > 85 and [myTwilight:twilight_weather] < 98 and $cmd == 5) (set ...)