[shelly] Add Shelly Plus 1L, Plus 2L, Plus EM, Plus 3EM-63, Plus Shutter (#18937)

* Add Shelly Plus 1L, Plus 2L, Plus EM, Plus 3EM-63, Plus Shutter

Also-by: Markus Michels <markus7017@gmail.com>
Signed-off-by: Jacob Laursen <jacob-github@vindvejr.dk>
This commit is contained in:
Jacob Laursen
2025-07-13 16:00:32 +02:00
committed by GitHub
parent 71f0db20fd
commit 6e82872c20
9 changed files with 257 additions and 9 deletions
+115 -1
View File
@@ -83,9 +83,14 @@ See section [Discovery](#discovery) for details.
| thing-type | Model | Vendor ID |
|----------------------|----------------------------------------------------------|---------------------------------------------------------------------------|
| shellyplus1 | Shelly Plus 1 with 1x relay | SNSW-001X16EU, S3SW-001X16EU, S3SW-001X16EU, S4SW-001X16EU |
| shellyplus1l | Shelly Plus 1L with 1x relay | S3SW-0A1X1EUL |
| shellyplus1pm | Shelly Plus 1PM with 1x relay + power meter | SNSW-001P16EU, S3SW-001P16EU, S4SW-001P16EU |
| shellyplus2l | Shelly Plus 2L with 2x relay | S3SW-0A2X4EUL |
| shellyplus2pm-relay | Shelly Plus 2PM with 2x relay + power meter, relay mode | SNSW-002P16EU, SNSW-102P16EU, S3SW-002P16EU, SNSW-002P15UL, S4SW-002P16EU |
| shellyplus2pm-roller | Shelly Plus 2PM with 2x relay + power meter, roller mode | SNSW-002P16EU, SNSW-102P16EU, S3SW-002P16EU, SNSW-002P15UL, S4SW-002P16EU |
| shellyplusshutter | Shelly Plus Shutter for 1x roller | S3SH-0A2P4EU |
| shellyplusem | Shelly Plus EM | S3EM-002CXCEU |
| shellyplus3em63 | Shelly Plus 3EM-63 | S3EM-002CXCEU |
| shellyplusplug | Shelly Plug-S | SNPL-00112EU, SNPL-10112EU, S3PL-00112EU |
| shellyplusplug | Shelly Plug-IT | SNPL-00110IT |
| shellyplusplug | Shelly Plug-UK | SNPL-00112UK |
@@ -1131,7 +1136,7 @@ You should calibrate the valve using the device Web UI or Shelly App before star
## Shelly Plus Series
### Shelly Plus 1 (thing-type: shellyplus1)
### Shelly Plus 1 (thing-type: shellyplus1, shellyplus1l)
| Group | Channel | Type | read-only | Description |
| ----- | ----------- | ------- | --------- | --------------------------------------------------------------------------------- |
@@ -1214,6 +1219,25 @@ If the Shelly Add-On is installed:
| | totalKWH | Number | yes | Total energy consumption in kwh since the device powered up (resets on restart) |
| | lastUpdate | DateTime | yes | Timestamp of the last measurement |
### Shelly Plus 2L (thing-type: shellyplus2l)
| Group | Channel | Type | read-only | Description |
| ------ | ------------ | -------- | --------- | --------------------------------------------------------------------------------- |
| relay1 | output | Switch | r/w | Relay #1: Controls the relay's output channel (on/off) |
| | outputName | String | yes | Logical name of this relay output as configured in the Shelly App |
| | input | Switch | yes | ON: Input/Button is powered, see General Notes on Channels |
| | autoOn | Number | r/w | Relay #1: Sets a timer to turn the device ON after every OFF command; in seconds |
| | autoOff | Number | r/w | Relay #1: Sets a timer to turn the device OFF after every ON command; in seconds |
| | timerActive | Switch | yes | Relay #1: ON: An auto-on/off timer is active |
| | button | Trigger | yes | Event trigger, see section Button Events |
| relay2 | output | Switch | r/w | Relay #2: Controls the relay's output channel (on/off) |
| | outputName | String | yes | Logical name of this relay output as configured in the Shelly App |
| | input | Switch | yes | ON: Input/Button is powered, see General Notes on Channels |
| | autoOn | Number | r/w | Relay #2: Sets a timer to turn the device ON after every OFF command; in seconds |
| | autoOff | Number | r/w | Relay #2: Sets a timer to turn the device OFF after every ON command; in seconds |
| | timerActive | Switch | yes | Relay #2: ON: An auto-on/off timer is active |
| | button | Trigger | yes | Event trigger, see section Button Events |
### Shelly Plus 2PM - roller mode (thing-type: shellyplus2pm-roller)
| Group | Channel | Type | read-only | Description |
@@ -1230,6 +1254,22 @@ If the Shelly Add-On is installed:
The roller positioning calibration has to be performed using the Shelly Web UI or App before the position can be set in percent.
Refer to [Smartify Roller Shutters with openHAB and Shelly](doc/UseCaseSmartRoller.md) for more information on roller integration.
### Shelly Plus Shutter (thing-type: shellyplusshutter)
| Group | Channel | Type | read-only | Description |
| ------ | ---------- | ------------- | --------- | ------------------------------------------------------------------------------------ |
| roller | control | Rollershutter | r/w | can be open (0%), stop, or close (100%); could also handle ON (open) and OFF (close) |
| | rollerPos | Dimmer | r/w | Roller position: 100%=open...0%=closed; gets updated when the roller stopped |
| | input | Switch | yes | ON: Input/Button is powered, see General Notes on Channels |
| | state | String | yes | Roller state: open/close/stop |
| | stopReason | String | yes | Last stop reasons: normal, safety_switch or obstacle |
| | safety | Switch | yes | Indicates status of the Safety Switch, ON=problem detected, powered off |
| | event | Trigger | yes | Roller event/trigger with payload ROLLER_OPEN / ROLLER_CLOSE / ROLLER_STOP |
| meter | | | | See group meter description |
The roller positioning calibration has to be performed using the Shelly Web UI or App before the position can be set in percent.
Refer to [Smartify Roller Shutters with openHAB and Shelly](doc/UseCaseSmartRoller.md) for more information on roller integration.
### Shelly Plus Plug-S/IT/UK/US (thing-type: shellyplusplug, shellyplusplugus)
| Group | Channel | Type | read-only | Description |
@@ -1259,6 +1299,80 @@ Refer to [Smartify Roller Shutters with openHAB and Shelly](doc/UseCaseSmartRoll
| meter3 | | | r/w | Power Meter #1 with measurement values |
| meter4 | | | r/w | Power Meter #1 with measurement values |
### Shelly Plus EM (thing-type: shellyplusem)
| Group | Channel | Type | read-only | Description |
| ------ | ------------- | -------- | --------- | --------------------------------------------------------------------------------- |
| relay | output | Switch | r/w | Controls the relay's output channel (on/off) |
| | outputName | String | yes | Logical name of this relay output as configured in the Shelly App |
| | input | Switch | yes | ON: Input/Button is powered, see general notes on channels |
| | button | Trigger | yes | Event trigger, see section Button Events |
| | lastEvent | String | yes | Last event type (S/SS/SSS/L) |
| | eventCount | Number | yes | Counter gets incremented every time the device issues a button event. |
| | autoOn | Number | r/w | Relay #1: Sets a timer to turn the device ON after every OFF command; in seconds |
| | autoOff | Number | r/w | Relay #1: Sets a timer to turn the device OFF after every ON command; in seconds |
| | timerActive | Switch | yes | Relay #1: ON: An auto-on/off timer is active |
| meter1 | currentWatts | Number | yes | Current power consumption in Watts |
| | totalKWH | Number | yes | Total energy consumption in kwh 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 |
| meter2 | currentWatts | Number | yes | Current power consumption in Watts |
| | totalKWH | Number | yes | Total energy consumption in kwh 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 Plus 3EM-63 (thing-type: shellyplus3em63)
| Group | Channel | Type | read-only | Description |
| ------ | ------------- | -------- | --------- | --------------------------------------------------------------------------------- |
| relay | output | Switch | r/w | Controls the relay's output channel (on/off) |
| | outputName | String | yes | Logical name of this relay output as configured in the Shelly App |
| | input | Switch | yes | ON: Input/Button is powered, see general notes on channels |
| | button | Trigger | yes | Event trigger, see section Button Events |
| | lastEvent | String | yes | Last event type (S/SS/SSS/L) |
| | eventCount | Number | yes | Counter gets incremented every time the device issues a button event. |
| | autoOn | Number | r/w | Relay #1: Sets a timer to turn the device ON after every OFF command; in seconds |
| | autoOff | Number | r/w | Relay #1: Sets a timer to turn the device OFF after every ON command; in seconds |
| | timerActive | Switch | yes | Relay #1: ON: An auto-on/off timer is active |
| meter1 | currentWatts | Number | yes | Current power consumption in Watts |
| | totalKWH | Number | yes | Total energy consumption in kwh 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 |
| | current | Number | yes | Current in A |
| | powerFactor | Number | yes | Power Factor in percent |
| | resetTotals | Switch | yes | ON: Resets total values for the power meter |
| | lastUpdate | DateTime | yes | Timestamp of the last measurement |
| meter2 | currentWatts | Number | yes | Current power consumption in Watts |
| | totalKWH | Number | yes | Total energy consumption in kwh 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 |
| | current | Number | yes | Current in A |
| | powerFactor | Number | yes | Power Factor in percent |
| | resetTotals | Switch | yes | ON: Resets total values for the power meter |
| | lastUpdate | DateTime | yes | Timestamp of the last measurement |
| meter3 | currentWatts | Number | yes | Current power consumption in Watts |
| | totalKWH | Number | yes | Total energy consumption in kwh 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 |
| | current | Number | yes | Current in A |
| | powerFactor | Number | yes | Power Factor in percent |
| | resetTotals | Switch | yes | ON: Resets total values for the power meter |
| | lastUpdate | DateTime | yes | Timestamp of the last measurement |
| nmeter | ncurrent | Number | yes | Current current based on N clamp (requires calibration) |
| | ixsum | Number | yes | Measured current over all phases |
| | nmismatch | Switch | yes | ON: abs(ncurrent-ixsum) is greater than nmTreshhold |
| | nmTreshhold | Number | yes | Treshhod (delta) before nMismatch goes ON |
### Shelly Plus Dimmer 10v (thing-type: shellyplus10v)
| Group | Channel | Type | read-only | Description |
@@ -49,7 +49,8 @@ public class ShellyBindingConstants {
THING_TYPE_SHELLYPLUSDIMMER10V, THING_TYPE_SHELLYPLUSUNI, THING_TYPE_SHELLYPLUSHT,
THING_TYPE_SHELLYPLUSHTG3, THING_TYPE_SHELLYPLUSSMOKE, THING_TYPE_SHELLYPLUSPLUGS,
THING_TYPE_SHELLYPLUSPLUGUS, THING_TYPE_SHELLYPLUSDIMMERUS, THING_TYPE_SHELLYPLUSRGBWPM,
THING_TYPE_SHELLYPLUSSTRIP,
THING_TYPE_SHELLYPLUSSTRIP, THING_TYPE_SHELLYPLUS1L, THING_TYPE_SHELLYPLUS2L, THING_TYPE_SHELLYPLUSSHUTTER,
THING_TYPE_SHELLYPLUSEM, THING_TYPE_SHELLYPLUS3EM63,
// Shelly Wall Display
THING_TYPE_SHELLYPLUSWALLDISPLAY,
@@ -228,7 +228,8 @@ public class ShellyDeviceProfile {
|| THING_TYPE_SHELLYBLUBUTTON.equals(thingTypeUID);
isTRV = THING_TYPE_SHELLYTRV.equals(thingTypeUID);
isWall = THING_TYPE_SHELLYPLUSWALLDISPLAY.equals(thingTypeUID);
is3EM = THING_TYPE_SHELLY3EM.equals(thingTypeUID) || THING_TYPE_SHELLYPRO3EM.equals(thingTypeUID);
is3EM = THING_TYPE_SHELLY3EM.equals(thingTypeUID) || THING_TYPE_SHELLYPRO3EM.equals(thingTypeUID)
|| THING_TYPE_SHELLYPLUSEM.equals(thingTypeUID) || THING_TYPE_SHELLYPLUS3EM63.equals(thingTypeUID);
isEM50 = THING_TYPE_SHELLYPROEM50.equals(thingTypeUID);
isSensor = isHT || isFlood || isDW || isSmoke || isGas || isButton || isUNI || isMotion || isSense || isTRV
@@ -632,9 +632,17 @@ public class Shelly2ApiClient extends ShellyHttpClient {
}
int rIdx = getRollerIdx(getProfile(), cs.id);
ShellyRollerStatus rs = status.rollers.get(rIdx);
ShellySettingsMeter sm = status.meters.get(rIdx);
ShellySettingsEMeter emeter = status.emeters.get(rIdx);
rs.isValid = sm.isValid = emeter.isValid = true;
ShellySettingsMeter sm;
ShellySettingsEMeter emeter;
if (status.emeters != null) {
emeter = status.emeters.get(rIdx);
sm = status.meters.get(rIdx);
rs.isValid = sm.isValid = emeter.isValid = true;
} else {
emeter = new ShellySettingsEMeter();
sm = new ShellySettingsMeter();
rs.isValid = sm.isValid = emeter.isValid = false;
}
if (cs.state != null) {
if (!getString(rs.state).equals(cs.state)) {
logger.debug("{}: Roller status changed from {} to {}, updateChannels={}", thingName, rs.state,
@@ -679,9 +687,11 @@ public class Shelly2ApiClient extends ShellyHttpClient {
rollerStatus.set(cs.id, rs);
status.rollers.set(cs.id, rs);
relayStatus.meters.set(cs.id, sm);
status.meters.set(cs.id, sm);
status.emeters.set(cs.id, emeter);
if (emeter.isValid) { // Shelly Shutter has no meters
relayStatus.meters.set(cs.id, sm);
status.meters.set(cs.id, sm);
status.emeters.set(cs.id, emeter);
}
postAlarms(cs.errors);
if (rs.calibrating != null && rs.calibrating) {
@@ -74,11 +74,14 @@ public class ShellyThingCreator {
public static final String SHELLYDT_PLUS1PMG4 = "S4SW-001P16EU";
public static final String SHELLYDT_PLUS1UL = "SNSW-001X15UL";
public static final String SHELLYDT_PLUS1PMUL = "SNSW-001P15UL";
public static final String SHELLYDT_PLUS1L = "S3SW-0A1X1EUL";
public static final String SHELLYDT_PLUS2L = "S3SW-0A2X4EUL";
public static final String SHELLYDT_PLUS2PM = "SNSW-002P16EU";
public static final String SHELLYDT_PLUS2PM_2 = "SNSW-102P16EU";
public static final String SHELLYDT_PLUS2PMG3 = "S3SW-002P16EU";
public static final String SHELLYDT_PLUS2PMG4 = "S4SW-002P16EU";
public static final String SHELLYDT_PLUS2PMUL = "SNSW-002P15UL";
public static final String SHELLYDT_PLUSSHUTTER = "S3SH-0A2P4EU";
public static final String SHELLYDT_PLUSPLUGS = "SNPL-00112EU";
public static final String SHELLYDT_PLUSPLUGS_2 = "SNPL-10112EU";
public static final String SHELLYDT_PLUSPLUGSG3 = "S3PL-00112EU"; // Shelly Plug-S G3, Shelly AZ Plug
@@ -99,6 +102,8 @@ public class ShellyThingCreator {
public static final String SHELLYDT_PLUSWALLDISPLAY = "SAWD-0A1XX10EU1";
public static final String SHELLYDT_PLUSRGBWPM = "SNDC-0D4P10WW";
public static final String SHELLYDT_PLUSSTRIP = "S4PL-00416EU";
public static final String SHELLYDT_PLUSEM = "S3EM-002CXCEU";
public static final String SHELLYDT_PLUS3EM63 = "S3EM-003CXCEU63";
// Shelly Pro Series
public static final String SHELLYDT_PRO1 = "SPSW-001XE16EU";
@@ -201,10 +206,13 @@ public class ShellyThingCreator {
// Shelly Plus
public static final ThingTypeUID THING_TYPE_SHELLYPLUS1 = new ThingTypeUID(BINDING_ID, "shellyplus1");
public static final ThingTypeUID THING_TYPE_SHELLYPLUS1PM = new ThingTypeUID(BINDING_ID, "shellyplus1pm");
public static final ThingTypeUID THING_TYPE_SHELLYPLUS1L = new ThingTypeUID(BINDING_ID, "shellyplus1l");
public static final ThingTypeUID THING_TYPE_SHELLYPLUS2PM_RELAY = new ThingTypeUID(BINDING_ID,
"shellyplus2pm-relay");
public static final ThingTypeUID THING_TYPE_SHELLYPLUS2PM_ROLLER = new ThingTypeUID(BINDING_ID,
"shellyplus2pm-roller");
public static final ThingTypeUID THING_TYPE_SHELLYPLUS2L = new ThingTypeUID(BINDING_ID, "shellyplus2l");
public static final ThingTypeUID THING_TYPE_SHELLYPLUSSHUTTER = new ThingTypeUID(BINDING_ID, "shellyplusshutter");
public static final ThingTypeUID THING_TYPE_SHELLYPLUSI4 = new ThingTypeUID(BINDING_ID, "shellyplusi4");
public static final ThingTypeUID THING_TYPE_SHELLYPLUSI4DC = new ThingTypeUID(BINDING_ID, "shellyplusi4dc");
public static final ThingTypeUID THING_TYPE_SHELLYPLUSHT = new ThingTypeUID(BINDING_ID, "shellyplusht");
@@ -217,6 +225,8 @@ public class ShellyThingCreator {
public static final ThingTypeUID THING_TYPE_SHELLYPLUSDIMMER10V = new ThingTypeUID(BINDING_ID, "shellyplus10v");
public static final ThingTypeUID THING_TYPE_SHELLYPLUSRGBWPM = new ThingTypeUID(BINDING_ID, "shellyplusrgbwpm");
public static final ThingTypeUID THING_TYPE_SHELLYPLUSSTRIP = new ThingTypeUID(BINDING_ID, "shellyplusstrip");
public static final ThingTypeUID THING_TYPE_SHELLYPLUSEM = new ThingTypeUID(BINDING_ID, "shellyplusem");
public static final ThingTypeUID THING_TYPE_SHELLYPLUS3EM63 = new ThingTypeUID(BINDING_ID, "shellyplus3em63");
// Shelly Wall Display
public static final ThingTypeUID THING_TYPE_SHELLYPLUSWALLDISPLAY = new ThingTypeUID(BINDING_ID,
@@ -283,6 +293,9 @@ public class ShellyThingCreator {
Map.entry(SHELLYDT_PLUS1PMG3, THING_TYPE_SHELLYPLUS1PM),
Map.entry(SHELLYDT_PLUS1PMG4, THING_TYPE_SHELLYPLUS1PM),
Map.entry(SHELLYDT_PLUS1PMUL, THING_TYPE_SHELLYPLUS1PM),
Map.entry(SHELLYDT_PLUS1L, THING_TYPE_SHELLYPLUS1L), //
Map.entry(SHELLYDT_PLUS2L, THING_TYPE_SHELLYPLUS2L),
Map.entry(SHELLYDT_PLUSSHUTTER, THING_TYPE_SHELLYPLUSSHUTTER),
Map.entry(SHELLYDT_PLUSPLUGS, THING_TYPE_SHELLYPLUSPLUGS),
Map.entry(SHELLYDT_PLUSPLUGS_2, THING_TYPE_SHELLYPLUSPLUGS),
Map.entry(SHELLYDT_PLUSPLUGSG3, THING_TYPE_SHELLYPLUSPLUGS),
@@ -302,6 +315,8 @@ public class ShellyThingCreator {
Map.entry(SHELLYDT_PLUSDIMMER10V, THING_TYPE_SHELLYPLUSDIMMER10V),
Map.entry(SHELLYDT_PLUSDIMMER0110VG3, THING_TYPE_SHELLYPLUSDIMMER10V),
Map.entry(SHELLYDT_PLUSRGBWPM, THING_TYPE_SHELLYPLUSRGBWPM),
Map.entry(SHELLYDT_PLUSEM, THING_TYPE_SHELLYPLUSEM),
Map.entry(SHELLYDT_PLUS3EM63, THING_TYPE_SHELLYPLUS3EM63),
// Plus Mini Series
Map.entry(SHELLYDT_MINI_1, THING_TYPE_SHELLYMINI_1), //
@@ -405,8 +420,11 @@ public class ShellyThingCreator {
Map.entry("shellyplus1pm", THING_TYPE_SHELLYPLUS1PM), //
Map.entry("shelly1pmg3", THING_TYPE_SHELLYPLUS1PM), //
Map.entry("shelly1pmg4", THING_TYPE_SHELLYPLUS1PM), //
Map.entry("shellyplus1l", THING_TYPE_SHELLYPLUS1L), //
Map.entry("shellyplus2pm-relay", THING_TYPE_SHELLYPLUS2PM_RELAY),
Map.entry("shellyplus2pm-roller", THING_TYPE_SHELLYPLUS2PM_ROLLER),
Map.entry("shellyplusshutter", THING_TYPE_SHELLYPLUSSHUTTER),
Map.entry("shellyplus2l", THING_TYPE_SHELLYPLUS2L), //
Map.entry("shellyplugus", THING_TYPE_SHELLYPLUSPLUGUS),
Map.entry("shellyplusplug", THING_TYPE_SHELLYPLUSPLUGS),
Map.entry("shellyplusplugus", THING_TYPE_SHELLYPLUSPLUGUS),
@@ -420,6 +438,8 @@ public class ShellyThingCreator {
Map.entry("shellyplus10v", THING_TYPE_SHELLYPLUSDIMMER10V),
Map.entry("shellyplusrgbwpm", THING_TYPE_SHELLYPLUSRGBWPM),
Map.entry("shellyplusstrip", THING_TYPE_SHELLYPLUSSTRIP),
Map.entry("shellyplusem", THING_TYPE_SHELLYPLUSEM),
Map.entry("shellyplus3em63", THING_TYPE_SHELLYPLUS3EM63),
Map.entry("shellywalldisplay", THING_TYPE_SHELLYPLUSWALLDISPLAY),
// Shelly Plus Mini Series
@@ -93,8 +93,11 @@ thing-type.shelly.shellyplusrgbw.description = Shelly Plus RGBW PM - LED Control
# Plus Devices
thing-type.shelly.shellyplus1.description = Shelly Plus 1 (Single Relay Switch)
thing-type.shelly.shellyplus1pm.description = Shelly Plus 1PM - Single Relay Switch with Power Meter
thing-type.shelly.shellyplus1l.description = Shelly Plus 1L (Single Relay Switch)
thing-type.shelly.shellyplus2pm-relay.description = Shelly Plus 2PM - Dual Relay Switch with Power Meter
thing-type.shelly.shellyplus2pm-roller.description = Shelly Plus 2PM - Roller Control with Power Meter
thing-type.shelly.shellyplus2l.description = Shelly Plus 2L - Dual Relay Switch
thing-type.shelly.shellyplusshutter.description = Shelly Shutter - Roller/Cover
thing-type.shelly.shellyplusplug.description = Shelly Plus Plug S/IT/UK. Outlet with Power Meter
thing-type.shelly.shellyplusplugus.description = Shelly Plus Plug US. Outlet with Power Meter
thing-type.shelly.shellyplusi4.description = Shelly Plus i4 - 4xInput Device
@@ -107,6 +110,8 @@ thing-type.shelly.shellypluswdus.description = Shelly Wall Dimmer US Device
thing-type.shelly.shellyplus10v.description = Shelly Plus Dimmer 10V
thing-type.shelly.shellyplusrgbwpm-color.description = Shelly Plus RGBW PM - RGBW Dimmer with Power Meter
thing-type.shelly.shellyplusstrip.description = Shelly Plus Power Strip 4
thing-type.shelly.shellyplusem.description = Shelly Plus EM Power Meter
thing-type.shelly.shellyplus3em63.description = Shelly Plus 3EM-63 - 3 Phase Power Meter, 63 Amp
# Plus Mini Devices
thing-type.shelly.shelly1mini.description = Shelly Plus Mini 1 - Single Relay Switch
@@ -33,6 +33,21 @@
<config-description-ref uri="thing-type:shelly:relay-gen2"/>
</thing-type>
<thing-type id="shellyplus1l">
<label>ShellyPlus 1L</label>
<description>@text/thing-type.shelly.shellyplus1l.description</description>
<semantic-equipment-tag>ControlDevice</semantic-equipment-tag>
<channel-groups>
<channel-group id="relay" typeId="relayChannel"/>
<channel-group id="sensors" typeId="externalSensors"/>
<channel-group id="device" typeId="deviceStatus"/>
</channel-groups>
<representation-property>serviceName</representation-property>
<config-description-ref uri="thing-type:shelly:relay-gen2"/>
</thing-type>
<thing-type id="shellyplus2pm-relay">
<label>ShellyPlus 2PM Relay</label>
<description>@text/thing-type.shelly.shellyplus2pm-relay.description</description>
@@ -72,6 +87,39 @@
<config-description-ref uri="thing-type:shelly:roller-gen2"/>
</thing-type>
<thing-type id="shellyplus2l">
<label>ShellyPlus 2L</label>
<description>@text/thing-type.shelly.shellyplus2l.description</description>
<semantic-equipment-tag>ControlDevice</semantic-equipment-tag>
<channel-groups>
<channel-group id="relay1" typeId="relayChannel">
<label>@text/channel-group-type.shelly.relayChannel1.label</label>
</channel-group>
<channel-group id="relay2" typeId="relayChannel">
<label>@text/channel-group-type.shelly.relayChannel2.label</label>
</channel-group>
<channel-group id="device" typeId="deviceStatus"/>
</channel-groups>
<representation-property>serviceName</representation-property>
<config-description-ref uri="thing-type:shelly:relay-gen2"/>
</thing-type>
<thing-type id="shellyplusshutter">
<label>ShellyPlus Shutter</label>
<description>@text/thing-type.shelly.shellyplusshutter.description</description>
<category>Rollershutter</category>
<semantic-equipment-tag>WindowCovering</semantic-equipment-tag>
<channel-groups>
<channel-group id="roller" typeId="rollerControl"/>
<channel-group id="meter" typeId="meter"/>
<channel-group id="device" typeId="deviceStatus"/>
</channel-groups>
<representation-property>serviceName</representation-property>
<config-description-ref uri="thing-type:shelly:roller-gen2"/>
</thing-type>
<thing-type id="shellyplusplug">
<label>ShellyPlus Plug</label>
<description>@text/thing-type.shelly.shellyplusplug.description</description>
@@ -473,4 +521,46 @@
<config-description-ref uri="thing-type:shelly:dimmer-gen2"/>
</thing-type>
<thing-type id="shellyplusem">
<label>Shelly Plues EM</label>
<description>@text/thing-type.shelly.shellyplusem.description</description>
<semantic-equipment-tag>ElectricMeter</semantic-equipment-tag>
<channel-groups>
<channel-group id="meter1" typeId="meter">
<label>@text/channel-group-type.shelly.meter1.label</label>
</channel-group>
<channel-group id="meter2" typeId="meter">
<label>@text/channel-group-type.shelly.meter2.label</label>
</channel-group>
<channel-group id="nmeter" typeId="nmeter"/>
<channel-group id="relay" typeId="relayChannel"/>
<channel-group id="device" typeId="deviceStatus"/>
</channel-groups>
<representation-property>serviceName</representation-property>
<config-description-ref uri="thing-type:shelly:relay"/>
</thing-type>
<thing-type id="shellyplus3em63">
<label>Shelly Plues 3EM-63</label>
<description>@text/thing-type.shelly.shellyplus3em63.description</description>
<semantic-equipment-tag>ElectricMeter</semantic-equipment-tag>
<channel-groups>
<channel-group id="meter1" typeId="meter">
<label>@text/channel-group-type.shelly.meter1.label</label>
</channel-group>
<channel-group id="meter2" typeId="meter">
<label>@text/channel-group-type.shelly.meter2.label</label>
</channel-group>
<channel-group id="meter3" typeId="meter">
<label>@text/channel-group-type.shelly.meter2.label</label>
</channel-group>
<channel-group id="nmeter" typeId="nmeter"/>
<channel-group id="device" typeId="deviceStatus"/>
</channel-groups>
<representation-property>serviceName</representation-property>
<config-description-ref uri="thing-type:shelly:relay"/>
</thing-type>
</thing:thing-descriptions>
@@ -98,6 +98,8 @@ public class ShellyDeviceProfileTest {
Arguments.of(THING_TYPE_SHELLYPLUSPLUGUS, true, false), //
Arguments.of(THING_TYPE_SHELLYPLUSI4, true, false), //
Arguments.of(THING_TYPE_SHELLYPLUSI4DC, true, false), //
Arguments.of(THING_TYPE_SHELLYPLUSEM, true, false), //
Arguments.of(THING_TYPE_SHELLYPLUS3EM63, true, false), //
// Shelly Mini series
Arguments.of(THING_TYPE_SHELLYMINI_1, true, false), //
@@ -145,6 +145,7 @@ public class ShellyThingCreatorTest {
Arguments.of(SHELLYDT_PLUS1PMG4, "", THING_TYPE_SHELLYPLUS1PM), //
Arguments.of(SHELLYDT_PLUS1UL, "", THING_TYPE_SHELLYPLUS1), //
Arguments.of(SHELLYDT_PLUS1PMUL, "", THING_TYPE_SHELLYPLUS1PM), //
Arguments.of(SHELLYDT_PLUS1L, "", THING_TYPE_SHELLYPLUS1L), //
Arguments.of("SNSW-002P16EU", "relay", THING_TYPE_SHELLYPLUS2PM_RELAY), //
Arguments.of("SNSW-002P16EU", "roller", THING_TYPE_SHELLYPLUS2PM_ROLLER), //
Arguments.of("SNSW-102P16EU", "relay", THING_TYPE_SHELLYPLUS2PM_RELAY), //
@@ -153,6 +154,8 @@ public class ShellyThingCreatorTest {
Arguments.of("S3SW-002P16EU", "roller", THING_TYPE_SHELLYPLUS2PM_ROLLER), //
Arguments.of("S4SW-002P16EU", "relay", THING_TYPE_SHELLYPLUS2PM_RELAY), //
Arguments.of("S4SW-002P16EU", "roller", THING_TYPE_SHELLYPLUS2PM_ROLLER), //
Arguments.of(SHELLYDT_PLUS2L, "", THING_TYPE_SHELLYPLUS2L), //
Arguments.of(SHELLYDT_PLUSSHUTTER, "", THING_TYPE_SHELLYPLUSSHUTTER), //
Arguments.of(SHELLYDT_PLUSPLUGS, "", THING_TYPE_SHELLYPLUSPLUGS), //
Arguments.of(SHELLYDT_PLUSPLUGSG3, "", THING_TYPE_SHELLYPLUSPLUGS), //
Arguments.of(SHELLYDT_PLUSPLUGIT, "", THING_TYPE_SHELLYPLUSPLUGS), //
@@ -170,6 +173,8 @@ public class ShellyThingCreatorTest {
Arguments.of(SHELLYDT_PLUSDIMMERUS, "", THING_TYPE_SHELLYPLUSDIMMERUS), //
Arguments.of(SHELLYDT_PLUSDIMMER10V, "", THING_TYPE_SHELLYPLUSDIMMER10V), //
Arguments.of(SHELLYDT_PLUSDIMMER0110VG3, "", THING_TYPE_SHELLYPLUSDIMMER10V), //
Arguments.of(SHELLYDT_PLUSEM, "", THING_TYPE_SHELLYPLUSEM), //
Arguments.of(SHELLYDT_PLUS3EM63, "", THING_TYPE_SHELLYPLUS3EM63), //
// Plus Mini Series
Arguments.of(SHELLYDT_MINI_1, "", THING_TYPE_SHELLYMINI_1), //