From 169aba33f839ef1b307a0c7f39fb58d7be521ec4 Mon Sep 17 00:00:00 2001 From: rschoene <rene.schoene@tu-dresden.de> Date: Fri, 17 May 2019 12:30:17 +0200 Subject: [PATCH] Workaround for Switch synchronization with openHAB. - change state representation of SwitchItem to ON/OFF - resolves issue #20 --- eraser-base/src/main/jastadd/Item.jrag | 8 ++++++++ .../src/test/resources/openhabtest/oh1/output.eraser | 2 +- .../src/test/resources/openhabtest/oh2/output.eraser | 2 +- eraser-base/src/test/resources/tests/ppc3/input.eraser | 1 + eraser-base/src/test/resources/tests/ppc3/output.eraser | 5 +++-- eraser-base/src/test/resources/tests/ppc4/output.eraser | 2 +- eraser-base/src/test/resources/tests/ppc5/output.eraser | 2 +- 7 files changed, 16 insertions(+), 6 deletions(-) diff --git a/eraser-base/src/main/jastadd/Item.jrag b/eraser-base/src/main/jastadd/Item.jrag index efe07a1d..c143c2bb 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 1844189c..ac1a7993 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 e6354c12..391d857f 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 d306f014..5fad6950 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 b9a6d2f2..9f209db2 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 1b881dd0..651bf722 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 22f0869e..5498db37 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" ; -- GitLab