| Channel Type ID | Item Type | Description |
|---------------------|-----------|-------------------------------------------------------------------------------------------|
-| changedByUser | String | This channel reports the user that last changed the state of the alarm. |
-| changedVia | String | This channel reports the method used to change the status. |
-| timestamp | DateTime | This channel reports the last time the alarm status was changed. |
-| installationName | String | This channel reports the installation name. |
-| installationId | Number | This channel reports the installation ID. |
+| changedByUser | String | This channel reports the user that last changed the state of the alarm. |
+| changedVia | String | This channel reports the method used to change the status. |
+| timestamp | DateTime | This channel reports the last time the alarm status was changed. |
+| installationName | String | This channel reports the installation name. |
+| installationId | Number | This channel reports the installation ID. |
| alarmStatus | String | This channel is used to arm/disarm the alarm. Available alarm status are "DISARMED", "ARMED_HOME" and "ARMED_AWAY".|
-| alarmTriggerChannel | trigger | This is a trigger channel that receives events.|
+| alarmTriggerChannel | trigger | This is a trigger channel that receives events. |
### Verisure Yaleman SmartLock
| Channel Type ID | Item Type | Description |
|-------------------------|-----------|----------------------------------------------------------------------------------------------------------|
-| changedByUser | String | This channel reports the user that last changed the state of the alarm. |
+| changedByUser | String | This channel reports the user that last changed the state of the alarm. |
| timestamp | DateTime | This channel reports the last time the alarm status was changed. |
-| changedVia | String | This channel reports the method used to change the status. |
-| motorJam | Switch | This channel reports if the SmartLock motor has jammed. |
-| location | String | This channel reports the location of the device. |
+| changedVia | String | This channel reports the method used to change the status. |
+| motorJam | Switch | This channel reports if the SmartLock motor has jammed. |
+| location | String | This channel reports the location of the device. |
| installationName | String | This channel reports the installation name. |
| installationId | Number | This channel reports the installation ID. |
| smartLockStatus | Switch | This channel is used to lock/unlock. |
#### Configuration Options
* `deviceId` - Device Id
- * Sensor Id. Example 5A4C35FT (Note: Verisure ID, found in the Verisure App or My Pages or on the sensor itself)
+ * Sensor Id. Example 5A4C35FT (Note: Verisure ID, found in the Verisure App or My Pages or on the sensor itself)
#### Channels
#### Configuration Options
* `deviceId` - Device Id
- * Sensor Id. Example 5A4C35FT (Note: Verisure ID, found in the Verisure App or on the sensor itself)
+ * Sensor Id. Example 5A4C35FT (Note: Verisure ID, found in the Verisure App or on the sensor itself)
#### Channels
| Channel Type ID | Item Type | Description |
|-----------------------------|-----------------------|-----------------------------------------------------------------------------|
| temperature | Number:Temperature | This channel reports the current temperature. |
-| humidity | Number | This channel reports the current humidity in percentage. |
+| humidity | Number | This channel reports the current humidity in percentage. |
| humidityEnabled | Switch | This channel reports if the Climate is device capable of reporting humidity.|
-| timestamp | DateTime | This channel reports the last time this sensor was updated. |
+| timestamp | DateTime | This channel reports the last time this sensor was updated. |
| location | String | This channel reports the location of the device. |
| installationName | String | This channel reports the installation name. |
| installationId | Number | This channel reports the installation ID. |
-| smokeDetectorTriggerChannel | trigger | This is a trigger channel that receives events.|
+| lowBattery | Switch | This channel reports if the battery level is low. |
+| smokeDetectorTriggerChannel | trigger | This is a trigger channel that receives events. |
### Verisure Water Detector
#### Configuration Options
* `deviceId` - Device Id
- * Sensor Id. Example 5A4C35FT (Note: Verisure ID, found in the Verisure App or My Pages or on the sensor itself)
+ * Sensor Id. Example 5A4C35FT (Note: Verisure ID, found in the Verisure App or My Pages or on the sensor itself)
#### Channels
The following channels are supported:
-| Channel Type ID | Item Type | Description |
-|-----------------------------|-----------------------|--------------------------------------------------------------|
-| temperature | Number:Temperature | This channel reports the current temperature. |
+
+| Channel Type ID | Item Type | Description |
+|-----------------------------|-----------------------|--------------------------------------------------------------|
+| temperature | Number:Temperature | This channel reports the current temperature. |
| timestamp | DateTime | This channel reports the last time this sensor was updated. |
-| location | String | This channel reports the location of the device. |
-| installationName | String | This channel reports the installation name. |
-| installationId | Number | This channel reports the installation ID. |
-| waterDetectorTriggerChannel | trigger | This is a trigger channel that receives events. |
+| location | String | This channel reports the location of the device. |
+| installationName | String | This channel reports the installation name. |
+| installationId | Number | This channel reports the installation ID. |
+| waterDetectorTriggerChannel | trigger | This is a trigger channel that receives events. |
### Verisure Siren
#### Configuration Options
* `deviceId` - Device Id
- * Sensor Id. Example 5A4C35FT (Note: Verisure ID, found in the Verisure App or My Pages or on the sensor itself)
+ * Sensor Id. Example 5A4C35FT (Note: Verisure ID, found in the Verisure App or My Pages or on the sensor itself)
#### Channels
The following channels are supported:
-
-| Channel Type ID | Item Type | Description |
-|---------------------|-----------------------|------------------------------------------------------------|
-| temperature | Number:Temperature | This channel reports the current temperature. |
+
+| Channel Type ID | Item Type | Description |
+|---------------------|-----------------------|------------------------------------------------------------|
+| temperature | Number:Temperature | This channel reports the current temperature. |
| timestamp | DateTime | This channel reports the last time this sensor was updated.|
-| location | String | This channel reports the location. |
-| installationName | String | This channel reports the installation name. |
-| installationId | Number | This channel reports the installation ID. |
-| sirenTriggerChannel | trigger | This is a trigger channel that receives events. |
+| location | String | This channel reports the location. |
+| installationName | String | This channel reports the installation name. |
+| installationId | Number | This channel reports the installation ID. |
+| lowBattery | Switch | This channel reports if the battery level is low. |
+| sirenTriggerChannel | trigger | This is a trigger channel that receives events. |
### Verisure Night Control
#### Configuration Options
* `deviceId` - Device Id
- * Sensor Id. Example 5A4C35FT (Note: Verisure ID, found in the Verisure App or My Pages or on the sensor itself)
+ * Sensor Id. Example 5A4C35FT (Note: Verisure ID, found in the Verisure App or My Pages or on the sensor itself)
#### Channels
-The following channels are supported:
-
-| Channel Type ID | Item Type | Description |
-|----------------------------|-----------------------|------------------------------------------------------------|
-| temperature | Number:Temperature | This channel reports the current temperature. |
+The following channels are supported:
+| Channel Type ID | Item Type | Description |
+|----------------------------|-----------------------|------------------------------------------------------------|
+| temperature | Number:Temperature | This channel reports the current temperature. |
| timestamp | DateTime | This channel reports the last time this sensor was updated.|
-| location | String | This channel reports the location. |
-| installationName | String | This channel reports the installation name. |
-| installationId | Number | This channel reports the installation ID. |
-| nightControlTriggerChannel | trigger | This is a trigger channel that receives events. |
+| location | String | This channel reports the location. |
+| installationName | String | This channel reports the installation name. |
+| installationId | Number | This channel reports the installation ID. |
+| lowBattery | Switch | This channel reports if the battery level is low. |
+| nightControlTriggerChannel | trigger | This is a trigger channel that receives events. |
### Verisure DoorWindow Sensor
#### Configuration Options
* `deviceId` - Device Id
- * Sensor Id. Example 5A4C35FT (Note: Verisure ID, found in the Verisure App or My Pages or on the sensor itself)
+ * Sensor Id. Example 5A4C35FT (Note: Verisure ID, found in the Verisure App or My Pages or on the sensor itself)
#### Channels
| location | String | This channel reports the location of the device. |
| installationName | String | This channel reports the installation name. |
| installationId | Number | This channel reports the installation ID. |
-| doorWindowTriggerChannel | trigger | This is a trigger channel that receives events. |
+| lowBattery | Switch | This channel reports if the battery level is low. |
+| doorWindowTriggerChannel | trigger | This is a trigger channel that receives events. |
### Verisure User Presence
#### Configuration Options
* `deviceId` - Device Id
- * Since User presence lacks a Verisure ID, it is constructed from the user's email address, where the '@' sign is removed, and the site id. The following naming convention is used for User presence on site id 123456789 for a user with email address test@gmail.com: 'uptestgmailcom123456789'. Installation ID can be found using DEBUG log settings.
+ * Since User presence lacks a Verisure ID, it is constructed from the user's email address, where the '@' sign is removed, and the site id. The following naming convention is used for User presence on site id 123456789 for a user with email address test@gmail.com: 'uptestgmailcom123456789'. Installation ID can be found using DEBUG log settings.
#### Channels
#### Configuration Options
* `deviceId` - Device Id
- * Since Broadband connection lacks a Verisure ID, the following naming convention is used for Broadband connection on site id 123456789: 'bc123456789'. Installation ID can be found using DEBUG log settings.
+ * Since Broadband connection lacks a Verisure ID, the following naming convention is used for Broadband connection on site id 123456789: 'bc123456789'. Installation ID can be found using DEBUG log settings.
#### Channels
#### Configuration Options
* `deviceId` - Device Id
- * Sensor Id. Example 5A4C35FT (Note: Verisure ID, found in the Verisure App or My Pages or on the sensor itself)
+ * Sensor Id. Example 5A4C35FT (Note: Verisure ID, found in the Verisure App or My Pages or on the sensor itself)
#### Channels
The following channels are supported:
-
-| Channel Type ID | Item Type | Description |
-|-----------------------------|--------------------|-------------------------------------------------------------------------------------|
-| countLatestDetection | Number | This channel reports the number of mice counts the latest detection during last 24. |
-| countLast24Hours | Number | This channel reports the total number of mice counts the last 24h. |
+
+| Channel Type ID | Item Type | Description |
+|-----------------------------|--------------------|-------------------------------------------------------------------------------------|
+| countLatestDetection | Number | This channel reports the number of mice counts the latest detection during last 24. |
+| countLast24Hours | Number | This channel reports the total number of mice counts the last 24h. |
| durationLatestDetection | Number:Time | This channel reports the detection duration in min of latest detection. |
-| durationLast24Hours | Number:Time | This channel reports the total detection duration in min for the last 24 hours. |
-| timestamp | DateTime | This channel reports time for the last mouse detection. |
-| temperature | Number:Temperature | This channel reports the current temperature. |
-| temperatureTimestamp | DateTime | This channel reports the time for the last temperature reading. |
+| durationLast24Hours | Number:Time | This channel reports the total detection duration in min for the last 24 hours. |
+| timestamp | DateTime | This channel reports time for the last mouse detection. |
+| temperature | Number:Temperature | This channel reports the current temperature. |
+| temperatureTimestamp | DateTime | This channel reports the time for the last temperature reading. |
| location | String | This channel reports the location of the device. |
| installationName | String | This channel reports the installation name. |
| installationId | Number | This channel reports the installation ID. |
-| miceDetectionTriggerChannel | trigger | This is a trigger channel that receives events. |
+| miceDetectionTriggerChannel | trigger | This is a trigger channel that receives events. |
### Verisure Event Log
#### Configuration Options
* `deviceId` - Device Id
- * Since Event Log lacks a Verisure ID, the following naming convention is used for Event Log on site id 123456789: 'el123456789'. Installation ID can be found using DEBUG log settings.
-
+ * Since Event Log lacks a Verisure ID, the following naming convention is used for Event Log on site id 123456789: 'el123456789'. Installation ID can be found using DEBUG log settings.
#### Channels
#### Configuration Options
* `deviceId` - Device Id
- * Sensor Id. Example 3B4C35FT (Note: Verisure ID, found in the Verisure App or My Pages or on the Gateway itself)
+ * Sensor Id. Example 3B4C35FT (Note: Verisure ID, found in the Verisure App or My Pages or on the Gateway itself)
#### Channels
To be able to get trigger events you need an active Event Log thing, you can either get it via auto-detection or create your own in a things-file.
The following trigger events are defined per thing type:
-| Event | Thing Type | Description |
+| Event Type | Thing Type | Description |
|-------------------|---------------|------------------------------------------------------------|
| LOCK | SmartLock | SmartLock has been locked. |
| UNLOCK | SmartLock | SmartLock has been locked. |
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;
import org.openhab.binding.verisure.internal.dto.VerisureAlarmsDTO;
+import org.openhab.binding.verisure.internal.dto.VerisureBatteryStatusDTO;
import org.openhab.binding.verisure.internal.dto.VerisureBroadbandConnectionsDTO;
import org.openhab.binding.verisure.internal.dto.VerisureClimatesDTO;
import org.openhab.binding.verisure.internal.dto.VerisureDoorWindowsDTO;
}
}
+ private @Nullable VerisureBatteryStatusDTO getBatteryStatus(String deviceId,
+ VerisureBatteryStatusDTO @Nullable [] batteryStatus) {
+ if (batteryStatus != null) {
+ for (VerisureBatteryStatusDTO verisureBatteryStatusDTO : batteryStatus) {
+ String id = verisureBatteryStatusDTO.getId();
+ if (id != null && id.equals(deviceId)) {
+ return verisureBatteryStatusDTO;
+ }
+ }
+ }
+ return null;
+ }
+
private synchronized void updateClimateStatus(VerisureInstallation installation) {
BigDecimal installationId = installation.getInstallationId();
String url = START_GRAPHQL;
VerisureClimatesDTO thing = postJSONVerisureAPI(url, queryQLClimates, VerisureClimatesDTO.class);
logger.debug("REST Response ({})", thing);
List<VerisureClimatesDTO.Climate> climateList = thing.getData().getInstallation().getClimates();
- climateList.forEach(climate -> {
- // If thing is Mouse detection device, then skip it, but fetch temperature from it
- String type = climate.getDevice().getGui().getLabel();
- if ("MOUSE".equals(type)) {
- logger.debug("Mouse detection device!");
+ if (climateList != null) {
+ climateList.forEach(climate -> {
+ // If thing is Mouse detection device, then skip it, but fetch temperature from it
+ String type = climate.getDevice().getGui().getLabel();
+ if ("MOUSE".equals(type)) {
+ logger.debug("Mouse detection device!");
+ String deviceId = climate.getDevice().getDeviceLabel();
+ if (deviceId != null) {
+ deviceId = VerisureThingConfiguration.normalizeDeviceId(deviceId);
+ VerisureThingDTO mouseThing = verisureThings.get(deviceId);
+ if (mouseThing != null && mouseThing instanceof VerisureMiceDetectionDTO) {
+ VerisureMiceDetectionDTO miceDetectorThing = (VerisureMiceDetectionDTO) mouseThing;
+ miceDetectorThing.setTemperatureValue(climate.getTemperatureValue());
+ miceDetectorThing.setTemperatureTime(climate.getTemperatureTimestamp());
+ notifyListeners(miceDetectorThing);
+ logger.debug("Found climate thing for a Verisure Mouse Detector");
+ }
+ }
+ return;
+ }
+ VerisureClimatesDTO cThing = new VerisureClimatesDTO();
+ VerisureClimatesDTO.Installation inst = new VerisureClimatesDTO.Installation();
+ inst.setClimates(Collections.singletonList(climate));
+ VerisureClimatesDTO.Data data = new VerisureClimatesDTO.Data();
+ data.setInstallation(inst);
+ cThing.setData(data);
+ // Set unique deviceID
String deviceId = climate.getDevice().getDeviceLabel();
if (deviceId != null) {
- deviceId = VerisureThingConfiguration.normalizeDeviceId(deviceId);
- VerisureThingDTO mouseThing = verisureThings.get(deviceId);
- if (mouseThing != null && mouseThing instanceof VerisureMiceDetectionDTO) {
- VerisureMiceDetectionDTO miceDetectorThing = (VerisureMiceDetectionDTO) mouseThing;
- miceDetectorThing.setTemperatureValue(climate.getTemperatureValue());
- miceDetectorThing.setTemperatureTime(climate.getTemperatureTimestamp());
- notifyListeners(miceDetectorThing);
- logger.debug("Found climate thing for a Verisure Mouse Detector");
+ try {
+ VerisureBatteryStatusDTO[] batteryStatusThingArray = getJSONVerisureAPI(BATTERY_STATUS,
+ VerisureBatteryStatusDTO[].class);
+ VerisureBatteryStatusDTO batteryStatus = getBatteryStatus(deviceId,
+ batteryStatusThingArray);
+ if (batteryStatus != null) {
+ logger.debug("REST Response ({})", batteryStatus);
+ cThing.setBatteryStatus(batteryStatus);
+ }
+ } catch (ExecutionException | InterruptedException | TimeoutException | JsonSyntaxException e) {
+ logger.warn("Failed to query for smartlock status: {}", e.getMessage());
}
+ // Set location
+ cThing.setLocation(climate.getDevice().getArea());
+ notifyListenersIfChanged(cThing, installation, deviceId);
}
- return;
- }
- VerisureClimatesDTO cThing = new VerisureClimatesDTO();
- VerisureClimatesDTO.Installation inst = new VerisureClimatesDTO.Installation();
- inst.setClimates(Collections.singletonList(climate));
- VerisureClimatesDTO.Data data = new VerisureClimatesDTO.Data();
- data.setInstallation(inst);
- cThing.setData(data);
- // Set unique deviceID
- String deviceId = climate.getDevice().getDeviceLabel();
- if (deviceId != null) {
- // Set location
- cThing.setLocation(climate.getDevice().getArea());
- notifyListenersIfChanged(cThing, installation, deviceId);
- }
- });
+ });
+ }
} catch (ExecutionException | InterruptedException | TimeoutException | JsonSyntaxException
| PostToAPIException e) {
logger.warn("Failed to send a POST to the API {}", e.getMessage());
// Set unique deviceID
String deviceId = doorWindow.getDevice().getDeviceLabel();
if (deviceId != null) {
+ try {
+ VerisureBatteryStatusDTO[] batteryStatusThingArray = getJSONVerisureAPI(BATTERY_STATUS,
+ VerisureBatteryStatusDTO[].class);
+ VerisureBatteryStatusDTO batteryStatus = getBatteryStatus(deviceId, batteryStatusThingArray);
+ if (batteryStatus != null) {
+ logger.debug("REST Response ({})", batteryStatus);
+ dThing.setBatteryStatus(batteryStatus);
+ }
+ } catch (ExecutionException | InterruptedException | TimeoutException | JsonSyntaxException e) {
+ logger.warn("Failed to query for smartlock status: {}", e.getMessage());
+ }
// Set location
dThing.setLocation(doorWindow.getDevice().getArea());
notifyListenersIfChanged(dThing, installation, deviceId);