IP-Symcon - Wie kann ich... 2.0

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.

<?
// 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($TempVar, serialize($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;
}
?>