No Description

Fabian Peter Hammerle 042f8c2a6e changelog: fix & reword section of v1.1.0 1 day ago
.github 9aca56cebf build(deps): bump docker/setup-qemu-action from 3.2.0 to 3.3.0 (#182) 1 day ago
docs b66f0cd3ef home assistant auto discovery: add config for button scheduling poweroff & button locking all sessions 3 weeks ago
systemctl_mqtt 85d150e3e9 Implement restart for units selected via --control-system-unit parameter (#180) 1 day ago
tests 85d150e3e9 Implement restart for units selected via --control-system-unit parameter (#180) 1 day ago
.dockerignore 74669520c1 added dockerfile & docker-compose.yml 4 years ago
.gitattributes b66f0cd3ef home assistant auto discovery: add config for button scheduling poweroff & button locking all sessions 3 weeks ago
.gitignore 85d150e3e9 Implement restart for units selected via --control-system-unit parameter (#180) 1 day ago
.isort.cfg 04fcb2b7a9 isort: added config to workaround persistent misclassification of paho.mqtt.client 4 years ago
.pylintrc c57260b7c0 drop compatibility with pyhon3.5 3 years ago
CHANGELOG.md 042f8c2a6e changelog: fix & reword section of v1.1.0 1 day ago
COPYING 1574063886 mqtt message on topic systemctl/hostname/poweroff schedules poweroff with delay of 4 seconds 4 years ago
Dockerfile 73513eabb0 migrate from dbus-python to pure-python jeepney 3 weeks ago
Makefile e72910d853 refactor makefile: minor renamings for consistency with switchbot-mqtt's Makefile 3 years ago
Pipfile ffac98894a refactor: make `_run` function async (to prepare for migration from paho-mqtt to aiomqtt) 3 weeks ago
Pipfile.lock c06cf7f42a build(deps-dev): bump pytest-asyncio from 0.25.1 to 0.25.2 (#184) 1 week ago
README.md 85d150e3e9 Implement restart for units selected via --control-system-unit parameter (#180) 1 day ago
docker-apparmor-profile 85d150e3e9 Implement restart for units selected via --control-system-unit parameter (#180) 1 day ago
docker-compose.yml 35821ca095 docker-compose: add example for `--monitor-system-unit` 2 weeks ago
mypy.ini 1574063886 mqtt message on topic systemctl/hostname/poweroff schedules poweroff with delay of 4 seconds 4 years ago
pyproject.toml b6a358880b drop compatibility with python3.8; docker image: upgrade alpine base image from 3.13.1 to 3.21.0 including upgrade of python from 3.8 to 3.12 3 weeks ago
setup.py 8f9c415ec4 migrate from paho-mqtt to its async wrapper aiomqtt & disable `retain` flag on topic `systemctl/[hostname]/preparing-for-shutdown` 2 weeks ago
systemd-user.service 33e3a1ca97 add systemd user service config for autostart 2 weeks ago

README.md

systemctl-mqtt

CI Pipeline Status Coverage Status Last Release Compatible Python Versions DOI

MQTT client triggering & reporting shutdown on systemd-based systems

Setup

Via Pip

$ pip3 install --user --upgrade systemctl-mqtt

On debian-based systems, a subset of dependencies can optionally be installed via:

$ sudo apt-get install --no-install-recommends python3-jeepney python3-paho-mqtt

Follow instructions in systemd-user.service to start systemctl-mqtt automatically via systemd.

Via Docker Compose 🐳

  1. Clone this repository.
  2. Load AppArmor profile: sudo apparmor_parser ./docker-apparmor-profile
  3. sudo docker-compose up --build

Pre-built docker image are available at https://hub.docker.com/r/fphammerle/systemctl-mqtt/tags

Annotation of signed tags docker/* contains docker image digests: https://github.com/fphammerle/systemctl-mqtt/tags

Usage

$ systemctl-mqtt --mqtt-host HOSTNAME_OR_IP_ADDRESS

systemctl-mqtt --help explains all available command-line options / parameters.

MQTT via TLS

TLS is enabled by default. Run systemctl-mqtt --mqtt-disable-tls … to disable TLS.

MQTT Authentication

systemctl-mqtt --mqtt-username me --mqtt-password-file /run/secrets/password …
# or for testing (unsafe):
systemctl-mqtt --mqtt-username me --mqtt-password secret …

Schedule Poweroff

Schedule poweroff by sending a MQTT message to topic systemctl/hostname/poweroff.

$ mosquitto_pub -h MQTT_BROKER -t systemctl/hostname/poweroff -n

Adapt delay via: systemctl-mqtt --poweroff-delay-seconds 60 …

Shutdown Report

systemctl-mqtt subscribes to logind's PrepareForShutdown signal.

systemctl halt|poweroff|reboot triggers a message with payload true on topic systemctl/hostname/preparing-for-shutdown.

Lock Screen

Lock screen by sending a MQTT message to topic systemctl/hostname/lock-all-sessions.

$ mosquitto_pub -h MQTT_BROKER -t systemctl/hostname/lock-all-sessions -n

Suspend

$ mosquitto_pub -h MQTT_BROKER -t systemctl/hostname/suspend -n

Monitor ActiveState of System Units

$ systemctl-mqtt --monitor-system-unit foo.service

enables reports on topic systemctl/[hostname]/unit/system/[unit_name]/active-state.

Restarting of System Units

$ systemctl-mqtt  --control-system-unit <unit_name>

enables that a system unit can be restarted by a message on topic systemctl/[hostname]/unit/system/[unit_name]/restart.

Home Assistant 🏡

When 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
  • button.[hostname]_logind_suspend
  • sensor.[hostname]_unit_system_[unit_name]_active_state for --monitor-system-unit [unit_name]
  • button.[hostname]_unit_system_[unit_name]_restart for --control-system-unit [unit_name]

homeassistant entities_over_auto_discovery

Pass --homeassistant-discovery-prefix custom-prefix to systemctl-mqtt when using a custom discovery topic prefix.