From 98e1e970c103807472dff1c3098daad5212907c7 Mon Sep 17 00:00:00 2001
From: "Edgar P. Burkhart" <git@edgarpierre.fr>
Date: Sun, 9 Mar 2025 11:40:40 +0100
Subject: [PATCH 1/2] Refactor configuration file loading to check multiple
 paths and raise error if not found

---
 hasspy/__main__.py | 14 +++++++++++++-
 1 file changed, 13 insertions(+), 1 deletion(-)

diff --git a/hasspy/__main__.py b/hasspy/__main__.py
index 688d500..92744e9 100644
--- a/hasspy/__main__.py
+++ b/hasspy/__main__.py
@@ -1,5 +1,6 @@
 import logging
 import tomllib
+from pathlib import Path
 
 from hasspy.mqtt import HassClient
 
@@ -7,7 +8,18 @@ from hasspy.mqtt import HassClient
 def main() -> None:
     logging.basicConfig(level=logging.INFO)
 
-    with open("/etc/hasspy/config.toml", "rb") as file:
+    config_file = next(
+        (
+            x
+            for x in (Path("/etc/hasspy.toml"), Path("/etc/hasspy/config.toml"))
+            if x.exists()
+        ),
+        None,
+    )
+    if not config_file:
+        raise FileNotFoundError("No configuration file found")
+
+    with open(config_file, "rb") as file:
         config = tomllib.load(file)
 
     ha = HassClient(

From be2381429fcaf270597de8a9448d7f3d33a5f523 Mon Sep 17 00:00:00 2001
From: "Edgar P. Burkhart" <git@edgarpierre.fr>
Date: Sun, 9 Mar 2025 11:40:53 +0100
Subject: [PATCH 2/2] Refactor power control logic in MQTT client to use
 pattern matching for improved readability

---
 hasspy/mqtt.py | 19 +++++++++++--------
 1 file changed, 11 insertions(+), 8 deletions(-)

diff --git a/hasspy/mqtt.py b/hasspy/mqtt.py
index 75fec3b..e50a0fc 100644
--- a/hasspy/mqtt.py
+++ b/hasspy/mqtt.py
@@ -74,14 +74,17 @@ class HassClient(Client):
     def on_command(self, client: Client, userdata: Any, message: MQTTMessage) -> None:
         payload = message.payload.decode("utf-8")
 
-        if not self.power_on and payload == "POWER_ON":
-            log.info("Cancelling shutdown…")
-            self.power_on = True
-            run(["systemctl", "poweroff", "--when=cancel"])
-        elif self.power_on and payload == "POWER_OFF":
-            log.info("Powering off…")
-            self.power_on = False
-            run(["systemctl", "poweroff", "--when=+1m"])
+        match payload:
+            case "POWER_ON":
+                if not self.power_on:
+                    log.info("Cancelling shutdown…")
+                    self.power_on = True
+                    run(["systemctl", "poweroff", "--when=cancel"])
+            case "POWER_OFF":
+                if self.power_on:
+                    log.info("Powering off…")
+                    self.power_on = False
+                    run(["systemctl", "poweroff", "--when=+1m"])
 
         self.publish_state()