chore: sync to lowercase logged messages

pull/106/head
Jeff Culverhouse 3 months ago
parent 693eb1c542
commit bb6acf4074

@ -34,19 +34,19 @@ async def async_main() -> int:
async with Amcrest2Mqtt(args=args) as amcrest2mqtt: async with Amcrest2Mqtt(args=args) as amcrest2mqtt:
await amcrest2mqtt.main_loop() await amcrest2mqtt.main_loop()
except ConfigError as err: except ConfigError as err:
logger.error(f"Fatal config error was found: {err}") logger.error(f"fatal config error was found: {err}")
return 1 return 1
except MqttError as err: except MqttError as err:
logger.error(f"MQTT service problems: {err}") logger.error(f"mqtt service problems: {err}")
return 1 return 1
except KeyboardInterrupt: except KeyboardInterrupt:
logger.warning("Shutdown requested (Ctrl+C). Exiting gracefully...") logger.warning("shutdown requested (Ctrl+C). exiting gracefully...")
return 1 return 1
except asyncio.CancelledError: except asyncio.CancelledError:
logger.warning("Main loop cancelled.") logger.warning("main loop cancelled.")
return 1 return 1
except Exception as err: except Exception as err:
logger.error(f"Unhandled exception: {err}", exc_info=True) logger.error(f"unhandled exception: {err}", exc_info=True)
return 1 return 1
finally: finally:
logger.info("amcrest2mqtt stopped.") logger.info("amcrest2mqtt stopped.")

@ -94,7 +94,7 @@ class Base:
await cast(Any, self).publish_service_availability("offline") await cast(Any, self).publish_service_availability("offline")
cast(Any, self).mqttc.loop_stop() cast(Any, self).mqttc.loop_stop()
except Exception as err: except Exception as err:
self.logger.debug(f"Mqtt loop_stop failed: {err}") self.logger.debug(f"mqtt loop_stop failed: {err}")
if cast(Any, self).mqttc.is_connected(): if cast(Any, self).mqttc.is_connected():
try: try:
@ -113,7 +113,7 @@ class Base:
} }
with open(data_file, "w", encoding="utf-8") as file: with open(data_file, "w", encoding="utf-8") as file:
json.dump(state, file, indent=4) json.dump(state, file, indent=4)
self.logger.info(f"Saved state to {data_file}") self.logger.info(f"saved state to {data_file}")
def restore_state(self: Amcrest2Mqtt) -> None: def restore_state(self: Amcrest2Mqtt) -> None:
data_file = Path(self.config["config_path"]) / "amcrest2mqtt.dat" data_file = Path(self.config["config_path"]) / "amcrest2mqtt.dat"
@ -122,4 +122,4 @@ class Base:
state = json.loads(file.read()) state = json.loads(file.read())
self.api_calls = state["api_calls"] self.api_calls = state["api_calls"]
self.last_call_date = datetime.strptime(state["last_call_date"], "%Y-%m-%d %H:%M:%S.%f") self.last_call_date = datetime.strptime(state["last_call_date"], "%Y-%m-%d %H:%M:%S.%f")
self.logger.info(f"Restored state from {data_file}: {self.api_calls} / {str(self.last_call_date)}") self.logger.info(f"restored state from {data_file}: {self.api_calls} / {str(self.last_call_date)}")

@ -128,7 +128,7 @@ class AmcrestAPIMixin:
# Find first interface key dynamically # Find first interface key dynamically
candidates = [k.split(".")[2] for k in network_config if k.startswith("table.Network.") and ".IPAddress" in k] candidates = [k.split(".")[2] for k in network_config if k.startswith("table.Network.") and ".IPAddress" in k]
interface = candidates[0] if candidates else "eth0" interface = candidates[0] if candidates else "eth0"
self.logger.debug(f"No DefaultInterface key; using {interface}") self.logger.debug(f"no DefaultInterface key; using {interface}")
ip_address = network_config.get(f"table.Network.{interface}.IPAddress", "0.0.0.0") ip_address = network_config.get(f"table.Network.{interface}.IPAddress", "0.0.0.0")
mac_address = network_config.get(f"table.Network.{interface}.PhysicalAddress", "00:00:00:00:00:00").upper() mac_address = network_config.get(f"table.Network.{interface}.PhysicalAddress", "00:00:00:00:00:00").upper()
@ -166,7 +166,7 @@ class AmcrestAPIMixin:
self.logger.warning(f"camera not found for {self.get_device_name(device_id)}") self.logger.warning(f"camera not found for {self.get_device_name(device_id)}")
return None return None
response = device["camera"].reboot().strip() response = device["camera"].reboot().strip()
self.logger.info(f"Sent REBOOT signal to {self.get_device_name(device_id)}, {response}") self.logger.info(f"sent REBOOT signal to {self.get_device_name(device_id)}, {response}")
if response == "OK": if response == "OK":
self.upsert_state(device_id, internal={"reboot": datetime.now()}) self.upsert_state(device_id, internal={"reboot": datetime.now()})
@ -253,7 +253,7 @@ class AmcrestAPIMixin:
try: try:
response = str(await device["camera"].async_set_privacy(switch)).strip() response = str(await device["camera"].async_set_privacy(switch)).strip()
self.increase_api_calls() self.increase_api_calls()
self.logger.debug(f"Set privacy_mode on {self.get_device_name(device_id)} to {switch}, got back: {response}") self.logger.debug(f"set privacy_mode on {self.get_device_name(device_id)} to {switch}, got back: {response}")
if response == "OK": if response == "OK":
self.upsert_state(device_id, switch={"privacy": "ON" if switch else "OFF"}) self.upsert_state(device_id, switch={"privacy": "ON" if switch else "OFF"})
await self.publish_device_state(device_id) await self.publish_device_state(device_id)
@ -299,14 +299,14 @@ class AmcrestAPIMixin:
try: try:
response = bool(await device["camera"].async_set_motion_detection(switch)) response = bool(await device["camera"].async_set_motion_detection(switch))
self.increase_api_calls() self.increase_api_calls()
self.logger.debug(f"Set motion_detection on {self.get_device_name(device_id)} to {switch}, got back: {response}") self.logger.debug(f"set motion_detection on {self.get_device_name(device_id)} to {switch}, got back: {response}")
if response: if response:
self.upsert_state(device_id, switch={"motion_detection": "ON" if switch else "OFF"}) self.upsert_state(device_id, switch={"motion_detection": "ON" if switch else "OFF"})
await self.publish_device_state(device_id) await self.publish_device_state(device_id)
except CommError: except CommError:
self.logger.error(f"Failed to communicate with device ({self.get_device_name(device_id)}) to set motion detections") self.logger.error(f"failed to communicate with device ({self.get_device_name(device_id)}) to set motion detections")
except LoginError: except LoginError:
self.logger.error(f"Failed to authenticate with device ({self.get_device_name(device_id)}) to set motion detections") self.logger.error(f"failed to authenticate with device ({self.get_device_name(device_id)}) to set motion detections")
return None return None
@ -343,7 +343,7 @@ class AmcrestAPIMixin:
image_bytes = await asyncio.wait_for(camera.async_snapshot(), timeout=SNAPSHOT_TIMEOUT_S) image_bytes = await asyncio.wait_for(camera.async_snapshot(), timeout=SNAPSHOT_TIMEOUT_S)
self.increase_api_calls() self.increase_api_calls()
if not image_bytes: if not image_bytes:
self.logger.warning(f"Snapshot: empty image from {self.get_device_name(device_id)}") self.logger.warning(f"snapshot: empty image from {self.get_device_name(device_id)}")
return None return None
encoded_b = base64.b64encode(image_bytes) encoded_b = base64.b64encode(image_bytes)

@ -260,13 +260,13 @@ class HelpersMixin:
# last chance to skip the recording # last chance to skip the recording
if self.b_to_mb(len(recording)) > self.config["media"]["max_size"]: if self.b_to_mb(len(recording)) > self.config["media"]["max_size"]:
self.logger.info(f"Skipping saving recording to {path} because {self.b_to_mb(len(recording))} > {self.config["media"]["max_size"]} MB") self.logger.info(f"skipping saving recording to {path} because {self.b_to_mb(len(recording))} > {self.config["media"]["max_size"]} MB")
return None return None
try: try:
file_path.write_bytes(recording.encode("latin-1")) file_path.write_bytes(recording.encode("latin-1"))
except IOError as err: except IOError as err:
self.logger.error(f"Failed to save recording to {file_path}: {err}") self.logger.error(f"failed to save recording to {file_path}: {err}")
return None return None
self.upsert_state( self.upsert_state(
@ -282,7 +282,7 @@ class HelpersMixin:
latest_link.unlink() latest_link.unlink()
latest_link.symlink_to(local_file) latest_link.symlink_to(local_file)
except IOError as err: except IOError as err:
self.logger.error(f"Failed to save symlink {latest_link} -> {local_file}: {err}") self.logger.error(f"failed to save symlink {latest_link} -> {local_file}: {err}")
pass pass
if "media_source" in self.config["media"]: if "media_source" in self.config["media"]:

@ -60,7 +60,7 @@ class LoopsMixin:
try: try:
signal.signal(sig, self.handle_signal) signal.signal(sig, self.handle_signal)
except Exception: except Exception:
self.logger.debug(f"Cannot install handler for {sig}") self.logger.debug(f"cannot install handler for {sig}")
await self.setup_device_list() await self.setup_device_list()
self.running = True self.running = True
@ -77,9 +77,9 @@ class LoopsMixin:
try: try:
await asyncio.gather(*tasks) await asyncio.gather(*tasks)
except asyncio.CancelledError: except asyncio.CancelledError:
self.logger.warning("Main loop cancelled — shutting down...") self.logger.warning("main loop cancelled — shutting down...")
except Exception as err: except Exception as err:
self.logger.exception(f"Unhandled exception in main loop: {err}") self.logger.exception(f"unhandled exception in main loop: {err}")
self.running = False self.running = False
finally: finally:
self.logger.info("All loops terminated — cleanup complete.") self.logger.info("all loops terminated — cleanup complete.")

@ -90,5 +90,5 @@ class MqttMixin(BaseMqttMixin):
try: try:
return segment.split("-", 1) return segment.split("-", 1)
except ValueError as err: except ValueError as err:
self.logger.warning(f"Ignoring malformed topic {topic}: {err}") self.logger.warning(f"ignoring malformed topic {topic}: {err}")
return [] return []

@ -410,7 +410,7 @@ sdist = { url = "https://files.pythonhosted.org/packages/93/4b/979db9e44be09f71e
[[package]] [[package]]
name = "mqtt-helper-graystorm" name = "mqtt-helper-graystorm"
version = "0.1.0" version = "0.1.0"
source = { git = "https://github.com/weirdtangent/mqtt-helper.git?branch=main#e81f183a38bdd965099cacfdc1286781f5d7d8f6" } source = { git = "https://github.com/weirdtangent/mqtt-helper.git?branch=main#04fb1daa7c2e98b7dfbc60948913aba153693801" }
dependencies = [ dependencies = [
{ name = "logging" }, { name = "logging" },
{ name = "paho-mqtt" }, { name = "paho-mqtt" },

Loading…
Cancel
Save