+ Antworten
Ergebnis 1 bis 4 von 4
  1. #1
    Registriert seit
    Sep 2009
    Ort
    Hannover
    Beiträge
    525

    Standard br_IPS / PHP Libraries zu IP-Symcon

    Moin zusammen,

    ich bin immer auf der Suche nach APIs und Standards gewesen und habe mir dazu zumeist unabhängige Funktionen und Libaries programmiert, welche den nicht Programmierern unter den IPS Anwendern sicher auch helfen können!

    Ich veröffentliche hier einfach einen Teil meines Arbeitsstandes - auf dem Weg meine pers. Hausautomatisierung zu strukturieren und zu verbessern selektiv und hoffe es hilft Jemandem weiter.

    Meine Libs sollten zumeist direkt sinnvoll eingesetzt werden können oder sie suchen sich die notwendigen Informationen aus der Ip-Symcon Hierarchie (bei Beachtung der Anleitung) selber. Vorraussetzungen wie z.B. eine bestimmte Hierarchie werden erläutert und Hintergründe sind in Kommentaren des Codes aufgeführt..

    Nutzung
    - Skripte in den Ordner IP-Symcon\scripts kopieren
    - Include im eigenen Skript machen
    PHP-Code:
    require ("functions.inc.php"
    - Ggf. die einzelnen Skriptdateien in IP-Symcon erstellen (spezieller Name und Datei hochladen) um die Dateien als Funktionsreferenz über den Objektbaum im Zugriff zu haben

    Beispiel: "Alle Lichter aus"
    Vorraussetzung: Lichter müssen "Licht" im Namen enthalten um gefunden zu werden.
    PHP-Code:
    <?
    require ("functions.inc.php");
    // br_searchinst sucht hier alle Objekte mit Licht im Namen und liefert ein Array
    // Der Wrapper br_switch bearbeitet bei Übergabe eines Arrays alle Elemente
    // und schaltet über false aus.
    // Wenn die 0 als Parent für die Suche auf die Kategorie eines Raums gesetzt 
    // wird, werden z.B. nur die Lichter in diesem Raum abgeschaltet.

    br_switch(br_searchinst(0,"Licht"),false);
    ?>
    Historie
    22.05.2010 20:00 Neue Version, Problem mit doppelten [CODE]<?[/CODE> Tags behoben
    15.06.2010 Neue Version, Improvements beim Object Handling und -Zusammenführung mit meiner pers Entwicklung (der Quellcode enthält allerdings vermutlich immer mehr Funktionen als meine Beschreibungen in diesem Thread)
    19.11.2010 Kleinere Korrekturen
    21.11.2010 1.5 Abgleich mit meiner Entwicklungskopie(!)
    - Hinzufügen von br_piri (zur Verwaltung eines PIRI in einer Category)
    - Vorbereitungen um Konfigurationen in eigene Dateien auszulagern
    - Verbesserungen in dem Kommentaren und taggen der Dateien mittels PHP define um Versionsinformationen (Major, Minor und eindeutigem und sprechenden Tag) unterzubringen (aktuell werden die Informationen nicht abgefragt und nur gesetzt). Zukünftig kann darüber ggf. eine Abwärstkompatibilität gewährleistet werden.

    Aktuellste Version:
    25.11.2010 1.5.1 Bugfix $NAME_SI in br_searchinst
    - Bugfix $NAME_SI in br_searchinst ist nicht definiert bzw. im Scope: Auslagern von NAME_SI in $cfg_br_ips['si_default_name'] in einer config.inc.php
    - Einführung config.inc.php für globale Parameter und Defaults

    - (PRE - SONOS Routinen)
    An dieser Stelle, nochmals Vielen Dank für das bisher erhaltene Feedback!

    Bitte sendet mir bei veröffentlichten Logik oder Programmcodefehlern gerne direkt eine PM, so dass ich den Fehler schnellstmöglich korrigieren kann, damit sich Niemand bei der - nicht notwendigen Suche - von Fehlern aufhalten muss.

    Grüße, Benjamin

    Pre 1.5.7 löst unlinked Sonos Groups ggf. nicht auf / Fix in br_sonos.inc.php:
    PHP-Code:
    // !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
    // TAG_TODO_BR Intelligenz zum Aufbau der Zonen Topologie hier einbauen
    //  We are slave and save to coord rincon

       
    $curCoord=$match[1];
        
    $arrzonegroups[$curCoord]['Coordinator']=(string) $curCoord;

        
    $arrzonegroups[$curCoord]['Member'][$arrzoneplayers[$curzoneplayerid]['Rincon']]['ID'] = $arrzoneplayers[$curzoneplayerid]['ID'];
          
    $arrzonegroups[$curCoord]['Member'][$arrzoneplayers[$curzoneplayerid]['Rincon']]['Rincon'] = $arrzoneplayers[$curzoneplayerid]['Rincon'];
         
    $arrzonegroups[$curCoord]['Member'][$arrzoneplayers[$curzoneplayerid]['Rincon']]['CurrentZoneName'] = $arrzoneplayers[$curzoneplayerid]['CurrentZoneName'];
         
    $arrzonegroups[$curCoord]['Member'][$arrzoneplayers[$curzoneplayerid]['Rincon']]['CurrentIcon'] = $arrzoneplayers[$curzoneplayerid]['CurrentIcon'];
         
    $arrzonegroups[$curCoord]['Member'][$arrzoneplayers[$curzoneplayerid]['Rincon']]['IPSId'] = $arrzoneplayers[$curzoneplayerid]['IPSId'];

        
    // So unset our Master entry
       
    unset($arrzonegroups[$arrzoneplayers[$curzoneplayerid]['Rincon']]);

        if (
    function_exists('IPSLogger_Dbg'))
            { 
    IPSLogger_Dbg(__file__ "== Line ".__line__." == " .
            
    "We are slave " $arrzoneplayers[$curzoneplayerid]['Rincon'] . " and save to coord " .  $curCoord
            
    ); }
        
          

        
    // $arrzoneplayers[$match['ID']]['IPAddress'];



        
    } else {



       
    $curCoord=$arrzoneplayers[$curzoneplayerid]['Rincon'];
        
    $arrzonegroups[$curCoord]['Coordinator']=$curCoord;

        
    $arrzonegroups[$curCoord]['Member'][$curCoord]['ID'] = $arrzoneplayers[$curzoneplayerid]['ID'];
          
    $arrzonegroups[$curCoord]['Member'][$curCoord]['Rincon'] = $arrzoneplayers[$curzoneplayerid]['Rincon'];
         
    $arrzonegroups[$curCoord]['Member'][$curCoord]['CurrentZoneName'] = $arrzoneplayers[$curzoneplayerid]['CurrentZoneName'];
         
    $arrzonegroups[$curCoord]['Member'][$curCoord]['CurrentIcon'] = $arrzoneplayers[$curzoneplayerid]['CurrentIcon'];
         
    $arrzonegroups[$curCoord]['Member'][$curCoord]['IPSId'] = $arrzoneplayers[$curzoneplayerid]['IPSId'];
    // We are master so delete our slave entries
            
    // br fixed bug for unlinking zones
        
    foreach ($arrzonegroups as $curzonegroup) {
                
    $thisCoord=$curzonegroup['Coordinator'];
                        foreach (
    $curzonegroup['Member'] as $curmember) {
                            if (
    is_string($curzonegroup)) {
                                echo 
    "\n====\n  Coord:" $curzonegroup;
                            } else {
                                
                                  if(
    $curmember['Rincon']==$curCoord){
                                
    //    echo "Should unset now!\n\n";
                                   
    unset($arrzonegroups[$thisCoord]['Member'][$arrzoneplayers[$curzoneplayerid]['Rincon']]);
                                }
                            }
                        }
        }
        


        

                  if (
    function_exists('IPSLogger_Dbg'))
            { 
    IPSLogger_Dbg(__file__ "== Line ".__line__." == " .
            
    "We are coord " $curzoneplayerid "AKA " $curCoord
            
    );}
        } 
    Geändert von bengie (26.04.11 um 21:08 Uhr) Grund: Testversion: 1.5.7 PRE SONOS
    IP-Symcon V4.x_uLd , div. HM+FS20, Irtrans, EEETop 1611, Linksys WRT, div. Sonos, Iphones + Ipads
    http://www.ip-symcon.de/wiki/Hauptseite
    PHPSonos / br_Sonos: Bitte bei Problemen Datum der Dateien angeben.

  2. #2
    Registriert seit
    Sep 2009
    Ort
    Hannover
    Beiträge
    525

    Cool Fs20 Dimmersteuerung Webfront

    Hallo,
    ich möchte einen weiteren Teil meiner Hilfs-Funktionen vorstellen (br_dim.inc.php) einführen:

    Um keine falsche Anzeige der Intensität (bei FS20 Steuerung; kein BiDi) zu haben, habe ich mir eine Variable Helligkeit mit speziellem Profil angelegt, welche den aktuellen Helligkeitsgrad NICHT darstellt, sondern nur zur Entgegennnahme von Kommandos im Webfront dient. Die arbeitende Funktion liest den Wert dann aus, schaltet den Dimmer und setzt auf einen nicht dargestellten Wert zurück.



    Zum Senden des Kommandos muss noch ein Skript zur Übertragung verknüpft werden, welches an beliebigem Ort angelegt werden kann und dann unter "Eigene Aktion" des Variablenprofils zu hinterlegen ist:

    PHP-Code:
    <?
    //Script zum WERTEZUWEISEN aus dem Webfrontend

    if($IPS_SENDER == "WebFront")
    {
        
    SetValue($IPS_VARIABLE$IPS_VALUE);
    }

    ?>
    Die Function br_dimHandleVar arbeitet mit dem Parent, Ihr müsst das aufrufende Skript also unterhalb der zu dimmenden Lampe anlegen, damit es intellligent die Variable findet (idealerweise auch verstecken fürs Webfront) mit dem folgenden Inhalt:

    PHP-Code:
    <?
    require "functions.inc.php";

    br_dimHandleVar($IPS_VARIABLE);
    ?>
    Da das o.g. Skript allgemeingültig ist, habe ich es unter einem speziellen Namen "Dimmer" gespeichert und verwende es somit wieder (bzw. lade es über diesen Namen bei der Neuanlage von weiteren Dimmern).

    So sieht das dann im Webfront aus:



    Bei meinen Lampen (Philips LED) ergibt sich noch das Problem, dass diese aufgrund der Dimmerkonstruktion von ELV nicht ausschalten (sondern flackern), aber auch dies kann man gut skripten, wenn man noch einen FS20 SU davor bezahlen/ bauen möchte (näheres zu LED und den FS20 Produkten bitte per PM erfragen).

    Der relevante Part der
    Lib (wobei dieser in dem ZIP enthalten sein sollte):
    PHP-Code:
    <?
    /*
        This file is part of br_IPSLibaries for IP-Symcon.

        Foobar is free software: you can redistribute it and/or modify
        it under the terms of the GNU General Public License as published by
        the Free Software Foundation, either version 3 of the License, or
        (at your option) any later version.

        br_IPSLibaries is distributed in the hope that it will be useful,
        but WITHOUT ANY WARRANTY; without even the implied warranty of
        MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
        GNU General Public License for more details.

        You should have received a copy of the GNU General Public License
        along with Foobar.  If not, see <http://www.gnu.org/licenses/>.
          Please contact me at br@con8.de and use "br_IPS" anywhere in your email-subject.


    Handle dimrequest and Reset Calling var to zero,
    develeoped for webfront and non bidi devices
    */
    function br_dimHandleVar($IDVar){


        
    $VarValue=GetValue($IDVar);

    if (
    $VarValue==0) return;
        switch (
    $VarValue) {
        
        

        
            case 
    1:
                
    FS20_DimDown((int)br_objParent($IDVar));
                break;
        

            case 
    100:
            

                
    FS20_SetIntensity((int)br_objParent($IDVar),16,2);
                  
    IPS_Sleep(2);
                
    FS20_SetIntensity((int)br_objParent($IDVar),161);

                
    IPS_Sleep(21);
                
    FS20_SetIntensity((int)br_objParent($IDVar),160);


            

                break;

            case 
    101:
                
    FS20_DimUp((int)br_objParent($IDVar));
                break;

            default:
            
                
    FS20_SetIntensity((int)br_objParent($IDVar),(int) $VarValue/100*16 ,0);
                  
    IPS_Sleep(1);
                
    FS20_SetIntensity((int)br_objParent($IDVar),(int) $VarValue/100*160);

                
    IPS_Sleep(50);
                
    FS20_SetIntensity((int)br_objParent($IDVar),(int) $VarValue/100*16 ,0);


        }
        
        
    br_objSetVar(br_objParent($IDVar),"Helligkeit",0);

    }
    ?>
    An dieser Stelle, nochmals Vielen Dank für das bisher erhaltene Feedback!
    Bitte sendet mir bei veröffentlichten Logik oder Programmcodefehlern gerne direkt eine PM, so dass ich den Fehler schnellstmöglich korrigieren kann, damit sich Niemand bei der nicht notwendigen Suche von Fehlern aufhalten muss.

    Viele Grüße,
    Benjamin
    Geändert von bengie (25.11.10 um 21:31 Uhr)
    IP-Symcon V4.x_uLd , div. HM+FS20, Irtrans, EEETop 1611, Linksys WRT, div. Sonos, Iphones + Ipads
    http://www.ip-symcon.de/wiki/Hauptseite
    PHPSonos / br_Sonos: Bitte bei Problemen Datum der Dateien angeben.

  3. #3
    Registriert seit
    Sep 2009
    Ort
    Hannover
    Beiträge
    525

    Cool Unabhängige Schaltung mehrerer Lichter, aber zentrale Ausschaltung (br_searchinst)

    Hallo zusammen,

    ich möchte Euch gerne ein Beispiel zur Anwendung der bestehenden und bekannten Funktionen (br_fs20.inc.php und br_searchinst.inc.php) der Library geben...

    An der weiteren Abstraktion und der Erweiterung der Library arbeite ich gerade! Wenn Funktionen nicht allgemeingültig sind, lohnt sich allerdings keine Veröffentlichung, da diese dann nicht einfach oder ohne weitere Programmierkenntnisse für Jeden nutzbar sind.

    Das Licht in einem Badezimmer schaltet man ja zumeist vor der Tür ein (Decke). Ich habe da noch Leuchten über dem Spiegel, eine Effektbeleuchtung im Schrank und an der Sauna, welche einzeln eingeschaltet werden können (über Schalter im Badezimmer).

    Und wenn ich den gleichen Schalter vor der Tür drücke, soll es im Bad bitte komplett dunkel sein (ohne das ich die IDs der Geräte pflege muss oder über Masteradressen schon beim Betreten des Raums die Beleuchtung komplett anschalte)!


    Vorbedingungen:
    - Ich programmiere die Fs20 Geräte auf einzelne Adressen ohne Master (oder nutze diesen zumindest nicht am Schalter außen)
    - Der Schalter außen schaltet nur mein Hauptlicht direkt per FS20 (und an die Daten Variable dieses Schalter hänge ich ein Ereignis welches das nachfolgende Skript aufruft)
    - Die Namen meiner Lampen enthalten durchgängig einen eindeutigen Begriff um diese zu finden, bei mir "Licht"


    PHP-Code:
    <?
     
    require ("functions.inc.php");
     
    // Ausschalten eines Raumes über den Masterschalter
                
                    
    if($IPS_VALUE == 0){
                          
    //    kurz aus bzw. switch off
                        // ID der Kategorie des Raums anpassen und den String zum finden
                        // der auszuschaltenden Geräte, hier "Licht"
                        
    br_switch(br_searchinst(50895 /*[Wohnung\Bad]*/,"Licht"),false);
                    }
                   if(
    $IPS_VALUE == 20){
                    
                    }
                   if(
    $IPS_VALUE == 17){

                    }
                   if(
    $IPS_VALUE == 19){

                   }
    ?>
    Direkt übernehmen lässt sich das o.g. Beispiel z.B. auch im Schlafzimmer: Hier möchte ich beim Eintreten das Hauptlicht einschalten, nicht jedoch die Leseleuchten am Bett oder die Beleuchtung des Kleiderschranks - beim Verlassen jedoch, soll dann der Raum komplett ausgeschaltet werden!

    Was kann man damit noch machen?
    Die Abschaltung sämtlicher Lichter plus dem Herd und der Kaffeemaschine beim Verlassen der Wohnung ist leicht zu programmieren. Und wenn ich den Lichtschalter für die Leselampe am Bett länger auf AUS drücke ist die Wohnung stromlos oder das Licht geht zumindest aus und IPS wünscht mir eine Gute Nacht!

    Aktuell sind einige meiner Routinen recht FS20 lastig, aber die verwendeten Wege um die Instanzen zu suchen, sind bei anderen Systemen sehr ähnlich.


    Viele Grüße, Benjamin
    Geändert von bengie (05.03.11 um 23:14 Uhr)
    IP-Symcon V4.x_uLd , div. HM+FS20, Irtrans, EEETop 1611, Linksys WRT, div. Sonos, Iphones + Ipads
    http://www.ip-symcon.de/wiki/Hauptseite
    PHPSonos / br_Sonos: Bitte bei Problemen Datum der Dateien angeben.

  4. #4
    Registriert seit
    Sep 2009
    Ort
    Hannover
    Beiträge
    525

    Smile Steuerung Licht über PIRI

    Hallo,

    im Rahmen der Version 1.5 habe ich meine Piri Steuerung (br_priri.inc.php) in die Veröffentlichung eingebaut.



    Nutzen und Funktion:
    Man kann damit den Raum am Webinterface auf Automatik AN oder AUS schalten und und somit die automatische Einschaltung eines Raumlichts steuern. Bei abgeschalteter Automatik schaltet das Skript bei mangelnder Bewegung auch nach der Ausschaltzeit die Geräte der genannten Kategorie aus - so dass ein Licht auch beim Vergessen nach dieser max. Zeit ausgeschaltet wird.

    Vorsicht:
    Die Routinen waren bei mir ca. 7 Monate problemlos und zuverlässig in Betrieb, wurden aber nach der Umarbeitung für diese Veröffentlichung nicht gründlich getestet (ich habe zur IP-Symcon Entwicklung kein Test System!).

    Nutzung:
    - Fügt das u.g. Skript der Kategorie des Raums hinzu
    - Definiert ein Ereignis bei Veränderung der Statusvariable des Hauptlichts im Raum (um die Steuerung von Außen zu ermöglichen)
    - Definiert ein Ereignis bei der Veränderung der Statusvariable des PIRIS im betreffenden Raum
    - Passt die Konfiguration im Skript an (feste Werte oder GetValue)
    - Schaut Euch das unter dem Quelltext folgende Bild zur Einrichtung an bzw. bzw. passt Webfront und Variablenprofile für die gewünschte Darstellung und Auswahl an.

    Falls die Bilder nicht ausreichen, schreibt mir gerne eine PM!


    PHP-Code:
    <?

    /* Events:
            - Aufruf durch Veränderung der Statusvariable des Lichts zur Behandlung einer
             manuellen Schaltung über die Statusvariable des Lichts im Raum,
            - über den Status des Piris im Raum
    */

    // include br_libs
    require "functions.inc.php";

    /********************************************
    Konfiguration für den Raum / Bereich
    *********************************************/

    // Automatisches Einschalten? (bool)
    $PIRI_AUTOMATIK=GetValue(48907 /*[Wohnung\Abstelle\Automatik\Status]*/);
    // wird bei Auto vom skript aktiv eingeschaltet
    $ID_LIGHT_AUTO=39388 /*[Wohnung\Abstelle\Licht]*/;

    // Dauer, Einschaltdauer bei Automatik=true, Abschaltung immer ohne Bewegung auch bei
    // manueller Betätigung eines Schalters
    $EINSCHALTDAUER=GetValue(58522 /*[Wohnung\Abstelle\Automatik\Einschaltdauer]*/);
    $ABSCHALTUNG=GetValue(26739 /*[Wohnung\Abstelle\Automatik\Abschaltung nach (bei manueller Schaltung)]*/);

    /***************************************
    Routine aus br_piri.inc.php Aufrufen
    ****************************************/
    br_piri_handle($IPS_VARIABLE$PIRI_AUTOMATIK$ID_LIGHT_AUTO$EINSCHALTDAUER$ABSCHALTUNG);


    ?>


    Viel Spaß und Grüße, Benjamin
    Geändert von bengie (25.11.10 um 21:33 Uhr)
    IP-Symcon V4.x_uLd , div. HM+FS20, Irtrans, EEETop 1611, Linksys WRT, div. Sonos, Iphones + Ipads
    http://www.ip-symcon.de/wiki/Hauptseite
    PHPSonos / br_Sonos: Bitte bei Problemen Datum der Dateien angeben.

Ähnliche Themen

  1. Antworten: 19
    Letzter Beitrag: 20.10.10, 17:44
  2. IP-Symcon & PHP 5.3
    Von icey im Forum Allgemeine Diskussion (2.x/3.x)
    Antworten: 2
    Letzter Beitrag: 19.06.09, 23:36
  3. IP Symcon in ein µ-Controller system integrieren?
    Von joschi3118 im Forum Allgemeine Diskussion
    Antworten: 6
    Letzter Beitrag: 19.05.08, 17:23
  4. Problem - PHP version 5.1 und extensions
    Von daniel1005 im Forum Allgemeine Diskussion
    Antworten: 4
    Letzter Beitrag: 30.11.05, 21:29

Stichworte