diff --git a/eraser-base/src/main/jastadd/Item.jrag b/eraser-base/src/main/jastadd/Item.jrag
index efe07a1dbb56e6973c2851e7b2bf185710555170..c143c2bbdc23e9a0a3035f7293af1700baee740c 100644
--- a/eraser-base/src/main/jastadd/Item.jrag
+++ b/eraser-base/src/main/jastadd/Item.jrag
@@ -15,6 +15,7 @@ aspect ItemHandling {
eq ColorItem.getStateAsString() = getState().toString();
eq DateTimeItem.getStateAsString() = getState().toString();
eq ItemWithBooleanState.getStateAsString() = Boolean.toString(getState());
+ eq SwitchItem.getStateAsString() = getState() ? "ON" : "OFF";
eq ItemWithDoubleState.getStateAsString() = Double.toString(getState());
eq ItemWithStringState.getStateAsString() = getState();
@@ -67,6 +68,13 @@ aspect ItemHandling {
public void ItemWithBooleanState.setStateFromString(String value) {
this.setState(Boolean.parseBoolean(value));
}
+ public void SwitchItem.setStateFromString(String value) {
+ switch (value) {
+ case "ON": this.setState(true); break;
+ case "OFF": this.setState(false); break;
+ default: super.setStateFromString(value);
+ }
+ }
public void ItemWithDoubleState.setStateFromString(String value) {
this.setState(Double.parseDouble(value));
}
diff --git a/eraser-base/src/test/resources/openhabtest/oh1/output.eraser b/eraser-base/src/test/resources/openhabtest/oh1/output.eraser
index 1844189cea3d085b031650470be0916f4943b21f..ac1a7993a8817a10c197fb73dd844bc2d750753f 100644
--- a/eraser-base/src/test/resources/openhabtest/oh1/output.eraser
+++ b/eraser-base/src/test/resources/openhabtest/oh1/output.eraser
@@ -1,5 +1,5 @@
Color Item: id="Go1_item" label="Go 1" state="0,0,0" category="Lighting" ;
-Switch Item: id="Rule_Switch" state="false" ;
+Switch Item: id="Rule_Switch" state="OFF" ;
Number Item: id="Color_Manual_Slider" state="0.0" ;
Number Item: id="watch_acceleration_x" label="Watch Acceleration X" state="0.0" ;
Number Item: id="watch_acceleration_y" label="Watch Acceleration Y" state="0.0" ;
diff --git a/eraser-base/src/test/resources/openhabtest/oh2/output.eraser b/eraser-base/src/test/resources/openhabtest/oh2/output.eraser
index e6354c12fa1e0a71edbe6eb77aafd9420c51069b..391d857ff48d13a04439dc4f5f16ba8cfc83b5a6 100644
--- a/eraser-base/src/test/resources/openhabtest/oh2/output.eraser
+++ b/eraser-base/src/test/resources/openhabtest/oh2/output.eraser
@@ -12,7 +12,7 @@ Color Item: id="iris1_item" label="Iris 1" state="253,0,0" category="Lighting" m
Number Item: id="moto_360_brightness" label="Moto 360 Brightness" state="0.0" category="Brightness" ;
Number Item: id="polar_brightness" label="Polar Brightness" state="0.0" category="Brightness" ;
String Item: id="samsung_brightness" label="Samsung Brightness" state="" category="Brightness" ;
-Switch Item: id="Rule_Switch" state="false" ;
+Switch Item: id="Rule_Switch" state="OFF" ;
Number Item: id="Color_Manual_Slider" state="0.0" ;
Number Item: id="watch_acceleration_x" label="Watch Acceleration X" state="6.264883611883931E-10" ;
Number Item: id="watch_acceleration_y" label="Watch Acceleration Y" state="1.5765462769316607E-19" ;
diff --git a/eraser-base/src/test/resources/tests/ppc3/input.eraser b/eraser-base/src/test/resources/tests/ppc3/input.eraser
index d306f014ee1532e73ab194c3b575645830b9388a..5fad695027d88ad41935092e7a3175206a3dfb2d 100644
--- a/eraser-base/src/test/resources/tests/ppc3/input.eraser
+++ b/eraser-base/src/test/resources/tests/ppc3/input.eraser
@@ -17,5 +17,6 @@ Player Item : id="player1" label="a Player Item" state="jkl" topic="item/str/pla
RollerShutter Item : id="rollerShutter1" label="a RollerShutter Item" state="false" topic="item/str/rs1/state";
String Item : id="string1" label="a String Item" state="mno" topic="item/str/string1/state";
Switch Item : id="switch1" label="a Switch Item" state="true" topic="item/bool/switch1/state";
+Switch Item : id="switch2" label="a second Switch Item" state="OFF" topic="item/bool/switch2/state";
Item : id="default1" label="a Default Item" state="pqr" topic="item/str/default1/state";
Influx: host="localhost" ;
diff --git a/eraser-base/src/test/resources/tests/ppc3/output.eraser b/eraser-base/src/test/resources/tests/ppc3/output.eraser
index b9a6d2f2a4301a35562946cc67ceca725d35e9e9..9f209db2cbcac9ee3d862a7d005cfc159432a0a3 100644
--- a/eraser-base/src/test/resources/tests/ppc3/output.eraser
+++ b/eraser-base/src/test/resources/tests/ppc3/output.eraser
@@ -9,11 +9,12 @@ Player Item: id="player1" label="a Player Item" state="jkl" topic="item/str/play
Number Item: id="number1" label="a Number Item" state="456.0" topic="item/double/number1/state" ;
RollerShutter Item: id="rollerShutter1" label="a RollerShutter Item" state="false" topic="item/str/rs1/state" ;
String Item: id="string1" label="a String Item" state="mno" topic="item/str/string1/state" ;
-Switch Item: id="switch1" label="a Switch Item" state="true" topic="item/bool/switch1/state" ;
+Switch Item: id="switch1" label="a Switch Item" state="ON" topic="item/bool/switch1/state" ;
+Switch Item: id="switch2" label="a second Switch Item" state="OFF" topic="item/bool/switch2/state" ;
Group: id="my-first-group" items=["color1", "contact1", "image1", "location1"] aggregation="AND" ("ON", "OFF") ;
Group: id="my-second-group" items=["datetime1", "default1"] ;
Group: id="my-third-group" items=["dimmer1", "player1"] ;
Group: id="my-empty-group" ;
-Group: id="Unknown" items=["number1", "rollerShutter1", "string1", "switch1"] ;
+Group: id="Unknown" items=["number1", "rollerShutter1", "string1", "switch1", "switch2"] ;
Mqtt: incoming="ppc3/" outgoing="oh2/in/" host="localhost" ;
Influx: host="localhost" ;
diff --git a/eraser-base/src/test/resources/tests/ppc4/output.eraser b/eraser-base/src/test/resources/tests/ppc4/output.eraser
index 1b881dd0d5d11159a298a1c41b1d04d530353bd8..651bf7220435c60edee891b3a244a42cce706261 100644
--- a/eraser-base/src/test/resources/tests/ppc4/output.eraser
+++ b/eraser-base/src/test/resources/tests/ppc4/output.eraser
@@ -10,7 +10,7 @@ Number Item: id="number1" label="a Number Item" state="456.0" topic="item/double
RollerShutter Item: id="rollerShutter1" label="a RollerShutter Item" state="false" topic="item/str/rs1/state" ;
Activity Item: id="activity" ;
String Item: id="string1" label="a String Item" state="mno" topic="item/str/string1/state" ;
-Switch Item: id="switch1" label="a Switch Item" state="true" topic="item/bool/switch1/state" controls=["rollerShutter1"] ;
+Switch Item: id="switch1" label="a Switch Item" state="ON" topic="item/bool/switch1/state" controls=["rollerShutter1"] ;
Group: id="my-first-group" items=["color1", "contact1", "image1", "location1"] aggregation="AND" ("ON", "OFF") ;
Group: id="my-second-group" items=["datetime1", "default1"] ;
Group: id="my-third-group" items=["dimmer1", "player1"] ;
diff --git a/eraser-base/src/test/resources/tests/ppc5/output.eraser b/eraser-base/src/test/resources/tests/ppc5/output.eraser
index 22f0869e0f35ece07c2aaf9b6dedbf6f11c4ae3b..5498db37c271084736a1be692b318f92ab2c5b5e 100644
--- a/eraser-base/src/test/resources/tests/ppc5/output.eraser
+++ b/eraser-base/src/test/resources/tests/ppc5/output.eraser
@@ -1,7 +1,7 @@
Thing: id="min-thing" type="min-thing-type" ;
Thing: id="max-thing" label="Max Thing" type="max-thing-type" channels=["min-channel", "max-channel"] ;
Number Item: id="min-item" state="0.0" ;
-Switch Item: id="max-item" label="Item with all members set" state="true" category="not used" topic="items/max" controls=["min-item"] metaData={"one":"true", "zero":"false"} ;
+Switch Item: id="max-item" label="Item with all members set" state="ON" category="not used" topic="items/max" controls=["min-item"] metaData={"one":"true", "zero":"false"} ;
Group: id="min-group" ;
Group: id="max-group" groups=["min-group"] items=["min-item", "max-item"] aggregation="AND" ("one", "two") ;
ThingType: id="min-thing-type" ;