+ Antworten
Ergebnis 1 bis 7 von 7

Thema: Etagenlicht

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

    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,599

    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
    179

    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:	116 
Größe:	89.3 KB 
ID:	47841

    Gruß

    Oliver

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

    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:	82 
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

  5. #5
    Registriert seit
    Dec 2012
    Ort
    Großraum Stuttgart ...
    Beiträge
    627

    Hi,

    danke erstmal für das Script. Ich spiele gerade damit herum und wirft mein gesamtes Konzept über den Haufen ... :-)

    Meine Frage ist, wie wäre der Ansatz wenn ich zu einem meine Bewegungsmelder zusammen fassen würde
    und entsprechende Lichtaktoren damit Ein.-/Ausschalten möchte.

    Mein Gedanke wäre unter dem Script als Ereignis alle BWM darunter anzulegen und dann ??
    Ein weiteres Etagen Lichtscript anlegen was durch das Etagen BWM-Script aufgerufen wird und den Ein bzw. Ausschaltwert
    mit übergeben wird ???

    Ich hab da gerade keine Sinnvolle Idee dazu ?


    Gruß
    MacToolz
    Win10 IPS 5.0, ZWave (Fibaro), ZigBee (Osram), EnOcean (Eltako), Homematic, Philips, Beckhoff CX2030, W&T Ethernet/RS485 ...

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

    Zitat Zitat von jagu Beitrag anzeigen
    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:	116 
Größe:	89.3 KB 
ID:	47841

    Gruß

    Oliver
    Ja, das sollte funktionieren.
    Kann es sein das vor oder nach den PHP-Tag noch Leerzeilen sind? Dann lösch die bitte raus.


    Zitat Zitat von mactoolz Beitrag anzeigen
    Hi,

    danke erstmal für das Script. Ich spiele gerade damit herum und wirft mein gesamtes Konzept über den Haufen ... :-)

    Meine Frage ist, wie wäre der Ansatz wenn ich zu einem meine Bewegungsmelder zusammen fassen würde
    und entsprechende Lichtaktoren damit Ein.-/Ausschalten möchte.

    Mein Gedanke wäre unter dem Script als Ereignis alle BWM darunter anzulegen und dann ??
    Ein weiteres Etagen Lichtscript anlegen was durch das Etagen BWM-Script aufgerufen wird und den Ein bzw. Ausschaltwert
    mit übergeben wird ???

    Ich hab da gerade keine Sinnvolle Idee dazu ?


    Gruß
    MacToolz
    Das Script ist ursprünglich nur dafür gedacht bequem im WebFront einen Überblick und eine Summenvariable pro Etage zu bekommen.
    Die Basis kannst du natürlich auch zum ein und ausschalten durch andere Ereignisse wie die Bewegungsmelder nutzen.

    Würde ich dazu aber unabhängig von dem obigen Script in IPS umsetzen.

    Im Prinzip brauchst du auch nur die Verknüpfung in Richtung Bewegungsmelder (Name vom Ereignis) zum Aktor. Bei dem Script oben wird es ja in beide Richtungen benutzt (Aktionsvariable zu allen Aktoren und Ereignisse der Aktoren zu Aktionsvariable).
    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

  7. #7
    Registriert seit
    Dec 2012
    Ort
    Großraum Stuttgart ...
    Beiträge
    627

    Zitat Zitat von Nall-chan Beitrag anzeigen
    ...

    Im Prinzip brauchst du auch nur die Verknüpfung in Richtung Bewegungsmelder (Name vom Ereignis) zum Aktor. Bei dem Script oben wird es ja in beide Richtungen benutzt (Aktionsvariable zu allen Aktoren und Ereignisse der Aktoren zu Aktionsvariable).
    Michael

    Da kann ich leider nicht folgend, hab nicht verstanden was du damit genau meinst ?


    Gruß
    MacToolz
    Win10 IPS 5.0, ZWave (Fibaro), ZigBee (Osram), EnOcean (Eltako), Homematic, Philips, Beckhoff CX2030, W&T Ethernet/RS485 ...