Also, ich bin ja immer etwas pingelig...
... es heißt Sitemap, nicht Sidemap. Site -> Grundstück, Lage, Örtlichkeit; Map -> Karte
Code sollte hier im Forum immer als Code markiert sein, nicht als Zitat. Die Forensoftware ändert selbsttätig Buchstabenfolgen ab, man kann das nicht verhindern, außer man markiert die Zeichenfolgen als Code
gerade bei Code kommt es auf jedes einzelne Zeichen an. Abgesehen davon erhöht sich auch die Lesbarkeit.
Wenn Du mit Zahlenwerten arbeitest, solltest Du besser ein Number Item verwenden, kein String Item.
Umlaute in Labeln sollten kein Problem sein, falls doch, solltest Du prüfen, ob die locales richtig gesetzt sind (das kann auch an anderer Stelle zu Problemen führen). Das Selection Widget sollte also ohne weiteres auch so funktionieren:
Das Label ist schon im item definiert, man kann also auf eine doppelte Definition verzichten (es sei denn, man möchte dasselbe Item mehrfach verwenden, mit verschiedenen Labeln)
Die Rules mögen zwar funktionieren, aber mit modular hat das nichts zu tun. Sauber sieht das so aus:
Man könnte auch mehrere if() Anweisungen verwenden, um auf den ausgewählten Zustand zu reagieren, switch-case ist aber wesentlich eleganter (der Code spricht für sich
)
Die Methode Item.sendCommand(Wert) ist der Action sendCommand(Item,Wert) immer vorzuziehen, da die Action nur mit Strings umgehen kann.

Code sollte hier im Forum immer als Code markiert sein, nicht als Zitat. Die Forensoftware ändert selbsttätig Buchstabenfolgen ab, man kann das nicht verhindern, außer man markiert die Zeichenfolgen als Code

Wenn Du mit Zahlenwerten arbeitest, solltest Du besser ein Number Item verwenden, kein String Item.
Code:
Number Laden "E-Auto laden" <switch>
Code:
Selection item=Laden mappings=[0="Aus", 1="Zugewinn", 2="Überschuss", 3="Laden" ]
Die Rules mögen zwar funktionieren, aber mit modular hat das nichts zu tun. Sauber sieht das so aus:
Code:
rule "Laden" when Item Laden changed then if(!(Laden.state instanceof Number)) { logWarn("laden","Das Item Laden enthält keine gültige Zahl! {}",Laden.state) return; } switch ((Laden.state as Number).intValue) { case 0: { // Laden aus EG_Wohnzimmer_Licht_Suedseite.sendCommand(OFF) EG_Wohnzimmer_Licht_Decke.sendCommand(OFF) EG_Wohnzimmer_Licht_Westseite.sendCommand(OFF) } case 1: { // Laden Zugewinn EG_Wohnzimmer_Licht_Westseite.sendCommand(ON) EG_Wohnzimmer_Licht_Suedseite.sendCommand(OFF) EG_Wohnzimmer_Licht_Decke.sendCommand(OFF) } case 2: { // Laden Überschuss EG_Wohnzimmer_Licht_Westseite.sendCommand(OFF) EG_Wohnzimmer_Licht_Suedseite.sendCommand(OFF) EG_Wohnzimmer_Licht_Decke.sendCommand(ON) } case 3: { // Laden manuell EG_Wohnzimmer_Licht_Westseite.sendCommand(OFF) EG_Wohnzimmer_Licht_Suedseite.sendCommand(ON) EG_Wohnzimmer_Licht_Decke.sendCommand(OFF) } default: { // Irgendwas stimmt nicht logWarn("laden","Ungültiger Wert übergeben! {}",Laden.state) } } end

Die Methode Item.sendCommand(Wert) ist der Action sendCommand(Item,Wert) immer vorzuziehen, da die Action nur mit Strings umgehen kann.
Kommentar