Python MQTT Scripte
Beschreibung:
Python Scripte für MQTT
Scripte:
proc2mqtt_linux - Ein Script was prüft, läuft ein Process oder nicht:
Das Script:
#!/usr/bin/env python3
import time
import psutil
import paho.mqtt.client as mqtt
import argparse
# 🧾 Argumente einlesen
parser = argparse.ArgumentParser(description="Monitor a process and publish MQTT on start/stop.")
parser.add_argument("--broker", required=True, help="MQTT broker IP or hostname")
parser.add_argument("--port", type=int, default=1883, help="MQTT broker port (default: 1883)")
parser.add_argument("--topic", required=True, help="MQTT topic to publish to")
parser.add_argument("--process", required=True, help="Process name to monitor (e.g. cura)")
parser.add_argument("--interval", type=int, default=5, help="Check interval in seconds (default: 5)")
parser.add_argument("--onmsg", default="started", help="Message when process starts")
parser.add_argument("--offmsg", default="closed", help="Message when process stops")
parser.add_argument("--username", help="MQTT username (optional)")
parser.add_argument("--password", help="MQTT password (optional)")
args = parser.parse_args()
# 🔐 MQTT Client konfigurieren
client = mqtt.Client()
if args.username and args.password:
client.username_pw_set(args.username, args.password)
client.connect(args.broker, args.port)
client.loop_start()
was_running = None
def is_proc_running(name):
for proc in psutil.process_iter(['name']):
try:
if name.lower() in proc.info['name'].lower():
return True
except (psutil.NoSuchProcess, psutil.AccessDenied):
continue
return False
# 🔁 Hauptloop
while True:
running = is_proc_running(args.process)
if running != was_running:
msg = args.onmsg if running else args.offmsg
print(f"[MQTT] {args.process} is now {msg}")
client.publish(args.topic, msg, qos=1, retain=True)
time.sleep(0.5) # optional
was_running = running
time.sleep(args.interval)
Aufruf
python3 proc2mqtt.py --broker 192.168.177.20 --port 1883 --username mqtt_user --password mqtt_password --topic proc/gnome-calculator --process gnome-calculator --onmsg started --offmsg closed
Und in der Home Assistant MQTT Integration
