83 lines
2.0 KiB
Python
83 lines
2.0 KiB
Python
import paho.mqtt.client as mqtt
|
|
import json, os
|
|
from pathlib import Path
|
|
|
|
# MQTT settings
|
|
BROKER = "192.168.1.100" # <-- your HA MQTT broker IP
|
|
PORT = 1883
|
|
USERNAME = "your_mqtt_user"
|
|
PASSWORD = "your_mqtt_pass"
|
|
TOPIC_SUB = "pc/gammy/mode"
|
|
TOPIC_PUB = "pc/gammy/state"
|
|
|
|
# Path to Gammy config file
|
|
CONF = Path(os.getenv("APPDATA")) / "gammy" / "gammy.conf"
|
|
|
|
# Fade presets (seconds)
|
|
FADE_TIMES = {
|
|
"snap": 0,
|
|
"fast": 1,
|
|
"slow": 30
|
|
}
|
|
|
|
def read_config():
|
|
with open(CONF, "r") as f:
|
|
return json.load(f)
|
|
|
|
def write_config(cfg):
|
|
with open(CONF, "w") as f:
|
|
json.dump(cfg, f, indent=2)
|
|
|
|
def set_gammy(temp=None, bright=None, auto=False, fade="fast"):
|
|
cfg = read_config()
|
|
|
|
if auto:
|
|
cfg["autotemperature"] = True
|
|
else:
|
|
cfg["autotemperature"] = False
|
|
if temp:
|
|
cfg["temperature"] = temp
|
|
|
|
if bright is not None:
|
|
cfg["autobrightness"] = False
|
|
cfg["brightness"] = bright
|
|
|
|
cfg["fade"] = FADE_TIMES.get(fade, 1)
|
|
|
|
write_config(cfg)
|
|
return cfg
|
|
|
|
def on_connect(client, userdata, flags, rc):
|
|
print("Connected:", rc)
|
|
client.subscribe(TOPIC_SUB)
|
|
|
|
def on_message(client, userdata, msg):
|
|
payload = msg.payload.decode().strip().lower()
|
|
print("Received:", payload)
|
|
|
|
parts = payload.split()
|
|
mode = parts[0]
|
|
fade = parts[1] if len(parts) > 1 else "fast"
|
|
|
|
if mode == "ember":
|
|
cfg = set_gammy(temp=1900, bright=30, auto=False, fade=fade)
|
|
client.publish(TOPIC_PUB, f"ember {fade} (1900K, 30%)")
|
|
|
|
elif mode == "movie":
|
|
cfg = set_gammy(temp=6500, bright=100, auto=False, fade=fade)
|
|
client.publish(TOPIC_PUB, f"movie {fade} (6500K, 100%)")
|
|
|
|
elif mode == "auto":
|
|
cfg = set_gammy(auto=True, bright=80, fade=fade)
|
|
client.publish(TOPIC_PUB, f"auto {fade} (auto temp, 80%)")
|
|
|
|
else:
|
|
print("Unknown command")
|
|
|
|
client = mqtt.Client()
|
|
client.username_pw_set(USERNAME, PASSWORD)
|
|
client.on_connect = on_connect
|
|
client.on_message = on_message
|
|
|
|
client.connect(BROKER, PORT, 60)
|
|
client.loop_forever() |