Wie Zustand Steckdosen merken -> Später wiederherstellen

Aloha,

ich bastele an einem Skript, das bei Abwesenheit diverse Aktionen setzt:
Raffstore nach unten
Heizung auf Nachtmodus
Steckdosen Zentral aus
usw…

Jetzt möchte ich alle Steckdosen die vorher auf EIN waren bei Rückkehr wieder einschalten.

Wie könnte man das am einfachsten machen?

Danke und lg

Das geht nur über Variablen in IPS. Alternativ habe ich es auch schon mal so gemacht (war aber was anderes) dass ich mir ein Array als Json String gespeichert habe. Hat den Vorteil, dass man nur eine Variable braucht. Andererseits musst halt in dem Skript vorher das Json in Array und am Ende wieder in Json speichern. Und im Json könntest du nicht nur boolsche Zustände, sondern jegliche Werte ablegen.

Horcht sich kompliziert an.
Gibts da eventuell etwas Code :innocent:

Danke und lg

$arrayvariable = array(); 
$jsonvariable = '{"0":"1","1":"2"}'; /* hier kommt das getvalue(1234); hin*/

$arrayvariable = json_decode($jsonvariable,true); /*in ein array umwanden */
foreach ($arrayvariable as $variable)
{
    echo $variable."\n"; 
}
/*Verarbeitung. Es muss natürlich das array mit den richtigen Werten befüllt werden. Evenutell mit unset($arrayvariable); das array löschen und dann neu befüllen.*/
$jsonvariable = json_encode($arrayvariable); /* in json umwanden und dann noch ein setvalue(1234,$jsonvariable); machen*/

Hoffe das hilft etwas.

Hallo ich habe das ganze per script und maßig variablen als Merker gelöst, aufwändig muss gepflegt werden wenn was dazukommt oder ID sich ändert aber funktioniert, wichtig war mir hier auch die Abfrage nach notwendigkeit. Ich verlasse das haus Abends im Dunkeln (fast alle lichter ein) und komme am nächsten morgen (hell) wieder heim, hierbei sollte dann keine Beleuchtung notwendig sein.

//Ausschalten Außenbeleuchtung Geofency

$Helligkeit = GetValueFloat(25436);

print („Helligkeit -$Helligkeit-\n“);

SetValueBoolean (49901, false);//Anwesenheit

//=====================================================================

//Status holen

//EG

$StatusGarderobeDim = GetValue(17255);

$StatusWindfangDim = GetValue(45146);

$StatusGarderobeWand = GetValue(22071);

$StatusGaestebadWandDim = GetValue(38716);

  • alle weiteren aktoren

//OG

$StatusBueroYvonneDim = GetValueInteger(28576);

$StatusBueroAndreasDim = GetValueInteger(15213);

$StatusAnkleideDim = GetValue(42982);

$StatusSZWandDim = GetValue(19923);

  • alle weiteren aktoren

//UG/EW

$StatusUGWZDim = GetValueInteger(53115);

$StatusUGKuecheDim = GetValueInteger(35595);

$StatusUGSZDecke = GetValue(26783);

$StatusUGSZWand = GetValue(50953);

  • alle weiteren aktoren

//========================================================================

//Merker setzen

//EG

SetValueInteger (15763,$StatusWindfangDim);

SetValueInteger (26012,$StatusGarderobeDim);

SetValue (27170,$StatusGarderobeWand);

SetValueInteger (34639,$StatusGaestebadWandDim);

  • alle weiteren aktoren

//OG

SetValueInteger (43813,$StatusBueroYvonneDim);

SetValueInteger (10106,$StatusBueroAndreasDim);

SetValueInteger (28947,$StatusAnkleideDim);

SetValueInteger (29291,$StatusSZWandDim);

  • alle weiteren aktoren

//UG/EW

SetValueInteger (39987,$StatusUGWZDim);

SetValueInteger (25994,$StatusUGKuecheDim);

SetValue(18316,$StatusUGSZDecke);

SetValue(37273,$StatusUGSZWand);

  • alle weiteren aktoren

//============================================================================

//Ausschalten

//EG

LCN_SetIntensity(30716,0,5);//Dach Dimmer Außen

LCN_SwitchRelay(57609,false);//Dach

LCN_SetIntensity(18577,0,5);//Garderobe Decke

LCN_SetIntensity(14524,0,5);//Windfang Decke

  • alle weiteren aktoren

//OG

LCN_SetIntensity(48693,0,5);

LCN_SetIntensity(52330,0,5);

LCN_SetIntensity(35342,0,5);

LCN_SetIntensity(30172,0,5);

  • alle weiteren aktoren

//UG/EW

LCN_SetIntensity(57031,0,5);

LCN_SetIntensity(19026,0,5);

LCN_SwitchRelay(53005,false);

LCN_SwitchRelay(29567,false);

  • alle weiteren aktoren

print („Alle Lichter erfolgreich abgespeichert“);

?>

ähnliches Script muss dann in umgekehrter Reihenfolge bei Ankunft erfolgen

//Einschalten Außenbeleuchtung Geofency

$Helligkeit = GetValueFloat(25436);

print („Helligkeit -$Helligkeit-\n“);

SetValueBoolean (49901, true);// Anwesenheit

//Status EG

$StatusGarderobeDim = GetValueInteger(26012);

$StatusWindfangDim = GetValueInteger(15763);

$StatusGarderobeWand = GetValue(27170);

$StatusGaestebadWandDim = GetValue(34639);

  • alle weiteren aktoren

//Status OG

$StatusBueroYvonneDim = GetValueInteger(43813);

$StatusBueroAndreasDim = GetValueInteger(10106);

$StatusAnkleideDim = GetValue(28947);

$StatusSZWandDim = GetValue(29291);

  • alle weiteren aktoren

//Status UG/EW

$StatusUGWZDim = GetValue(39987);

$StatusUGKuecheDim = GetValue(25994);

$StatusUGSZDecke = GetValue(18316);

$StatusUGSZWand = GetValue(37273);

  • alle weiteren aktoren

if ($Helligkeit>1000)

{

print („über 1000Lux → zu Hell für Ankunftbeleuchtung\n“);

}

else

{

print („unter 1000Lux → Ankunftbeleuchtung ein\n“);

LCN_SwitchRelay(25654 ,true);//Vorgarten Cube ein

LCN_SetIntensity(30716 ,100,5);//Dach Dimmer Außen

LCN_SwitchRelay(57609 ,true);//Dach

}

if ($StatusWindfangDim<1)

{

LCN_SetIntensity(18577 ,100,5);//Garderobe Decke

LCN_SetIntensity(14524,100,5);//Windfang Decke

LCN_SwitchRelay(33343 ,true);//Garderobe Wand

echo („Windfang war aus\n“);

}

else

{

LCN_SetIntensity(18577 ,$StatusGarderobeDim,5);//Garderobe Decke

LCN_SetIntensity(14524,$StatusWindfangDim,5);//Windfang Decke

LCN_SwitchRelay(33343 ,$StatusGarderobeWand);//Garderobe Wand

}

//EG

LCN_SetIntensity(50240,$StatusGaestebadWandDim,0);//GästeWand

LCN_SetIntensity(35862,$StatusGaestebadDeckeDim,5);//GästeDecke

LCN_SetIntensity(13792,$StatusFlurDim,5);//Flur

LCN_SetIntensity(39101,$StatusKueche1Dim,5);//Küche1

  • alle weiteren aktoren

//OG

LCN_SetIntensity(48693,$StatusBueroYvonneDim,5);

LCN_SetIntensity(52330,$StatusBueroAndreasDim,5);

LCN_SetIntensity(35342,$StatusAnkleideDim,5);

LCN_SetIntensity(30172,$StatusSZWandDim,5);

  • alle weiteren aktoren

//UG/EW

LCN_SetIntensity(57031,$StatusUGWZDim,5);

LCN_SetIntensity(19026,$StatusUGKuecheDim,5);

LCN_SwitchRelay(53005,$StatusUGSZDecke);

LCN_SwitchRelay(29567,$StatusUGSZWand);

  • alle weiteren aktoren

echo („Werte aus Merkern gesetzt“);

IPS_SetScriptTimer (17263 , 300 );

?>

//Status OG

$StatusBueroYvonneDim = GetValueInteger(43813);

$StatusBueroAndreasDim = GetValueInteger(10106);

$StatusAnkleideDim = GetValue(28947);

$StatusSZWandDim = GetValue(29291);

  • alle weiteren aktoren

//Status UG/EW

$StatusUGWZDim = GetValue(39987);

$StatusUGKuecheDim = GetValue(25994);

$StatusUGSZDecke = GetValue(18316);

$StatusUGSZWand = GetValue(37273);

  • alle weiteren aktoren

if ($Helligkeit>1000)

{

print („über 1000Lux → zu Hell für Ankunftbeleuchtung\n“);

}

else

{

print („unter 1000Lux → Ankunftbeleuchtung ein\n“);

LCN_SwitchRelay(25654 ,true);//Vorgarten Cube ein

LCN_SetIntensity(30716 ,100,5);//Dach Dimmer Außen

LCN_SwitchRelay(57609 ,true);//Dach

}

if ($StatusWindfangDim<1)

{

LCN_SetIntensity(18577 ,100,5);//Garderobe Decke

LCN_SetIntensity(14524,100,5);//Windfang Decke

LCN_SwitchRelay(33343 ,true);//Garderobe Wand

echo („Windfang war aus\n“);

}

else

{

LCN_SetIntensity(18577 ,$StatusGarderobeDim,5);//Garderobe Decke

LCN_SetIntensity(14524,$StatusWindfangDim,5);//Windfang Decke

LCN_SwitchRelay(33343 ,$StatusGarderobeWand);//Garderobe Wand

}

//EG

LCN_SetIntensity(50240,$StatusGaestebadWandDim,0);//GästeWand

LCN_SetIntensity(35862,$StatusGaestebadDeckeDim,5);//GästeDecke

LCN_SetIntensity(13792,$StatusFlurDim,5);//Flur

LCN_SetIntensity(39101,$StatusKueche1Dim,5);//Küche1

//OG

LCN_SetIntensity(48693,$StatusBueroYvonneDim,5);

LCN_SetIntensity(52330,$StatusBueroAndreasDim,5);

LCN_SetIntensity(35342,$StatusAnkleideDim,5);

LCN_SetIntensity(30172,$StatusSZWandDim,5);

//UG/EW

LCN_SetIntensity(57031,$StatusUGWZDim,5);

LCN_SetIntensity(19026,$StatusUGKuecheDim,5);

LCN_SwitchRelay(53005,$StatusUGSZDecke);

LCN_SwitchRelay(29567,$StatusUGSZWand);

echo („Werte aus Merkern gesetzt“);

IPS_SetScriptTimer (17263 , 300 );

?>

alternativ ist dies auch über Szenensteuerung in IPS möglich. Erhältlich über ModulStore.

Danke euch beiden. Werd mir das zu gemüte führen!
lg