mirror of
https://github.com/openhab/openhab-addons.git
synced 2025-01-10 15:11:59 +01:00
[shelly] Various small fixes for BLU HT, Range Extender, Plus 10V, TRV set temp (#16746)
* fixes ##16736, #16734, #16542, #16709, #16735 Signed-off-by: Markus Michels <markus7017@gmail.com>
This commit is contained in:
parent
a4ad7b27b7
commit
f79a2dd7f0
@ -84,7 +84,7 @@ public interface ShellyApiInterface {
|
||||
|
||||
void setValveMode(int id, boolean auto) throws ShellyApiException;
|
||||
|
||||
void setValveTemperature(int valveId, int value) throws ShellyApiException;
|
||||
void setValveTemperature(int valveId, double value) throws ShellyApiException;
|
||||
|
||||
void setValveProfile(int valveId, int value) throws ShellyApiException;
|
||||
|
||||
|
@ -272,7 +272,7 @@ public class Shelly1HttpApi extends ShellyHttpClient implements ShellyApiInterfa
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setValveTemperature(int valveId, int value) throws ShellyApiException {
|
||||
public void setValveTemperature(int valveId, double value) throws ShellyApiException {
|
||||
httpRequest("/thermostat/" + valveId + "?target_t_enabled=1&target_t=" + value);
|
||||
}
|
||||
|
||||
|
@ -15,7 +15,7 @@ package org.openhab.binding.shelly.internal.api2;
|
||||
import static org.openhab.binding.shelly.internal.ShellyBindingConstants.*;
|
||||
import static org.openhab.binding.shelly.internal.api1.Shelly1ApiJsonDTO.*;
|
||||
import static org.openhab.binding.shelly.internal.api2.Shelly2ApiJsonDTO.*;
|
||||
import static org.openhab.binding.shelly.internal.discovery.ShellyThingCreator.THING_TYPE_SHELLYPRO2_RELAY_STR;
|
||||
import static org.openhab.binding.shelly.internal.discovery.ShellyThingCreator.*;
|
||||
import static org.openhab.binding.shelly.internal.util.ShellyUtils.*;
|
||||
|
||||
import java.io.BufferedReader;
|
||||
@ -259,6 +259,8 @@ public class Shelly2ApiRpc extends Shelly2ApiClient implements ShellyApiInterfac
|
||||
// Mini PM has 1 meter, but no relay
|
||||
if (thingType.equals(THING_TYPE_SHELLYPRO2_RELAY_STR)) {
|
||||
profile.numMeters = 0;
|
||||
} else if (thingType.equals(THING_TYPE_SHELLYPRO3EM_STR)) {
|
||||
profile.numMeters = 3;
|
||||
} else if (dc.pm10 != null) {
|
||||
profile.numMeters = 1;
|
||||
} else if (dc.em0 != null) {
|
||||
@ -1101,7 +1103,7 @@ public class Shelly2ApiRpc extends Shelly2ApiClient implements ShellyApiInterfac
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setValveTemperature(int valveId, int value) throws ShellyApiException {
|
||||
public void setValveTemperature(int valveId, double value) throws ShellyApiException {
|
||||
throw new ShellyApiException("API call not implemented");
|
||||
}
|
||||
|
||||
|
@ -83,7 +83,7 @@ public class ShellyThingCreator {
|
||||
public static final String SHELLYDT_PLUSSMOKE = "SNSN-0031Z";
|
||||
public static final String SHELLYDT_PLUSUNI = "SNSN-0043X";
|
||||
public static final String SHELLYDT_PLUSDIMMERUS = "SNDM-0013US";
|
||||
public static final String SHELLYDT_PLUSDIMMER10V = "SNGW-0A11WW010";
|
||||
public static final String SHELLYDT_PLUSDIMMER10V = "SNDM-00100WW";
|
||||
public static final String SHELLYDT_PLUSWALLDISPLAY = "SAWD-0A1XX10EU1";
|
||||
|
||||
// Shelly Pro Series
|
||||
|
@ -45,6 +45,7 @@ import org.openhab.binding.shelly.internal.api1.Shelly1CoapHandler;
|
||||
import org.openhab.binding.shelly.internal.api1.Shelly1CoapJSonDTO;
|
||||
import org.openhab.binding.shelly.internal.api1.Shelly1CoapServer;
|
||||
import org.openhab.binding.shelly.internal.api1.Shelly1HttpApi;
|
||||
import org.openhab.binding.shelly.internal.api2.Shelly2ApiJsonDTO;
|
||||
import org.openhab.binding.shelly.internal.api2.Shelly2ApiJsonDTO.Shelly2APClientList.Shelly2APClient;
|
||||
import org.openhab.binding.shelly.internal.api2.Shelly2ApiRpc;
|
||||
import org.openhab.binding.shelly.internal.api2.ShellyBluApi;
|
||||
@ -463,7 +464,7 @@ public abstract class ShellyBaseHandler extends BaseThingHandler
|
||||
break;
|
||||
case CHANNEL_CONTROL_SETTEMP:
|
||||
logger.debug("{}: Set temperature to {}", thingName, command);
|
||||
api.setValveTemperature(0, getNumber(command).intValue());
|
||||
api.setValveTemperature(0, getNumber(command).doubleValue());
|
||||
break;
|
||||
case CHANNEL_CONTROL_POSITION:
|
||||
logger.debug("{}: Set position to {}", thingName, command);
|
||||
@ -821,6 +822,10 @@ public abstract class ShellyBaseHandler extends BaseThingHandler
|
||||
case SHELLY_WAKEUPT_POWERON:
|
||||
case SHELLY_WAKEUPT_EXT_POWER:
|
||||
case SHELLY_WAKEUPT_UNKNOWN:
|
||||
case Shelly2ApiJsonDTO.SHELLY2_EVENT_OTASTART:
|
||||
case Shelly2ApiJsonDTO.SHELLY2_EVENT_OTAPROGRESS:
|
||||
case Shelly2ApiJsonDTO.SHELLY2_EVENT_OTADONE:
|
||||
case SHELLY_EVENT_ROLLER_CALIB:
|
||||
logger.debug("{}: {}", thingName, messages.get("event.filtered", event));
|
||||
case ALARM_TYPE_NONE:
|
||||
break;
|
||||
@ -1003,7 +1008,7 @@ public abstract class ShellyBaseHandler extends BaseThingHandler
|
||||
String saddr = addr.getHostAddress();
|
||||
if (!ip.equals(saddr)) {
|
||||
logger.debug("{}: hostname {} resolved to IP address {}", thingName, config.deviceIp, saddr);
|
||||
config.deviceIp = saddr + (port.isEmpty() ? ip : ip + ":" + port);
|
||||
config.deviceIp = saddr + (port.isEmpty() ? "" : ":" + port);
|
||||
}
|
||||
} catch (UnknownHostException e) {
|
||||
logger.debug("{}: Unable to resolve hostname {}", thingName, config.deviceIp);
|
||||
|
@ -123,31 +123,6 @@ public class ShellyComponents {
|
||||
getOpenClosed(getInteger(status.extSwitch.input0.input) == 1));
|
||||
}
|
||||
}
|
||||
if (status.extTemperature != null) {
|
||||
// Shelly 1/1PM support up to 3 external sensors
|
||||
// for whatever reason those are not represented as an array, but 3 elements
|
||||
updated |= updateTempChannel(status.extTemperature.sensor1, thingHandler, CHANNEL_ESENSOR_TEMP1);
|
||||
updated |= updateTempChannel(status.extTemperature.sensor2, thingHandler, CHANNEL_ESENSOR_TEMP2);
|
||||
updated |= updateTempChannel(status.extTemperature.sensor3, thingHandler, CHANNEL_ESENSOR_TEMP3);
|
||||
updated |= updateTempChannel(status.extTemperature.sensor4, thingHandler, CHANNEL_ESENSOR_TEMP4);
|
||||
updated |= updateTempChannel(status.extTemperature.sensor5, thingHandler, CHANNEL_ESENSOR_TEMP5);
|
||||
}
|
||||
if ((status.extHumidity != null) && (status.extHumidity.sensor1 != null)) {
|
||||
updated |= thingHandler.updateChannel(CHANNEL_GROUP_SENSOR, CHANNEL_ESENSOR_HUMIDITY,
|
||||
toQuantityType(getDouble(status.extHumidity.sensor1.hum), DIGITS_PERCENT, Units.PERCENT));
|
||||
}
|
||||
if ((status.extVoltage != null) && (status.extVoltage.sensor1 != null)) {
|
||||
updated |= thingHandler.updateChannel(CHANNEL_GROUP_SENSOR, CHANNEL_ESENSOR_VOLTAGE,
|
||||
toQuantityType(getDouble(status.extVoltage.sensor1.voltage), 4, Units.VOLT));
|
||||
}
|
||||
if ((status.extDigitalInput != null) && (status.extDigitalInput.sensor1 != null)) {
|
||||
updated |= thingHandler.updateChannel(CHANNEL_GROUP_SENSOR, CHANNEL_ESENSOR_DIGITALINPUT,
|
||||
getOnOff(status.extDigitalInput.sensor1.state));
|
||||
}
|
||||
if ((status.extAnalogInput != null) && (status.extAnalogInput.sensor1 != null)) {
|
||||
updated |= thingHandler.updateChannel(CHANNEL_GROUP_SENSOR, CHANNEL_ESENSOR_ANALOGINPUT, toQuantityType(
|
||||
getDouble(status.extAnalogInput.sensor1.percent), DIGITS_PERCENT, Units.PERCENT));
|
||||
}
|
||||
|
||||
// Update Auto-ON/OFF timer
|
||||
updated |= thingHandler.updateChannel(groupName, CHANNEL_TIMER_AUTOON,
|
||||
@ -556,6 +531,34 @@ public class ShellyComponents {
|
||||
thingHandler.updateChannel(CHANNEL_GROUP_SENSOR, CHANNEL_LAST_UPDATE, getTimestamp());
|
||||
}
|
||||
}
|
||||
|
||||
// Update Add-On channeös
|
||||
if (status.extTemperature != null) {
|
||||
// Shelly 1/1PM support up to 3 external sensors
|
||||
// for whatever reason those are not represented as an array, but 3 elements
|
||||
updated |= updateTempChannel(status.extTemperature.sensor1, thingHandler, CHANNEL_ESENSOR_TEMP1);
|
||||
updated |= updateTempChannel(status.extTemperature.sensor2, thingHandler, CHANNEL_ESENSOR_TEMP2);
|
||||
updated |= updateTempChannel(status.extTemperature.sensor3, thingHandler, CHANNEL_ESENSOR_TEMP3);
|
||||
updated |= updateTempChannel(status.extTemperature.sensor4, thingHandler, CHANNEL_ESENSOR_TEMP4);
|
||||
updated |= updateTempChannel(status.extTemperature.sensor5, thingHandler, CHANNEL_ESENSOR_TEMP5);
|
||||
}
|
||||
if ((status.extHumidity != null) && (status.extHumidity.sensor1 != null)) {
|
||||
updated |= thingHandler.updateChannel(CHANNEL_GROUP_SENSOR, CHANNEL_ESENSOR_HUMIDITY,
|
||||
toQuantityType(getDouble(status.extHumidity.sensor1.hum), DIGITS_PERCENT, Units.PERCENT));
|
||||
}
|
||||
if ((status.extVoltage != null) && (status.extVoltage.sensor1 != null)) {
|
||||
updated |= thingHandler.updateChannel(CHANNEL_GROUP_SENSOR, CHANNEL_ESENSOR_VOLTAGE,
|
||||
toQuantityType(getDouble(status.extVoltage.sensor1.voltage), 4, Units.VOLT));
|
||||
}
|
||||
if ((status.extDigitalInput != null) && (status.extDigitalInput.sensor1 != null)) {
|
||||
updated |= thingHandler.updateChannel(CHANNEL_GROUP_SENSOR, CHANNEL_ESENSOR_DIGITALINPUT,
|
||||
getOnOff(status.extDigitalInput.sensor1.state));
|
||||
}
|
||||
if ((status.extAnalogInput != null) && (status.extAnalogInput.sensor1 != null)) {
|
||||
updated |= thingHandler.updateChannel(CHANNEL_GROUP_SENSOR, CHANNEL_ESENSOR_ANALOGINPUT,
|
||||
toQuantityType(getDouble(status.extAnalogInput.sensor1.percent), DIGITS_PERCENT, Units.PERCENT));
|
||||
}
|
||||
|
||||
return updated;
|
||||
}
|
||||
|
||||
|
@ -298,7 +298,7 @@ public class ShellyRelayHandler extends ShellyBaseHandler {
|
||||
|
||||
private void createRollerChannels(ShellyRollerStatus roller) {
|
||||
if (!areChannelsCreated()) {
|
||||
updateChannelDefinitions(ShellyChannelDefinitions.createRollerChannels(getThing(), roller));
|
||||
updateChannelDefinitions(ShellyChannelDefinitions.createRollerChannels(getThing(), profile, roller));
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -369,6 +369,13 @@ public class ShellyChannelDefinitions {
|
||||
addChannel(thing, add, rs.autoOff != null, group, CHANNEL_TIMER_AUTOOFF);
|
||||
}
|
||||
|
||||
addAddonChannels(thing, profile, idx, add);
|
||||
|
||||
return add;
|
||||
}
|
||||
|
||||
private static void addAddonChannels(final Thing thing, final ShellyDeviceProfile profile, int idx,
|
||||
Map<String, Channel> add) {
|
||||
// Shelly 1/1PM and Plus 1/1PM Addon
|
||||
boolean addon = profile.settings.extSwitch != null && profile.settings.extSwitch.input0 != null
|
||||
&& idx == getInteger(profile.settings.extSwitch.input0.relayNum);
|
||||
@ -385,11 +392,10 @@ public class ShellyChannelDefinitions {
|
||||
}
|
||||
addChannel(thing, add, profile.status.extHumidity != null && profile.status.extHumidity.sensor1 != null,
|
||||
CHGR_SENSOR, CHANNEL_ESENSOR_HUMIDITY);
|
||||
|
||||
addChannel(thing, add, profile.status.extVoltage != null, CHGR_SENSOR, CHANNEL_ESENSOR_VOLTAGE);
|
||||
addChannel(thing, add, profile.status.extDigitalInput != null, CHGR_SENSOR, CHANNEL_ESENSOR_DIGITALINPUT);
|
||||
addChannel(thing, add, profile.status.extAnalogInput != null, CHGR_SENSOR, CHANNEL_ESENSOR_ANALOGINPUT);
|
||||
|
||||
return add;
|
||||
}
|
||||
|
||||
public static Map<String, Channel> createDimmerChannels(final Thing thing, final ShellyDeviceProfile profile,
|
||||
@ -458,7 +464,8 @@ public class ShellyChannelDefinitions {
|
||||
return add;
|
||||
}
|
||||
|
||||
public static Map<String, Channel> createRollerChannels(Thing thing, final ShellyRollerStatus roller) {
|
||||
public static Map<String, Channel> createRollerChannels(final Thing thing, final ShellyDeviceProfile profile,
|
||||
final ShellyRollerStatus roller) {
|
||||
Map<String, Channel> add = new LinkedHashMap<>();
|
||||
addChannel(thing, add, true, CHGR_ROLLER, CHANNEL_ROL_CONTROL_CONTROL);
|
||||
addChannel(thing, add, true, CHGR_ROLLER, CHANNEL_ROL_CONTROL_STATE);
|
||||
@ -474,6 +481,9 @@ public class ShellyChannelDefinitions {
|
||||
addChannel(thing, add, roller.currentPos != null, CHGR_ROLLER, CHANNEL_ROL_CONTROL_FAV);
|
||||
}
|
||||
}
|
||||
|
||||
addAddonChannels(thing, profile, 0, add);
|
||||
|
||||
return add;
|
||||
}
|
||||
|
||||
|
@ -29,7 +29,7 @@
|
||||
<parameter name="enableRangeExtender" type="boolean" required="false">
|
||||
<label>@text/thing-type.config.shelly.enableRangeExtender.label</label>
|
||||
<description>@text/thing-type.config.shelly.enableRangeExtender.description</description>
|
||||
<default>true</default>
|
||||
<default>false</default>
|
||||
</parameter>
|
||||
</config-description>
|
||||
|
||||
|
@ -1,7 +1,7 @@
|
||||
/*
|
||||
* This script uses the BLE scan functionality in scripting to pass scan results to openHAB
|
||||
* Supported BLU Devices: BLU Button 1, BLU Door/Window, BLU Motion, BLU H&T
|
||||
* Version 0.3
|
||||
* Version 0.4
|
||||
*/
|
||||
|
||||
let ALLTERCO_DEVICE_NAME_PREFIX = ["SBBT", "SBDW", "SBMO", "SBHT"];
|
||||
@ -33,15 +33,17 @@ BTH[0x05] = { n: "Illuminance", t: uint24, f: 0.01 };
|
||||
BTH[0x08] = { n: "Dewpoint", t: int16, f: 0.01 };
|
||||
BTH[0x12] = { n: "Co2", t: uint16 };
|
||||
BTH[0x14] = { n: "Moisture16", t: uint16, f: 0.01 };
|
||||
BTH[0x14] = { n: "Moisture8", t: uint8 };
|
||||
BTH[0x1a] = { n: "Door", t: uint8 };
|
||||
BTH[0x20] = { n: "Moisture", t: uint8 };
|
||||
BTH[0x21] = { n: "Motion", t: uint8 };
|
||||
BTH[0x2d] = { n: "Window", t: uint8 };
|
||||
BTH[0x2e] = { n: "Humidity", t: uint8 };
|
||||
BTH[0x2f] = { n: "Moisture8", t: uint8 };
|
||||
BTH[0x3a] = { n: "Button", t: uint8 };
|
||||
BTH[0x3f] = { n: "Rotation", t: int16, f: 0.1 };
|
||||
BTH[0x43] = { n: "Current", t: uint16, f: 0.1 };
|
||||
BTH[0x43] = { n: "UVIndex", t: uint8 };
|
||||
BTH[0x45] = { n: "Temperature", t: int16, f: 0.1 };
|
||||
BTH[0x46] = { n: "UVIndex", t: uint8 };
|
||||
BTH[0x51] = { n: "Acceleration", t: uint16, f: 0.1 };
|
||||
|
||||
function getByteSize(type) {
|
||||
|
Loading…
Reference in New Issue
Block a user