+ Antworten
Seite 8 von 8 ErsteErste ... 6 7 8
Ergebnis 71 bis 73 von 73
  1. #71
    Registriert seit
    Sep 2014
    Ort
    Limeshain (Hessen)
    Beiträge
    5,080

    Standard RGB zu HEX umrechnen/umwandeln

    Funktion aus einem Skript vom User "Raketenschnecke":

    PHP-Code:
    function RGB2HEX($r$g=-1$b=-1) {
        if (
    is_array($r) && sizeof($r) == 3)
        list(
    $r$g$b) = $r;

        
    $r intval($r);
        
    $g intval($g);
        
    $b intval($b);
        
    $r dechex($r<0?0:($r>255?255:$r));
        
    $g dechex($g<0?0:($g>255?255:$g));
        
    $b dechex($b<0?0:($b>255?255:$b));
        
    $color = (strlen($r) < 2?§\'0§\':§\'§\').$r;
        $color .= (strlen($g) < 2?§\'0§\':§\'§\').$g;
        $color .= (strlen($b) < 2?§\'0§\':§\'§\').$b;
        return $color;

    Geändert von Bayaro (12.11.15 um 07:02 Uhr)

  2. #72
    Registriert seit
    Sep 2014
    Ort
    Limeshain (Hessen)
    Beiträge
    5,080

    Standard Meldungen Log für BOOL-Variable (z.B. Haustür/Garage/Fenster/...)

    Dieses Skript loggt Variablenänderungen einer Boolean-Variable in einer HTMLBox. Damit kann man z.B. die letzten 30 Tür-/Fenster-Öffnungen übersichtlich im WebFront oder der mobilen App darstellen.

    > Das Skript stammt nicht von mir! Ich habe es nur ein wenig erweitert und die Benutzung vereinfacht. Leider weiß ich nicht wer der ursprüngliche Author ist. Sollte er noch aktiv sein, kann er sich gerne bei mir melden und ich trage das hier noch nach.

    PHP-Code:
    <?
    // Dieses Skript an einer zentralen Stelle ablegen und beliebig viele Ereignisse (Trigger-Events) hinzufügen.
    // Das Ereignis muss auf Variablenänderung einer BOOLEAN-Variable reagieren.                
    //
    // Nach der 1. Variablenänderung (der Quell/Bool-Variable) werden unterhalb der "Quell"-Variable (Bool) 2 neue Variablen         
    // angelegt. Eine Temp-Var (String) als Zwischenspeicher und eine Ausgabe-Var (String mit ~HTMLBox), welche
    // dann ins WebFront verlinkt werden muss und das Log beinhaltet.                                    

    // *** KONFIGURATION: ***//
    $LimitLogEintraege 30;   // Nach erreichen dieses Limits werden die ältesten Einträge durch neue abgelöst.



    /***** AB HIER NICHTS MEHR ÄNDERN *******************************************************************/

    MessageLog(IPS_GetName($_IPS['VARIABLE']). " - " .boolString($_IPS['VALUE']), $LimitLogEintraege);

    function 
    MessageLog($zeile$LimitLogEintraege) {
         
    $TempVar CreateVariableByName($_IPS['VARIABLE'], "Temp-Var"3"""");
         
    $AusgabeVar CreateVariableByName($_IPS['VARIABLE'], "MessageLog"3"~HTMLBox""");
         
        
    //CEL holen
        
    $cel = array();
        
    $cel unserialize(GetValue($TempVar));
        
    //Wurden Meldungen rückgelesen?
        
    if (!is_array($cel)) {
          
    //Leeres Array anlegen
          
    $cel = array();
        }
        
    //Eintrag anfügen
        
    array_unshift($cel,date("d.m. H:i")." || ".$zeile);
        
    //Mehr als X Einträge
        
    if (count($cel) > $LimitLogEintraege) {
        
    //ältesten Eintrag löschen
            
    $cel array_slice($cel,0,-1);
        }

        
    //für Designer aufbereiten
        
    $cel_liste "";
        foreach (
    $cel as $cel_entry){
          
    $cel_liste .= $cel_entry."<br>";
        }
        
    SetValue($AusgabeVar$cel_liste);
        
    // Designer Ende

        //CEL speichern
        
    SetValue($TempVarserialize($cel));
    }


    function 
    boolString($bValue false) {                      // returns string
      
    return ($bValue 'geschlossen' 'geöffnet');
    }


    function 
    CreateVariableByName($ParentID$VarName$VarTyp$VarProfile ""$VarActionScript "") {
        
    $VarID = @IPS_GetVariableIDByName($VarName$ParentID);
       if(
    $VarID === false) {
            
    $VarID IPS_CreateVariable($VarTyp);
          
    IPS_SetParent($VarID$ParentID);
          
    IPS_SetName($VarID$VarName);
          
    IPS_SetInfo($VarID"This variable was created by script #".$_IPS["SELF"]);
          if(
    $VarProfile !== "") {
                
    IPS_SetVariableCustomProfile($VarID$VarProfile);
            }
            if(
    $VarActionScript !== "") {
                
    IPS_SetVariableCustomAction($VarID$VarActionScript);
            }
        }
       return 
    $VarID;
    }
    ?>
    Geändert von Bayaro (09.12.15 um 09:50 Uhr)

  3. #73
    Registriert seit
    Dec 2011
    Ort
    am Ende des Internets
    Beiträge
    313

    Standard IPS-Objektbaum dokumentieren/auflisten/analysieren

    PHP-Code:
    <?

    // Analysiert die Baumstruktur ab dem IP-S Objekt mit folgender ObjektID:
    $ObjID 40328 /*[Haus\EG\Rolläden\Küche]*/ ;

    /*
     * @file          ObjektbaumListe.ips.php
     * @author        Harald Hertlein
     * @version       06.09.16 18:08, 27.09.16 20:34
     * Ident:         -

     * Präsentiert die Baumstruktur ab dem angegebenen IP-S Objekt
     * Version <br/>
     */

    // lokale Bedingungen setzen ($lSem)
    $Sem 0;
    define ("ListeTyp",           pow (2$Sem ++ ));  //  ListeObjektTyp
    define ("ListeIdent",         pow (2$Sem ++ ));  //  Liste den Ident 
    define ("kurzEinzug",         pow (2$Sem ++ ));  //  der Einzug für jede Ebene wird verkürzt
    define ("Target",             pow (2$Sem ++ ));  //  Bei Links wird das Ziel gelistet
    define ("WertStattIdent",     pow (2$Sem ++ ));  //  Liste den Wert anstelle des Idents

    // ---------------------------
    $lSem ListeTyp  kurzEinzug  ListeIdent ;      // lokale Semaphoren
    $IdentTab 38;             // Tabulator für die Ident/Vanlue-Darstellung
    // ---------------------------


    if ($lSem WertStattIdent)  // wenn Werte
        
    $lSem &= ~ListeIdent;    // dann keine Idents
        
    print("Objektbaum ab " $ObjID ' /' IPS_GetLocation ($ObjID) . "\n");
    print(
    "ObjektID  Standort/ggf. Typ:/Objekt  ");
    if (
    $lSem ListeIdent) {
        print(
    "ggf. {Ident}");
    } else {
        if (
    $lSem WertStattIdent) {
            print(
    "ggf. [Value]");
        }
    }
    print(
    "\n--------------------------------------------------" "\n");

    PrintBaum ($ObjID);

    function 
    PrintBaum ($ObjID) {
        global 
    $lSem$IdentTab;
        
    $Objekt IPS_GetObject ($ObjID);
        
    $ObjektTyp = array ('Kat''Ins''Var''Skr''Evt''Med''Lnk');
        
    $Typ $ObjektTyp[$Objekt['ObjectType']];
        
    $Pfad IPS_GetLocation ($ObjID);
        
    $Len1 '';
        for (
    $i 1$i <= (strlen (IPS_GetLocation ($ObjID)) - strlen ($Objekt['ObjectName'])); $i ++ ) {
            
    $Len1 .=' ';
        }
        if (
    $lSem kurzEinzug) {
            
    $Len1 '';
            
    $Ebenen count (explode ('\\'IPS_GetLocation ($ObjID)));
            for (
    $i 1$i <= ($Ebenen 5); $i ++ ) {
                
    $Len1 .=' ';
            }
        }
        print( 
    $ObjID " " $Len1);

        if (
    $lSem ListeTyp) {
            print( 
    $Typ ':');
        }
        print( 
    '/' $Objekt['ObjectName']);

        if (
    $lSem Target) {
            if (
    $Typ == 'Lnk')
                print( 
    " --> " IPS_GetLink ($ObjID)['TargetID'] . ' ' IPS_GetLocation (IPS_GetLink ($ObjID)['TargetID']));
        }

        if (
    $lSem ListeIdent) {
            
    $Len2 '' "       ";      // Mindest-Abstand
            
    for ($i strlen ($Len1) + strlen ($Objekt['ObjectName']); $i <= $IdentTab$i ++ ) {
                
    $Len2 .=' ';
            }
            print(
    $Len2 "{" IPS_GetObject ($ObjID)['ObjectIdent'] . "}");
        } else {
            if (
    $lSem WertStattIdent) {      // erst abfragen ob Variable
                
    if ($Typ == 'Var') {
                    
    $Len2 '' "       ";      // Mindest-Abstand
                    
    for ($i strlen ($Len1) + strlen ($Objekt['ObjectName']); $i <= $IdentTab$i ++) {
                        
    $Len2 .=' ';
                    }
                    print(
    $Len2 "[");

                    switch (
    IPS_GetVariable ($ObjID)['VariableValue']['ValueType']):
                        case 
    0:
                            if (@
    GetValue ($ObjID)) {
                                print(
    'TRUE');
                            } else {
                                print(
    'FALSE');
                            }
                            break;
                        case 
    1:
                            print((@
    GetValue ($ObjID)));
                            break;
                        case 
    2:
                        case 
    3:
                            print( @
    GetValueFormatted ($ObjID));
                            break;
                        default:
                            ;
                    endswitch;
                    print( 
    "]");
                }
            }
        }
        print(
    "\n");

        if (
    $Objekt['HasChildren']) {       // muß dann erst sortiert werden
            
    $ReiheN = array ();     // ObjID => Name
            
    $ReiheP = array ();     // ObjID => Position
            
    $ReiheZ = array ();     // Nr => ObjID
            
    foreach ($Objekt['ChildrenIDs'] as $i => $ChID) {
                
    $ReiheN[$ChID] = IPS_GetObject ($ChID)['ObjectName'];
                
    $ReiheP[$ChID] = IPS_GetObject ($ChID)['ObjectPosition'];
            }
            
    asort ($ReiheNSORT_STRING);      // falls nicht einsortiert, entscheidet der Name über die Reihenfolge
            
    foreach ($ReiheN as $ChID => $Name) {
                
    $ReiheZ[] = $ChID;
            }

    // weil PHP keine "Stabile" Sortierverfahren anbietet, brauche ich ein eigenes Verfahren, 
    // nehme BubbleSort aus https://en.wikibooks.org/wiki/Algorithm_Implementation/Sorting/Bubble_sort#PHP
            
    $size count ($ReiheN);
            for (
    $i 0$i $size$i ++) {
                for (
    $j 0$j $size $i$j ++) {
                    if (
    $ReiheP[$ReiheZ[$j 1]] < $ReiheP[$ReiheZ[$j]])
                        list(
    $ReiheZ[$j], $ReiheZ[$j 1]) = array ($ReiheZ[$j 1], $ReiheZ[$j]);
                }
            }

            foreach (
    $ReiheZ as $i => $ChID) {
                
    PrintBaum ($ChID);      // rekursiver Aufruf
            
    }
        }
    }

    ?>
    Mit der Einstellung
    $lSem = 0 + ListeTyp + kurzEinzug + ListeIdent ; // lokale Semaphoren
    in Zeile 25 werden die Idents der gelisteten Objekte mit angezeigt:
    Code:
    Objektbaum ab 40328 /Haus\EG\Rolläden\Küche
    ObjektID  Standort/ggf. Typ:/Objekt  ggf. {Ident}
    --------------------------------------------------
    40328                     Ins:/Küche                     {NEQ0111912_01_HMLCBl1FM}
    53202                          Var:/DIRECTION            {DIRECTION}
    20708                          Var:/INHIBIT              {INHIBIT}
    42699                          Var:/Rolladen Küche       {LEVEL}
    51589                          Var:/WORKING              {WORKING}
    Mit der Einstellung
    $lSem = 0 + ListeTyp + kurzEinzug + WertStattIdent ;
    werden statt der Idents die Werte der Objekte mit angezeigt:
    Code:
    Objektbaum ab 40328 /Haus\EG\Rolläden\Küche
    ObjektID  Standort/ggf. Typ:/Objekt  ggf. [Value]
    --------------------------------------------------
    40328                     Ins:/Küche
    53202                          Var:/DIRECTION            [0]
    20708                          Var:/INHIBIT              [FALSE]
    42699                          Var:/Rolladen Küche       [Geschlossen]
    51589                          Var:/WORKING              [FALSE]
    Mit der Einstellung
    $lSem = 0 + ListeTyp + kurzEinzug + Target;
    wird bei Links das Ziel gelistet:
    Code:
    Objektbaum ab 41767 /OBJVIS\WFC:Svr1\Rollos_Akt\Markisen
    ObjektID  Standort/ggf. Typ:/Objekt  
    --------------------------------------------------
    41767                     Ins:/Markisen
    42655                          Lnk:/Dachfenster --> 14752 Melder\Rolläden und Markisen\Markisen\Dachfenster
    49687                          Lnk:/Dachbalkon --> 16239 Melder\Rolläden und Markisen\Markisen\Dachbalkon
    58981                          Lnk:/Holzterasse --> 44984 Melder\Rolläden und Markisen\Markisen\Holzterasse
    Viel Spaß
    Harald

Ähnliche Themen

  1. IP-Symcon - Wie kann ich... 2.0 (Ideen & Wünsche)
    Von Bayaro im Forum Anleitungen / Nützliche PHP Skripte
    Antworten: 33
    Letzter Beitrag: 01.01.18, 20:35
  2. Ich kann keine neue Version mehr installieren.
    Von egonkernien im Forum Allgemeine Diskussion
    Antworten: 14
    Letzter Beitrag: 06.09.15, 18:14
  3. Wie kann ich Somfy über IPS steuern?
    Von mockpa im Forum Sonstige Funkkomponenten / Wetterstationen
    Antworten: 3
    Letzter Beitrag: 21.07.15, 16:26
  4. Wie kann ich falsch aufgezeichnete Werte korrigieren?
    Von Uhlhorn im Forum Allgemeine Diskussion (2.x/3.x)
    Antworten: 4
    Letzter Beitrag: 07.05.15, 22:55
  5. Antworten: 10
    Letzter Beitrag: 07.05.15, 21:28

Stichworte