From a620c940c79449331ab334b8676360ba5c53a9c0 Mon Sep 17 00:00:00 2001 From: Remco van Herk Date: Wed, 10 May 2023 13:10:22 +0200 Subject: [PATCH] #79 Remove motion sensor from HASS --- .../mqtt/DirigeraClientMqttApplication.java | 9 ++- .../HassMotionSensorDeviceEventHandler.java | 79 ------------------- .../motionsensor/MotionSensorConfig.java | 40 ---------- 3 files changed, 6 insertions(+), 122 deletions(-) delete mode 100644 dirigera-client-mqtt/src/main/java/de/dvdgeisler/iot/dirigera/client/mqtt/hass/HassMotionSensorDeviceEventHandler.java delete mode 100644 dirigera-client-mqtt/src/main/java/de/dvdgeisler/iot/dirigera/client/mqtt/hass/model/motionsensor/MotionSensorConfig.java diff --git a/dirigera-client-mqtt/src/main/java/de/dvdgeisler/iot/dirigera/client/mqtt/DirigeraClientMqttApplication.java b/dirigera-client-mqtt/src/main/java/de/dvdgeisler/iot/dirigera/client/mqtt/DirigeraClientMqttApplication.java index 49c7700..d56cbe6 100644 --- a/dirigera-client-mqtt/src/main/java/de/dvdgeisler/iot/dirigera/client/mqtt/DirigeraClientMqttApplication.java +++ b/dirigera-client-mqtt/src/main/java/de/dvdgeisler/iot/dirigera/client/mqtt/DirigeraClientMqttApplication.java @@ -2,9 +2,13 @@ import de.dvdgeisler.iot.dirigera.client.api.DirigeraApi; import de.dvdgeisler.iot.dirigera.client.mqtt.hass.HassLightDeviceEventHandler; -import de.dvdgeisler.iot.dirigera.client.mqtt.hass.HassMotionSensorDeviceEventHandler; import de.dvdgeisler.iot.dirigera.client.mqtt.hass.HassOutletDeviceEventHandler; -import org.eclipse.paho.client.mqttv3.*; +import org.eclipse.paho.client.mqttv3.IMqttDeliveryToken; +import org.eclipse.paho.client.mqttv3.MqttCallback; +import org.eclipse.paho.client.mqttv3.MqttClient; +import org.eclipse.paho.client.mqttv3.MqttConnectOptions; +import org.eclipse.paho.client.mqttv3.MqttException; +import org.eclipse.paho.client.mqttv3.MqttMessage; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Value; @@ -19,7 +23,6 @@ @ComponentScan(basePackageClasses = { DirigeraApi.class, HassLightDeviceEventHandler.class, - HassMotionSensorDeviceEventHandler.class, HassOutletDeviceEventHandler.class}) public class DirigeraClientMqttApplication implements MqttCallback { private final static Logger log = LoggerFactory.getLogger(DirigeraClientMqttApplication.class); diff --git a/dirigera-client-mqtt/src/main/java/de/dvdgeisler/iot/dirigera/client/mqtt/hass/HassMotionSensorDeviceEventHandler.java b/dirigera-client-mqtt/src/main/java/de/dvdgeisler/iot/dirigera/client/mqtt/hass/HassMotionSensorDeviceEventHandler.java deleted file mode 100644 index bb13b90..0000000 --- a/dirigera-client-mqtt/src/main/java/de/dvdgeisler/iot/dirigera/client/mqtt/hass/HassMotionSensorDeviceEventHandler.java +++ /dev/null @@ -1,79 +0,0 @@ -package de.dvdgeisler.iot.dirigera.client.mqtt.hass; - -import com.fasterxml.jackson.databind.ObjectMapper; -import de.dvdgeisler.iot.dirigera.client.api.DirigeraApi; -import de.dvdgeisler.iot.dirigera.client.api.MotionSensorDeviceApi; -import de.dvdgeisler.iot.dirigera.client.api.model.device.motionsensor.MotionSensorDevice; -import de.dvdgeisler.iot.dirigera.client.mqtt.hass.model.DeviceAvailability; -import de.dvdgeisler.iot.dirigera.client.mqtt.hass.model.DeviceAvailabilityState; -import de.dvdgeisler.iot.dirigera.client.mqtt.hass.model.DeviceState; -import de.dvdgeisler.iot.dirigera.client.mqtt.hass.model.outlet.OutletConfig; -import org.eclipse.paho.client.mqttv3.MqttClient; -import org.springframework.beans.factory.annotation.Value; -import org.springframework.stereotype.Component; - -import java.util.Optional; - -@Component -public class HassMotionSensorDeviceEventHandler extends HassDeviceEventHandler { - private final static String HASS_COMPONENT = "binary_sensor"; - - private final MotionSensorDeviceApi api; - - public HassMotionSensorDeviceEventHandler( - final MqttClient mqtt, - final DirigeraApi api, - @Value("${dirigera.mqtt.hass.prefix:homeassistant}") - final String topicPrefix, - final ObjectMapper objectMapper) { - super(mqtt, api, MotionSensorDevice.class, topicPrefix, objectMapper); - - this.api = api.device.motionSensor; - this.api.all() - .block() - .forEach(this::onDeviceCreated); - } - - @Override - protected void onDeviceCreated(final MotionSensorDevice device) { - final OutletConfig config; - - config = new OutletConfig(); - config.unique_id = config.object_id = device.id; - config.name = getDefaultName(device); - config.device = this.getDeviceConfig(device); - config.command_topic = this.getTopic(device, HASS_COMPONENT, TOPIC_SET); - config.state_topic = this.getTopic(device, HASS_COMPONENT, TOPIC_STATE); - config.payload_on = config.state_on = this.toJSON(DeviceState.ON); - config.payload_off = config.state_off = this.toJSON(DeviceState.OFF); - - config.availability = new DeviceAvailability(); - config.availability.topic = this.getTopic(device, HASS_COMPONENT, TOPIC_AVAILABILITY); - config.availability.payload_available = this.toJSON(DeviceAvailabilityState.ONLINE); - config.availability.payload_not_available = this.toJSON(DeviceAvailabilityState.OFFLINE); - this.publish(this.getTopic(device, HASS_COMPONENT, TOPIC_CONFIG), config); - - this.onDeviceStateChanged(device); - } - - @Override - protected void onDeviceStateChanged(final MotionSensorDevice device) { - getState(device).ifPresent(state -> - this.publish(this.getTopic(device, HASS_COMPONENT, TOPIC_STATE), state)); - getAvailability(device).ifPresent(s -> - this.publish(this.getTopic(device, HASS_COMPONENT, TOPIC_AVAILABILITY), s)); - } - - @Override - protected void onDeviceRemoved(final MotionSensorDevice device) { - this.publish(this.getTopic(device, HASS_COMPONENT, TOPIC_AVAILABILITY), DeviceAvailabilityState.OFFLINE); - this.publish(this.getTopic(device, HASS_COMPONENT, TOPIC_REMOVE), null); - } - - public static Optional getState(final MotionSensorDevice device) { - return Optional.of(device) - .map(d -> d.attributes) - .map(d -> d.isOn) - .map(d -> d ? DeviceState.ON : DeviceState.OFF); - } -} diff --git a/dirigera-client-mqtt/src/main/java/de/dvdgeisler/iot/dirigera/client/mqtt/hass/model/motionsensor/MotionSensorConfig.java b/dirigera-client-mqtt/src/main/java/de/dvdgeisler/iot/dirigera/client/mqtt/hass/model/motionsensor/MotionSensorConfig.java deleted file mode 100644 index 81df373..0000000 --- a/dirigera-client-mqtt/src/main/java/de/dvdgeisler/iot/dirigera/client/mqtt/hass/model/motionsensor/MotionSensorConfig.java +++ /dev/null @@ -1,40 +0,0 @@ -package de.dvdgeisler.iot.dirigera.client.mqtt.hass.model.motionsensor; - -import com.fasterxml.jackson.annotation.JsonInclude; -import de.dvdgeisler.iot.dirigera.client.mqtt.hass.model.Device; -import de.dvdgeisler.iot.dirigera.client.mqtt.hass.model.DeviceAvailability; - -@JsonInclude(JsonInclude.Include.NON_NULL) -public class MotionSensorConfig { - public String object_id; - public String unique_id; - public String name; - public Device device; - public String payload_on; - public String payload_off; - public String state_topic; - - public DeviceAvailability availability; - - public MotionSensorConfig( - final String object_id, - final String unique_id, - final String name, - final Device device, - final String payload_on, - final String payload_off, - final String state_topic, - final DeviceAvailability availability) { - this.object_id = object_id; - this.unique_id = unique_id; - this.name = name; - this.device = device; - this.payload_on = payload_on; - this.payload_off = payload_off; - this.state_topic = state_topic; - this.availability = availability; - } - - public MotionSensorConfig() { - } -}