]> git.basschouten.com Git - openhab-addons.git/commitdiff
[shelly] 1PM/1L/2.5: New device#supplyVoltage; Motion: Missing channel for vibration...
authorMarkus Michels <markus7017@gmail.com>
Tue, 15 Jun 2021 22:00:56 +0000 (00:00 +0200)
committerGitHub <noreply@github.com>
Tue, 15 Jun 2021 22:00:56 +0000 (00:00 +0200)
* 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>
14 files changed:
bundles/org.openhab.binding.shelly/README.md
bundles/org.openhab.binding.shelly/src/main/java/org/openhab/binding/shelly/internal/ShellyBindingConstants.java
bundles/org.openhab.binding.shelly/src/main/java/org/openhab/binding/shelly/internal/api/ShellyApiJsonDTO.java
bundles/org.openhab.binding.shelly/src/main/java/org/openhab/binding/shelly/internal/coap/ShellyCoIoTVersion1.java
bundles/org.openhab.binding.shelly/src/main/java/org/openhab/binding/shelly/internal/coap/ShellyCoIoTVersion2.java
bundles/org.openhab.binding.shelly/src/main/java/org/openhab/binding/shelly/internal/handler/ShellyBaseHandler.java
bundles/org.openhab.binding.shelly/src/main/java/org/openhab/binding/shelly/internal/handler/ShellyComponents.java
bundles/org.openhab.binding.shelly/src/main/java/org/openhab/binding/shelly/internal/handler/ShellyRelayHandler.java
bundles/org.openhab.binding.shelly/src/main/java/org/openhab/binding/shelly/internal/manager/ShellyManagerOverviewPage.java
bundles/org.openhab.binding.shelly/src/main/java/org/openhab/binding/shelly/internal/provider/ShellyChannelDefinitions.java
bundles/org.openhab.binding.shelly/src/main/resources/OH-INF/i18n/shelly_de.properties
bundles/org.openhab.binding.shelly/src/main/resources/OH-INF/thing/lights.xml
bundles/org.openhab.binding.shelly/src/main/resources/OH-INF/thing/relay.xml
bundles/org.openhab.binding.shelly/src/main/resources/OH-INF/thing/sensor.xml

index 501e9dd3226950dcce58fcb35f835ace9eab4202..aed0dca82a7cc1ab7bfe9a5e12661c1c27af32d9 100644 (file)
@@ -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)                        |
 |          |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                         |
+|          |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)                      |
 |          |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)           |
@@ -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                                                       |
 |          |reactiveWatts|Number   |yes      |Instantaneous reactive power, Watts                                              |
 |          |voltage      |Number   |yes      |RMS voltage, Volts                                                               |
+|          |powerFactor  |Number   |yes      |Power Factor in percent                                                          |
 |          |lastUpdate   |DateTime |yes      |Timestamp of the last measurement                                                |
 |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)|
 |          |returnedKWH  |Number   |yes      |Total returned energy, kwh                                                       |
 |          |reactiveWatts|Number   |yes      |Instantaneous reactive power, Watts                                              |
 |          |voltage      |Number   |yes      |RMS voltage, Volts                                                               |
+|          |powerFactor  |Number   |yes      |Power Factor in percent                                                          |
 |          |lastUpdate   |DateTime |yes      |Timestamp of the last measurement                                                |
 
 ### 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                                              |
 |          |voltage      |Number   |yes      |RMS voltage, Volts                                                               |
 |          |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                                                |
 |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)|
@@ -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                                              |
 |          |voltage      |Number   |yes      |RMS voltage, Volts                                                               |
 |          |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                                                |
 |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)|
@@ -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                                              |
 |          |voltage      |Number   |yes      |RMS voltage, Volts                                                               |
 |          |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                                                |
 
 
index 16256635ed062c5e8fabf43d7923084365ab9dcc..96ace5c9ae1539dca186423a535ceb04a517d9b5 100755 (executable)
@@ -301,6 +301,7 @@ public class ShellyBindingConstants {
     public static final String CHANNEL_DEVST_CHARGER = "charger";
     public static final String CHANNEL_DEVST_UPDATE = "updateAvailable";
     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_POWER_DISABLE = "powerLed";
index d103ee9b112375f7ca38416f274f0753e7b67b21..d6fe7d1c7e8d4aede2433d882eb572b9455e6202 100644 (file)
@@ -576,6 +576,9 @@ public class ShellyApiJsonDTO {
         public Double maxPower;
 
         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<ShellySettingsRgbwLight> lights;
         public ArrayList<ShellySettingsEMeter> emeters;
@@ -677,6 +680,8 @@ public class ShellyApiJsonDTO {
         public ShellyActionsStats astats;
 
         public ArrayList<ShellySettingsRelay> relays;
+        public Double voltage; // Shelly 2.5
+
         public ArrayList<ShellySettingsRoller> rollers;
         public Integer input; // RGBW2 has no JSON array
         public ArrayList<ShellyInputState> inputs;
index 3a1ed6c07c027202cf3295cfbe6c92968445b010..d5d7bad8486428a660de93030b628f56c1de2aa3 100644 (file)
@@ -152,7 +152,8 @@ public class ShellyCoIoTVersion1 extends ShellyCoIoTProtocol implements ShellyCo
                                 toQuantityType(getDouble(s.value), DIGITS_VOLT, Units.AMPERE));
                         break;
                     case "pf":
-                        updateChannel(updates, rGroup, CHANNEL_EMETER_PFACTOR, getDecimal(s.value));
+                        updateChannel(updates, rGroup, CHANNEL_EMETER_PFACTOR,
+                                toQuantityType(getDecimal(s.value), Units.PERCENT));
                         break;
                     case "position":
                         // work around: Roller reports 101% instead max 100
index c600c1c9b9067762226a7b1628d07f3556d5ba69..31f7dfeac5179df1cce8310db86da7402756404b 100644 (file)
@@ -193,7 +193,7 @@ public class ShellyCoIoTVersion2 extends ShellyCoIoTProtocol implements ShellyCo
                 break;
             case "3118":
                 updateChannel(updates, mGroup, CHANNEL_SENSOR_VOLTAGE,
-                        toQuantityType(getDouble(s.value), DIGITS_VOLT, Units.VOLT));
+                        toQuantityType(getDouble(s.value), 2, Units.VOLT));
                 break;
 
             case "4101": // relay_0/light_0: P, power, W
index 5d1642f20897500fa348a7c3b91be558ea976655..136a60509fbff839a266ce2c08e1fb14960787a9 100755 (executable)
@@ -367,7 +367,7 @@ public class ShellyBaseHandler extends BaseThingHandler implements ShellyDeviceL
             if (res.isNotCalibrtated()) {
                 logger.warn("{}: {}", thingName, messages.get("roller.calibrating"));
             } else {
-                logger.info("{}: {} - {}", thingName, messages.get("command.failed", command, channelUID),
+                logger.warn("{}: {} - {}", thingName, messages.get("command.failed", command, channelUID),
                         e.toString());
             }
         } catch (IllegalArgumentException e) {
@@ -528,7 +528,6 @@ public class ShellyBaseHandler extends BaseThingHandler implements ShellyDeviceL
 
     private void fillDeviceStatus(ShellySettingsStatus status, boolean updated) {
         String alarm = "";
-        boolean force = false;
 
         // Update uptime and WiFi, internal temp
         ShellyComponents.updateDeviceStatus(this, status);
@@ -567,7 +566,7 @@ public class ShellyBaseHandler extends BaseThingHandler implements ShellyDeviceL
         stats.coiotErrors = coap.getErrorCount();
 
         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);
         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)) {
                 cache.updateChannel(channelId, getStringType(alarm));
             } else {
index 82d1e661a051bfd31ec6191916792b29c705f1ac..54ce5670f7ac222152434d0af182fa56f13f737c 100644 (file)
@@ -160,14 +160,10 @@ public class ShellyComponents {
                                     toQuantityType(getDouble(emeter.reactive), DIGITS_WATT, Units.WATT));
                             updated |= thingHandler.updateChannel(groupName, CHANNEL_EMETER_VOLTAGE,
                                     toQuantityType(getDouble(emeter.voltage), DIGITS_VOLT, Units.VOLT));
-
-                            if (emeter.current != null) {
-                                // Shelly
-                                updated |= thingHandler.updateChannel(groupName, CHANNEL_EMETER_CURRENT,
-                                        toQuantityType(getDouble(emeter.current), DIGITS_VOLT, Units.AMPERE));
-                                updated |= thingHandler.updateChannel(groupName, CHANNEL_EMETER_PFACTOR,
-                                        getDecimal(emeter.pf));
-                            }
+                            updated |= thingHandler.updateChannel(groupName, CHANNEL_EMETER_CURRENT,
+                                    toQuantityType(getDouble(emeter.current), DIGITS_VOLT, Units.AMPERE));
+                            updated |= thingHandler.updateChannel(groupName, CHANNEL_EMETER_PFACTOR,
+                                    toQuantityType(computePF(emeter), Units.PERCENT));
 
                             accumulatedWatts += getDouble(emeter.power);
                             accumulatedTotal += getDouble(emeter.total) / 1000;
@@ -234,6 +230,19 @@ public class ShellyComponents {
         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
      *
@@ -324,7 +333,7 @@ public class ShellyComponents {
             if ((sdata.adcs != null) && (sdata.adcs.size() > 0)) {
                 ShellyADC adc = sdata.adcs.get(0);
                 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);
index b11d6a840b6b41eebf1406ff3d44e656be1588ef..65ec500a8ee1783ea1def42bd744f9f526b24303 100644 (file)
@@ -336,8 +336,20 @@ public class ShellyRelayHandler extends ShellyBaseHandler {
         boolean updated = false;
         // Check for Relay in Standard Mode
         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;
             ShellyStatusRelay rstatus = api.getRelayStatus(i);
             for (ShellyShortStatusRelay relay : rstatus.relays) {
index bdadcf21215655b7b5ef4674a8d1db20bfe069a1..8f559c2644c6c0924d393c3439f380064a3f7f18 100644 (file)
@@ -110,7 +110,7 @@ public class ShellyManagerOverviewPage extends ShellyManagerPage {
                     if (!warnings.isEmpty() && (status != ThingStatus.UNKNOWN)) {
                         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_ACTION_LIST, fillActionHtml(th, uid));
                     } else {
index 50f21cbd2b8042c657542f339d7a5a91c202bff4..973a0c36f7ae7711cc186a60d42a9c30af8f0c91 100644 (file)
@@ -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_ACCUTOTAL, "meterAccuTotal", 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_LED_STATUS_DISABLE, "ledStatusDisable", 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_VOLTAGE, "meterVoltage", ITEMT_VOLT))
                 .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
                 .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_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_VIBRATION, "vibration", 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_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_ACCUTOTAL);
         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_UPTIME);
         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_STATUS_DISABLE); // WiFi
-                                                                                                                  //
+
         return add;
     }
 
@@ -391,7 +395,8 @@ public class ShellyChannelDefinitions {
         addChannel(thing, newChannels, emeter.reactive != null, group, CHANNEL_EMETER_REACTWATTS);
         addChannel(thing, newChannels, emeter.voltage != null, group, CHANNEL_EMETER_VOLTAGE);
         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);
         return newChannels;
     }
index 70d0209926cb42b7ec958bf87c9d80a9343780c0..ee194d428c7d6e4aafbe9e4a99baa2b4585404c4 100644 (file)
@@ -501,6 +501,8 @@ channel-type.shelly.inputState2.label = Eingang 2
 channel-type.shelly.inputState2.description = Status des Relais-Eingangs 2
 channel-type.shelly.inputState3.label = Eingang 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.description = Helligkeit (0-100%, 0=aus)
 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.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.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.description = Temperatur im Gerät. Hohe Temperaturen deuten ggf. auch ein Hitzestau/Installationsproblem hin.
 channel-type.shelly.lastUpdate.label = Letzte Aktualisierung
index a7e2e932473066e2b0314fe5dfd97303a2f610af..73eb4a984c0a30b9d5e94300414a71fb375cd9b1 100644 (file)
        <channel-type id="whiteTemp">
                <item-type>Dimmer</item-type>
                <label>Light Temperature</label>
-               <description>Light Temperature 3000..6500K</description>
-               <state min="3000" max="6500" step="10" readOnly="false"></state>
+               <description>Light Temperature 2700/3000..6500K (0-100%)</description>
        </channel-type>
        <channel-type id="whiteBrightness">
                <item-type>Dimmer</item-type>
index c5d6e696d12f5a444ecbb1215b8dca83e26a7759..6750155773b349ecbea0324a8f376c5b88fc9c8f 100644 (file)
                <state readOnly="true" pattern="%.2f %unit%">
                </state>
        </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">
                <item-type>Number:Power</item-type>
                <label>Accumulated Watt</label>
                <item-type>Number</item-type>
                <label>Power Factor</label>
                <description></description>
-               <state readOnly="true" pattern="%.3f %unit%">
+               <state readOnly="true" pattern="%.2f %unit%">
                </state>
        </channel-type>
        <channel-type id="timestamp">
index 9dee669ba2bcca3911b5e6110dd83bf29c194a6a..eb442fd5e291e06c6f882abdf3aa6026649676b9 100644 (file)
                <item-type>Number:ElectricPotential</item-type>
                <label>Voltage (ADC)</label>
                <description>ADC voltage in V</description>
-               <state readOnly="true" pattern="%.0f %unit%">
+               <state readOnly="true" pattern="%.2f %unit%">
                </state>
        </channel-type>
        <channel-type id="sensorValve">