FHEM Forum

FHEM => Automatisierung => DOIF => Thema gestartet von: juppzupp am 25 September 2016, 15:27:59

Titel: Mehrere Kommandos bei gleicher bedingung möglich ?
Beitrag von: juppzupp am 25 September 2016, 15:27:59
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.
Titel: Antw:Mehrere Kommandos bei gleicher bedingung möglich ?
Beitrag von: KernSani am 25 September 2016, 15:42:13
Du könntest mit <= arbeiten?
Titel: Antw:Mehrere Kommandos bei gleicher bedingung möglich ?
Beitrag von: juppzupp am 25 September 2016, 16:02:36
aber auch beim <= würde doch immer nur eine zeile matchen, oder ?
Titel: Mehrere Kommandos bei gleicher bedingung möglich ?
Beitrag von: KernSani am 25 September 2016, 16:17:54
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...
Titel: Antw:Mehrere Kommandos bei gleicher bedingung möglich ?
Beitrag 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.
Titel: Antw:Mehrere Kommandos bei gleicher bedingung möglich ?
Beitrag von: juppzupp am 25 September 2016, 16:34:38
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 ;)
Titel: Antw:Mehrere Kommandos bei gleicher bedingung möglich ?
Beitrag von: CoolTux am 25 September 2016, 16:40:18
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.
Titel: Antw:Mehrere Kommandos bei gleicher bedingung möglich ?
Beitrag von: juppzupp am 25 September 2016, 16:52:01
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.

Titel: Antw:Mehrere Kommandos bei gleicher bedingung möglich ?
Beitrag von: CoolTux am 25 September 2016, 16:57:10
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.
Titel: Antw:Mehrere Kommandos bei gleicher bedingung möglich ?
Beitrag von: Ellert am 25 September 2016, 23:14:19
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 ...)