Skip to content

Commit

Permalink
clear out stale entities #921
Browse files Browse the repository at this point in the history
  • Loading branch information
mrlt8 committed Jul 24, 2023
1 parent 8639eb5 commit 4ba96bd
Show file tree
Hide file tree
Showing 4 changed files with 19 additions and 14 deletions.
17 changes: 11 additions & 6 deletions app/wyzebridge/mqtt.py
Original file line number Diff line number Diff line change
Expand Up @@ -53,20 +53,25 @@ def publish_discovery(cam_uri: str, cam: WyzeCamera, stopped: bool = True) -> No
},
}

# Clear out old/renamed entities
REMOVE = {"alarm": "switch"}
for entity, type in REMOVE.items():
msgs.append((f"{MQTT_DISCOVERY}/{type}/{cam.mac}/{entity}/config", None))

for entity, data in get_entities(base, cam.is_pan_cam, cam.rtsp_fw).items():
topic = f"{MQTT_DISCOVERY}/{data['type']}/{cam.mac}/{entity}/config"
if "availability_topic" not in data["payload"]:
data["payload"]["availability_topic"] = f"{MQTT_TOPIC}/state"

payload = dict(
base_payload | data["payload"],
name=f"Wyze Cam {cam.nickname} {' '.join(entity.upper().split('_'))}",
name=f"Wyze Cam {cam.nickname} {' '.join(entity.title().split('_'))}",
uniq_id=f"WYZE{cam.mac}{entity.upper()}",
)

msgs.append((topic, json.dumps(payload)))

send_mqtt(msgs)
publish_messages(msgs)


@mqtt_enabled
Expand Down Expand Up @@ -95,7 +100,7 @@ def bridge_status(client: Optional[paho.mqtt.client.Client]):


@mqtt_enabled
def send_mqtt(messages: list) -> None:
def publish_messages(messages: list) -> None:
"""Publish multiple messages to the MQTT server."""
paho.mqtt.publish.multiple(
messages,
Expand All @@ -110,7 +115,7 @@ def send_mqtt(messages: list) -> None:


@mqtt_enabled
def publish_message(topic: str, message=None, retain=True):
def publish_topic(topic: str, message=None, retain=True):
paho.mqtt.publish.single(
topic=f"{MQTT_TOPIC}/{topic}",
payload=message,
Expand All @@ -130,15 +135,15 @@ def update_mqtt_state(camera: str, state: str):
msg = [(f"{MQTT_TOPIC}/{camera}/state", state)]
if state == "online":
msg.append((f"{MQTT_TOPIC}/{camera}/power", "on"))
send_mqtt(msg)
publish_messages(msg)


@mqtt_enabled
def update_preview(cam_name: str):
with contextlib.suppress(FileNotFoundError):
img_file = f"{IMG_PATH}{cam_name}.{env_bool('IMG_TYPE','jpg')}"
with open(img_file, "rb") as img:
publish_message(f"{cam_name}/image", img.read())
publish_topic(f"{cam_name}/image", img.read())


@mqtt_enabled
Expand Down
6 changes: 3 additions & 3 deletions app/wyzebridge/stream.py
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@
from wyzebridge.config import MQTT_DISCOVERY, SNAPSHOT_INT, SNAPSHOT_TYPE
from wyzebridge.ffmpeg import rtsp_snap_cmd
from wyzebridge.logging import logger
from wyzebridge.mqtt import bridge_status, cam_control, publish_message, update_preview
from wyzebridge.mqtt import bridge_status, cam_control, publish_topic, update_preview
from wyzebridge.rtsp_event import RtspEvent


Expand Down Expand Up @@ -178,10 +178,10 @@ def send_cmd(
snap = self.get_rtsp_snap(cam_name)
if on_demand:
stream.stop()
publish_message(f"{cam_name}/{cmd}", int(time.time()) if snap else 0)
publish_topic(f"{cam_name}/{cmd}", int(time.time()) if snap else 0)
return dict(resp, status="success", value=snap, response=snap)

publish_message(f"{cam_name}/{cmd}", status)
publish_topic(f"{cam_name}/{cmd}", status)

return cam_resp if "status" in cam_resp else resp | cam_resp

Expand Down
6 changes: 3 additions & 3 deletions app/wyzebridge/wyze_control.py
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@
from wyzebridge.bridge_utils import env_bool
from wyzebridge.config import BOA_COOLDOWN, BOA_INTERVAL, IMG_PATH, MQTT_TOPIC
from wyzebridge.logging import logger
from wyzebridge.mqtt import MQTT_ENABLED, send_mqtt
from wyzebridge.mqtt import MQTT_ENABLED, publish_messages
from wyzebridge.wyze_commands import CMD_VALUES, GET_CMDS, GET_PAYLOAD, PARAMS, SET_CMDS
from wyzecam import WyzeIOTCSession, WyzeIOTCSessionState, tutk_protocol

Expand Down Expand Up @@ -210,7 +210,7 @@ def pan_to_cruise_point(sess: WyzeIOTCSession, cmd):
def update_mqtt_values(topic: str, cam_name: str, resp: dict):
base = f"{MQTT_TOPIC}/{cam_name}"
if msgs := [(f"{base}/{k}", resp[v]) for k, v in PARAMS.items() if v in resp]:
send_mqtt(msgs)
publish_messages(msgs)

return int(resp.get(PARAMS[topic], 0)) if topic in PARAMS else resp

Expand Down Expand Up @@ -330,7 +330,7 @@ def motion_alarm(cam: dict):
logger.info(f"[MOTION] Alarm file detected at {cam['last_photo'][1]}")
cam["cooldown"] = datetime.now() + timedelta(seconds=BOA_COOLDOWN)
cam["last_alarm"] = cam["last_photo"]
send_mqtt([(f"{MQTT_TOPIC}/{cam['uri']}/motion", motion)])
publish_messages([(f"{MQTT_TOPIC}/{cam['uri']}/motion", motion)])
if motion and (http := env_bool("boa_motion")):
try:
resp = requests.get(http.format(cam_name=cam["uri"]))
Expand Down
4 changes: 2 additions & 2 deletions app/wyzebridge/wyze_stream.py
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@
from wyzebridge.config import BRIDGE_IP, COOLDOWN, MQTT_TOPIC
from wyzebridge.ffmpeg import get_ffmpeg_cmd
from wyzebridge.logging import logger
from wyzebridge.mqtt import publish_discovery, send_mqtt, update_mqtt_state
from wyzebridge.mqtt import publish_discovery, publish_messages, update_mqtt_state
from wyzebridge.webhooks import ifttt_webhook
from wyzebridge.wyze_api import WyzeApi
from wyzebridge.wyze_commands import GET_CMDS, PARAMS, SET_CMDS
Expand Down Expand Up @@ -486,7 +486,7 @@ def get_cam_params(
(f"{MQTT_TOPIC}/{uri.lower()}/wifi", wifi),
(f"{MQTT_TOPIC}/{uri.lower()}/audio", json.dumps(audio) if audio else False),
]
send_mqtt(mqtt)
publish_messages(mqtt)
return v_codec, fps, audio


Expand Down

0 comments on commit 4ba96bd

Please sign in to comment.