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.
... es heißt Sitemap, nicht Sidemap. Site -> Grundstück, Lage, Örtlichkeit; Map -> KarteCode 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.
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