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