Schlagwort: deCONZ

  • Lichtsteuerung mit Homematic IP (CCU3) und deCONZ REST-API

    Lichtsteuerung mit Homematic IP (CCU3) und deCONZ REST-API

    In diesem Szenario werden eine dimmbare Zigbee Lampe mit deCONZ Steuerung, ein Zigbee Bewegungsmelder und ein Homematic IP Schalter zur Lichtsteuerung kombiniert.

    Das nachfolgende Skript gewährleistet, dass ein einfacher Toggle-Befehl des Schalters stets zur vollen Helligkeit führt – unabhängig von zuvor gespeicherten Dimmwerten der Lampe.

    Szenario und Herausforderung

    1. Ein Bewegungsmelder aktiviert die Zigbee-Lampe bei Bewegung zeitweise mit 100% Helligkeit.
    2. Nach Inaktivität wird die Lampe auf 1% gedimmt, um Orientierung zu ermöglichen und schaltet diese schließlich ganz aus.
    3. Dieser Dimmzustand bleibt in der Lampe auch nach dem abschalten gespeichert.
    4. Der Homematic IP-Lichtschalter sendet beim Drücken einen Toggle-Befehl („an“/„aus“) und kennt nicht den aktuellen Dimmzustand der Lampe.
    5. Beim erneuten Einschalten leuchtet die Lampe daher oft nur in der zuvor gespeicherten, niedrigen Helligkeit.

    Zur Lösung wird nach dem Toggle der Gruppenstatus über die deCONZ REST-API für Gruppen abgefragt. Bei eingeschaltetem Zustand wird die Helligkeit unverzüglich auf 100% (Wert 255) gesetzt.

    Funktionsweise des Skripts

    1. Toggle der Gruppe
      Ein einfacher HTTP-PUT-Aufruf über CUxD schaltet alle Lampen in der definierten Gruppe um.
    2. Statusabfrage
      Ein HTTP-GET-Aufruf liest das JSON-Objekt der Gruppe aus. Der Parameter state.any_on zeigt, ob mindestens eine Lampe eingeschaltet ist.
    3. Prüfung auf any_on:true
      Eine einfache String-Suche ("any_on":true) bestimmt den Schaltzustand ohne aufwendiges JSON-Parsing.
    4. Helligkeitsanpassung
      Bei eingeschaltetem Zustand wird über einen weiteren HTTP-PUT-Aufruf die Helligkeit auf 255 gesetzt.

    Zu setzende Variablen

    • deconz_ip: IP-Adresse der deCONZ-Bridge (z. B. "192.168.123.123")
    • deconz_port: Port der REST-API (Standard: "80")
    • api_key: Persönlicher API-Schlüssel aus der deCONZ-Weboberfläche
    • group_id: ID der Lampengruppe in deCONZ (z. B. "666")

    Vollständiges Skript

    
    
    
    
    
    ! deCONZ REST-API Toggle & Helligkeit Script für CCU3
    ! Gruppe 666 – Beispiel „Wohnzimmer“
    
    ! Variablen
    string deconz_ip     = "192.168.123.123";
    string deconz_port   = "80";
    string api_key       = "APIKEY";
    string group_id      = "666";
    
    string response;
    boolean any_on_status = false;
    
    ! Schritt 1: Toggle ausführen
    WriteLine("Starte Toggle...");
    dom.GetObject("CUxD.CUX2801001:1.CMD_SETS").State(
      "curl -s -X PUT -d '{\"toggle\":true}' " +
      "\"http://" + deconz_ip + ":" + deconz_port +
      "/api/" + api_key + "/groups/" + group_id + "/action\""
    );
    dom.GetObject("CUxD.CUX2801001:1.CMD_QUERY_RET").State(1);
    dom.GetObject("CUxD.CUX2801001:1.CMD_RETS").State();
    
    ! Schritt 2: Status abfragen
    WriteLine("Status abfragen...");
    dom.GetObject("CUxD.CUX2801001:1.CMD_SETS").State(
      "curl -s \"http://" + deconz_ip + ":" + deconz_port +
      "/api/" + api_key + "/groups/" + group_id + "\""
    );
    dom.GetObject("CUxD.CUX2801001:1.CMD_QUERY_RET").State(1);
    response = dom.GetObject("CUxD.CUX2801001:1.CMD_RETS").State();
    WriteLine("API Response: " + response);
    
    ! Prüfen, ob "any_on":true im JSON steht
    if (response.Find("\"any_on\":true") >= 0) {
      any_on_status = true;
      WriteLine("Status: any_on = true");
    } else {
      any_on_status = false;
      WriteLine("Status: any_on = false");
    }
    
    ! Schritt 3: Helligkeit setzen
    if (any_on_status) {
      WriteLine("Setze Helligkeit auf 255...");
      dom.GetObject("CUxD.CUX2801001:1.CMD_SETS").State(
        "curl -s -X PUT -d '{\"bri\":255}' " +
        "\"http://" + deconz_ip + ":" + deconz_port +
        "/api/" + api_key + "/groups/" + group_id + "/action\""
      );
      dom.GetObject("CUxD.CUX2801001:1.CMD_QUERY_RET").State(1);
      response = dom.GetObject("CUxD.CUX2801001:1.CMD_RETS").State();
      WriteLine("Helligkeits-Response: " + response);
    } else {
      WriteLine("Keine Helligkeitsanpassung erforderlich");
    }
    
    WriteLine("Script beendet");
    

    Dieses Skript sorgt dafür, dass nach jedem Schaltvorgang über den Homematic IP-Lichtschalter die Lampe immer mit voller Helligkeit startet – ein konsistentes Nutzererlebnis in Verbindung mit Bewegungsmelder-Automatik.