diff --git a/src/amcrest2mqtt/mixins/amcrest.py b/src/amcrest2mqtt/mixins/amcrest.py index 8ef6715..b82d89b 100644 --- a/src/amcrest2mqtt/mixins/amcrest.py +++ b/src/amcrest2mqtt/mixins/amcrest.py @@ -78,6 +78,14 @@ class AmcrestMixin: "serial_number": device["serial_number"], }, } + if "webrtc" in self.amcrest_config: + webrtc_config = self.amcrest_config["webrtc"] + rtc_host = webrtc_config["host"] + rtc_port = webrtc_config["port"] + rtc_link = webrtc_config["link"] + rtc_source = webrtc_config["sources"].pop(0) + rtc_url = f"http://{rtc_host}:{rtc_port}/{rtc_link}?src={rtc_source}" + component["url_topic"] = rtc_url modes = {} device_block = self.get_device_block( @@ -87,20 +95,14 @@ class AmcrestMixin: device["device_type"], ) - if "webrtc" in self.amcrest_config: - webrtc_config = self.amcrest_config["webrtc"] - rtc_host = webrtc_config["host"] - rtc_port = webrtc_config["port"] - rtc_link = webrtc_config["link"] - rtc_source = webrtc_config["sources"].pop(0) - rtc_url = f"http://{rtc_host}:{rtc_port}/{rtc_link}?src={rtc_source}" modes["snapshot"] = { - "component_type": "camera", + "component_type": "image", "name": "Snapshot", "uniq_id": f"{self.service_slug}_{self.get_device_slug(device_id, 'snapshot')}", "topic": self.get_state_topic(device_id, "snapshot"), "image_encoding": "b64", + "content_type": "image/jpeg", "avty_t": self.get_state_topic(device_id, "attributes"), "avty_tpl": "{{ value_json.camera }}", "json_attributes_topic": self.get_state_topic(device_id, "attributes"), @@ -108,8 +110,6 @@ class AmcrestMixin: "via_device": self.get_service_device(), "device": device_block, } - if rtc_url: - modes["snapshot"]["url_topic"] = rtc_url self.upsert_state(device_id, image={"snapshot": None}) modes["privacy"] = { @@ -278,7 +278,8 @@ class AmcrestMixin: self.upsert_state( device_id, internal={"discovered": False}, - camera={"video": None, "snapshot": None}, + camera={"video": None}, + image={"snapshot": None}, binary_sensor={ "motion": False, "doorbell": False, diff --git a/src/amcrest2mqtt/mixins/amcrest_api.py b/src/amcrest2mqtt/mixins/amcrest_api.py index b700b34..d485724 100644 --- a/src/amcrest2mqtt/mixins/amcrest_api.py +++ b/src/amcrest2mqtt/mixins/amcrest_api.py @@ -213,7 +213,7 @@ class AmcrestAPIMixin(object): encoded = encoded_b.decode("ascii") self.upsert_state( device_id, - camera={"snapshot": encoded}, + image={"snapshot": encoded}, sensor={ "event_text": "Got snapshot", "event_time": datetime.now(timezone.utc).isoformat(), diff --git a/src/amcrest2mqtt/mixins/topics.py b/src/amcrest2mqtt/mixins/topics.py index 93dcf6e..07e017c 100644 --- a/src/amcrest2mqtt/mixins/topics.py +++ b/src/amcrest2mqtt/mixins/topics.py @@ -94,8 +94,9 @@ class TopicsMixin: def get_device_state_topic(self: "Amcrest2Mqtt", device_id, mode_name=None): component = self.get_mode(device_id, mode_name) if mode_name else self.get_component(device_id) + component_type = component["component_type"] - if component["component_type"] == "camera": + if component_type in ["camera", "image"]: return component.get("topic", None) else: return component.get("stat_t", component.get("state_topic", None))