HomeMatic Rollläden nur runterfahren, wenn noch nicht runtergefahren

Fortsetzung von hier:
IP-Symcon - Wie kann ich… 2.0 (Ideen & Wünsche) - Seite 2

Was spuckt denn dieses Skript bei dir aus?

<?
$Aktoren_Array = array(14615,38652); 

// Nur Rollladen herunterfahren, die nicht bereits komplett unten sind 

foreach($Aktoren_Array as $HM_InstanzID) { 
    $LEVEL_ID = IPS_GetVariableIDByName("Level", $HM_InstanzID);
    echo $LEVEL_ID.PHP_EOL; 
    if(GetValue($LEVEL_ID) != 1) { 
       $HochgefahreneRolllaeden_Array[] = $LEVEL_ID; 
    } 
}

print_r($HochgefahreneRolllaeden_Array);
?>

Mist…Tippfehler gehabt. Probier bitte das hier nochmal und mach mal selbst die Augen auf :smiley:

<?  
// Hier die Instanz-IDs der HM-Rollladen-Aktoren eintragen, welche gesteuert werden sollen: 
$Aktoren_Array = array(14615,38652); 

// Nur Rollladen herunterfahren, die nicht bereits komplett unten sind 
foreach($Aktoren_Array as $HM_InstanzID) {  
    $LEVEL_ID = IPS_GetVariableIDByName("LEVEL", $HM_InstanzID);  
    if(GetValue($LEVEL_ID) != 1) {  
       $HochgefahreneRolllaeden_Array[] = $HM_InstanzID;  
    }  
}  

// Wenn nicht runtergefahrende Rollläden gefunden wurden, dann werden diese jetzt heruntergefahren  
if ($HochgefahreneRolllaeden_Array) {  
    foreach ($HochgefahreneRolllaeden_Array as $HM_InstanzID) {  
        HM_WriteValueFloat($HM_InstanzID, "LEVEL", 1);  
        IPS_Sleep(300); // zwischen den Schaltvorgängen einen kleinen Moment warten  
    }  
} 
?>

-Chris-

Wie gehabt,

Notice: Undefined variable: HochgefahreneRolllaeden_Array in /mnt/data/symcon/scripts/47049.ips.php on line 14

Bei $LEVEL_ID = IPS_GetVariableIDByName(„Level“, $HM_InstanzID); muss Level klein geschrieben werden, sonst wird da auch gemeckert.

Und die Ausgabe bei dem ersten Code lautet:

43464 40333
Notice: Undefined variable: HochgefahreneRolllaeden_Array in /mnt/data/symcon/scripts/47049.ips.php on line 14

Die beiden IDs sind die ObjektID vom Level der beiden Rolladen Instanzen aus dem Array.

ich glaube, PHP ist nicht für mich gemacht :frowning: :o

Loerdy

Also, habs eben mit HomeMatic Dimmern getestet (haben auch eine „Level“-Variable)…das Skript funktioniert einwandfrei.

Hast du auch sicher die HomeMatic-INSTANZ-IDs eingetragen oben im Array und nicht die VARIABLEN-IDs??

<?
// Hier die Instanz-IDs der HM-Rollladen-Aktoren eintragen, welche gesteuert werden sollen:
$Aktoren_Array = array(11111,22222);

// Nur Rollladen herunterfahren, die nicht bereits komplett unten sind
foreach($Aktoren_Array as $HM_InstanzID) {
    $LEVEL_ID = IPS_GetObjectIDByIdent("LEVEL", $HM_InstanzID);
    if(GetValue($LEVEL_ID) != 1) {
       $HochgefahreneRolllaeden_Array[] = $HM_InstanzID;
    }
}
//print_r($HochgefahreneRolllaeden_Array);

// Wenn nicht runtergefahrende Rollläden gefunden wurden, dann werden diese jetzt heruntergefahren
if (isset($HochgefahreneRolllaeden_Array)) {
    foreach ($HochgefahreneRolllaeden_Array as $HM_InstanzID) {
        HM_WriteValueFloat($HM_InstanzID, "Level", 1);
        //echo $HM_InstanzID;
        IPS_Sleep(300); // zwischen den Schaltvorgängen einen kleinen Moment warten
    }
}
?>

-Chris-

So, nun ist der Groschen gefallen :o

ich habe mich mit 0 und 1 verhaspelt, 0 = zu, 1 = auf, habe also immer verkehrt herum getestet …:eek:

Notice: Undefined variable: HochgefahreneRolllaeden_Array in /mnt/data/symcon/scripts/47049.ips.php on line 15
besagt also nichts weiter als das Array ist leer und das Script wird weiter abgearbeitet.
Heute abend lief das Script nämlich plötzlich fehlerfrei weil die Rollos geschlossen waren.

Vielen Dank für Deine Bemühungen mir zu helfen …
:o:o:o

Loerdy

Aja :smiley: Trotzdem dürfte kein Fehler kommen :confused:

Hab das Skript im Post davor nochmal überarbeitet und „isset“ eingebaut. Kannst du bitte damit nochmal testen, ob das Skript dann nicht mehr mit Fehler abbricht, wenn das Array nicht existiert?

Kein Problem :slight_smile: Aber das nächste Mal schaffst du sowas auch allein :wink:

Grüße,
Chris

Und der Vollständigkeit halber, für die Suche.
IPS_GetVariableIDByName ist ‚böse‘.
Was ist denn wenn die Variablen ‚Küche Jalousie‘ oder ‚Wohnzimmer Jalousie‘ heißen ? Dann läuft das Script nicht.

Für Statusvariablen nutzt man besser IPS_GetObjectIDByIdent.
Dort wird ‚LEVEL‘ dann auch groß geschrieben.
Michael

Danke für den guten Hinweis :slight_smile: Hab es direkt oben im Skript sowie im „wie kann ich 2.0“ Thread angepasst :slight_smile:

Grüße,
Chris

Sorry das ich mich erst jetzt wieder zu dem Thema melde. Die Madam hat mir die Testerlaubnis entzogen :D, ich kam erst jetzt wieder zum weitermachen.

Läuft sehr gut und nochmals VIELEN DANK an alle Beteiligten!!!

:o

Loerdy

:smiley: :smiley: :smiley:

Freut mich, dass es geklappt hat! Weiterhin viel Spaß mit IPS :slight_smile:

Grüße,
Chris