#### Smart Plug
-| Channel | Item Type | Description |
-|---------------------|-----------|------------------------------------|
-| `currentSignalRSSI` | Number | Relative Signal Strength Indicator |
-| `currentSignalLQI` | Number | Link Quality Indicator |
-| `zigbeeConnected` | Switch | Is the TRV joined to network |
+| Channel | Item Type | Description |
+|--------------------------|---------------|--------------------------------------------|
+| `currentSignalRSSI` | Number | Relative Signal Strength Indicator |
+| `currentSignalLQI` | Number | Link Quality Indicator |
+| `zigbeeConnected` | Switch | Is the TRV joined to network |
+| `plugInstantaneousPower` | Number:Power | Current Power being drawn through the plug |
+| `plugEnergyDelivered` | Number:Energy | Cumulative energy drawn through the plug |
### Command Channels
import java.util.Set;
import org.eclipse.jdt.annotation.NonNullByDefault;
+import org.eclipse.jdt.annotation.Nullable;
import org.openhab.core.library.types.DecimalType;
import org.openhab.core.thing.ThingTypeUID;
import org.openhab.core.types.State;
public static final String CHANNEL_SMARTPLUG_OUTPUT_STATE = "plugOutputState";
public static final String CHANNEL_SMARTPLUG_AWAY_ACTION = "plugAwayAction";
public static final String CHANNEL_COMFORT_MODE_STATE = "comfortModeState";
+ public static final String CHANNEL_SMARTPLUG_INSTANTANEOUS_POWER = "plugInstantaneousPower";
+ public static final String CHANNEL_SMARTPLUG_ENERGY_DELIVERED = "plugEnergyDelivered";
public static final Set<ThingTypeUID> SUPPORTED_THING_TYPES_UIDS = Collections
.unmodifiableSet(new HashSet<>(Arrays.asList(THING_TYPE_CONTROLLER, THING_TYPE_ROOM, THING_TYPE_ROOMSTAT,
this.batteryLevel = batteryLevel;
}
- public static State toBatteryLevel(final String level) {
- try {
- return new DecimalType(BatteryLevel.valueOf(level.toUpperCase()).batteryLevel);
- } catch (final IllegalArgumentException e) {
- // Catch unrecognized values.
+ public static State toBatteryLevel(final @Nullable String level) {
+ if (level != null) {
+ try {
+ return new DecimalType(BatteryLevel.valueOf(level.toUpperCase()).batteryLevel);
+ } catch (final IllegalArgumentException e) {
+ // Catch unrecognized values.
+ return UnDefType.UNDEF;
+ }
+ } else {
return UnDefType.UNDEF;
}
}
}
private State getSignalRSSI() {
- return new DecimalType(getData().device.getRssi());
+ final Integer rssi = getData().device.getRssi();
+ return rssi == null ? UnDefType.UNDEF : new QuantityType<>(rssi, Units.DECIBEL_MILLIWATTS);
}
private State getSignalLQI() {
- return new DecimalType(getData().device.getLqi());
+ final Integer lqi = getData().device.getLqi();
+ return lqi == null ? UnDefType.UNDEF : new DecimalType(lqi);
}
private State getWiserSignalStrength() {
}
private State getBatteryVoltage() {
- return new QuantityType<>(getData().device.getBatteryVoltage() / 10.0, Units.VOLT);
+ final Integer voltage = getData().device.getBatteryVoltage();
+ return voltage == null ? UnDefType.UNDEF : new QuantityType<>(voltage / 10.0, Units.VOLT);
}
private State getWiserBatteryLevel() {
import org.openhab.binding.draytonwiser.internal.model.SmartPlugDTO;
import org.openhab.core.library.types.DecimalType;
import org.openhab.core.library.types.OnOffType;
+import org.openhab.core.library.types.QuantityType;
+import org.openhab.core.library.unit.Units;
import org.openhab.core.thing.Thing;
import org.openhab.core.types.Command;
import org.openhab.core.types.State;
updateState(CHANNEL_ZIGBEE_CONNECTED, this::getZigbeeConnected);
updateState(CHANNEL_DEVICE_LOCKED, this::getDeviceLocked);
updateState(CHANNEL_MANUAL_MODE_STATE, this::getManualModeState);
+ updateState(CHANNEL_SMARTPLUG_INSTANTANEOUS_POWER, this::getInstantaneousDemand);
+ updateState(CHANNEL_SMARTPLUG_ENERGY_DELIVERED, this::getCurrentSummationDelivered);
}
@Override
}
private State getSignalRSSI() {
- return new DecimalType(getData().device.getRssi());
+ final Integer rssi = getData().device.getRssi();
+ return rssi == null ? UnDefType.UNDEF : new QuantityType<>(rssi, Units.DECIBEL_MILLIWATTS);
}
private State getSignalLQI() {
- return new DecimalType(getData().device.getLqi());
+ final Integer lqi = getData().device.getLqi();
+ return lqi == null ? UnDefType.UNDEF : new DecimalType(lqi);
}
private State getZigbeeConnected() {
getApi().setSmartPlugAwayAction(getData().smartPlug.getId(), awayAction);
}
+ private State getInstantaneousDemand() {
+ final Integer demand = getData().smartPlug.getInstantaneousDemand();
+ return demand == null ? UnDefType.UNDEF : new QuantityType<>(demand, Units.WATT);
+ }
+
+ private State getCurrentSummationDelivered() {
+ final Integer delivered = getData().smartPlug.getCurrentSummationDelivered();
+ return delivered == null ? UnDefType.UNDEF : new QuantityType<>(delivered, Units.WATT_HOUR);
+ }
+
static class SmartPlugData {
public final SmartPlugDTO smartPlug;
public final DeviceDTO device;
}
private State getDemand() {
- return new QuantityType<>(getData().smartValve.getPercentageDemand(), Units.PERCENT);
+ final Integer demand = getData().smartValve.getPercentageDemand();
+ return demand == null ? UnDefType.UNDEF : new QuantityType<>(demand, Units.PERCENT);
}
private State getTemperature() {
}
private State getSignalRSSI() {
- return new DecimalType(getData().device.getRssi());
+ final Integer rssi = getData().device.getRssi();
+ return rssi == null ? UnDefType.UNDEF : new QuantityType<>(rssi, Units.DECIBEL_MILLIWATTS);
}
private State getSignalLQI() {
- return new DecimalType(getData().device.getLqi());
+ final Integer lqi = getData().device.getLqi();
+ return lqi == null ? UnDefType.UNDEF : new DecimalType(lqi);
}
private State getWiserSignalStrength() {
}
private State getBatteryVoltage() {
- return new QuantityType<>(getData().device.getBatteryVoltage() / 10.0, Units.VOLT);
+ final Integer voltage = getData().device.getBatteryVoltage();
+ return voltage == null ? UnDefType.UNDEF : new QuantityType<>(voltage / 10.0, Units.VOLT);
}
private State getWiserBatteryLevel() {
return displayedSignalStrength;
}
- public int getBatteryVoltage() {
- return batteryVoltage == null ? Integer.MIN_VALUE : batteryVoltage;
+ public Integer getBatteryVoltage() {
+ return batteryVoltage;
}
public String getBatteryLevel() {
private String targetState;
private Integer debounceCount;
private String overrideState;
+ private Integer currentSummationDelivered;
+ private Integer instantaneousDemand;
public Integer getId() {
return id;
public String getMode() {
return mode;
}
+
+ public Integer getCurrentSummationDelivered() {
+ return currentSummationDelivered;
+ }
+
+ public Integer getInstantaneousDemand() {
+ return instantaneousDemand;
+ }
}
<channel id="zigbeeConnected" typeId="zigbeeConnected-channel"/>
<channel id="deviceLocked" typeId="deviceLocked-channel"/>
<channel id="manualModeState" typeId="manualModeState-channel"/>
+ <channel id="plugInstantaneousPower" typeId="plugInstantaneousPower-channel"/>
+ <channel id="plugEnergyDelivered" typeId="plugEnergyDelivered-channel"/>
</channels>
<representation-property>serialNumber</representation-property>
<description>Should the room pre-heat to achieve the desired temperature</description>
</channel-type>
+ <channel-type id="plugInstantaneousPower-channel">
+ <item-type>Number:Power</item-type>
+ <label>Plug Instantaneous Power</label>
+ <description>Current Power being drawn through the plug</description>
+ <state readOnly="true" pattern="%d %unit%"/>
+ </channel-type>
+
+ <channel-type id="plugEnergyDelivered-channel">
+ <item-type>Number:Energy</item-type>
+ <label>Plug Energy Delivered</label>
+ <description>Cumulative energy drawn through the plug</description>
+ <state readOnly="true" pattern="%d %unit%"/>
+ </channel-type>
+
</thing:thing-descriptions>