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;
}
?>
Hallo Bayaro!
Hat sich im Code zwischenzeitlich etwas geändert? Das Skript liefert einen Fehler.
Peter
Ich habe deine Frage abgetrennt, da in dem Thema keine Fragen gestellt werden sollen (steht auch im ersten Beitrag!).
Und welche Fehlermeldung du bekommst wäre sehr hilfreich. Die Glaskugeln sind seit Jahren zur Reparatur.
Michael
Kam durch einen Link hierher und habe den ersten Beitrag nicht gelesen.
Danke für den Hinweis!
Ich versuche es gerade auf anderen Wegen zum Laufen zu bekommen.
Peter