Răsfoiți Sursa

home assistant auto discovery: add config for button scheduling poweroff & button locking all sessions

Fabian Peter Hammerle 2 luni în urmă
părinte
comite
b66f0cd3ef

+ 1 - 0
.gitattributes

@@ -0,0 +1 @@
+*.png filter=lfs diff=lfs merge=lfs -text

+ 5 - 0
CHANGELOG.md

@@ -5,6 +5,11 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
 and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
 
 ## [Unreleased]
+### Added
+- automatic discovery in home assistant:
+  - entity `button.[hostname]_logind_lock_all_sessions`
+  - entity `button.[hostname]_logind_poweroff`
+
 ### Changed
 - automatic discovery in home assistant:
   - replace component-based (topic:

+ 15 - 13
README.md

@@ -47,7 +47,21 @@ $ mosquitto_pub -h MQTT_BROKER -t systemctl/hostname/lock-all-sessions -n
 
 ## Home Assistant 🏡
 
-### Sample Setup
+### Automatic Discovery
+
+When [MQTT Discovery](https://www.home-assistant.io/integrations/mqtt/#mqtt-discovery)
+is enabled (default in Home Assistant ≥0.117.0), the following entities will be
+added automatically:
+- `binary_sensor.[hostname]_logind_preparing_for_shutdown`
+- `button.[hostname]_logind_lock_all_sessions`
+- `button.[hostname]_logind_poweroff`
+
+![homeassistant entities_over_auto_discovery](docs/homeassistant/entities-after-auto-discovery.png)
+
+Pass `--homeassistant-discovery-prefix custom-prefix` to `systemctl-mqtt` when
+using a custom discovery topic prefix.
+
+### Manual YAML Configuration
 
 #### Send Poweroff Command
 
@@ -84,18 +98,6 @@ automation:
     entity_id: switch.desk_lamp
 ```
 
-### Automatic Discovery of Shutdown Sensor (Optional)
-
-When [MQTT Discovery](https://www.home-assistant.io/integrations/mqtt/#mqtt-discovery)
-is enabled (default in Home Assistant ≥0.117.0), a new entity
-`binary_sensor.hostname_logind_preparing_for_shutdown` will be added
-automatically.
-
-![homeassistant discovery binary_sensor.hostname_preparing_for_shutdown](docs/homeassistant/preparing-for-shutdown/settings/discovery/2020-06-21.png)
-
-When using a custom discovery topic prefix
-pass `--homeassistant-discovery-prefix custom-prefix` to `systemctl-mqtt`.
-
 ## Docker 🐳
 
 1. Clone this repository.

+ 3 - 0
docs/homeassistant/entities-after-auto-discovery.png

@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:e5fe3c342a136a8e3fc4b6eb0c219afdc27924aa651e7a4d74112ffb0515f4d4
+size 30005

BIN
docs/homeassistant/preparing-for-shutdown/settings/discovery/2020-06-21.png


+ 13 - 1
systemctl_mqtt/__init__.py

@@ -188,7 +188,7 @@ class _State:
             "components": {
                 "logind/preparing-for-shutdown": {
                     "unique_id": unique_id_prefix + "-logind-preparing-for-shutdown",
-                    "object_id": f"{hostname}_logind_preparing_for_shutdown",
+                    "object_id": f"{hostname}_logind_preparing_for_shutdown",  # entity id
                     "name": "preparing for shutdown",  # home assistant prepends device name
                     "platform": "binary_sensor",
                     "state_topic": self._preparing_for_shutdown_topic,
@@ -198,6 +198,18 @@ class _State:
                 },
             },
         }
+        for mqtt_topic_suffix in _MQTT_TOPIC_SUFFIX_ACTION_MAPPING.keys():
+            # false positive warning by mypy:
+            # > Unsupported target for indexed assignment
+            config["components"]["logind/" + mqtt_topic_suffix] = {  # type: ignore
+                "unique_id": unique_id_prefix + "-logind-" + mqtt_topic_suffix,
+                "object_id": hostname
+                + "_logind_"
+                + mqtt_topic_suffix.replace("-", "_"),  # entity id
+                "name": mqtt_topic_suffix.replace("-", " "),
+                "platform": "button",
+                "command_topic": self.mqtt_topic_prefix + "/" + mqtt_topic_suffix,
+            }
         _LOGGER.debug("publishing home assistant config on %s", discovery_topic)
         mqtt_client.publish(
             topic=discovery_topic, payload=json.dumps(config), retain=False

+ 15 - 1
tests/test_state_dbus.py

@@ -184,6 +184,20 @@ def test_publish_homeassistant_device_config(
                 "state_topic": topic_prefix + "/preparing-for-shutdown",
                 "payload_on": "true",
                 "payload_off": "false",
-            }
+            },
+            "logind/poweroff": {
+                "unique_id": f"systemctl-mqtt-{hostname}-logind-poweroff",
+                "object_id": f"{hostname}_logind_poweroff",
+                "name": "poweroff",
+                "platform": "button",
+                "command_topic": f"{topic_prefix}/poweroff",
+            },
+            "logind/lock-all-sessions": {
+                "unique_id": f"systemctl-mqtt-{hostname}-logind-lock-all-sessions",
+                "object_id": f"{hostname}_logind_lock_all_sessions",
+                "name": "lock all sessions",
+                "platform": "button",
+                "command_topic": f"{topic_prefix}/lock-all-sessions",
+            },
         },
     }