Seite 1 von 3
Regel wenn ein Gruppemember ON ist
Verfasst: 25. Feb 2020 22:39
von Piko
Hallo,
ich mal wieder.
Ich steh mal wieder auf dem Schlauch.
Ich würde gerne folgende Szene regeln.
Alle haben das haus verlassen, ein Member der Gruppe glicht ist noch an. Dann soll es abgeschaltet werden. Irgendwie Scheiter ich gerade daran. Wobei es wahrscheinlich mal wieder so einfach ist.
habt ihr da einen Ansatz für mich ?
weiter komme ich gerade im Kopf nicht mehr nachdem ich gefühlte 100 verschiedene Sachen probiert habe.
schönen Abend noch
Re: Regel wenn ein Gruppemember ON ist
Verfasst: 25. Feb 2020 23:09
von 03chris
die regel muss dann etwa so aufgebaut werden:
Code: Alles auswählen
...
then
gLicht.members.filter[ licht|licht.state != OFF ].forEach [ licht | licht.sendCommand(OFF)]
end
dann sollten alle Lichter, die noch an sind, ein Ausschaltbefehl bekommen.
Re: Regel wenn ein Gruppemember ON ist
Verfasst: 26. Feb 2020 00:32
von udo1toni
Fast.
Man sollte zwei unterschiedliche Objekte verwenden, also
Code: Alles auswählen
...
then
gLicht.members.filter[ i|i.state != OFF ].forEach[ licht | licht.sendCommand(OFF)]
end
Die Rule setzt voraus, dass es sich um Switch Items handelt (wenngleich ein State != OFF auch für einen Zahlenwert gültig ist, also ein Dimmer Item ebenfalls ausgeschaltet würde).
Re: Regel wenn ein Gruppemember ON ist
Verfasst: 26. Feb 2020 09:11
von Piko
Super, das hat geklappt.
jetzt hab ich da letzte Nacht was gelesen
Ist es auch möglich das ich mir ein Telegram sende welche Lampe noch an war ?
hab das wie in nem anderen Beitrag mit
versucht, das bringt aber wenig erfolg
ich wünsche euch einen schönen start in den Tag
Re: Regel wenn ein Gruppemember ON ist
Verfasst: 26. Feb 2020 09:34
von udo1toni
triggeringItem ist ein implizites Objekt, welches eben das triggernde Item enthält. Hier möchtest Du aber wissen, an welche Lichter der OFF-Befehl gesendet wurde. Du nutzt dazu einfach mehrere Befehle im Lambda:
Code: Alles auswählen
...
then
gLicht.members.filter[ i|i.state != OFF ].forEach[ licht |
licht.sendCommand(OFF)
sendTelegram("bot",licht.name + " musste ausgeschaltet werden!")
]
end
Telegram verwende ich momentan nicht, vermutlich ist die Syntax mindestens leicht abweichend

Der Punkt ist, dass nun für jedes eingeschaltete Licht ein Telegram versendet wird.
Wenn Du nur genau ein Telegram bekommen willst, musst Du mit einer Variablen arbeiten:
Code: Alles auswählen
...
then
var String strLightsOn = ""
gLicht.members.filter[ i|i.state != OFF ].forEach[ licht |
licht.sendCommand(OFF)
if (strLightsOn != "")
strLightsOn =strLightsOn + ", "
strLightsOn =strLightsOn + licht.name
]
if(strLightsOn != "")
sendTelegram("bot",strLightsOn + " musste"+if(strLighsOn.contains(",")) "n" + " ausgeschaltet werden!")
end
In
strLightsOn werden alle Itemnamen der eingeschalteten Lichter gesammelt, während sie abgeschaltet werden. Ist der String anschließend nicht leer, so muss die Nachricht versendet werden. Da der String einen oder auch mehr Namen enthalten kann, muss für eine korrekte Formulierung noch das n in den Text hinein gemogelt werden, falls im Sammelstring mindestens ein Komma vorkommt.
Fleißaufgabe: Finde heraus, wie Du das letzte Komma im Sammelstring durch die Zeichenfolge " und" ersetzen kannst und denke daran, den ternären Operator (das ist das if() im sendTelegram) entsprechend anzupassen.

Re: Regel wenn ein Gruppemember ON ist
Verfasst: 26. Feb 2020 09:47
von Piko
Wow
Das nenn ich mal eine Antwort.
Die Aufgabe werde ich mir sobald ich kann ansehen.
Jetzt muss ich leider zur Arbeit, obwohl ich lieber am pc sitzen würde [emoji23]
Aber danke schon mal für die Mühe und die ausführliche Erklärung.
Gesendet von iPhone mit Tapatalk
Re: Regel wenn ein Gruppemember ON ist
Verfasst: 5. Mär 2020 14:45
von Piko
Hallo Udo,
ich mal wieder
Ich hab deine 2. Variante heute mal ausprobiert und auch soweit anpassen können. Allerdings habe ich einen kleinen Fehler bei dem du mir sicherlich helfen kannst.
Werden mehrere Lampen ausgeschaltet funktioniert es super, wird nur eine ausgeschaltet, bekomme ich als telegramm EZ_Deckenlampe musstenull.
Also hängt das ja irgendwie mit der Variablen zusammen ? Die gibt wahrscheinlich NULL aus ? was mich wundert das dann der Rest der regel abgebrochen wird.
Danke dir schon mal für deinen Rat
Re: Regel wenn ein Gruppemember ON ist
Verfasst: 5. Mär 2020 19:33
von udo1toni
Oh. ja, vermutlich ein kleiner Denkfehler meinerseits
Ändere mal bitte den sendTelegram Aufruf:
Code: Alles auswählen
sendTelegram("bot",strLightsOn + " musste" + if(strLighsOn.contains(",")) "n" else "" + " ausgeschaltet werden!")
zwischen den beiden + steht ein ternärer Operator, wenn der nicht zutrifft, wird dann vermutlich null zurückgegeben, wenn man kein else angibt.
Re: Regel wenn ein Gruppemember ON ist
Verfasst: 5. Mär 2020 21:02
von Piko
Ja jetzt verstehe ich das auch.
Das ergibt Sinn. War schon am überlegen wegen dem Else
Allerdings wusste ich noch nicht genau wo ich es setzten muss.
Werd es wenn ich es schaffe gleich noch probieren.
Danke dir.
Gesendet von iPhone mit Tapatalk
Re: Regel wenn ein Gruppemember ON ist
Verfasst: 2. Apr 2020 12:09
von Piko
Hallo Udo,
da es mit der letzten Rule so super geklappt hat und ich immer wieder was neues entdecke, bräuchte ich nochmal deine Hife.
Ich möchte in einer Rule alle staten addieren und dann posten.
Die abfrage ist ja noch recht einfach

aber wie gebe ich die werte aus und addiere sie?
hier mal der Anfang der Rule
Code: Alles auswählen
rule "Gesamtverbrauch errechnen"
when
Member of g_gesamtV received update
then
Gesamtverbraucht_Wh.postUpdate( ??? )
end
im netz finde ich viel aber nicht das richtige für mich glaube ich.
oder vielleicht hast du noch ne bessere Idee wie ich den Gesamtverbrauch errechne. Denn ne 100% Lösung ist das für mich nicht, da die werte via Mqtt von Shelly´s kommen. Diese verlieren da bekanntlich die werte nach einen Stromausfall. Hast du dafür vielleicht auch eine Lösung ?
Das sind meine Things
Code: Alles auswählen
Number Gesamtverbrauch_Stehlampe "Gesamtvervrauch Stehlampe [%.1f W]" (g_gesamtV) { channel="mqtt:topic:52686471:gesamtverbrauch_stehlampe" }
Number Gesamtverbrauch_Flur "Gesamtverbrauch Flur [%.1f W]" (g_gesamtV) { channel="mqtt:topic:b1f4d480:gesamtverbrauch_flur"}
Number Gesamtverbrauch_Wandlampe "Gesamtverbrauch Wandlampe[%.1f W]" (g_gesamtV) { channel="mqtt:topic:92b809b7:gesamtverbrauch_wandlampe"}
Number Gesamtverbrauch_Deckenlampe_Ez "Gesamtverbrauch Deckenlampe Esszimmer[%.1f W]" (g_gesamtV) { channel="mqtt:topic:92b809b7:gesamtverbrauch_deckemlampe"}
Number Gesamtverbrauch_Deckenlampe_Wz "Gesamtverbrauch deckenlampe wohnzimmer[%.1f W]" (g_gesamtV) { channel="mqtt:topic:39dc0e98:Gesamtverbrauch_Deckenlampe_Wz"}
Number GesamtverbrauchEzVitrine "Gesamtverbrauch Esszimmer Vitrine[%.1f W]" (g_gesamtV) { channel="mqtt:topic:39dc0e98:GesamtverbrauchEzVitrine"}
Danke schon mal für deine mühe
