+ Antworten
Ergebnis 1 bis 4 von 4

Thema: Etagenlicht

  1. #1
    Registriert seit
    Jun 2012
    Ort
    House of Dragons @ Lübeck
    Beiträge
    8,282

    Standard Etagenlicht

    Da ich das Script nie komplett gepostet hatte, sondern immer nur Auszüge, gibt es das jetzt mit Erklärungen hier im Thema.

    Dieses Script ist universell und braucht nicht zu verändert werden.
    Es bezieht alle Informationen aus den zugehörigen Ereignissen und Namen der Objekte.
    Hintergrund war eine wartungsarme Umsetzung, so das einfach durch hinzufügen von Ereignissen neue Aktoren mit in eine Etage / Gruppe aufgenommen sind.

    PHP-Code:
    <?
    /*
    Einmalig:
    ----------
    Kategorie erzeugen, Script anlegen und diesen Inhalt einfügen.
    Script verstecken.
    Kategorie beliebig verlinkten, oder später die Etagenvariablen verlinken, für die Visualisierung im WebFront.


    Pro Etage:
    ----------
    Variable in IPS vom Typ bool anlegen.
    Namen für Etage/Gruppe vergeben. z.B. 'Keller'
    Profil ~Switch eintragen.
    Dieses Script hier als Aktionsskript auswählen.

    Pro Gerät:
    ----------
    Auslösendes Ereignis in IPS anlegen.
    Auslösen bei Wertänderung der Variable vom Gerät.
    Als Ziel dieses Script eintragen. 
    Ereignis dem Namen von der Etage geben. z.B. Keller
    */
    if ($_IPS['SENDER']=="WebFront" || $_IPS['SENDER']=="RunScript"// Nur über WebFront, IPS_RunScriptEx oder IPS_RequestAction
    {
        if (!
    $_IPS['VALUE']) // nur ausschalten erlauben
        
    {
            
    SetValue($_IPS['VARIABLE'], $_IPS['VALUE']); // Variable Etage aktualisieren
            
    $EtagenNamen=IPS_GetName($_IPS['VARIABLE']);
            
    $Events=array();
            foreach (
    IPS_GetChildrenIDs($_IPS['SELF']) as $ObjectID// Alle Unterobjekte
            
    {
                if ((
    IPS_GetName($ObjectID)==$EtagenNamen) && (IPS_GetObject($ObjectID)['ObjectType']==4)) // Wenn Objekt Ereignis ist und den Namen von der Etage hat
                
    {
                    
    $TriggerVariableID IPS_GetEvent($ObjectID)['TriggerVariableID']; // VariableID vom Ereignis holen
                    
    IPS_SetEventActive($ObjectID,false); // Ereignis deaktivieren, damit Teil 2 nicht ausgeführt wird
                    
    $Events[]=$ObjectID;
                    switch (
    IPS_GetVariable($TriggerVariableID)['VariableType']) // Typ der Variable
                    
    {
                        case 
    0//bool
                            
    $Value false;     
                        break;
                        case 
    1// int
                        
    case 2//float
                            
    $Value 0;
                        break;
                        case 
    3// string
                            
    die ('String nicht unterstützt');
                        break;
                    }
                    
    IPS_RequestAction(IPS_GetParent($TriggerVariableID),IPS_GetObject($TriggerVariableID)['ObjectIdent'],$Value);
                }
            }
            
    IPS_Sleep(1000); // Kurz warten
            
    foreach ($Events as $ObjectID)
            {
                
    IPS_SetEventActive($ObjectID,true); // Ereignis wieder aktivieren
            
    }
        }
    }
    elseif (
    $_IPS['SENDER']=="Variable"// Wenn sich ein Licht in der Etage ändert (auslösendes Ereignis
    {
        
    $EtagenNamen=IPS_GetName($_IPS['EVENT']); // Name vom Ereignis
        
    echo $EtagenNamen.PHP_EOL;
        
    $EtagenVariableIDIPS_GetObjectIDByName($EtagenNamen,IPS_GetParent($_IPS['SELF']));
        echo 
    $EtagenVariableID.PHP_EOL;
        
    $NewValue=false// Variable vorbelegen mit false (oder Verknüpfung im switch)
        
    foreach (IPS_GetChildrenIDs($_IPS['SELF']) as $ObjectID)
        {
            if ((
    IPS_GetName($ObjectID)==$EtagenNamen) && (IPS_GetObject($ObjectID)['ObjectType']==4))  // Wenn Objekt Ereignis ist und den Namen von der Etage hat
            
    {
                
    $TriggerVariableID IPS_GetEvent($ObjectID)['TriggerVariableID']; // VariableID vom Ereignis holen
                
    echo $TriggerVariableID.PHP_EOL;
                switch (
    IPS_GetVariable($TriggerVariableID)['VariableType']) // Typ der Variable
                
    {
                    case 
    0//bool
                        
    if (GetValueBoolean($TriggerVariableID)) $NewValue=true;
                    break;
                    case 
    1// int
                    
    case 2//float
                        
    if (GetValue($TriggerVariableID) > 0$NewValue=true;
                    break;
                    case 
    3// string
                        
    die ('String nicht unterstützt');
                    break;
                }
            }
        }
        
    SetValueBoolean($EtagenVariableID,$NewValue); //Etagenvariable setzen
    }
    ?>
    Michael
    on Win7VM (ESXi): I5, 24GB RAM, HW-RAID5, 3xSat | HW: CCU + 123 Geräte (506ch), EM1000, CUL, 1Wire, XBee, ELRO 433MHz, FritzBox Cable, Android Phone + Tablet, Samsung C-Serie TV +SamyGo-Ext, Onkyo NR| SW: IPS, Apache2(mod_ssl/PHP), MySQL, hMailServer, PRTG, Rising AV, Piwik, RoundCube, Wordpress, WinLIRC, WHS2011, MediaPortal, XBMC

  2. #2
    Registriert seit
    Jul 2010
    Ort
    Südwestpfalz
    Beiträge
    6,504

    Hi Michael,

    das ist ne feine Lösung, die richtig gut funktioniert. Ich hatte nur mehrere Probleme mit der WebKonsole. Da hatte ich diverse Fehler.
    Bin dann auf die alte Konsole und dann hatte ich keine Fehler mehr.

    Vielen Dank für die schnelle und hervorragende Hilfe


    Gesendet von iPhone XS mit Tapatalk
    Gruß Boui . . . IPS-unlim. auf Tinker Board S und pivccu

    Die gefährlichste Form der Zensur ist die Schere im eigenen Kopf.(Curzio Malaparte)

  3. #3
    Registriert seit
    Jan 2018
    Ort
    97469 Gochsheim
    Beiträge
    178

    Hallo Michael,

    ich habe dein Etagenlicht nach Anleitung (Variable Bool + ~switch + Actionsscript) eingerichtet. Wenn ich ein Licht in einer Etage anschalte springt der Switch von off auf on und umgedreht beim ausschalten.
    Sollten alle Lichter einer Etage auch über den Switch ausgeschalten werden, wenn ich im Webfront "Off" drücke?. kommt nämlich immer nur " X Fehler".


    Klicken Sie auf die Grafik für eine größere Ansicht 

Name:	Etagenlicht.JPG 
Hits:	70 
Größe:	89.3 KB 
ID:	47841

    Gruß

    Oliver

  4. #4
    Registriert seit
    Apr 2010
    Beiträge
    419

    Mal ausprobiert. Hab nen paar locken wegen Eltako Unzulänglichkeiten (da müsste ich was ändern) aber sonst geht es.

    Ich hatte mir auch sowas gebastelt. Mein Ansatz war mit Link der Lampen in einer Kategorie. Mein Script hat dann eine Summen variable aktualisiert (Anzahl eingeschalteter Lampen) bzw. die Links dann zum gezielten Schalten ein geblendet wenn sie noch eingeschaltet sind.

    Klicken Sie auf die Grafik für eine größere Ansicht 

Name:	Bildschirmfoto 2019-02-19 um 15.00.41.png 
Hits:	40 
Größe:	191.3 KB 
ID:	47847

    Vielleicht könnte man mit dem Pop-Up Modul was machen damit es bei mir kompakter wäre. Aber das Modul hat keine Variable. Schade eigentlich.
    Eltako 12er und 14er Bus, IPS auf Pi