Hi
ich habe mittels Chatgpt, mir ein pythonscript erstellen lassen, das die rgbw GU10 die Farbe wechselt, bei bestimmten Temperatur von meinem 3D Drucker, aber leider klappt das nicht. Die Temperatur von Klipper wird richtig ausgelesen und wiedergegeben, hier mal das Script:
Code
import requests
import time
# Konfiguration
KLIPPER_API = "http://deine-klipper-ip/printer/objects/query?extruder"
SHELLY_IP = "http://deine-shelly-ip/color/0"
USERNAME = "dein-benutzername"
PASSWORD = "dein-passwort"
INTERVAL = 10 # Aktualisierungsintervall in Sekunden
def get_shelly_status():
url = f"{SHELLY_IP}/status"
auth = (USERNAME, PASSWORD)
try:
response = requests.get(url, auth=auth)
data = response.json()
return data.get("ison", False) # Prüft, ob die Lampe eingeschaltet ist
except Exception as e:
print(f"Fehler beim Abrufen des Shelly-Status: {e}")
return False
def set_shelly_color(r, g, b):
url = f"{SHELLY_IP}/light"
auth = (USERNAME, PASSWORD)
payload = {"red": r, "green": g, "blue": b, "gain": 100}
is_on = get_shelly_status()
if not is_on:
payload["turn"] = "on" # Falls ausgeschaltet, erst einschalten
try:
requests.post(url, json=payload, auth=auth)
except Exception as e:
print(f"Fehler beim Setzen der Farbe: {e}")
def get_klipper_temperature():
try:
response = requests.get(KLIPPER_API)
data = response.json()
return data["result"]["status"]["extruder"]["temperature"]
except Exception as e:
print(f"Fehler beim Abrufen der Temperatur: {e}")
return None
def main():
try:
while True:
temp = get_klipper_temperature()
print(f"Temperatur: {temp}") # Debug-Info
if temp is not None:
if temp >= 180:
set_shelly_color(255, 0, 0) # Rot
elif temp <= 20:
set_shelly_color(0, 255, 0) # Grün
else:
set_shelly_color(0, 0, 255) # Blau als Zwischenton
time.sleep(INTERVAL)
except KeyboardInterrupt:
print("Skript wurde manuell beendet.")
set_shelly_color(0, 0, 0) # Licht ausschalten
if __name__ == "__main__":
main()
Alles anzeigen
Ich weiß nicht woran es liegt,
mittels dieser URL http://192.168.x.x/color/0?&red=255&green=86&blue=112 kann ich die Farbe ändern, aber warum funktioniert das nicht mit dem Script?