Adaptives Licht Light

Hi,
letztes Jahr hatten Philips (Hue) und Apple (HomeKit) die Erweiterung um adaptives Licht angekündigt. Was diese kleinen Firmen können sollte doch auch mit IPS machbar sein:-)

Kurz adaptives Licht soll Helligkeit und Farbtemperatur der Tageszeit anpassen. So verstehe ich es jedenfalls bisher. Wenn nicht bitte eine einfache Erklärung für mich.

Folgendes Script ändert nur die Farbtemperatur (bisher) aller Lampen/Leuchten die eine Temperatur unterstützen zwischen 9 und 10Uhr von 350 (warm) auf 160 (kalt) und von 18 und 19Uhr von 160 auf 350. Es ist bisher nur mit Zigbee2MQTT lauffähig.

<?php
$StartID = @IPS_GetVariableIDByName("Start", $_IPS['SELF']);
if ($StartID == false){
    $StartID = IPS_CreateVariable(2);
    IPS_SetParent($StartID, $_IPS['SELF']);             //Variable zuordnen
    IPS_SetName($StartID, "Start");
}
$StepID = @IPS_GetVariableIDByName("Step", $_IPS['SELF']);
if ($StepID == false){
    $StepID = IPS_CreateVariable(2);
    IPS_SetParent($StepID, $_IPS['SELF']);             //Variable zuordnen
    IPS_SetName($StepID, "Step");
}
$CountID = @IPS_GetVariableIDByName("Count", $_IPS['SELF']);
if ($CountID == false){
    $CountID = IPS_CreateVariable(1);
    IPS_SetParent($CountID, $_IPS['SELF']);             //Variable zuordnen
    IPS_SetName($CountID, "Count");
}

if($_IPS['SENDER'] == "TimerEvent"){
    if (IPS_GetName($_IPS['EVENT']) == 'ScriptTimer'){
        $Start = GetValue($StartID);
        $Step = GetValue($StepID);
        $Count = GetValue($CountID);
        if ((($Start + $Step) >= 50) && (($Start + $Step) <= 500)){
            SetValue($StartID, $Start + $Step);
        }

        $UpdateList = array();
        $InstanzIDsList = IPS_GetInstanceListByModuleID('{E5BB36C6-A70B-EB23-3716-9151A09AC8A2}');  // Zigbee2MQTT

        foreach ($InstanzIDsList as $InstanzID) {
            $VarID = @IPS_GetObjectIDByIdent('Z2M_State', $InstanzID);
            if ($VarID > 0) {
                if (GetValue($VarID)){
                    $VarID = @IPS_GetObjectIDByIdent('Z2M_ColorTemp', $InstanzID);
                    if ($VarID > 0) {
                        $Text = 'ID:'.$VarID.' Temp:'.$Start;
                        IPS_LogMessage("Adaptives Licht", $Text); 
                        RequestAction($VarID, $Start);
                    }
                }
                else{
                    $VarID = @IPS_GetObjectIDByIdent('Z2M_ColorTemp', $InstanzID);
                    if ($VarID > 0) {
                        SetValue($VarID, $Start);
                    }
                }
            }
        }
        SetValue($CountID, --$Count);
        if ($Count <= 0) IPS_SetScriptTimer($_IPS['SELF'], 0);
        return;
    }
}

if (@IPS_GetEventIDByName("AdaptivesLicht Morgens", $_IPS['SELF']) == false){
    $eid = IPS_CreateEvent(1);                      //Zyklisches Ereignis
    IPS_SetEventCyclic($eid, 0, 0, 0, 0, 0, 0);    //Jeden Tag
    IPS_SetEventCyclicTimeFrom($eid, 9, 0, 0);      // Zeit setzen
    IPS_SetParent($eid, $_IPS['SELF']);             //Ereignis zuordnen
    IPS_SetEventActive($eid, true);                 //Ereignis aktivieren    
    IPS_SetName($eid, "AdaptivesLicht Morgens");
}
if (@IPS_GetEventIDByName("AdaptivesLicht Abends", $_IPS['SELF']) == false){
    $eid = IPS_CreateEvent(1);                      //Zyklisches Ereignis
    IPS_SetEventCyclic($eid, 0, 0, 0, 0, 0, 0);    //Jeden Tag
    IPS_SetEventCyclicTimeFrom($eid, 18, 0, 0);      // Zeit setzen
    IPS_SetParent($eid, $_IPS['SELF']);             //Ereignis zuordnen
    IPS_SetEventActive($eid, true);                 //Ereignis aktivieren    
    IPS_SetName($eid, "AdaptivesLicht Abends");
}


if (date("G") == 9){
    SetValue($StartID, 360);
    SetValue($StepID, -200 / 60);
    SetValue($CountID, 60);
    IPS_SetScriptTimer($_IPS['SELF'], 60);
}
else if (date("G") == 18){
    SetValue($StartID, 160);
    SetValue($StepID, 200 / 60);
    SetValue($CountID, 60);
    IPS_SetScriptTimer($_IPS['SELF'], 60);
}
?>

Wenn Lampen eingeschaltet werden sollte zusätzlich die Variable ‚Start‘ als Farbtemperatur benutzt werden damit sie den aktuelle Stand hat.

Ralf