[livisismarthome] Support for the indoor siren device added (#16914)
Signed-off-by: Sven Strohschein <sven.strohschein@gmail.com> Signed-off-by: Sven Strohschein <novanic@gmx.de>pull/16947/head
parent
33a9894bde
commit
e662320877
|
@ -41,6 +41,7 @@ The channels are described in detail in the next chapter.
|
||||||
| WSC2 | Wall Mounted Smart Controller | button1, button2, button1Count, button2Count, batteryLow |
|
| WSC2 | Wall Mounted Smart Controller | button1, button2, button1Count, button2Count, batteryLow |
|
||||||
| WSD | Wall Mounted Smoke Detector, old version | smoke, alarm, batteryLow |
|
| WSD | Wall Mounted Smoke Detector, old version | smoke, alarm, batteryLow |
|
||||||
| WSD2 | Wall Mounted Smoke Detector, new version | smoke, alarm, batteryLow |
|
| WSD2 | Wall Mounted Smoke Detector, new version | smoke, alarm, batteryLow |
|
||||||
|
| SIR | Wall Mounted Siren, indoor | siren, batteryLow |
|
||||||
|
|
||||||
Powermeter devices
|
Powermeter devices
|
||||||
|
|
||||||
|
@ -94,6 +95,7 @@ However, only devices will appear that are added in the LIVISI SmartHome app bef
|
||||||
| operationMode | String | The mode of a thermostat (auto/manual) | RST, RST2, WRT |
|
| operationMode | String | The mode of a thermostat (auto/manual) | RST, RST2, WRT |
|
||||||
| rollershutter | Rollershutter | Controls a roller shutter | ISR2 |
|
| rollershutter | Rollershutter | Controls a roller shutter | ISR2 |
|
||||||
| targetTemperature | Number | Sets the target temperature in °C (min 6 °C, max 30 °C) | RST, RST2, WRT |
|
| targetTemperature | Number | Sets the target temperature in °C (min 6 °C, max 30 °C) | RST, RST2, WRT |
|
||||||
|
| siren | Switch | Switches the siren (ON/OFF) | SIR |
|
||||||
| smoke | Switch | Indicates, if smoke was detected (ON/OFF) | WSD, WSD2 |
|
| smoke | Switch | Indicates, if smoke was detected (ON/OFF) | WSD, WSD2 |
|
||||||
| status | String | Status of the SHC (ACTIVE/NORMAL, INITIALIZING/REBOOTING or SHUTTINGDOWN) | SHC (bridge) |
|
| status | String | Status of the SHC (ACTIVE/NORMAL, INITIALIZING/REBOOTING or SHUTTINGDOWN) | SHC (bridge) |
|
||||||
| switch | Switch | A switch to turn the device or variable on/off (ON/OFF) | ISS2, PSS, PSSO, VariableActuator |
|
| switch | Switch | A switch to turn the device or variable on/off (ON/OFF) | ISS2, PSS, PSSO, VariableActuator |
|
||||||
|
|
|
@ -73,6 +73,7 @@ public class LivisiBindingConstants {
|
||||||
public static final String DEVICE_ISS2 = "ISS2"; // inwall smart switch
|
public static final String DEVICE_ISS2 = "ISS2"; // inwall smart switch
|
||||||
public static final String DEVICE_WSD = "WSD"; // wall mounted smoke detector
|
public static final String DEVICE_WSD = "WSD"; // wall mounted smoke detector
|
||||||
public static final String DEVICE_WSD2 = "WSD2"; // wall mounted smoke detector
|
public static final String DEVICE_WSD2 = "WSD2"; // wall mounted smoke detector
|
||||||
|
public static final String DEVICE_SIR = "SIR"; // wall mounted siren indoor
|
||||||
public static final String DEVICE_WMD = "WMD"; // wall mounted motion detector indoor
|
public static final String DEVICE_WMD = "WMD"; // wall mounted motion detector indoor
|
||||||
public static final String DEVICE_WMDO = "WMDO"; // wall mounted motion detector outdoor
|
public static final String DEVICE_WMDO = "WMDO"; // wall mounted motion detector outdoor
|
||||||
public static final String DEVICE_WSC2 = "WSC2"; // wall mounted smart controller (2 buttons)
|
public static final String DEVICE_WSC2 = "WSC2"; // wall mounted smart controller (2 buttons)
|
||||||
|
@ -88,12 +89,12 @@ public class LivisiBindingConstants {
|
||||||
|
|
||||||
public static final Set<String> SUPPORTED_DEVICES = Set.of(DEVICE_SHC, DEVICE_SHCA, DEVICE_PSS, DEVICE_PSSO,
|
public static final Set<String> SUPPORTED_DEVICES = Set.of(DEVICE_SHC, DEVICE_SHCA, DEVICE_PSS, DEVICE_PSSO,
|
||||||
DEVICE_BT_PSS, DEVICE_VARIABLE_ACTUATOR, DEVICE_RST, DEVICE_RST2, DEVICE_WRT, DEVICE_WDS, DEVICE_ISS2,
|
DEVICE_BT_PSS, DEVICE_VARIABLE_ACTUATOR, DEVICE_RST, DEVICE_RST2, DEVICE_WRT, DEVICE_WDS, DEVICE_ISS2,
|
||||||
DEVICE_WSD, DEVICE_WSD2, DEVICE_WMD, DEVICE_WMDO, DEVICE_WSC2, DEVICE_BRC8, DEVICE_ISC2, DEVICE_ISD2,
|
DEVICE_WSD, DEVICE_WSD2, DEVICE_SIR, DEVICE_WMD, DEVICE_WMDO, DEVICE_WSC2, DEVICE_BRC8, DEVICE_ISC2,
|
||||||
DEVICE_ISR2, DEVICE_PSD, DEVICE_ANALOG_METER, DEVICE_GENERATION_METER, DEVICE_SMART_METER,
|
DEVICE_ISD2, DEVICE_ISR2, DEVICE_PSD, DEVICE_ANALOG_METER, DEVICE_GENERATION_METER, DEVICE_SMART_METER,
|
||||||
DEVICE_TWO_WAY_METER);
|
DEVICE_TWO_WAY_METER);
|
||||||
|
|
||||||
public static final Set<String> BATTERY_POWERED_DEVICES = Set.of(DEVICE_ISC2, DEVICE_RST, DEVICE_RST2, DEVICE_WRT,
|
public static final Set<String> BATTERY_POWERED_DEVICES = Set.of(DEVICE_ISC2, DEVICE_RST, DEVICE_RST2, DEVICE_WRT,
|
||||||
DEVICE_WDS, DEVICE_WSD, DEVICE_WSD2, DEVICE_WMD, DEVICE_WMDO, DEVICE_WSC2, DEVICE_BRC8);
|
DEVICE_WDS, DEVICE_WSD, DEVICE_WSD2, DEVICE_SIR, DEVICE_WMD, DEVICE_WMDO, DEVICE_WSC2, DEVICE_BRC8);
|
||||||
|
|
||||||
// List of all Thing Type UIDs
|
// List of all Thing Type UIDs
|
||||||
public static final ThingTypeUID THING_TYPE_BRIDGE = new ThingTypeUID(BINDING_ID, "bridge");
|
public static final ThingTypeUID THING_TYPE_BRIDGE = new ThingTypeUID(BINDING_ID, "bridge");
|
||||||
|
@ -109,6 +110,7 @@ public class LivisiBindingConstants {
|
||||||
public static final ThingTypeUID THING_TYPE_ISS2 = new ThingTypeUID(BINDING_ID, DEVICE_ISS2);
|
public static final ThingTypeUID THING_TYPE_ISS2 = new ThingTypeUID(BINDING_ID, DEVICE_ISS2);
|
||||||
public static final ThingTypeUID THING_TYPE_WSD = new ThingTypeUID(BINDING_ID, DEVICE_WSD);
|
public static final ThingTypeUID THING_TYPE_WSD = new ThingTypeUID(BINDING_ID, DEVICE_WSD);
|
||||||
public static final ThingTypeUID THING_TYPE_WSD2 = new ThingTypeUID(BINDING_ID, DEVICE_WSD2);
|
public static final ThingTypeUID THING_TYPE_WSD2 = new ThingTypeUID(BINDING_ID, DEVICE_WSD2);
|
||||||
|
public static final ThingTypeUID THING_TYPE_SIR = new ThingTypeUID(BINDING_ID, DEVICE_SIR);
|
||||||
public static final ThingTypeUID THING_TYPE_WMD = new ThingTypeUID(BINDING_ID, DEVICE_WMD);
|
public static final ThingTypeUID THING_TYPE_WMD = new ThingTypeUID(BINDING_ID, DEVICE_WMD);
|
||||||
public static final ThingTypeUID THING_TYPE_WMDO = new ThingTypeUID(BINDING_ID, DEVICE_WMDO);
|
public static final ThingTypeUID THING_TYPE_WMDO = new ThingTypeUID(BINDING_ID, DEVICE_WMDO);
|
||||||
public static final ThingTypeUID THING_TYPE_WSC2 = new ThingTypeUID(BINDING_ID, DEVICE_WSC2);
|
public static final ThingTypeUID THING_TYPE_WSC2 = new ThingTypeUID(BINDING_ID, DEVICE_WSC2);
|
||||||
|
@ -125,9 +127,10 @@ public class LivisiBindingConstants {
|
||||||
|
|
||||||
public static final Set<ThingTypeUID> SUPPORTED_DEVICE_THING_TYPES = Set.of(THING_TYPE_PSS, THING_TYPE_PSSO,
|
public static final Set<ThingTypeUID> SUPPORTED_DEVICE_THING_TYPES = Set.of(THING_TYPE_PSS, THING_TYPE_PSSO,
|
||||||
THING_TYPE_BT_PSS, THING_TYPE_VARIABLE_ACTUATOR, THING_TYPE_RST, THING_TYPE_RST2, THING_TYPE_WRT,
|
THING_TYPE_BT_PSS, THING_TYPE_VARIABLE_ACTUATOR, THING_TYPE_RST, THING_TYPE_RST2, THING_TYPE_WRT,
|
||||||
THING_TYPE_WDS, THING_TYPE_ISS2, THING_TYPE_WSD, THING_TYPE_WSD2, THING_TYPE_WMD, THING_TYPE_WMDO,
|
THING_TYPE_WDS, THING_TYPE_ISS2, THING_TYPE_WSD, THING_TYPE_WSD2, THING_TYPE_SIR, THING_TYPE_WMD,
|
||||||
THING_TYPE_WSC2, THING_TYPE_BRC8, THING_TYPE_ISC2, THING_TYPE_ISD2, THING_TYPE_ISR2, THING_TYPE_PSD,
|
THING_TYPE_WMDO, THING_TYPE_WSC2, THING_TYPE_BRC8, THING_TYPE_ISC2, THING_TYPE_ISD2, THING_TYPE_ISR2,
|
||||||
THING_TYPE_ANALOG_METER, THING_TYPE_GENERATION_METER, THING_TYPE_SMART_METER, THING_TYPE_TWO_WAY_METER);
|
THING_TYPE_PSD, THING_TYPE_ANALOG_METER, THING_TYPE_GENERATION_METER, THING_TYPE_SMART_METER,
|
||||||
|
THING_TYPE_TWO_WAY_METER);
|
||||||
|
|
||||||
public static final Set<ThingTypeUID> SUPPORTED_THING_TYPES = Stream
|
public static final Set<ThingTypeUID> SUPPORTED_THING_TYPES = Stream
|
||||||
.concat(Stream.of(THING_TYPE_BRIDGE), SUPPORTED_DEVICE_THING_TYPES.stream()).collect(Collectors.toSet());
|
.concat(Stream.of(THING_TYPE_BRIDGE), SUPPORTED_DEVICE_THING_TYPES.stream()).collect(Collectors.toSet());
|
||||||
|
@ -140,6 +143,9 @@ public class LivisiBindingConstants {
|
||||||
public static final String CHANNEL_CONTACT = "contact";
|
public static final String CHANNEL_CONTACT = "contact";
|
||||||
public static final String CHANNEL_SMOKE = "smoke";
|
public static final String CHANNEL_SMOKE = "smoke";
|
||||||
public static final String CHANNEL_ALARM = "alarm";
|
public static final String CHANNEL_ALARM = "alarm";
|
||||||
|
public static final String CHANNEL_SIREN_ALARM = "sirenAlarm";
|
||||||
|
public static final String CHANNEL_SIREN_NOTIFICATION = "sirenNotification";
|
||||||
|
public static final String CHANNEL_SIREN_FEEDBACK = "sirenFeedback";
|
||||||
public static final String CHANNEL_MOTION_COUNT = "motionCount";
|
public static final String CHANNEL_MOTION_COUNT = "motionCount";
|
||||||
public static final String CHANNEL_LUMINANCE = "luminance";
|
public static final String CHANNEL_LUMINANCE = "luminance";
|
||||||
public static final String CHANNEL_OPERATION_MODE = "operationMode";
|
public static final String CHANNEL_OPERATION_MODE = "operationMode";
|
||||||
|
|
|
@ -297,6 +297,14 @@ public class LivisiClient {
|
||||||
new StateActionSetterDTO(capabilityId, CapabilityDTO.TYPE_ALARMACTUATOR, alarmState));
|
new StateActionSetterDTO(capabilityId, CapabilityDTO.TYPE_ALARMACTUATOR, alarmState));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Sets the siren state.
|
||||||
|
*/
|
||||||
|
public void setSirenActuatorState(final String capabilityId, final String activeChannel) throws IOException {
|
||||||
|
executePost(createActionURL(),
|
||||||
|
new StateActionSetterDTO(capabilityId, CapabilityDTO.TYPE_SIRENACTUATOR, activeChannel));
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Load the device and returns a {@link List} of {@link DeviceDTO}s.
|
* Load the device and returns a {@link List} of {@link DeviceDTO}s.
|
||||||
* VariableActuators are returned additionally (independent from the device ids),
|
* VariableActuators are returned additionally (independent from the device ids),
|
||||||
|
|
|
@ -28,6 +28,7 @@ public class ActionParamsDTO {
|
||||||
private IntegerActionParamDTO shutterLevel;
|
private IntegerActionParamDTO shutterLevel;
|
||||||
private StringActionParamDTO operationMode;
|
private StringActionParamDTO operationMode;
|
||||||
private StringActionParamDTO rampDirection;
|
private StringActionParamDTO rampDirection;
|
||||||
|
private StringActionParamDTO activeChannel;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @return the onState
|
* @return the onState
|
||||||
|
@ -126,4 +127,18 @@ public class ActionParamsDTO {
|
||||||
public void setRampDirection(StringActionParamDTO rampDirection) {
|
public void setRampDirection(StringActionParamDTO rampDirection) {
|
||||||
this.rampDirection = rampDirection;
|
this.rampDirection = rampDirection;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @return the activeChannel
|
||||||
|
*/
|
||||||
|
public StringActionParamDTO getActiveChannel() {
|
||||||
|
return activeChannel;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param activeChannel the operationMode to set
|
||||||
|
*/
|
||||||
|
public void setActiveChannel(StringActionParamDTO activeChannel) {
|
||||||
|
this.activeChannel = activeChannel;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -31,22 +31,22 @@ public class StateActionSetterDTO extends ActionDTO {
|
||||||
* @param capabilityId String of the 32 character capability id
|
* @param capabilityId String of the 32 character capability id
|
||||||
* @param capabilityType the type of the {@link CapabilityDTO}, {@link CapabilityDTO#TYPE_SWITCHACTUATOR} or
|
* @param capabilityType the type of the {@link CapabilityDTO}, {@link CapabilityDTO#TYPE_SWITCHACTUATOR} or
|
||||||
* {@link CapabilityDTO#TYPE_VARIABLEACTUATOR}
|
* {@link CapabilityDTO#TYPE_VARIABLEACTUATOR}
|
||||||
* @param state the new state as boolean (true=on, false=off)
|
* @param newState the new newState as boolean (true=on, false=off)
|
||||||
*/
|
*/
|
||||||
public StateActionSetterDTO(String capabilityId, String capabilityType, boolean state) {
|
public StateActionSetterDTO(String capabilityId, String capabilityType, boolean newState) {
|
||||||
setType(ACTION_TYPE_SETSTATE);
|
setType(ACTION_TYPE_SETSTATE);
|
||||||
setTargetCapabilityById(capabilityId);
|
setTargetCapabilityById(capabilityId);
|
||||||
final ActionParamsDTO params = new ActionParamsDTO();
|
final ActionParamsDTO params = new ActionParamsDTO();
|
||||||
|
|
||||||
if (CapabilityDTO.TYPE_SWITCHACTUATOR.equals(capabilityType)) {
|
if (CapabilityDTO.TYPE_SWITCHACTUATOR.equals(capabilityType)) {
|
||||||
params.setOnState(new BooleanActionParamDTO(CONSTANT, state));
|
params.setOnState(new BooleanActionParamDTO(CONSTANT, newState));
|
||||||
} else if (CapabilityDTO.TYPE_VARIABLEACTUATOR.equals(capabilityType)) {
|
} else if (CapabilityDTO.TYPE_VARIABLEACTUATOR.equals(capabilityType)) {
|
||||||
params.setValue(new BooleanActionParamDTO(CONSTANT, state));
|
params.setValue(new BooleanActionParamDTO(CONSTANT, newState));
|
||||||
} else if (CapabilityDTO.TYPE_ALARMACTUATOR.equals(capabilityType)) {
|
} else if (CapabilityDTO.TYPE_ALARMACTUATOR.equals(capabilityType)) {
|
||||||
params.setOnState(new BooleanActionParamDTO(CONSTANT, state));
|
params.setOnState(new BooleanActionParamDTO(CONSTANT, newState));
|
||||||
} else if (CapabilityDTO.TYPE_THERMOSTATACTUATOR.equals(capabilityType)) {
|
} else if (CapabilityDTO.TYPE_THERMOSTATACTUATOR.equals(capabilityType)) {
|
||||||
final String operationMode;
|
final String operationMode;
|
||||||
if (state) {
|
if (newState) {
|
||||||
operationMode = CapabilityStateDTO.STATE_VALUE_OPERATION_MODE_AUTO;
|
operationMode = CapabilityStateDTO.STATE_VALUE_OPERATION_MODE_AUTO;
|
||||||
} else {
|
} else {
|
||||||
operationMode = CapabilityStateDTO.STATE_VALUE_OPERATION_MODE_MANUAL;
|
operationMode = CapabilityStateDTO.STATE_VALUE_OPERATION_MODE_MANUAL;
|
||||||
|
@ -56,6 +56,17 @@ public class StateActionSetterDTO extends ActionDTO {
|
||||||
setParams(params);
|
setParams(params);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public StateActionSetterDTO(String capabilityId, String capabilityType, String newState) {
|
||||||
|
setType(ACTION_TYPE_SETSTATE);
|
||||||
|
setTargetCapabilityById(capabilityId);
|
||||||
|
final ActionParamsDTO params = new ActionParamsDTO();
|
||||||
|
|
||||||
|
if (CapabilityDTO.TYPE_SIRENACTUATOR.equals(capabilityType)) {
|
||||||
|
params.setActiveChannel(new StringActionParamDTO(CONSTANT, newState));
|
||||||
|
}
|
||||||
|
setParams(params);
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Constructs a new {@link StateActionSetterDTO}.
|
* Constructs a new {@link StateActionSetterDTO}.
|
||||||
*
|
*
|
||||||
|
|
|
@ -29,6 +29,7 @@ public class CapabilityDTO {
|
||||||
public static final String TYPE_WINDOWDOORSENSOR = "WindowDoorSensor";
|
public static final String TYPE_WINDOWDOORSENSOR = "WindowDoorSensor";
|
||||||
public static final String TYPE_SMOKEDETECTORSENSOR = "SmokeDetectorSensor";
|
public static final String TYPE_SMOKEDETECTORSENSOR = "SmokeDetectorSensor";
|
||||||
public static final String TYPE_ALARMACTUATOR = "AlarmActuator";
|
public static final String TYPE_ALARMACTUATOR = "AlarmActuator";
|
||||||
|
public static final String TYPE_SIRENACTUATOR = "SirenActuator";
|
||||||
public static final String TYPE_MOTIONDETECTIONSENSOR = "MotionDetectionSensor";
|
public static final String TYPE_MOTIONDETECTIONSENSOR = "MotionDetectionSensor";
|
||||||
public static final String TYPE_LUMINANCESENSOR = "LuminanceSensor";
|
public static final String TYPE_LUMINANCESENSOR = "LuminanceSensor";
|
||||||
public static final String TYPE_PUSHBUTTONSENSOR = "PushButtonSensor";
|
public static final String TYPE_PUSHBUTTONSENSOR = "PushButtonSensor";
|
||||||
|
@ -221,6 +222,15 @@ public class CapabilityDTO {
|
||||||
return TYPE_ALARMACTUATOR.equals(getType());
|
return TYPE_ALARMACTUATOR.equals(getType());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns true, if the {@link CapabilityDTO} is of type SirenActuator.
|
||||||
|
*
|
||||||
|
* @return true if it is an SirenActuator, otherwise false
|
||||||
|
*/
|
||||||
|
public boolean isTypeSirenActuator() {
|
||||||
|
return TYPE_SIRENACTUATOR.equals(getType());
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Returns true, if the {@link CapabilityDTO} is of type MotionDetectionSensor.
|
* Returns true, if the {@link CapabilityDTO} is of type MotionDetectionSensor.
|
||||||
*
|
*
|
||||||
|
|
|
@ -164,6 +164,14 @@ public class CapabilityStateDTO {
|
||||||
getState().getOnState().setValue(on);
|
getState().getOnState().setValue(on);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public String getSirenActuatorState() {
|
||||||
|
return getState().getActiveChannelState().getValue();
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setSirenActuatorState(final String activeChannel) {
|
||||||
|
getState().getActiveChannelState().setValue(activeChannel);
|
||||||
|
}
|
||||||
|
|
||||||
public Integer getMotionDetectionSensorState() {
|
public Integer getMotionDetectionSensorState() {
|
||||||
return getState().getMotionDetectedCountState().getValue();
|
return getState().getMotionDetectedCountState().getValue();
|
||||||
}
|
}
|
||||||
|
|
|
@ -26,6 +26,7 @@ public class EventPropertiesDTO {
|
||||||
/** Writable capability properties **/
|
/** Writable capability properties **/
|
||||||
private Integer dimLevel;
|
private Integer dimLevel;
|
||||||
private Boolean onState;
|
private Boolean onState;
|
||||||
|
private String activeChannel;
|
||||||
private String operationMode;
|
private String operationMode;
|
||||||
private String operationStatus;
|
private String operationStatus;
|
||||||
private Double pointTemperature;
|
private Double pointTemperature;
|
||||||
|
@ -128,6 +129,20 @@ public class EventPropertiesDTO {
|
||||||
this.onState = onState;
|
this.onState = onState;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @return the activeChannel
|
||||||
|
*/
|
||||||
|
public String getActiveChannel() {
|
||||||
|
return activeChannel;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param activeChannel the activeChannel to set
|
||||||
|
*/
|
||||||
|
public void setActiveChannel(final String activeChannel) {
|
||||||
|
this.activeChannel = activeChannel;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @return the operationMode
|
* @return the operationMode
|
||||||
*/
|
*/
|
||||||
|
|
|
@ -761,6 +761,18 @@ public class LivisiBridgeHandler extends BaseBridgeHandler
|
||||||
(capabilityId) -> client.setAlarmActuatorState(capabilityId, alarmState));
|
(capabilityId) -> client.setAlarmActuatorState(capabilityId, alarmState));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Sends the command to turn the siren of the {@link DeviceDTO} with the given id on or off. Is called by the
|
||||||
|
* {@link LivisiDeviceHandler} for siren {@link DeviceDTO}s like SIR.
|
||||||
|
*
|
||||||
|
* @param deviceId device id
|
||||||
|
* @param sirenState siren state (boolean)
|
||||||
|
*/
|
||||||
|
public void commandSwitchSiren(final String deviceId, final String sirenState) {
|
||||||
|
executeCommand(deviceId, CapabilityDTO.TYPE_SIRENACTUATOR,
|
||||||
|
(capabilityId) -> client.setSirenActuatorState(capabilityId, sirenState));
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Sends the command to set the operation mode of the {@link DeviceDTO} with the given deviceId to auto (or manual,
|
* Sends the command to set the operation mode of the {@link DeviceDTO} with the given deviceId to auto (or manual,
|
||||||
* if
|
* if
|
||||||
|
|
|
@ -68,6 +68,10 @@ public class LivisiDeviceHandler extends BaseThingHandler implements DeviceStatu
|
||||||
private static final int MAX_TEMPERATURE_CELSIUS = 30;
|
private static final int MAX_TEMPERATURE_CELSIUS = 30;
|
||||||
private static final String LONG_PRESS = "LongPress";
|
private static final String LONG_PRESS = "LongPress";
|
||||||
private static final String SHORT_PRESS = "ShortPress";
|
private static final String SHORT_PRESS = "ShortPress";
|
||||||
|
private static final String SIREN_ALARM = "Alarm";
|
||||||
|
private static final String SIREN_NOTIFICATION = "Notification";
|
||||||
|
private static final String SIREN_FEEDBACK = "Feedback";
|
||||||
|
private static final String SIREN_NONE = "None";
|
||||||
|
|
||||||
private final Logger logger = LoggerFactory.getLogger(LivisiDeviceHandler.class);
|
private final Logger logger = LoggerFactory.getLogger(LivisiDeviceHandler.class);
|
||||||
private final Object lock = new Object();
|
private final Object lock = new Object();
|
||||||
|
@ -120,6 +124,12 @@ public class LivisiDeviceHandler extends BaseThingHandler implements DeviceStatu
|
||||||
commandSetOperationMode(command, bridgeHandler);
|
commandSetOperationMode(command, bridgeHandler);
|
||||||
} else if (CHANNEL_ALARM.equals(channelUID.getId())) {
|
} else if (CHANNEL_ALARM.equals(channelUID.getId())) {
|
||||||
commandSwitchAlarm(command, bridgeHandler);
|
commandSwitchAlarm(command, bridgeHandler);
|
||||||
|
} else if (CHANNEL_SIREN_ALARM.equals(channelUID.getId())) {
|
||||||
|
commandSwitchSiren(command, SIREN_ALARM, bridgeHandler);
|
||||||
|
} else if (CHANNEL_SIREN_NOTIFICATION.equals(channelUID.getId())) {
|
||||||
|
commandSwitchSiren(command, SIREN_NOTIFICATION, bridgeHandler);
|
||||||
|
} else if (CHANNEL_SIREN_FEEDBACK.equals(channelUID.getId())) {
|
||||||
|
commandSwitchSiren(command, SIREN_FEEDBACK, bridgeHandler);
|
||||||
} else {
|
} else {
|
||||||
logger.debug("UNSUPPORTED channel {} for device {}.", channelUID.getId(), deviceId);
|
logger.debug("UNSUPPORTED channel {} for device {}.", channelUID.getId(), deviceId);
|
||||||
}
|
}
|
||||||
|
@ -214,6 +224,14 @@ public class LivisiDeviceHandler extends BaseThingHandler implements DeviceStatu
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void commandSwitchSiren(Command command, String notificationSound, LivisiBridgeHandler bridgeHandler) {
|
||||||
|
if (command instanceof OnOffType && OnOffType.ON.equals(command)) {
|
||||||
|
bridgeHandler.commandSwitchSiren(deviceId, notificationSound);
|
||||||
|
} else {
|
||||||
|
bridgeHandler.commandSwitchSiren(deviceId, SIREN_NONE);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void initialize() {
|
public void initialize() {
|
||||||
logger.debug("Initializing LIVISI SmartHome device handler.");
|
logger.debug("Initializing LIVISI SmartHome device handler.");
|
||||||
|
@ -473,6 +491,10 @@ public class LivisiDeviceHandler extends BaseThingHandler implements DeviceStatu
|
||||||
} else if (capability.isTypeAlarmActuator()) {
|
} else if (capability.isTypeAlarmActuator()) {
|
||||||
capabilityState.setAlarmActuatorState(event.getProperties().getOnState());
|
capabilityState.setAlarmActuatorState(event.getProperties().getOnState());
|
||||||
|
|
||||||
|
// SirenActuator
|
||||||
|
} else if (capability.isTypeSirenActuator()) {
|
||||||
|
capabilityState.setSirenActuatorState(event.getProperties().getActiveChannel());
|
||||||
|
|
||||||
// MotionDetectionSensor
|
// MotionDetectionSensor
|
||||||
} else if (capability.isTypeMotionDetectionSensor()) {
|
} else if (capability.isTypeMotionDetectionSensor()) {
|
||||||
capabilityState.setMotionDetectionSensorState(event.getProperties().getMotionDetectedCount());
|
capabilityState.setMotionDetectionSensorState(event.getProperties().getMotionDetectedCount());
|
||||||
|
@ -638,6 +660,9 @@ public class LivisiDeviceHandler extends BaseThingHandler implements DeviceStatu
|
||||||
case CapabilityDTO.TYPE_ALARMACTUATOR:
|
case CapabilityDTO.TYPE_ALARMACTUATOR:
|
||||||
updateAlarmActuatorChannels(capability);
|
updateAlarmActuatorChannels(capability);
|
||||||
break;
|
break;
|
||||||
|
case CapabilityDTO.TYPE_SIRENACTUATOR:
|
||||||
|
updateSirenActuatorChannels(capability);
|
||||||
|
break;
|
||||||
case CapabilityDTO.TYPE_MOTIONDETECTIONSENSOR:
|
case CapabilityDTO.TYPE_MOTIONDETECTIONSENSOR:
|
||||||
updateMotionDetectionSensorChannels(capability);
|
updateMotionDetectionSensorChannels(capability);
|
||||||
break;
|
break;
|
||||||
|
@ -812,6 +837,30 @@ public class LivisiDeviceHandler extends BaseThingHandler implements DeviceStatu
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void updateSirenActuatorChannels(CapabilityDTO capability) {
|
||||||
|
final String sirenState = capability.getCapabilityState().getSirenActuatorState();
|
||||||
|
if (sirenState != null) {
|
||||||
|
switch (sirenState) {
|
||||||
|
case SIREN_ALARM:
|
||||||
|
updateState(CHANNEL_SIREN_ALARM, OnOffType.ON);
|
||||||
|
break;
|
||||||
|
case SIREN_NOTIFICATION:
|
||||||
|
updateState(CHANNEL_SIREN_NOTIFICATION, OnOffType.ON);
|
||||||
|
break;
|
||||||
|
case SIREN_FEEDBACK:
|
||||||
|
updateState(CHANNEL_SIREN_FEEDBACK, OnOffType.ON);
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
// "None" and everything else switches the siren sound off
|
||||||
|
updateState(CHANNEL_SIREN_ALARM, OnOffType.OFF);
|
||||||
|
updateState(CHANNEL_SIREN_NOTIFICATION, OnOffType.OFF);
|
||||||
|
updateState(CHANNEL_SIREN_FEEDBACK, OnOffType.OFF);
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
logStateNull(capability);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
private void updateMotionDetectionSensorChannels(CapabilityDTO capability) {
|
private void updateMotionDetectionSensorChannels(CapabilityDTO capability) {
|
||||||
final Integer motionCount = capability.getCapabilityState().getMotionDetectionSensorState();
|
final Integer motionCount = capability.getCapabilityState().getMotionDetectionSensorState();
|
||||||
if (motionCount != null) {
|
if (motionCount != null) {
|
||||||
|
|
|
@ -0,0 +1,26 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<thing:thing-descriptions bindingId="livisismarthome"
|
||||||
|
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
||||||
|
xmlns:thing="https://openhab.org/schemas/thing-description/v1.0.0"
|
||||||
|
xsi:schemaLocation="https://openhab.org/schemas/thing-description/v1.0.0 https://openhab.org/schemas/thing-description-1.0.0.xsd">
|
||||||
|
|
||||||
|
<thing-type id="SIR">
|
||||||
|
<supported-bridge-type-refs>
|
||||||
|
<bridge-type-ref id="bridge"/>
|
||||||
|
</supported-bridge-type-refs>
|
||||||
|
|
||||||
|
<label>Wall Mounted Siren Indoor (SIR)</label>
|
||||||
|
<description>A battery powered indoor siren.</description>
|
||||||
|
|
||||||
|
<channels>
|
||||||
|
<channel id="sirenAlarm" typeId="sirenAlarmActuator"/>
|
||||||
|
<channel id="sirenNotification" typeId="sirenNotificationActuator"/>
|
||||||
|
<channel id="sirenFeedback" typeId="sirenFeedbackActuator"/>
|
||||||
|
<channel id="batteryLow" typeId="system.low-battery"/>
|
||||||
|
</channels>
|
||||||
|
|
||||||
|
<representation-property>id</representation-property>
|
||||||
|
|
||||||
|
<config-description-ref uri="thing-type:livisismarthome:config"/>
|
||||||
|
</thing-type>
|
||||||
|
</thing:thing-descriptions>
|
|
@ -140,6 +140,30 @@
|
||||||
<category>Alarm</category>
|
<category>Alarm</category>
|
||||||
</channel-type>
|
</channel-type>
|
||||||
|
|
||||||
|
<!-- SirenActuator Channel (Alarm) -->
|
||||||
|
<channel-type id="sirenAlarmActuator">
|
||||||
|
<item-type>Switch</item-type>
|
||||||
|
<label>Alarm</label>
|
||||||
|
<description>Switches the alarm of the siren on/off</description>
|
||||||
|
<category>Siren</category>
|
||||||
|
</channel-type>
|
||||||
|
|
||||||
|
<!-- SirenActuator Channel (Notification) -->
|
||||||
|
<channel-type id="sirenNotificationActuator">
|
||||||
|
<item-type>Switch</item-type>
|
||||||
|
<label>Notification</label>
|
||||||
|
<description>Switches the notification sound of the siren on/off</description>
|
||||||
|
<category>Siren</category>
|
||||||
|
</channel-type>
|
||||||
|
|
||||||
|
<!-- SirenActuator Channel (Feedback) -->
|
||||||
|
<channel-type id="sirenFeedbackActuator">
|
||||||
|
<item-type>Switch</item-type>
|
||||||
|
<label>Feedback</label>
|
||||||
|
<description>Switches the feedback sound of the siren on/off</description>
|
||||||
|
<category>Siren</category>
|
||||||
|
</channel-type>
|
||||||
|
|
||||||
<!-- MotionDetectionSensor Channel -->
|
<!-- MotionDetectionSensor Channel -->
|
||||||
<channel-type id="motionDetectionSensor">
|
<channel-type id="motionDetectionSensor">
|
||||||
<item-type>Number</item-type>
|
<item-type>Number</item-type>
|
||||||
|
|
Loading…
Reference in New Issue