[shelly] 1PM/1L/2.5: New device#supplyVoltage; Motion: Missing channel for vibration; UNI: Unit for ADC voltage; PF for EM; Bulb: fix range for color temp (#10815)
* fixes #10738, #10799 Signed-off-by: Markus Michels <markus7017@gmail.com> * - Feature #10090 New device#supplyVoltage channel for Shelly 2.5, 1PM and 1L - Change #10039 Info on "not reachable / timeout" should be warning, not info - Fix #10799 Missing Channel Definition for Vibration Events - Fix #10738 Shelly UNI - ADC Voltage units of measure missing - Fix #10111 Creating Equipment from Shelly Bulb Duo causes wrong min/max - README updated Signed-off-by: Markus Michels <markus7017@gmail.com> * #10737 Shelly EM - add powerFactor channel support Signed-off-by: Markus Michels <markus7017@gmail.com> * README updated Signed-off-by: Markus Michels <markus7017@gmail.com> * channel powerFactor (EM+EM3) is now of type Number:Dimensionless Signed-off-by: Markus Michels <markus7017@gmail.com> * Fix for #10864: Do not trigger same alarm within 5 minutes Signed-off-by: Markus Michels <markus7017@gmail.com> * better logic for alarm filter Signed-off-by: Markus Michels <markus7017@gmail.com>
This commit is contained in:
parent
c9933454db
commit
d0f4b84841
@ -207,6 +207,7 @@ Every device has a channel group `device` with the following channels:
|
|||||||
| |internalTemp |Number |yes |Internal device temperature (when provided by the device) |
|
| |internalTemp |Number |yes |Internal device temperature (when provided by the device) |
|
||||||
| |selfTest |String |yes |Result from device self-test (pending/not_completed/running/completed/unknown) |
|
| |selfTest |String |yes |Result from device self-test (pending/not_completed/running/completed/unknown) |
|
||||||
| |alarm |Trigger |yes |Self-Test result not_completed/completed/running/pending |
|
| |alarm |Trigger |yes |Self-Test result not_completed/completed/running/pending |
|
||||||
|
| |supplyVoltage |Number |yes |Shelly 1PM, 1L, 2.5: Supply voltage (fixed or measured depending on device) |
|
||||||
| |accumulatedWatts |Number |yes |Accumulated power in W of the device (including all meters) |
|
| |accumulatedWatts |Number |yes |Accumulated power in W of the device (including all meters) |
|
||||||
| |accumulatedTotal |Number |yes |Accumulated total power in kwh of the device (including all meters) |
|
| |accumulatedTotal |Number |yes |Accumulated total power in kwh of the device (including all meters) |
|
||||||
| |accumulatedReturned|Number |yes |Accumulated returned power in kwh of the device (including all meters) |
|
| |accumulatedReturned|Number |yes |Accumulated returned power in kwh of the device (including all meters) |
|
||||||
@ -401,12 +402,14 @@ In this case the is no real measurement based on power consumption, but the Shel
|
|||||||
| |returnedKWH |Number |yes |Total returned energy, kwh |
|
| |returnedKWH |Number |yes |Total returned energy, kwh |
|
||||||
| |reactiveWatts|Number |yes |Instantaneous reactive power, Watts |
|
| |reactiveWatts|Number |yes |Instantaneous reactive power, Watts |
|
||||||
| |voltage |Number |yes |RMS voltage, Volts |
|
| |voltage |Number |yes |RMS voltage, Volts |
|
||||||
|
| |powerFactor |Number |yes |Power Factor in percent |
|
||||||
| |lastUpdate |DateTime |yes |Timestamp of the last measurement |
|
| |lastUpdate |DateTime |yes |Timestamp of the last measurement |
|
||||||
|meter2 |currentWatts |Number |yes |Current power consumption in Watts |
|
|meter2 |currentWatts |Number |yes |Current power consumption in Watts |
|
||||||
| |totalKWH |Number |yes |Total energy consumption in Watts since the device powered up (resets on restart)|
|
| |totalKWH |Number |yes |Total energy consumption in Watts since the device powered up (resets on restart)|
|
||||||
| |returnedKWH |Number |yes |Total returned energy, kwh |
|
| |returnedKWH |Number |yes |Total returned energy, kwh |
|
||||||
| |reactiveWatts|Number |yes |Instantaneous reactive power, Watts |
|
| |reactiveWatts|Number |yes |Instantaneous reactive power, Watts |
|
||||||
| |voltage |Number |yes |RMS voltage, Volts |
|
| |voltage |Number |yes |RMS voltage, Volts |
|
||||||
|
| |powerFactor |Number |yes |Power Factor in percent |
|
||||||
| |lastUpdate |DateTime |yes |Timestamp of the last measurement |
|
| |lastUpdate |DateTime |yes |Timestamp of the last measurement |
|
||||||
|
|
||||||
### Shelly 3EM (thing-type: shellyem3)
|
### Shelly 3EM (thing-type: shellyem3)
|
||||||
@ -431,7 +434,7 @@ The Thing id is derived from the service name, so that's the reason why the Thin
|
|||||||
| |reactiveWatts|Number |yes |Instantaneous reactive power, Watts |
|
| |reactiveWatts|Number |yes |Instantaneous reactive power, Watts |
|
||||||
| |voltage |Number |yes |RMS voltage, Volts |
|
| |voltage |Number |yes |RMS voltage, Volts |
|
||||||
| |current |Number |yes |Current in A |
|
| |current |Number |yes |Current in A |
|
||||||
| |powerFactor |Number |yes |Power Factor |
|
| |powerFactor |Number |yes |Power Factor in percent |
|
||||||
| |lastUpdate |DateTime |yes |Timestamp of the last measurement |
|
| |lastUpdate |DateTime |yes |Timestamp of the last measurement |
|
||||||
|meter2 |currentWatts |Number |yes |Current power consumption in Watts |
|
|meter2 |currentWatts |Number |yes |Current power consumption in Watts |
|
||||||
| |totalKWH |Number |yes |Total energy consumption in Watts since the device powered up (resets on restart)|
|
| |totalKWH |Number |yes |Total energy consumption in Watts since the device powered up (resets on restart)|
|
||||||
@ -439,7 +442,7 @@ The Thing id is derived from the service name, so that's the reason why the Thin
|
|||||||
| |reactiveWatts|Number |yes |Instantaneous reactive power, Watts |
|
| |reactiveWatts|Number |yes |Instantaneous reactive power, Watts |
|
||||||
| |voltage |Number |yes |RMS voltage, Volts |
|
| |voltage |Number |yes |RMS voltage, Volts |
|
||||||
| |current |Number |yes |Current in A |
|
| |current |Number |yes |Current in A |
|
||||||
| |powerFactor |Number |yes |Power Factor |
|
| |powerFactor |Number |yes |Power Factor in percent |
|
||||||
| |lastUpdate |DateTime |yes |Timestamp of the last measurement |
|
| |lastUpdate |DateTime |yes |Timestamp of the last measurement |
|
||||||
|meter3 |currentWatts |Number |yes |Current power consumption in Watts |
|
|meter3 |currentWatts |Number |yes |Current power consumption in Watts |
|
||||||
| |totalKWH |Number |yes |Total energy consumption in Watts since the device powered up (resets on restart)|
|
| |totalKWH |Number |yes |Total energy consumption in Watts since the device powered up (resets on restart)|
|
||||||
@ -447,7 +450,7 @@ The Thing id is derived from the service name, so that's the reason why the Thin
|
|||||||
| |reactiveWatts|Number |yes |Instantaneous reactive power, Watts |
|
| |reactiveWatts|Number |yes |Instantaneous reactive power, Watts |
|
||||||
| |voltage |Number |yes |RMS voltage, Volts |
|
| |voltage |Number |yes |RMS voltage, Volts |
|
||||||
| |current |Number |yes |Current in A |
|
| |current |Number |yes |Current in A |
|
||||||
| |powerFactor |Number |yes |Power Factor |
|
| |powerFactor |Number |yes |Power Factor in percent |
|
||||||
| |lastUpdate |DateTime |yes |Timestamp of the last measurement |
|
| |lastUpdate |DateTime |yes |Timestamp of the last measurement |
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@ -301,6 +301,7 @@ public class ShellyBindingConstants {
|
|||||||
public static final String CHANNEL_DEVST_CHARGER = "charger";
|
public static final String CHANNEL_DEVST_CHARGER = "charger";
|
||||||
public static final String CHANNEL_DEVST_UPDATE = "updateAvailable";
|
public static final String CHANNEL_DEVST_UPDATE = "updateAvailable";
|
||||||
public static final String CHANNEL_DEVST_SELFTTEST = "selfTest";
|
public static final String CHANNEL_DEVST_SELFTTEST = "selfTest";
|
||||||
|
public static final String CHANNEL_DEVST_VOLTAGE = "supplyVoltage";
|
||||||
|
|
||||||
public static final String CHANNEL_LED_STATUS_DISABLE = "statusLed";
|
public static final String CHANNEL_LED_STATUS_DISABLE = "statusLed";
|
||||||
public static final String CHANNEL_LED_POWER_DISABLE = "powerLed";
|
public static final String CHANNEL_LED_POWER_DISABLE = "powerLed";
|
||||||
|
|||||||
@ -576,6 +576,9 @@ public class ShellyApiJsonDTO {
|
|||||||
public Double maxPower;
|
public Double maxPower;
|
||||||
|
|
||||||
public ArrayList<ShellySettingsRelay> relays;
|
public ArrayList<ShellySettingsRelay> relays;
|
||||||
|
public Double voltage; // AC voltage for Shelly 2.5
|
||||||
|
@SerializedName("supply_voltage")
|
||||||
|
public Long supplyVoltage; // Shelly 1PM/1L: 0=110V, 1=220V
|
||||||
public ArrayList<ShellySettingsDimmer> dimmers;
|
public ArrayList<ShellySettingsDimmer> dimmers;
|
||||||
public ArrayList<ShellySettingsRgbwLight> lights;
|
public ArrayList<ShellySettingsRgbwLight> lights;
|
||||||
public ArrayList<ShellySettingsEMeter> emeters;
|
public ArrayList<ShellySettingsEMeter> emeters;
|
||||||
@ -677,6 +680,8 @@ public class ShellyApiJsonDTO {
|
|||||||
public ShellyActionsStats astats;
|
public ShellyActionsStats astats;
|
||||||
|
|
||||||
public ArrayList<ShellySettingsRelay> relays;
|
public ArrayList<ShellySettingsRelay> relays;
|
||||||
|
public Double voltage; // Shelly 2.5
|
||||||
|
|
||||||
public ArrayList<ShellySettingsRoller> rollers;
|
public ArrayList<ShellySettingsRoller> rollers;
|
||||||
public Integer input; // RGBW2 has no JSON array
|
public Integer input; // RGBW2 has no JSON array
|
||||||
public ArrayList<ShellyInputState> inputs;
|
public ArrayList<ShellyInputState> inputs;
|
||||||
|
|||||||
@ -152,7 +152,8 @@ public class ShellyCoIoTVersion1 extends ShellyCoIoTProtocol implements ShellyCo
|
|||||||
toQuantityType(getDouble(s.value), DIGITS_VOLT, Units.AMPERE));
|
toQuantityType(getDouble(s.value), DIGITS_VOLT, Units.AMPERE));
|
||||||
break;
|
break;
|
||||||
case "pf":
|
case "pf":
|
||||||
updateChannel(updates, rGroup, CHANNEL_EMETER_PFACTOR, getDecimal(s.value));
|
updateChannel(updates, rGroup, CHANNEL_EMETER_PFACTOR,
|
||||||
|
toQuantityType(getDecimal(s.value), Units.PERCENT));
|
||||||
break;
|
break;
|
||||||
case "position":
|
case "position":
|
||||||
// work around: Roller reports 101% instead max 100
|
// work around: Roller reports 101% instead max 100
|
||||||
|
|||||||
@ -193,7 +193,7 @@ public class ShellyCoIoTVersion2 extends ShellyCoIoTProtocol implements ShellyCo
|
|||||||
break;
|
break;
|
||||||
case "3118":
|
case "3118":
|
||||||
updateChannel(updates, mGroup, CHANNEL_SENSOR_VOLTAGE,
|
updateChannel(updates, mGroup, CHANNEL_SENSOR_VOLTAGE,
|
||||||
toQuantityType(getDouble(s.value), DIGITS_VOLT, Units.VOLT));
|
toQuantityType(getDouble(s.value), 2, Units.VOLT));
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case "4101": // relay_0/light_0: P, power, W
|
case "4101": // relay_0/light_0: P, power, W
|
||||||
|
|||||||
@ -367,7 +367,7 @@ public class ShellyBaseHandler extends BaseThingHandler implements ShellyDeviceL
|
|||||||
if (res.isNotCalibrtated()) {
|
if (res.isNotCalibrtated()) {
|
||||||
logger.warn("{}: {}", thingName, messages.get("roller.calibrating"));
|
logger.warn("{}: {}", thingName, messages.get("roller.calibrating"));
|
||||||
} else {
|
} else {
|
||||||
logger.info("{}: {} - {}", thingName, messages.get("command.failed", command, channelUID),
|
logger.warn("{}: {} - {}", thingName, messages.get("command.failed", command, channelUID),
|
||||||
e.toString());
|
e.toString());
|
||||||
}
|
}
|
||||||
} catch (IllegalArgumentException e) {
|
} catch (IllegalArgumentException e) {
|
||||||
@ -528,7 +528,6 @@ public class ShellyBaseHandler extends BaseThingHandler implements ShellyDeviceL
|
|||||||
|
|
||||||
private void fillDeviceStatus(ShellySettingsStatus status, boolean updated) {
|
private void fillDeviceStatus(ShellySettingsStatus status, boolean updated) {
|
||||||
String alarm = "";
|
String alarm = "";
|
||||||
boolean force = false;
|
|
||||||
|
|
||||||
// Update uptime and WiFi, internal temp
|
// Update uptime and WiFi, internal temp
|
||||||
ShellyComponents.updateDeviceStatus(this, status);
|
ShellyComponents.updateDeviceStatus(this, status);
|
||||||
@ -567,7 +566,7 @@ public class ShellyBaseHandler extends BaseThingHandler implements ShellyDeviceL
|
|||||||
stats.coiotErrors = coap.getErrorCount();
|
stats.coiotErrors = coap.getErrorCount();
|
||||||
|
|
||||||
if (!alarm.isEmpty()) {
|
if (!alarm.isEmpty()) {
|
||||||
postEvent(alarm, force);
|
postEvent(alarm, false);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -597,7 +596,8 @@ public class ShellyBaseHandler extends BaseThingHandler implements ShellyDeviceL
|
|||||||
State value = cache.getValue(channelId);
|
State value = cache.getValue(channelId);
|
||||||
String lastAlarm = value != UnDefType.NULL ? value.toString() : "";
|
String lastAlarm = value != UnDefType.NULL ? value.toString() : "";
|
||||||
|
|
||||||
if (force || !lastAlarm.equals(alarm) || (now() > (stats.lastAlarmTs + HEALTH_CHECK_INTERVAL_SEC))) {
|
if (force || !lastAlarm.equals(alarm)
|
||||||
|
|| (lastAlarm.equals(alarm) && now() > stats.lastAlarmTs + HEALTH_CHECK_INTERVAL_SEC)) {
|
||||||
if (alarm.isEmpty() || alarm.equals(ALARM_TYPE_NONE)) {
|
if (alarm.isEmpty() || alarm.equals(ALARM_TYPE_NONE)) {
|
||||||
cache.updateChannel(channelId, getStringType(alarm));
|
cache.updateChannel(channelId, getStringType(alarm));
|
||||||
} else {
|
} else {
|
||||||
|
|||||||
@ -160,14 +160,10 @@ public class ShellyComponents {
|
|||||||
toQuantityType(getDouble(emeter.reactive), DIGITS_WATT, Units.WATT));
|
toQuantityType(getDouble(emeter.reactive), DIGITS_WATT, Units.WATT));
|
||||||
updated |= thingHandler.updateChannel(groupName, CHANNEL_EMETER_VOLTAGE,
|
updated |= thingHandler.updateChannel(groupName, CHANNEL_EMETER_VOLTAGE,
|
||||||
toQuantityType(getDouble(emeter.voltage), DIGITS_VOLT, Units.VOLT));
|
toQuantityType(getDouble(emeter.voltage), DIGITS_VOLT, Units.VOLT));
|
||||||
|
|
||||||
if (emeter.current != null) {
|
|
||||||
// Shelly
|
|
||||||
updated |= thingHandler.updateChannel(groupName, CHANNEL_EMETER_CURRENT,
|
updated |= thingHandler.updateChannel(groupName, CHANNEL_EMETER_CURRENT,
|
||||||
toQuantityType(getDouble(emeter.current), DIGITS_VOLT, Units.AMPERE));
|
toQuantityType(getDouble(emeter.current), DIGITS_VOLT, Units.AMPERE));
|
||||||
updated |= thingHandler.updateChannel(groupName, CHANNEL_EMETER_PFACTOR,
|
updated |= thingHandler.updateChannel(groupName, CHANNEL_EMETER_PFACTOR,
|
||||||
getDecimal(emeter.pf));
|
toQuantityType(computePF(emeter), Units.PERCENT));
|
||||||
}
|
|
||||||
|
|
||||||
accumulatedWatts += getDouble(emeter.power);
|
accumulatedWatts += getDouble(emeter.power);
|
||||||
accumulatedTotal += getDouble(emeter.total) / 1000;
|
accumulatedTotal += getDouble(emeter.total) / 1000;
|
||||||
@ -234,6 +230,19 @@ public class ShellyComponents {
|
|||||||
return updated;
|
return updated;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private static Double computePF(ShellySettingsEMeter emeter) {
|
||||||
|
if (emeter.pf != null) { // EM3
|
||||||
|
return emeter.pf; // take device value
|
||||||
|
}
|
||||||
|
|
||||||
|
// EM: compute from provided values
|
||||||
|
if (Math.abs(emeter.power) + Math.abs(emeter.reactive) > 1.5) {
|
||||||
|
double pf = emeter.power / Math.sqrt(emeter.power * emeter.power + emeter.reactive * emeter.reactive);
|
||||||
|
return pf;
|
||||||
|
}
|
||||||
|
return 0.0;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Update Sensor channel
|
* Update Sensor channel
|
||||||
*
|
*
|
||||||
@ -324,7 +333,7 @@ public class ShellyComponents {
|
|||||||
if ((sdata.adcs != null) && (sdata.adcs.size() > 0)) {
|
if ((sdata.adcs != null) && (sdata.adcs.size() > 0)) {
|
||||||
ShellyADC adc = sdata.adcs.get(0);
|
ShellyADC adc = sdata.adcs.get(0);
|
||||||
updated |= thingHandler.updateChannel(CHANNEL_GROUP_SENSOR, CHANNEL_SENSOR_VOLTAGE,
|
updated |= thingHandler.updateChannel(CHANNEL_GROUP_SENSOR, CHANNEL_SENSOR_VOLTAGE,
|
||||||
getDecimal(adc.voltage));
|
toQuantityType(getDouble(adc.voltage), 2, Units.VOLT));
|
||||||
}
|
}
|
||||||
|
|
||||||
boolean charger = (getInteger(profile.settings.externalPower) == 1) || getBool(sdata.charger);
|
boolean charger = (getInteger(profile.settings.externalPower) == 1) || getBool(sdata.charger);
|
||||||
|
|||||||
@ -336,8 +336,20 @@ public class ShellyRelayHandler extends ShellyBaseHandler {
|
|||||||
boolean updated = false;
|
boolean updated = false;
|
||||||
// Check for Relay in Standard Mode
|
// Check for Relay in Standard Mode
|
||||||
if (profile.hasRelays && !profile.isRoller && !profile.isDimmer) {
|
if (profile.hasRelays && !profile.isRoller && !profile.isDimmer) {
|
||||||
logger.trace("{}: Updating {} relay(s)", thingName, profile.numRelays);
|
double voltage = -1;
|
||||||
|
if (status.voltage == null && profile.settings.supplyVoltage != null) {
|
||||||
|
// Shelly 1PM/1L (fix)
|
||||||
|
voltage = profile.settings.supplyVoltage == 0 ? 110.0 : 220.0;
|
||||||
|
} else {
|
||||||
|
// Shelly 2.5 (measured)
|
||||||
|
voltage = getDouble(status.voltage);
|
||||||
|
}
|
||||||
|
if (voltage > 0) {
|
||||||
|
updated |= updateChannel(CHANNEL_GROUP_DEV_STATUS, CHANNEL_DEVST_VOLTAGE,
|
||||||
|
toQuantityType(voltage, DIGITS_VOLT, Units.VOLT));
|
||||||
|
}
|
||||||
|
|
||||||
|
logger.trace("{}: Updating {} relay(s)", thingName, profile.numRelays);
|
||||||
int i = 0;
|
int i = 0;
|
||||||
ShellyStatusRelay rstatus = api.getRelayStatus(i);
|
ShellyStatusRelay rstatus = api.getRelayStatus(i);
|
||||||
for (ShellyShortStatusRelay relay : rstatus.relays) {
|
for (ShellyShortStatusRelay relay : rstatus.relays) {
|
||||||
|
|||||||
@ -110,7 +110,7 @@ public class ShellyManagerOverviewPage extends ShellyManagerPage {
|
|||||||
if (!warnings.isEmpty() && (status != ThingStatus.UNKNOWN)) {
|
if (!warnings.isEmpty() && (status != ThingStatus.UNKNOWN)) {
|
||||||
properties.put(ATTRIBUTE_STATUS_ICON, ICON_ATTENTION);
|
properties.put(ATTRIBUTE_STATUS_ICON, ICON_ATTENTION);
|
||||||
}
|
}
|
||||||
if (!deviceType.equalsIgnoreCase("unknown") && (status == ThingStatus.ONLINE)) {
|
if (!"unknown".equalsIgnoreCase(deviceType) && (status == ThingStatus.ONLINE)) {
|
||||||
properties.put(ATTRIBUTE_FIRMWARE_SEL, fillFirmwareHtml(uid, deviceType, profile.mode));
|
properties.put(ATTRIBUTE_FIRMWARE_SEL, fillFirmwareHtml(uid, deviceType, profile.mode));
|
||||||
properties.put(ATTRIBUTE_ACTION_LIST, fillActionHtml(th, uid));
|
properties.put(ATTRIBUTE_ACTION_LIST, fillActionHtml(th, uid));
|
||||||
} else {
|
} else {
|
||||||
|
|||||||
@ -109,6 +109,7 @@ public class ShellyChannelDefinitions {
|
|||||||
.add(new ShellyChannel(m, CHGR_DEVST, CHANNEL_DEVST_ACCUWATTS, "meterAccuWatts", ITEMT_POWER))
|
.add(new ShellyChannel(m, CHGR_DEVST, CHANNEL_DEVST_ACCUWATTS, "meterAccuWatts", ITEMT_POWER))
|
||||||
.add(new ShellyChannel(m, CHGR_DEVST, CHANNEL_DEVST_ACCUTOTAL, "meterAccuTotal", ITEMT_POWER))
|
.add(new ShellyChannel(m, CHGR_DEVST, CHANNEL_DEVST_ACCUTOTAL, "meterAccuTotal", ITEMT_POWER))
|
||||||
.add(new ShellyChannel(m, CHGR_DEVST, CHANNEL_DEVST_ACCURETURNED, "meterAccuReturned", ITEMT_POWER))
|
.add(new ShellyChannel(m, CHGR_DEVST, CHANNEL_DEVST_ACCURETURNED, "meterAccuReturned", ITEMT_POWER))
|
||||||
|
.add(new ShellyChannel(m, CHGR_DEVST, CHANNEL_DEVST_VOLTAGE, "supplyVoltage", ITEMT_VOLT))
|
||||||
.add(new ShellyChannel(m, CHGR_DEVST, CHANNEL_DEVST_CHARGER, "charger", ITEMT_SWITCH))
|
.add(new ShellyChannel(m, CHGR_DEVST, CHANNEL_DEVST_CHARGER, "charger", ITEMT_SWITCH))
|
||||||
.add(new ShellyChannel(m, CHGR_DEVST, CHANNEL_LED_STATUS_DISABLE, "ledStatusDisable", ITEMT_SWITCH))
|
.add(new ShellyChannel(m, CHGR_DEVST, CHANNEL_LED_STATUS_DISABLE, "ledStatusDisable", ITEMT_SWITCH))
|
||||||
.add(new ShellyChannel(m, CHGR_DEVST, CHANNEL_LED_POWER_DISABLE, "ledPowerDisable", ITEMT_SWITCH))
|
.add(new ShellyChannel(m, CHGR_DEVST, CHANNEL_LED_POWER_DISABLE, "ledPowerDisable", ITEMT_SWITCH))
|
||||||
@ -165,7 +166,7 @@ public class ShellyChannelDefinitions {
|
|||||||
.add(new ShellyChannel(m, CHGR_METER, CHANNEL_EMETER_REACTWATTS, "meterReactive", ITEMT_POWER))
|
.add(new ShellyChannel(m, CHGR_METER, CHANNEL_EMETER_REACTWATTS, "meterReactive", ITEMT_POWER))
|
||||||
.add(new ShellyChannel(m, CHGR_METER, CHANNEL_EMETER_VOLTAGE, "meterVoltage", ITEMT_VOLT))
|
.add(new ShellyChannel(m, CHGR_METER, CHANNEL_EMETER_VOLTAGE, "meterVoltage", ITEMT_VOLT))
|
||||||
.add(new ShellyChannel(m, CHGR_METER, CHANNEL_EMETER_CURRENT, "meterCurrent", ITEMT_AMP))
|
.add(new ShellyChannel(m, CHGR_METER, CHANNEL_EMETER_CURRENT, "meterCurrent", ITEMT_AMP))
|
||||||
.add(new ShellyChannel(m, CHGR_METER, CHANNEL_EMETER_PFACTOR, "meterPowerFactor", ITEMT_NUMBER))
|
.add(new ShellyChannel(m, CHGR_METER, CHANNEL_EMETER_PFACTOR, "meterPowerFactor", ITEMT_PERCENT))
|
||||||
|
|
||||||
// Sensors
|
// Sensors
|
||||||
.add(new ShellyChannel(m, CHGR_SENSOR, CHANNEL_SENSOR_TEMP, "sensorTemp", ITEMT_TEMP))
|
.add(new ShellyChannel(m, CHGR_SENSOR, CHANNEL_SENSOR_TEMP, "sensorTemp", ITEMT_TEMP))
|
||||||
@ -179,6 +180,7 @@ public class ShellyChannelDefinitions {
|
|||||||
.add(new ShellyChannel(m, CHGR_SENSOR, CHANNEL_SENSOR_MOTION, "sensorMotion", ITEMT_SWITCH))
|
.add(new ShellyChannel(m, CHGR_SENSOR, CHANNEL_SENSOR_MOTION, "sensorMotion", ITEMT_SWITCH))
|
||||||
.add(new ShellyChannel(m, CHGR_SENSOR, CHANNEL_SENSOR_MOTION_TS, "motionTimestamp", ITEMT_DATETIME))
|
.add(new ShellyChannel(m, CHGR_SENSOR, CHANNEL_SENSOR_MOTION_TS, "motionTimestamp", ITEMT_DATETIME))
|
||||||
.add(new ShellyChannel(m, CHGR_SENSOR, CHANNEL_SENSOR_MOTION_ACT, "motionActive", ITEMT_SWITCH))
|
.add(new ShellyChannel(m, CHGR_SENSOR, CHANNEL_SENSOR_MOTION_ACT, "motionActive", ITEMT_SWITCH))
|
||||||
|
.add(new ShellyChannel(m, CHGR_SENSOR, CHANNEL_SENSOR_VIBRATION, "vibration", ITEMT_SWITCH))
|
||||||
.add(new ShellyChannel(m, CHGR_SENSOR, CHANNEL_SENSOR_FLOOD, "sensorFlood", ITEMT_SWITCH))
|
.add(new ShellyChannel(m, CHGR_SENSOR, CHANNEL_SENSOR_FLOOD, "sensorFlood", ITEMT_SWITCH))
|
||||||
.add(new ShellyChannel(m, CHGR_SENSOR, CHANNEL_SENSOR_SMOKE, "sensorSmoke", ITEMT_SWITCH))
|
.add(new ShellyChannel(m, CHGR_SENSOR, CHANNEL_SENSOR_SMOKE, "sensorSmoke", ITEMT_SWITCH))
|
||||||
.add(new ShellyChannel(m, CHGR_SENSOR, CHANNEL_SENSOR_PPM, "sensorPPM", ITEMT_NUMBER))
|
.add(new ShellyChannel(m, CHGR_SENSOR, CHANNEL_SENSOR_PPM, "sensorPPM", ITEMT_NUMBER))
|
||||||
@ -258,12 +260,14 @@ public class ShellyChannelDefinitions {
|
|||||||
addChannel(thing, add, accuChannel, CHGR_DEVST, CHANNEL_DEVST_ACCUWATTS);
|
addChannel(thing, add, accuChannel, CHGR_DEVST, CHANNEL_DEVST_ACCUWATTS);
|
||||||
addChannel(thing, add, accuChannel, CHGR_DEVST, CHANNEL_DEVST_ACCUTOTAL);
|
addChannel(thing, add, accuChannel, CHGR_DEVST, CHANNEL_DEVST_ACCUTOTAL);
|
||||||
addChannel(thing, add, accuChannel && (status.emeters != null), CHGR_DEVST, CHANNEL_DEVST_ACCURETURNED);
|
addChannel(thing, add, accuChannel && (status.emeters != null), CHGR_DEVST, CHANNEL_DEVST_ACCURETURNED);
|
||||||
|
addChannel(thing, add, status.voltage != null || profile.settings.supplyVoltage != null, CHGR_DEVST,
|
||||||
|
CHANNEL_DEVST_VOLTAGE);
|
||||||
addChannel(thing, add, true, CHGR_DEVST, CHANNEL_DEVST_UPDATE);
|
addChannel(thing, add, true, CHGR_DEVST, CHANNEL_DEVST_UPDATE);
|
||||||
addChannel(thing, add, true, CHGR_DEVST, CHANNEL_DEVST_UPTIME);
|
addChannel(thing, add, true, CHGR_DEVST, CHANNEL_DEVST_UPTIME);
|
||||||
addChannel(thing, add, true, CHGR_DEVST, CHANNEL_DEVST_HEARTBEAT);
|
addChannel(thing, add, true, CHGR_DEVST, CHANNEL_DEVST_HEARTBEAT);
|
||||||
addChannel(thing, add, profile.settings.ledPowerDisable != null, CHGR_DEVST, CHANNEL_LED_POWER_DISABLE);
|
addChannel(thing, add, profile.settings.ledPowerDisable != null, CHGR_DEVST, CHANNEL_LED_POWER_DISABLE);
|
||||||
addChannel(thing, add, profile.settings.ledPowerDisable != null, CHGR_DEVST, CHANNEL_LED_STATUS_DISABLE); // WiFi
|
addChannel(thing, add, profile.settings.ledPowerDisable != null, CHGR_DEVST, CHANNEL_LED_STATUS_DISABLE); // WiFi
|
||||||
//
|
|
||||||
return add;
|
return add;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -391,7 +395,8 @@ public class ShellyChannelDefinitions {
|
|||||||
addChannel(thing, newChannels, emeter.reactive != null, group, CHANNEL_EMETER_REACTWATTS);
|
addChannel(thing, newChannels, emeter.reactive != null, group, CHANNEL_EMETER_REACTWATTS);
|
||||||
addChannel(thing, newChannels, emeter.voltage != null, group, CHANNEL_EMETER_VOLTAGE);
|
addChannel(thing, newChannels, emeter.voltage != null, group, CHANNEL_EMETER_VOLTAGE);
|
||||||
addChannel(thing, newChannels, emeter.current != null, group, CHANNEL_EMETER_CURRENT);
|
addChannel(thing, newChannels, emeter.current != null, group, CHANNEL_EMETER_CURRENT);
|
||||||
addChannel(thing, newChannels, emeter.pf != null, group, CHANNEL_EMETER_PFACTOR);
|
addChannel(thing, newChannels, emeter.power != null, group, CHANNEL_EMETER_PFACTOR); // EM has no PF. but power
|
||||||
|
|
||||||
addChannel(thing, newChannels, true, group, CHANNEL_LAST_UPDATE);
|
addChannel(thing, newChannels, true, group, CHANNEL_LAST_UPDATE);
|
||||||
return newChannels;
|
return newChannels;
|
||||||
}
|
}
|
||||||
|
|||||||
@ -501,6 +501,8 @@ channel-type.shelly.inputState2.label = Eingang 2
|
|||||||
channel-type.shelly.inputState2.description = Status des Relais-Eingangs 2
|
channel-type.shelly.inputState2.description = Status des Relais-Eingangs 2
|
||||||
channel-type.shelly.inputState3.label = Eingang 3
|
channel-type.shelly.inputState3.label = Eingang 3
|
||||||
channel-type.shelly.inputState3.description = Status des Relais-Eingangs 3
|
channel-type.shelly.inputState3.description = Status des Relais-Eingangs 3
|
||||||
|
channel-type.shelly.supplyVoltage.label = Spannung
|
||||||
|
channel-type.shelly.supplyVoltage.description = Eingangsspannung (Wechselstrom)
|
||||||
channel-type.shelly.dimmerBrightness.label = Helligkeit
|
channel-type.shelly.dimmerBrightness.label = Helligkeit
|
||||||
channel-type.shelly.dimmerBrightness.description = Helligkeit (0-100%, 0=aus)
|
channel-type.shelly.dimmerBrightness.description = Helligkeit (0-100%, 0=aus)
|
||||||
channel-type.shelly.whiteBrightness.label = Helligkeit
|
channel-type.shelly.whiteBrightness.label = Helligkeit
|
||||||
@ -648,7 +650,7 @@ channel-type.shelly.uptime.description = Anzahl Sekunden seit dem das Ger
|
|||||||
channel-type.shelly.heartBeat.label = Letzte Aktivität
|
channel-type.shelly.heartBeat.label = Letzte Aktivität
|
||||||
channel-type.shelly.heartBeat.description = Zeitpunkt der letzten Aktivität. Hierbei kann es sich um einen erfolgreichen API-Aufruf, oder Sensor-Aktualisierung handeln. Dies schließt eine erfolgreiche Netzwerk-Kommunikation ein (WiFi + IP).
|
channel-type.shelly.heartBeat.description = Zeitpunkt der letzten Aktivität. Hierbei kann es sich um einen erfolgreichen API-Aufruf, oder Sensor-Aktualisierung handeln. Dies schließt eine erfolgreiche Netzwerk-Kommunikation ein (WiFi + IP).
|
||||||
channel-type.shelly.updateAvailable.label = Firmwareaktualisierung vorhanden
|
channel-type.shelly.updateAvailable.label = Firmwareaktualisierung vorhanden
|
||||||
channel-type.shelly.updateAvailable.description = ON: Es ist eine neuere Firmwareversion verfügbar (kann mit der Shelly App durchgef¸hrt werden)
|
channel-type.shelly.updateAvailable.description = ON: Es ist eine neuere Firmwareversion verfügbar (kann mit der Shelly App durchgeführt werden)
|
||||||
channel-type.shelly.deviceTemp.label = Gerätetemperatur
|
channel-type.shelly.deviceTemp.label = Gerätetemperatur
|
||||||
channel-type.shelly.deviceTemp.description = Temperatur im Gerät. Hohe Temperaturen deuten ggf. auch ein Hitzestau/Installationsproblem hin.
|
channel-type.shelly.deviceTemp.description = Temperatur im Gerät. Hohe Temperaturen deuten ggf. auch ein Hitzestau/Installationsproblem hin.
|
||||||
channel-type.shelly.lastUpdate.label = Letzte Aktualisierung
|
channel-type.shelly.lastUpdate.label = Letzte Aktualisierung
|
||||||
|
|||||||
@ -235,8 +235,7 @@
|
|||||||
<channel-type id="whiteTemp">
|
<channel-type id="whiteTemp">
|
||||||
<item-type>Dimmer</item-type>
|
<item-type>Dimmer</item-type>
|
||||||
<label>Light Temperature</label>
|
<label>Light Temperature</label>
|
||||||
<description>Light Temperature 3000..6500K</description>
|
<description>Light Temperature 2700/3000..6500K (0-100%)</description>
|
||||||
<state min="3000" max="6500" step="10" readOnly="false"></state>
|
|
||||||
</channel-type>
|
</channel-type>
|
||||||
<channel-type id="whiteBrightness">
|
<channel-type id="whiteBrightness">
|
||||||
<item-type>Dimmer</item-type>
|
<item-type>Dimmer</item-type>
|
||||||
|
|||||||
@ -456,6 +456,13 @@
|
|||||||
<state readOnly="true" pattern="%.2f %unit%">
|
<state readOnly="true" pattern="%.2f %unit%">
|
||||||
</state>
|
</state>
|
||||||
</channel-type>
|
</channel-type>
|
||||||
|
<channel-type id="supplyVoltage" advanced="true">
|
||||||
|
<item-type>Number:ElectricPotential</item-type>
|
||||||
|
<label>Supply Voltage</label>
|
||||||
|
<description>Supply voltage of the device in Volt</description>
|
||||||
|
<state readOnly="true" pattern="%.2f %unit%">
|
||||||
|
</state>
|
||||||
|
</channel-type>
|
||||||
<channel-type id="meterAccuWatts" advanced="true">
|
<channel-type id="meterAccuWatts" advanced="true">
|
||||||
<item-type>Number:Power</item-type>
|
<item-type>Number:Power</item-type>
|
||||||
<label>Accumulated Watt</label>
|
<label>Accumulated Watt</label>
|
||||||
@ -523,7 +530,7 @@
|
|||||||
<item-type>Number</item-type>
|
<item-type>Number</item-type>
|
||||||
<label>Power Factor</label>
|
<label>Power Factor</label>
|
||||||
<description></description>
|
<description></description>
|
||||||
<state readOnly="true" pattern="%.3f %unit%">
|
<state readOnly="true" pattern="%.2f %unit%">
|
||||||
</state>
|
</state>
|
||||||
</channel-type>
|
</channel-type>
|
||||||
<channel-type id="timestamp">
|
<channel-type id="timestamp">
|
||||||
|
|||||||
@ -332,7 +332,7 @@
|
|||||||
<item-type>Number:ElectricPotential</item-type>
|
<item-type>Number:ElectricPotential</item-type>
|
||||||
<label>Voltage (ADC)</label>
|
<label>Voltage (ADC)</label>
|
||||||
<description>ADC voltage in V</description>
|
<description>ADC voltage in V</description>
|
||||||
<state readOnly="true" pattern="%.0f %unit%">
|
<state readOnly="true" pattern="%.2f %unit%">
|
||||||
</state>
|
</state>
|
||||||
</channel-type>
|
</channel-type>
|
||||||
<channel-type id="sensorValve">
|
<channel-type id="sensorValve">
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user