Hi,
da ich ja beide Typen habe, habe ich zwei unterschiedliche Scripts, diese sind zwar „Quick and Dirty“ - erledigen bei mir aber ihren Zweck problemlos:
- FGR221:
<?
//
set_time_limit(30);
// Ermittlung betroffener Variablen
$zimmer_variable=0;
$var_found=false; //wird benötigt für Zimmervariablenermittlung
$Fehler=False; //dient der Überwachung ob Z_WAVE Befehler erfolgreich
$startzeit= date('D, d.m.y H:i:s');
$Par_ID=IPS_GetParent($_IPS['SELF']); //ID des Scriptes ermitteln
$Name_Par_ID=IPS_GetName($Par_ID);
IPS_LogMessage("Markisensteuerung $Name_Par_ID", "Kalibrierung gestartet FGR-Typ 221 (".$_IPS['SELF'].")");
echo"Script gestartet: $Name_Par_ID - $Par_ID";
$Timer_ID=@IPS_GetScriptTimer($_IPS['SELF']);
$LetzteAutomatik = IPS_GetVariableIDByName("Automatisch bewegt", $Par_ID);
// Ermittlung Aktor und seine Variablen
$aktoren_array=IPS_GetChildrenIDs($Par_ID);
foreach ($aktoren_array as $value) //durchsucht alle Objekte unter PAR_ID
{
$aktor_object_type=IPS_GetObject($value);
$help2=$aktor_object_type['ObjectType'];
$help1=IPS_GetName($value);
// Ermittlung Zimmervariable
If ($help2==2) //Prüfung ob Objekt Variable
{
$zimmer_variable_1=IPS_GetVariable ($value);
$help4=$zimmer_variable_1['VariableCustomProfile'];
if ($help4=="Markise") $zimmer_variable=$value;
if ($help4=="Markise-WG") $zimmer_variable=$value;
//echo"
Help4=$help4";
If ($var_found==false) //damit nur eine Variable angezeigt wird
{
If ($zimmer_variable!=0) echo"
VariableCustomProfile=$help4 Zimmervariable-ID=$zimmer_variable";
$var_found=true;
}
}
// Ermittlung Aktorinstanz
If ($help2==1) //Prüfung ob Objekt Instanz
{
//If ($help2!=1) continue; //Abbruch der Schleife, dieses Element ist keine Instanz
echo"
Aktor: $value = (Typ$help2) (1=Instanz) ($help1)";
$Aktor_Instanz=$value;
}
}
//
Switch ($_IPS['SENDER']) {
Case "Execute": {
//Beginn Timer-Schleife
IPS_SetScriptTimer($_IPS['SELF'], 5);
break;
}
Case "TimerEvent": {
//Auswertung über Timer-Laufzeiten
If (IPS_GetScriptTimer($_IPS['SELF'])==5) {
SetValue($LetzteAutomatik,False);
IPS_SetScriptTimer($_IPS['SELF'], 61); //61 damit Unterschied sichtbar
//
IPS_LogMessage("Kalibrierung Fibaro-Rolläden",$Name_Par_ID." Schritt: 1 nach oben");
ZW_ShutterMoveUP($Aktor_Instanz); //Nach oben bewegen
//
break;
}
//
If (IPS_GetScriptTimer($_IPS['SELF'])==61) {
//ZW_ConfigurationSetValue($id,$notificationStateChange, 1);
ZW_ConfigurationSetValue($Aktor_Instanz ,10, 1); //Parameter 10 auf 1 setzen
IPS_Sleep(2000);
IPS_SetScriptTimer($_IPS['SELF'], 62); //19 damit Unterschied sichtbar
//
IPS_LogMessage("Kalibrierung Fibaro-Rolläden",$Name_Par_ID." Schritt: 2 Parameter 10 auf 1 setzen");
break;
}
//
If (IPS_GetScriptTimer($_IPS['SELF'])==62) {
//ZW_ConfigurationSetValue($id,$notificationStateChange, 1);
ZW_ConfigurationSetValue($Aktor_Instanz ,10, 0); //Parameter 10 auf 0 setzen
IPS_Sleep(2000);
IPS_SetScriptTimer($_IPS['SELF'], 63); //19 damit Unterschied sichtbar
//
IPS_LogMessage("Kalibrierung Fibaro-Rolläden",$Name_Par_ID." Schritt: 3 Parameter 10 auf 0 setzen");
break;
}
//
If (IPS_GetScriptTimer($_IPS['SELF'])==63) {
ZW_ShutterStop($Aktor_Instanz); //Anhalten
IPS_Sleep(2000);
IPS_SetScriptTimer($_IPS['SELF'], 64); //19 damit Unterschied sichtbar
//
IPS_LogMessage("Kalibrierung Fibaro-Rolläden",$Name_Par_ID." Schritt: 4 nach unten");
ZW_ShutterMoveDown($Aktor_Instanz); //Nach unten bewegen //
break;
}
//
If (IPS_GetScriptTimer($_IPS['SELF'])==64) {
ZW_ShutterStop($Aktor_Instanz); //Anhalten
IPS_Sleep(2000);
IPS_SetScriptTimer($_IPS['SELF'], 65); //19 damit Unterschied sichtbar
//
IPS_LogMessage("Kalibrierung Fibaro-Rolläden",$Name_Par_ID." Schritt: 5 nach oben");
ZW_ShutterMoveUP($Aktor_Instanz); //Nach oben bewegen //
break;
}
//
If (IPS_GetScriptTimer($_IPS['SELF'])==65) {
ZW_ShutterStop($Aktor_Instanz); //Anhalten
IPS_Sleep(2000);
IPS_SetScriptTimer($_IPS['SELF'], 66); //19 damit Unterschied sichtbar
//
IPS_LogMessage("Kalibrierung Fibaro-Rolläden",$Name_Par_ID." Schritt: 6 nach unten");
ZW_ShutterMoveDown($Aktor_Instanz); //Nach unten bewegen //
break;
}
//
If (IPS_GetScriptTimer($_IPS['SELF'])==66) {
ZW_ShutterStop($Aktor_Instanz); //Anhalten
IPS_Sleep(2000);
IPS_SetScriptTimer($_IPS['SELF'], 67); //19 damit Unterschied sichtbar
//
IPS_LogMessage("Kalibrierung Fibaro-Rolläden",$Name_Par_ID." Schritt: 7 nach oben");
ZW_ShutterMoveUP($Aktor_Instanz); //Nach oben bewegen //
break;
}
//
//Letzter Schritt
{
ZW_ShutterStop($Aktor_Instanz); //Anhalten
IPS_SetScriptTimer($_IPS['SELF'], 0);
IPS_LogMessage("Kalibrierung Fibaro-Rolläden",$Name_Par_ID." beendet (Schritt: 7)");
SetValue($LetzteAutomatik,True);
break;
}
//
}
default: {
//Beginn Timer-Schleife
IPS_SetScriptTimer($_IPS['SELF'], 5);
break;
}
}
//
Ende_Script:
?>
- FGR222:
<?
// max. Scriptlaufzeit definieren
ini_set('max_execution_time', 90); //war auf 90sek
$Par_ID=IPS_GetParent($_IPS['SELF']);
$Name_Par_ID=IPS_GetName($Par_ID);
//
// Ermittlung Aktor und seine Variablen
$aktoren_array=IPS_GetChildrenIDs($Par_ID);
foreach ($aktoren_array as $value) //durchsucht alle Objekte unter PAR_ID
{
$aktor_object_type=IPS_GetObject($value);
$help2=$aktor_object_type['ObjectType'];
$help1=IPS_GetName($value);
// Ermittlung Aktorinstanz
If ($help2==1) //Prüfung ob Objekt Instanz
{
echo"
Aktor: $value = (Typ$help2) (1=Instanz) ($help1)";
$Aktor_Instanz=$value;
}
}
//
//
ZW_ConfigurationSetValue($Aktor_Instanz,29,1); //default //FGR222 fährt allein "Forced Roller Shutter Calibration
IPS_LogMessage("Markisensteuerung $Name_Par_ID", "Kalibrierung gestartet FGR-Typ 222 (".$_IPS['SELF'].")");
Ende_Script:
?>
Ich habe diese jetzt einfach kopiert ohne „aufzuhübschen“…
Aufrufen tue ich sie von der gleichen Ebene wo auch die Aktoren sind (bei mir alles unter einer Dummy-Instanz)
herbertf