Hallo
Mein Tablet ist baugleich mit dem Allnet Display
Ich habe mir dafür ein Python Script geschrieben.
Dadurch bekomme ich in MQTT 7 Etiniäten des Typs Licht.
`#!/usr/bin/env python3
import os
import json
import paho.mqtt.client as mqtt
# Konfiguration für den MQTT-Broker
MQTT_BROKER = "xxx.xxx.x.xxx" # IP-Adresse Deines MQTT-Brokers (z.B. Home Assistant)
MQTT_PORT = xxx
MQTT_USER = "xxx"
MQTT_PASSWORD = "xxx"
# Physische LED-Pfade (wie auf deinem Tablet hinterlegt)
LED_PATHS = {
"red": "/sys/devices/virtual/adw/adwdev/adwgreen",
"green": "/sys/devices/virtual/adw/adwdev/adwred",
"blue": "/sys/devices/virtual/adw/adwdev/adwblue"
}
# Definition der einzelnen Lampen (Farbkombinationen)
# 1 bedeutet LED an ('o'), 0 bedeutet LED aus ('c')
LAMP_CONFIGS = {
"red": {"red": 1, "green": 0, "blue": 0},
"green": {"red": 0, "green": 1, "blue": 0},
"blue": {"red": 0, "green": 0, "blue": 1},
"white": {"red": 1, "green": 1, "blue": 1},
"yellow": {"red": 1, "green": 1, "blue": 0},
"violet": {"red": 1, "green": 0, "blue": 1},
"cyan": {"red": 0, "green": 1, "blue": 1}
}
# Für jede Lampe legen wir die zugehörigen MQTT-Topics fest
LAMP_TOPICS = {}
for lamp in LAMP_CONFIGS:
LAMP_TOPICS[lamp] = {
"command": f"homeassistant/light/tablet_led_{lamp}/set",
"state": f"homeassistant/light/tablet_led_{lamp}/status",
"discovery": f"homeassistant/light/tablet_led_{lamp}/config"
}
# MQTT-Client einrichten
client = mqtt.Client()
client.username_pw_set(MQTT_USER, MQTT_PASSWORD)
# Funktion, um eine physische LED zu schalten
def set_led(led_color, state):
"""
Schaltet eine LED (rot/grün/blau) ein ('o') oder aus ('c').
"""
if led_color in LED_PATHS:
try:
with open(LED_PATHS[led_color], 'w') as led_file:
led_file.write(state)
print(f"{led_color} LED {'eingeschaltet' if state=='o' else 'ausgeschaltet'}")
except Exception as e:
print(f"Fehler beim Setzen der {led_color}-LED: {e}")
else:
print(f"Unbekannte LED-Farbe: {led_color}")
# Callback-Funktion für empfangene MQTT-Nachrichten
def on_message(client, userdata, msg):
try:
payload = json.loads(msg.payload.decode())
print("Empfangene Payload:", payload)
# Wir suchen, zu welcher Lampe (Farbkombination) diese Nachricht gehört
for lamp, topics in LAMP_TOPICS.items():
if msg.topic == topics["command"]:
# Wir erwarten eine Nachricht im Format {"state": "ON"} oder {"state": "OFF"}
if "state" in payload:
if payload["state"].upper() == "ON":
# Setze jede LED entsprechend der Konfiguration der Lampe
for led in ["red", "green", "blue"]:
desired = LAMP_CONFIGS[lamp][led]
set_led(led, 'o' if desired else 'c')
elif payload["state"].upper() == "OFF":
# Schalte alle LEDs aus
for led in ["red", "green", "blue"]:
set_led(led, 'c')
# Rückmeldung über den Status senden
client.publish(topics["state"], json.dumps(payload), retain=True)
break
except Exception as e:
print("Fehler beim Verarbeiten der Nachricht:", e)
# MQTT Auto Discovery registrieren – für jede Lampe wird ein eigener Eintrag erstellt
def send_discovery():
for lamp, topics in LAMP_TOPICS.items():
config = {
"name": f"Tablet LED {lamp.capitalize()}",
"uniq_id": f"tablet_led_{lamp}",
"command_topic": topics["command"],
"state_topic": topics["state"],
"schema": "json",
"rgb": False, # Es handelt sich um einfache ON/OFF-Schalter
"brightness": False,
"qos": 0
}
client.publish(topics["discovery"], json.dumps(config), retain=True)
print(f"Auto Discovery Nachricht für {lamp} LED gesendet")
# on_connect Callback – beim Verbinden wird Auto Discovery gesendet und alle relevanten Topics abonniert
def on_connect(client, userdata, flags, rc):
if rc == 0:
print("Verbunden mit MQTT-Broker")
send_discovery()
# Abonniere alle Command-Topics
for lamp, topics in LAMP_TOPICS.items():
client.subscribe(topics["command"])
else:
print(f"Verbindungsfehler: {rc}")
# Setup der MQTT Callbacks
client.on_connect = on_connect
client.on_message = on_message
# Verbindung zum Broker herstellen und in die Endlosschleife gehen
client.connect(MQTT_BROKER, MQTT_PORT, 60)
client.loop_forever()`