Skip to content

Commit

Permalink
Fix stack overflow when an unknown CoAP Id is detected; Fix innerTemp (
Browse files Browse the repository at this point in the history
…#16240)

channel creation for Gen2 devices not having this; Fix sensor
initialization on wakeup; Fix missingf temperature5 description; add
missing relay definition for shellywalldisplay; Some README fixes
  • Loading branch information
markus7017 authored and lsiepel committed Jan 18, 2024
1 parent d8aa8bf commit 5556646
Show file tree
Hide file tree
Showing 9 changed files with 33 additions and 30 deletions.
28 changes: 16 additions & 12 deletions bundles/org.openhab.binding.shelly/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -96,12 +96,12 @@ The binding provides the same feature set across all devices as good as possible
| shellywalldisplay | Shelly Plus Wall Display | SAWD-0A1XX10EU1 |

### Generation 2 Plus Mini series

| thing-type | Model | Vendor ID |
| -------------------- | -------------------------------------------------------- | ---------------------------- |
| shellymini1 | Shelly Plus 1 Mini with 1x relay | SNSW-001X16EU |
| shellymini1pm | Shelly Plus 1PM Mini with 1x relay + power meter | SNPM-001PCEU16 |
| shellyminipm | Shelly Plus PM Mini with 1x power meter | SNSW-001P8EU |

| shellymini1 | Shelly Plus 1 Mini with 1x relay | SNSW-001X8EU |
| shellymini1pm | Shelly Plus 1PM Mini with 1x relay + power meter | SNSW-001P8EU |
| shellyminipm | Shelly Plus PM Mini with 1x power meter | SNPM-001PCEU16 |

### Generation 2 Pro series

Expand Down Expand Up @@ -402,14 +402,18 @@ A new alarm will be triggered on a new condition or every 5 minutes if the condi

### Non-battery powered devices

| Event Type | Description |
| ----------- | --------------------------------------------------------------------------------- |
| RESTARTED | The device has been restarted. This could be an indicator for a firmware problem. |
| WEAK_SIGNAL | An alarm is triggered when RSSI is < -80, which indicates an unstable connection. |
| OVER_TEMP | The device is overheating, check installation and housing. |
| OVER_LOAD | An over load condition has been detected, e.g. from the roller motor. |
| OVER_POWER | Maximum allowed power was exceeded. The relay was turned off. |
| LOAD_ERROR | Device reported a load problem, so far Dimmer only. |
| Event Type | Description |
| ------------ | --------------------------------------------------------------------------------- |
| RESTARTED | The device has been restarted. This could be an indicator for a firmware problem. |
| WEAK_SIGNAL | An alarm is triggered when RSSI is < -80, which indicates an unstable connection. |
| OVERTEMP | The device is overheating, check installation and housing. |
| OVERLOAD | An over load condition has been detected, e.g. from the roller motor. |
| OVERPOWER | Maximum allowed power was exceeded. The relay was turned off. |
| LOAD_ERROR | Device reported a load problem. |
| SENSOR_ERROR | Device reported a sensor problem. |
| VALVE_ERROR | Device reported a problem with the valve. |
| VIBRATION | Device reported vibration. |
| LOW_BATTERY | Device reported low battery. |

### Sensors

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -142,6 +142,9 @@ public boolean handleStatusUpdate(List<CoIotSensor> sensorUpdates, CoIotDescrSen

processed = true;
switch (sen.id) {
case "6": // 3EM: neutralCurrent
break;

case "3106": // L, luminosity, lux, U32, -1
case "3110": // S, luminosityLevel, dark/twilight/bright, "unknown"=unknown
case "3111": // B, battery, 0-100%, unknown -1
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -359,16 +359,12 @@ private void handleDeviceDescription(String devId, String payload) throws Shelly
valid &= addSensor(descr.sen.get(i));
}
}
coiot.completeMissingSensorDefinition(sensorMap);

if (!valid) {
logger.debug(
"{}: Incompatible device description detected for CoIoT version {} (id length mismatch), discarding!",
thingName, coiot.getVersion());

discover();
return;
logger.debug("{}: WARNING: Incompatible device description detected for CoIoT version {}!", thingName,
coiot.getVersion());
}

coiot.completeMissingSensorDefinition(sensorMap); // fix incomplete format
} catch (JsonSyntaxException e) {
logger.warn("{}: Unable to parse CoAP Device Description! JSON={}", thingName, payload);
} catch (NullPointerException | IllegalArgumentException e) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -239,9 +239,6 @@ private boolean updateRelayStatus(ShellySettingsStatus status, @Nullable Shelly2
int duration = (int) (now() - rs.timerStartetAt);
sr.timerRemaining = duration;
}
if (status.tmp == null) {
status.tmp = new ShellySensorTmp();
}
if (rs.temperature != null) {
if (status.tmp == null) {
status.tmp = new ShellySensorTmp();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -293,8 +293,10 @@ public boolean initializeThing() throws ShellyApiException {
return false;
}

updateStatus(ThingStatus.UNKNOWN, ThingStatusDetail.CONFIGURATION_PENDING,
messages.get("status.unknown.initializing"));
if (profile.alwaysOn || !profile.isInitialized()) {
updateStatus(ThingStatus.UNKNOWN, ThingStatusDetail.CONFIGURATION_PENDING,
messages.get("status.unknown.initializing"));
}

// Gen 1 only: Setup CoAP listener to we get the CoAP message, which triggers initialization even the thing
// could not be fully initialized here. In this case the CoAP messages triggers auto-initialization (like the
Expand Down Expand Up @@ -513,7 +515,7 @@ public void handleCommand(ChannelUID channelUID, Command command) {
}

private double getNumber(Command command) {
if (command instanceof QuantityType quantityCommand) {
if (command instanceof QuantityType<?> quantityCommand) {
return quantityCommand.doubleValue();
}
if (command instanceof DecimalType decimalCommand) {
Expand Down Expand Up @@ -1279,7 +1281,7 @@ public State getChannelValue(String group, String channel) {
public double getChannelDouble(String group, String channel) {
State value = getChannelValue(group, channel);
if (value != UnDefType.NULL) {
if (value instanceof QuantityType quantityCommand) {
if (value instanceof QuantityType<?> quantityCommand) {
return quantityCommand.toBigDecimal().doubleValue();
}
if (value instanceof DecimalType decimalCommand) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -534,7 +534,7 @@ public static boolean updateSensors(ShellyThingInterface thingHandler, ShellySet
updated |= thingHandler.updateInputs(status);

if (updated) {
thingHandler.updateChannel(profile.getControlGroup(0), CHANNEL_LAST_UPDATE, getTimestamp());
thingHandler.updateChannel(CHANNEL_GROUP_SENSOR, CHANNEL_LAST_UPDATE, getTimestamp());
}
}
return updated;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -239,7 +239,7 @@ public static Double getNumber(Command command) throws IllegalArgumentException
if (command instanceof DecimalType decimalCommand) {
return decimalCommand.doubleValue();
}
if (command instanceof QuantityType quantityCommand) {
if (command instanceof QuantityType<?> quantityCommand) {
return quantityCommand.doubleValue();
}
throw new IllegalArgumentException("Unable to convert number");
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -246,7 +246,7 @@ channel-type.shelly.temperature3.description = Temperature of external Sensor #3
channel-type.shelly.temperature4.label = Temperature 4
channel-type.shelly.temperature4.description = Temperature of external Sensor #4
channel-type.shelly.temperature5.label = Temperature 5
channel-type.shelly.temperature6.description = Temperature of external Sensor #5
channel-type.shelly.temperature5.description = Temperature of external Sensor #5
channel-type.shelly.targetTemp.label = Target Temperature
channel-type.shelly.targetTemp.description = Target Temperature in °C to be reached in auto-temperature mode
channel-type.shelly.humidity.label = Humidity
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -38,6 +38,7 @@
<category>Sensor</category>
<channel-groups>
<channel-group id="sensors" typeId="sensorData"/>
<channel-group id="relay" typeId="relayChannel"/>
<channel-group id="device" typeId="deviceStatus"/>
</channel-groups>

Expand Down

0 comments on commit 5556646

Please sign in to comment.