diff --git a/.project b/.project
new file mode 100644
index 0000000000000..5025ea24805b7
--- /dev/null
+++ b/.project
@@ -0,0 +1,17 @@
+
+
+ org.openhab.addons.reactor
+
+
+
+
+
+ org.eclipse.m2e.core.maven2Builder
+
+
+
+
+
+ org.eclipse.m2e.core.maven2Nature
+
+
diff --git a/bundles/org.openhab.binding.iammeter/src/main/java/org/openhab/binding/iammeter/internal/IammeterBindingConstants.java b/bundles/org.openhab.binding.iammeter/src/main/java/org/openhab/binding/iammeter/internal/IammeterBindingConstants.java
index 937b86e9ef864..ff72e197a33cc 100644
--- a/bundles/org.openhab.binding.iammeter/src/main/java/org/openhab/binding/iammeter/internal/IammeterBindingConstants.java
+++ b/bundles/org.openhab.binding.iammeter/src/main/java/org/openhab/binding/iammeter/internal/IammeterBindingConstants.java
@@ -28,5 +28,4 @@ public class IammeterBindingConstants {
// List of all Thing Type UIDs
public static final ThingTypeUID THING_TYPE_POWERMETER = new ThingTypeUID(BINDING_ID, "powermeter");
-
}
diff --git a/bundles/org.openhab.binding.iammeter/src/main/java/org/openhab/binding/iammeter/internal/IammeterConfiguration.java b/bundles/org.openhab.binding.iammeter/src/main/java/org/openhab/binding/iammeter/internal/IammeterConfiguration.java
index 39f2c72efa613..3bbfd3e646b5e 100644
--- a/bundles/org.openhab.binding.iammeter/src/main/java/org/openhab/binding/iammeter/internal/IammeterConfiguration.java
+++ b/bundles/org.openhab.binding.iammeter/src/main/java/org/openhab/binding/iammeter/internal/IammeterConfiguration.java
@@ -12,14 +12,17 @@
*/
package org.openhab.binding.iammeter.internal;
+import org.eclipse.jdt.annotation.NonNullByDefault;
+
/**
* The {@link IammeterConfiguration} class contains fields mapping thing configuration parameters.
*
- * @author yang bo - Initial contribution
+ * @author Yang Bo - Initial contribution
*/
+@NonNullByDefault
public class IammeterConfiguration {
- public String host;
- public int port;
- public int refreshInterval;
+ public String host = "127.0.0.1";
+ public int port = 80;
+ public int refreshInterval = 30;
}
diff --git a/bundles/org.openhab.binding.iammeter/src/main/java/org/openhab/binding/iammeter/internal/IammeterHandler.java b/bundles/org.openhab.binding.iammeter/src/main/java/org/openhab/binding/iammeter/internal/IammeterHandler.java
index 50913e84fdff6..8527c7a8151c0 100644
--- a/bundles/org.openhab.binding.iammeter/src/main/java/org/openhab/binding/iammeter/internal/IammeterHandler.java
+++ b/bundles/org.openhab.binding.iammeter/src/main/java/org/openhab/binding/iammeter/internal/IammeterHandler.java
@@ -15,14 +15,16 @@
import java.io.ByteArrayInputStream;
import java.io.IOException;
import java.io.InputStream;
-import java.math.BigDecimal;
import java.nio.charset.StandardCharsets;
import java.util.ArrayList;
import java.util.List;
+import java.util.concurrent.ScheduledFuture;
import java.util.concurrent.TimeUnit;
import org.eclipse.jdt.annotation.NonNullByDefault;
-import org.eclipse.smarthome.core.library.types.DecimalType;
+import org.eclipse.jdt.annotation.Nullable;
+import org.eclipse.smarthome.core.library.types.QuantityType;
+import org.eclipse.smarthome.core.library.unit.SmartHomeUnits;
import org.eclipse.smarthome.core.thing.Channel;
import org.eclipse.smarthome.core.thing.ChannelUID;
import org.eclipse.smarthome.core.thing.Thing;
@@ -49,13 +51,17 @@
*
* @author yang bo - Initial contribution
*/
+
@NonNullByDefault
public class IammeterHandler extends BaseThingHandler {
private final Logger logger = LoggerFactory.getLogger(IammeterHandler.class);
+ private @Nullable ScheduledFuture> refreshJob;
+ private IammeterConfiguration config;
public IammeterHandler(Thing thing) {
super(thing);
+ config = getConfiguration();
}
private final int timeout = 5000;
@@ -63,10 +69,10 @@ public IammeterHandler(Thing thing) {
@Override
public void handleCommand(ChannelUID channelUID, Command command) {
if (command instanceof RefreshType) {
- try{
+ try {
refresh();
- } catch (Exception ex) {
- logger.warn("refresh error {}" , ex.getMessage());
+ } catch (IOException | JsonSyntaxException ex) {
+ logger.warn("refresh error {}", ex.getMessage());
}
}
}
@@ -75,33 +81,28 @@ public void handleCommand(ChannelUID channelUID, Command command) {
@Override
public void initialize() {
- IammeterConfiguration config = getConfiguration();
-
- Runnable runnable = new Runnable() {
- @Override
- public void run() {
- try{
- refresh();
- } catch (Exception ex) {
- logger.warn("refresh error {}" , ex.getMessage());
+ ScheduledFuture> refreshJob = this.refreshJob;
+ IammeterConfiguration config = this.config;
+ config = getConfiguration();
+ if (refreshJob == null || refreshJob.isCancelled()) {
+ Runnable runnable = new Runnable() {
+ @Override
+ public void run() {
+ try {
+ refresh();
+ } catch (IOException | JsonSyntaxException ex) {
+ logger.warn("refresh error {}", ex.getMessage());
+ }
}
- }
- };
- scheduler.scheduleWithFixedDelay(runnable, 0, config.refreshInterval, TimeUnit.SECONDS);
-
- updateStatus(ThingStatus.UNKNOWN);
- scheduler.execute(() -> {
- try{
- refresh();
- } catch (Exception ex) {
- logger.warn("refresh error {}" , ex.getMessage());
- }
- });
+ };
+ refreshJob = scheduler.scheduleWithFixedDelay(runnable, 0, config.refreshInterval, TimeUnit.SECONDS);
+ updateStatus(ThingStatus.UNKNOWN);
+ }
}
- private void refresh() throws Exception {
+ private void refresh() throws IOException, JsonSyntaxException {
+ IammeterConfiguration config = this.config;
try {
- IammeterConfiguration config = getConfiguration();
logger.trace("Starting refresh handler");
String httpMethod = "GET";
String url = "http://admin:admin@" + config.host + ":" + config.port + "/monitorjson";
@@ -121,7 +122,7 @@ private void refresh() throws Exception {
}
for (IammeterWEM3080Channel channelConfig : IammeterWEM3080Channel.values()) {
Channel channel = getThing().getChannel(channelConfig.getId());
- if (channel != null){
+ if (channel != null) {
channelProfix = IammeterBindingConstants.THING_TYPE_POWERMETER + ":"
+ channel.getUID().getThingUID().getId();
State state = getDecimal(
@@ -133,7 +134,7 @@ private void refresh() throws Exception {
keyWord = "Datas";
for (IammeterWEM3080TChannel channelConfig : IammeterWEM3080TChannel.values()) {
Channel channel = getThing().getChannel(channelConfig.getId());
- if (channel != null){
+ if (channel != null) {
State state = getDecimal(iammeterData.get(keyWord).getAsJsonArray().get(channelConfig.getRow())
.getAsJsonArray().get(channelConfig.getCol()).toString());
updateState(channel.getUID(), state);
@@ -145,15 +146,14 @@ private void refresh() throws Exception {
thingStructureChanged(channelProfix);
}
}
+ stream.close();
updateStatus(ThingStatus.ONLINE);
- // Very rudimentary Exception differentiation
+ // Very rudimentary Exception differentiation
} catch (IOException e) {
updateStatus(ThingStatus.OFFLINE, ThingStatusDetail.COMMUNICATION_ERROR,
"Communication error with the device: " + e.getMessage());
} catch (JsonSyntaxException je) {
logger.warn("Invalid JSON when refreshing source {}: {}", getThing().getUID(), je.getMessage());
- } catch (Exception e) {
- logger.warn("Error refreshing source {}: {}", getThing().getUID(), e.getMessage(), e);
}
}
@@ -185,7 +185,7 @@ protected void thingStructureChanged(String channelProfix) {
private State getDecimal(String value) {
try {
- return new DecimalType(new BigDecimal(value));
+ return QuantityType.valueOf(Float.parseFloat(value), SmartHomeUnits.VOLT);
} catch (NumberFormatException e) {
return UnDefType.UNDEF;
}
@@ -193,11 +193,16 @@ private State getDecimal(String value) {
@Override
public void dispose() {
+ ScheduledFuture> refreshJob = this.refreshJob;
+ if (refreshJob != null && !refreshJob.isCancelled()) {
+ refreshJob.cancel(true);
+ refreshJob = null;
+ }
super.dispose();
}
-
+
+ @NonNullByDefault
public IammeterConfiguration getConfiguration() {
return this.getConfigAs(IammeterConfiguration.class);
}
-
}
diff --git a/bundles/org.openhab.binding.iammeter/src/main/java/org/openhab/binding/iammeter/internal/IammeterWEM3080Channel.java b/bundles/org.openhab.binding.iammeter/src/main/java/org/openhab/binding/iammeter/internal/IammeterWEM3080Channel.java
index e8fb946d99576..14df844626990 100644
--- a/bundles/org.openhab.binding.iammeter/src/main/java/org/openhab/binding/iammeter/internal/IammeterWEM3080Channel.java
+++ b/bundles/org.openhab.binding.iammeter/src/main/java/org/openhab/binding/iammeter/internal/IammeterWEM3080Channel.java
@@ -12,6 +12,8 @@
*/
package org.openhab.binding.iammeter.internal;
+import javax.measure.Unit;
+
/**
* The {@link IammeterWEM3080Channel} Enum defines common constants, which are
* used across the whole binding.
@@ -28,10 +30,12 @@ public enum IammeterWEM3080Channel {
private final String id;
private final int index;
+ private final Unit> unit;
IammeterWEM3080Channel(String id, int index) {
this.id = id;
this.index = index;
+ this.unit = null;
}
public String getId() {
@@ -41,4 +45,8 @@ public String getId() {
public int getIndex() {
return index;
}
+
+ public Unit> getUnit() {
+ return unit;
+ }
}
diff --git a/bundles/org.openhab.binding.iammeter/src/main/java/org/openhab/binding/iammeter/internal/IammeterWEM3080TChannel.java b/bundles/org.openhab.binding.iammeter/src/main/java/org/openhab/binding/iammeter/internal/IammeterWEM3080TChannel.java
index dd68e1e198094..2500c2e7982dd 100644
--- a/bundles/org.openhab.binding.iammeter/src/main/java/org/openhab/binding/iammeter/internal/IammeterWEM3080TChannel.java
+++ b/bundles/org.openhab.binding.iammeter/src/main/java/org/openhab/binding/iammeter/internal/IammeterWEM3080TChannel.java
@@ -12,6 +12,8 @@
*/
package org.openhab.binding.iammeter.internal;
+import javax.measure.Unit;
+
/**
* The {@link IammeterWEM3080TChannel} Enum defines common constants, which are
* used across the whole binding.
@@ -45,11 +47,13 @@ public enum IammeterWEM3080TChannel {
private final String id;
private final int row;
private final int col;
+ private final Unit> unit;
IammeterWEM3080TChannel(String id, int r, int c) {
this.id = id;
this.row = r;
this.col = c;
+ this.unit = null;
}
public String getId() {
@@ -63,4 +67,8 @@ public int getRow() {
public int getCol() {
return col;
}
+
+ public Unit> getUnit() {
+ return unit;
+ }
}
diff --git a/bundles/org.openhab.binding.iammeter/src/main/resources/ESH-INF/binding/binding.xml b/bundles/org.openhab.binding.iammeter/src/main/resources/ESH-INF/binding/binding.xml
index 01c5c2d52c390..05e1d392b0743 100644
--- a/bundles/org.openhab.binding.iammeter/src/main/resources/ESH-INF/binding/binding.xml
+++ b/bundles/org.openhab.binding.iammeter/src/main/resources/ESH-INF/binding/binding.xml
@@ -4,7 +4,7 @@
xsi:schemaLocation="https://openhab.org/schemas/binding/v1.0.0 https://openhab.org/schemas/binding-1.0.0.xsd">
Iammeter Binding
- This is the binding for Iammeter.
- yang bo
+ The Iammeter binding pull your Iammeter power meter data from LAN.
+ Yang Bo
diff --git a/bundles/org.openhab.binding.iammeter/src/main/resources/ESH-INF/i18n/iammeter_xx_XX.properties b/bundles/org.openhab.binding.iammeter/src/main/resources/ESH-INF/i18n/iammeter_xx_XX.properties
deleted file mode 100644
index 6b152e1fd7d22..0000000000000
--- a/bundles/org.openhab.binding.iammeter/src/main/resources/ESH-INF/i18n/iammeter_xx_XX.properties
+++ /dev/null
@@ -1,15 +0,0 @@
-# binding
-binding.iammeter.name =
-binding.iammeter.description =
-
-# thing types
-thing-type.iammeter.powermeter.label =
-thing-type.iammeter.powermeter.description =
-
-# thing type config description
-thing-type.config.iammeter.powermeter.voltage_a.label =
-thing-type.config.iammeter.powermeter.voltage_a.description =
-
-# channel types
-channel-type.iammeter.voltage_a.label =
-channel-type.iammeter.voltage_a.description =
diff --git a/bundles/org.openhab.binding.iammeter/src/main/resources/ESH-INF/thing/thing-types.xml b/bundles/org.openhab.binding.iammeter/src/main/resources/ESH-INF/thing/thing-types.xml
index 4459afbfe6a73..cafd259748766 100644
--- a/bundles/org.openhab.binding.iammeter/src/main/resources/ESH-INF/thing/thing-types.xml
+++ b/bundles/org.openhab.binding.iammeter/src/main/resources/ESH-INF/thing/thing-types.xml
@@ -3,33 +3,31 @@
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:thing="https://openhab.org/schemas/thing-description/v1.0.0"
xsi:schemaLocation="https://openhab.org/schemas/thing-description/v1.0.0 https://openhab.org/schemas/thing-description-1.0.0.xsd">
-
PowerMeter thing for Iammeter Binding
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
@@ -44,8 +42,8 @@
Port
80
-
-
+
+
60
@@ -53,19 +51,19 @@
- Number:V
+ Number:ElectricPotential
voltage for phase A
- Number:A
+ Number:ElectricCurrent
current for phase A
- Number:W
+ Number:Power
power for phase A
@@ -95,19 +93,19 @@
- Number:V
+ Number:ElectricPotential
voltage for phase B
- Number:A
+ Number:ElectricCurrent
current for phase B
- Number:W
+ Number:Power
power for phase B
@@ -137,19 +135,19 @@
- Number:V
+ Number:ElectricPotential
voltage for phase C
- Number:A
+ Number:ElectricCurrent
current for phase C
- Number:W
+ Number:Power
power for phase C