Status von Events abfragen

Eher Fehler würde ich sagen.

Verhalten ist jetzt optional schaltbar - 1.7.5 in Modulstore/Beta

Klappt super danke.

Ralf

Bei der Int-Check-Instanz steht in der Doku zum Speichern folgendes:

Ergebnisse der Prüfung speichern 	boolean 		JSON-Struktur mit der ermittelten Werten in Variable CheckResult speichern

Das habe ich aktiviert, finde aber keine Variable „CheckResult“ (wird ja eine String.Var sein?!?), um auf vorangegangene Ergbenisse zurückgreifen zu können. Wisst Ihr zum Vorgehen näheres? Oder wie macht Ihr das (ggf. Änderungen der Variable „Übersicht“ aufzeichnen)?

Danke und viele Grüße…

Hallo,
wenn ein Ablaufplan wartet, dann wird dafür ein Thread genutzt, der dann für die Dauer der Wartezeit hängt - und so als Fehler angezeigt wird. Sollte man solche Ablaufpläne als Ausnahme eintragen oder könnte so etwas erkannt werden? Wäre ja schon ein Fehler, wenn die eingestellte Wartezeit überschritten wird.

Grüße, Gerhard

Wie kann ich die Speicherung des Ergebnisses nutzen? Die in der Doku genannte Variable wird nicht angelegt…

Danke und viele Grüße!

PS: Hat sich erledigt - ist die Variable „Ergebnis der Prüfung“…

Hi,

wenn man in den Moduleinstellungen die Speicherung aktiviert (siehe Bild) …

image

… wird in der String Variable „Ergebnisse der Prüfung“ die möglichen Meldungen als JSON abgelegt!

Diese kann man dann selber - z.B. per Script auslesen und verarbeiten!
Bei mir sieht das im Webfront so aus …

Gruß Heiko

Ich möchte mich vielmals bei allen Mitwirkenden an diesem phantastischen Modul Bedanken.
Hab es durch Zufall gefunden und mal Ausprobiert.
Was soll ich sagen, dachte immer mein IPS wäre gut gewartet und im wesentlichen fehlerfrei. Denkste, euer Modul hat mir weit über hundert Problemstellen aufgezeigt !!
Unglaublich was sich so im laufe der Zeit an unbemerkten Altlasten ansammelt.

Wirklich SUPER !! Meiner Meinung nach das nützlichste Modul überhaupt.

Eigentlich sollte es von IPS selbst übernommen werden und zum Standardlieferumfang dazugehören. Weil zur Wartung und Integritätsprüfung einer installation ist das einfach ein MUSS, insbesondere für ältere und gewachsene Installationen.

Nochmals vielen vielen Dank
Bernhard

image

1 „Gefällt mir“

Vielen Dank, pitti, noch einmal für die hilfreichen Erläuterungen…!

Viele Grüße!

PS: Du hast aber ein sehr aufgeräumtes IPS :wink:

1 „Gefällt mir“

Moin,

wenn Du denkst Du denkst dann denkst Du nur Du denkst (Gruß aus den 70ern). :smiley:

Ralf

Magst du uns dein Skript hier zur Verfügung stellen? :slight_smile:

Hi,
ich habe mir ein Script geschrieben das im Modul eingetragen ist so das es nach einem Test aufgerufen wird.

<?php
declare(strict_types=1);
Switch ($_IPS['SENDER'])  { 
    Default: 
        Case "RunScript": 
        Case "Execute": 
            break;
        Case "WebFront":        // Zum schalten im Webfront 
            if (IntegrityCheck_PerformCheck(21864)) return;
            return;
}

$instID = $_IPS['InstanceID'];

// SMTP Instanz
$smptID = 33517;

$scriptName = IPS_GetName($_IPS['SELF']) . '(' . $_IPS['SELF'] . ')';
$scriptInfo = IPS_GetName(IPS_GetParent($_IPS['SELF'])) . '\\' . IPS_GetName($_IPS['SELF']);

// IPS_LogMessage($scriptName, $scriptInfo . ': _IPS=' . print_r($_IPS, true));

$checkResult = json_decode($_IPS['CheckResult'], true);

// IPS_LogMessage($scriptName, $scriptInfo . ': checkResult=' . print_r($checkResult, true));

$messageList = $checkResult['messageList'];
$errorCount = $checkResult['errorCount'];

if ($errorCount > 0) {
    $txt = '';
    foreach ($messageList as $tag => $entries) {
        foreach ($entries as $entry) {
            $lvl = $entry['Level'];
            if ($lvl == 2 /* Error */) {
                $id = $entry['ID'];
                if ($id != 0) {
                    $txt .= '#' . $id;
                    $loc = @IPS_GetLocation($id);
                    if ($loc != false) {
                        $txt .= '(' . $loc . ')';
                    }
                    $txt .= ': ';
                }
                $txt .= $entry['Msg'];
                $txt .= PHP_EOL;
            }
        }
        $txt .= PHP_EOL;
    }
    IPS_LogMessage($scriptName, $scriptInfo . ': send mail with ' . $errorCount . ' errors');
    SMTP_SendMail($smptID, 'IPS-Check', $txt);
}

return true;

Wenn es Fehler gab werden alle Fehler zu einem Text zusammengefasst und ich schicke es mir dann als Mail. Man könnte es auch ändern das alle Meldungen verschickt werden.

Ralf

1 „Gefällt mir“

Klar, kann ich gern machen - aber Du musst es entsprechend anpassen damit es lauffähig bei Dir ist.

Ich habe mich vor einiger Zeit entschieden gewissen wiederkehrende Funktionen auszulagern und über die __autoload.php meinem System zur Verfügung zu stellen. Aber die Funktionen sollte eigentlich jeder kennen bzw. im Forum finden.

Die Variable $RESULT musst Deine ID entsprechend anpassen!

Das HTML ist auf meinen Wwx Skin optimiert!

Gruß Heiko

<?php
################################################################################
# Script:   System.IntegrityCheck.ips.php
# Version:  1.0.20211204
# Author:   Heiko Wilknitz (@Pitti)
#
# Verarbeitet JSON-Ergebnis des Integritätschecks!
#
# ------------------------------ Installation ----------------------------------
#
# Dieses Skript richtet automatisch alle nötigen Objekte bei manueller
# Ausführung ein. Eine weitere manuelle Ausführung setzt alle benötigten Objekte
# wieder auf den Ausgangszustand.
#
# - Neues Skript erstellen
# - Diesen PHP-Code hineinkopieren
# - Abschnitt 'Konfiguration' den eigenen Gegebenheiten anpassen 
# - Skript Abspeichern
# - Skript Ausführen
# - Visualisierung per Link auf entstandene Variablen erstellen
#
# ------------------------------ Changelog -------------------------------------
#
# 04.12.2021 - Initalversion (v1.0)
#
# ------------------------------ Konfiguration ---------------------------------
#
$RESULT = 54466;
#
# Global Debug Output Flag
$DEBUG  = false;
#
################################################################################

# Includes (Functions)
# require_once(IPS_GetKernelDir()."scripts".DIRECTORY_SEPARATOR.IPS_GetScriptFile(50829));


// INSTALLATION
if ($_IPS['SENDER']=='Execute') {
    $pos = 0;
    CreateVariableByName($_IPS['SELF'], 'Kategorien', 3, $pos++, 'Information'); 
    CreateVariableByName($_IPS['SELF'], 'Instanzen', 3, $pos++, 'Information'); 
    CreateVariableByName($_IPS['SELF'], 'Variablen', 3, $pos++, 'Information'); 
    CreateVariableByName($_IPS['SELF'], 'Automationen', 3, $pos++, 'Information'); 
    CreateVariableByName($_IPS['SELF'], 'Ereignisse', 3, $pos++, 'Information'); 
    CreateVariableByName($_IPS['SELF'], 'Medien', 3, $pos++, 'Information'); 
    CreateVariableByName($_IPS['SELF'], 'Links', 3, $pos++, 'Information'); 
    CreateVariableByName($_IPS['SELF'], 'Timer', 3, $pos++, 'Information'); 
    CreateVariableByName($_IPS['SELF'], 'Instanz Informationen', 3, $pos++, 'Warning', '~HTMLBox'); 
    CreateVariableByName($_IPS['SELF'], 'Skript Informationen', 3, $pos++, 'Warning', '~HTMLBox'); 
}
// Script
else if($_IPS['SENDER'] == 'RunScript') {
    $json = GetValue($RESULT);
    $data = json_decode($json, true);
    // Kategorien (total)
    $vid = CreateVariableByName($_IPS['SELF'], 'Kategorien', 3); 
    SetValue($vid, $data['counterList']['categories']['total']);
    // Inszanzen (Total / Aktiv / Module)
    $vid = CreateVariableByName($_IPS['SELF'], 'Instanzen', 3); 
    SetValue($vid, $data['counterList']['instances']['total'] . ' / ' . $data['counterList']['instances']['active'] . ' / ' . $data['counterList']['modules']['total']);
    // Variablen
    $vid = CreateVariableByName($_IPS['SELF'], 'Variablen', 3); 
    SetValue($vid, $data['counterList']['variables']['total']);
    // Automationen (Scripte / Ablaufpläne)
    $vid = CreateVariableByName($_IPS['SELF'], 'Automationen', 3); 
    SetValue($vid, $data['counterList']['scripts']['types']['0'] . ' / ' . $data['counterList']['scripts']['types']['1']);
    // Ereignisse
    $vid = CreateVariableByName($_IPS['SELF'], 'Ereignisse', 3); 
    SetValue($vid, $data['counterList']['events']['total'] . ' / ' . $data['counterList']['events']['active']);
    // Medien
    $vid = CreateVariableByName($_IPS['SELF'], 'Medien', 3); 
    SetValue($vid, $data['counterList']['media']['total']);
    // Links
    $vid = CreateVariableByName($_IPS['SELF'], 'Links', 3); 
    SetValue($vid, $data['counterList']['links']['total']);
    // Timer
    $vid = CreateVariableByName($_IPS['SELF'], 'Timer', 3); 
    SetValue($vid, $data['counterList']['timer']['total']);
    // Instanz Infos
    $vid = CreateVariableByName($_IPS['SELF'], 'Instanz Informationen', 3); 
    SetValue($vid, BuildHtml($data['messageList']['instances']));
    // Skript Infos
    $vid = CreateVariableByName($_IPS['SELF'], 'Skript Informationen', 3); 
    SetValue($vid, BuildHtml($data['messageList']['scripts']));
}
// VARIABLENAENDERUNG
else if($_IPS['SENDER'] == 'Variable') {
    // ToDO?
}
// WEBFRONT
else if($_IPS['SENDER'] == 'WebFront') {
    // Benutzer hat etwas geändert!
}
// WEBHOOK
else if($_IPS['SENDER'] == 'WebHook') {
    // ToDo?
}

// Ausgabe erzeugen
function BuildHtml($entries) 
{
    // Html
    $html = '';
    $html = $html.'<table class="wwx"><thead class="olive"><tr>';
    // Header;
    $html = $html.'<th>ID</th>';
    $html = $html.'<th>Status</th>';
    $html = $html.'<th>Name</th>';
    $html = $html.'</tr></thead>';

    $rows = count($entries);
    foreach ($entries as $entry) {
        $html = $html.'<tr><td>' . $entry['ID'] . '</td><td>' . $entry['Msg'] . '</td><td>' . IPS_GetName($entry['ID']) . '</td></tr>';
    }
    // Aktualisierung
    if ($rows == 0) {
        $html = $html . '<tr>';
        for($i = 0; $i < $cols; $i++) {
            $html = $html . '<td>-</td>';
        }
        $html = $html . '</tr>';
    }
    // Tabelle abschliessen
    $html = $html.'</table>';
    return $html;
}

################################################################################
?>
1 „Gefällt mir“

Hey pitti,

leider funktioniert das Skript bei mir nicht - ich bekomme folgende Fehlermeldung:

Fatal error: Uncaught Error: Call to undefined function CreateVariableByName() in /var/lib/symcon/scripts/12345.ips.php:43
Stack trace:
#0 {main}
  thrown in /var/lib/symcon/scripts/12345.ips.php on line 43
Abort Processing during Fatal-Error: Uncaught Error: Call to undefined function CreateVariableByName() in /var/lib/symcon/scripts/12345.ips.php:43
Stack trace:
#0 {main}
  thrown
   Error in Script /var/lib/symcon/scripts/12345.ips.php on Line 43

Line 43 ist bei mir (s.o.):

CreateVariableByName($_IPS['SELF'], 'Kategorien', 3, $pos++, 'Information');

Hast Du eine Idee, wie ich das Skript auch bei mir lauffähig bekomme?

Vielen Dank vorab und viele Grüße…!

Mist, jetzt ist genau das eingetreten was ich nicht wollte :frowning:

Wie geschrieben verwenden meine Scripte ein paar Funktionen die einem das Arbeiten leichter machen. Das meinste stammt hier aus dem Forum und ich habe mir daraus meine eigene kleine Funktionsbibliothek geschrieben, welche ich über die __autoload.php reinziehe!

Warum? Früher habe ich die immer unten in jedes Script reinkopiert, aber da ich ständig Anpassungen bzw. Erweiterungen mache war der Pflegeaufwand enorm und nicht mehr schaffbar :frowning:

CreateVariableByName - ist so eine Funktion!

Meine __autoload.php sieht dann halt so aus

<?php
require_once(IPS_GetKernelDir() . "/scripts/System.Functions.ips.php");

Der Vorteil: das Script hängt weiter im Objectbaum und man kann es jederzeit über die Konsole bearbeiten!

Vorher hatte ich noch einen alternative Lösung (siehe Kopfbereich im Script):

# Includes (Functions)
# require_once(IPS_GetKernelDir()."scripts".DIRECTORY_SEPARATOR.IPS_GetScriptFile(50829));

Ich kopiere jetzt hier mal den Inhalt vom Script nochmal rein - umbiegen und ID musst Du selber abändern!

<?php
################################################################################
# Script:   System.Functions.ips.php
# Version:  1.0.20190509
# Author:   Heiko Wilknitz (@Pitti)
#
# Basisfunktionen für einfache Scripterstellung!
#
# ------------------------------ Changelog -------------------------------------
#
# 09.05.2019 - Initalversion (v1.0)
#
################################################################################

// Erzeugt aus dem übergebenen Namen ein IPS konformen IDENT
// Ausserdem erlauben wir nur kleingeschriebene Idents.
function CreateIdent($name)
{
    $umlaute = Array("/ä/","/ö/","/ü/","/Ä/","/Ö/","/Ü/","/ß/");
    $replace = Array("ae","oe","ue","Ae","Oe","Ue","ss");
    $ident = preg_replace($umlaute, $replace, $name);
    // wir machen Idents immer klein
    //$ident = strtolower($ident);
    return preg_replace("/[^a-z0-9_]+/i", "", $ident);
}

// Erzeugt eine Kategorie unterhalb {id} mit dem Namen {name}
// Existiert die Kategorie schon wird diese zurückgeliefert.
// Position: 0 gleich Standard, sonst neue Sortierreihenfolgenummer {pos}
// Icon: Zuweisung eines Icons mit dem Namen {icon}
function CreateCategoryByName($id, $name, $pos=0, $icon = '')
{
    $cid = @IPS_GetCategoryIDByName($name, $id);
    if(!$cid) {
        $cid = IPS_CreateCategory();
        IPS_SetName($cid, $name);
        IPS_SetParent($cid, $id);
        IPS_SetPosition($cid, $pos);
        IPS_SetIcon($cid, $icon);
    }
    return $cid;
}

// Erzeugt ein Dummy Modul unterhalb {id} mit dem Namen {name}
// Existiert das Modul schon wird diese zurückgeliefert.
// {pos}    : 0 gleich Standardposition, sonst neue Sortierreihenfolgenummer 
// [icon}   : Zuweisung eines Icons mit dem Namen {icon}
function CreateDummyByName($id, $name, $pos=0, $icon = '')
{
    return CreateDummyByIdent($id, $name, $name, $pos, $icon);
}

// Erzeugt ein Dummy Modul unterhalb {id} mit dem Namen {name} und Ident {ident}
// Existiert das Modul schon wird diese zurückgeliefert.
// {pos}    : 0 gleich Standardposition, sonst neue Sortierreihenfolgenummer 
// [icon}   : Zuweisung eines Icons mit dem Namen {icon}
function CreateDummyByIdent($id, $ident, $name, $pos=0, $icon = '')
{
    $ident = CreateIdent($ident);
    $did = @IPS_GetObjectIDByIdent($ident,$id);
    if(!$did) {
        $did = IPS_CreateInstance("{485D0419-BE97-4548-AA9C-C083EB82E61E}");
        IPS_SetName($did, $name);
        IPS_SetIdent($did, $ident);
        IPS_SetParent($did, $id);
        IPS_SetPosition($did, $pos);
        IPS_SetIcon($did, $icon);
    }
    return $did;
}

// Erzeugt ein Popup Modul unterhalb {id} mit dem Namen {name}
// Existiert das Modul schon wird diese zurückgeliefert.
// {pos}    : 0 gleich Standardposition, sonst neue Sortierreihenfolgenummer 
// [icon}   : Zuweisung eines Icons mit dem Namen {icon}
function CreatePopupByName($id, $name, $pos=0, $icon = '')
{
    return CreatePopupByName($id, $name, $name, $pos, $icon);
}

// Erzeugt ein Popup Modul unterhalb {id} mit dem Namen {name} und Ident {ident}
// Existiert das Modul schon wird diese zurückgeliefert.
// {pos}    : 0 gleich Standardposition, sonst neue Sortierreihenfolgenummer 
// [icon}   : Zuweisung eines Icons mit dem Namen {icon}
function CreatePopupByIdent($id, $ident, $name, $pos=0, $icon = '')
{
    $ident = CreateIdent($ident);
    $pid = @IPS_GetObjectIDByIdent($ident,$id);
    if(!$pid) {
        $pid = IPS_CreateInstance("{5EA439B8-FB5C-4B81-AA35-1D14F4EA9821}");
        IPS_SetName($pid, $name);
        IPS_SetIdent($pid, $ident);
        IPS_SetParent($pid, $id);
        IPS_SetPosition($pid, $pos);
        IPS_SetIcon($pid, $icon);
    }
    return $pid;
}

// Erzeugt eine Variable unterhalb {id} mit dem Namen {name} vom Typ {type}
// Existiert die Variable schon wird diese zurückgeliefert.
// {type}   : 0 = Boolean, 1 = Integer, 2 = Float, 3 = String
// {pos}    : 0 gleich Standardposition, sonst neue Sortierreihenfolgenummer 
// [icon}   : Zuweisung eines Icons mit dem Namen {icon}
// {profil} : leer für kein Profil, sonst Profilnamen 
// {action} : Script-ID für Auslösung via Webfront 
function CreateVariableByName($id, $name, $type, $pos = 0, $icon = '', $profile = '', $action = null) 
{
    $vid = @IPS_GetVariableIDByName($name, $id); 
    if($vid===false) {
        $vid = IPS_CreateVariable($type); 
        IPS_SetParent($vid, $id); 
        IPS_SetName($vid, $name); 
        IPS_SetPosition($vid, $pos); 
        IPS_SetIcon($vid, $icon);
        if($profile !== '') { 
            IPS_SetVariableCustomProfile($vid, $profile); 
        }
        if($action != null) {
            IPS_SetVariableCustomAction($vid, $action);
        }
    }
    return $vid; 
}

// Erzeugt eine Variable unterhalb {id} mit dem Namen {name} vom Typ {type}
// Existiert die Variable schon wird diese zurückgeliefert.
// {type}   : 0 = Boolean, 1 = Integer, 2 = Float, 3 = String
// {pos}    : 0 gleich Standardposition, sonst neue Sortierreihenfolgenummer 
// [icon}   : Zuweisung eines Icons mit dem Namen {icon}
// {profil} : leer für kein Profil, sonst Profilnamen 
// {action} : Script-ID für Auslösung via Webfront 
function CreateVariableByIdent($id, $ident, $name, $type, $pos = 0, $icon = '', $profile = '', $action = null) 
{
    $ident = CreateIdent($ident);
    $vid = @IPS_GetObjectIDByIdent($ident, $id); 
    if($vid===false) {
        $vid = IPS_CreateVariable($type); 
        IPS_SetParent($vid, $id); 
        IPS_SetName($vid, $name); 
        IPS_SetIdent($vid, $ident);
        IPS_SetPosition($vid, $pos); 
        IPS_SetIcon($vid, $icon);
        if($profile !== '') { 
            IPS_SetVariableCustomProfile($vid, $profile); 
        }
        if($action != null) {
            IPS_SetVariableCustomAction($vid, $action);
        }
    }
    return $vid; 
}

// Erzeugt einen Timer unterhalb {id} mit dem Namen {name} um Zeit {time}
// Existiert das  Event schon wird diese zurückgeliefert.
// $time = mktime(hour, minute, second);
function CreateEventByName($id, $name, $time = 0)
{
    $eid = @IPS_GetEventIDByName($name, $id);  
    if(($eid===false) && ($time > 0)) {
        // Eventtyp = Zyklisch (1)
        $eid = IPS_CreateEvent(1);
        IPS_SetParent($eid, $id);
        IPS_SetName($eid, $name);
        IPS_SetPosition($eid, -2);
        IPS_SetHidden($eid, true);
    }
    if($time > 0) {
        // Datumstyp = Tägliche (2), Datumsintervall = keins (1), Datumstage = keine (0), Datumstagesintervall = keine (0), Zeittyp = Einmalig (0), Zeitintervall = keine (0)
        IPS_SetEventCyclic($eid, 2, 1, 0, 0, 0, 0);
        IPS_SetEventCyclicDateFrom($eid, (int)date('j',$time), (int)date('n', $time),  (int)date('Y', $time));
        IPS_SetEventCyclicDateTo($eid, 0, 0, 0);
        IPS_SetEventCyclicTimeFrom($eid, (int)date("H", $time), (int)date("i", $time), (int)date("s", $time));
        IPS_SetEventCyclicTimeTo($eid, 0, 0, 0);
        IPS_SetEventActive($eid, true);
        if (function_exists('IPS_SetEventAction')) {
            IPS_SetEventAction($eid, '{7938A5A2-0981-5FE0-BE6C-8AA610D654EB}', []);
        }
    }
    return $eid;
}

// Erzeugt einen Timer unterhalb {id} mit dem Namen {name} um die Zeit {time}
// Existiert das  Event schon wird diese zurückgeliefert.
// Tägliche Ausführung: $time in Minuten
// Einmalige Ausführung: $time mit mktime(hour, minute, second) übergeben.
function CreateTimerByName($id, $name, $time = 0, $repeat = true)
{
    //IPS_LogMessage('TIMER', strftime("%Y-%m-%d", $time));
    $eid = @IPS_GetEventIDByName($name, $id);
    if(($eid===false) && ($time > 0)) {
        // Eventtyp = Zyklisch (1)
        $eid = IPS_CreateEvent(1);
        IPS_SetParent($eid, $id);
        IPS_SetName($eid, $name);
        IPS_SetPosition($eid, -1);
        IPS_SetHidden($eid, true);
        if($repeat == true) {
            // 0 = Tägliche Ausführung
            IPS_SetEventCyclic($eid, 0, 1, 0, 0, 2, $time);
            $now = time();
            IPS_SetEventCyclicDateFrom($eid, (int)date('j',$now), (int)date('n', $now),  (int)date('Y', $now));
        } else {
            // Einmalige Ausführung
            IPS_SetEventCyclic($eid, 1, 0, 0, 0, 0, 0);
            IPS_SetEventCyclicDateFrom($eid, (int)date('j',$time), (int)date('n', $time),  (int)date('Y', $time));
            IPS_SetEventCyclicDateTo($eid, (int)date('j',$time), (int)date('n', $time),  (int)date('Y', $time));
            IPS_SetEventCyclicTimeFrom($eid, (int)date("H", $time), (int)date("i", $time), (int)date("s", $time));
            IPS_SetEventCyclicTimeTo($eid, (int)date("H", $time), (int)date("i", $time), (int)date("s", $time));
        }
        IPS_SetEventActive($eid, true);
        if (function_exists('IPS_SetEventAction')) {
            IPS_SetEventAction($eid, '{7938A5A2-0981-5FE0-BE6C-8AA610D654EB}', []);
        }
    }
    return $eid;
}

// Eine Funktion um ein Script im Script-Verzeichnis zu erzeugen 
function CreateScriptByName($id, $name)
{ 
    $sid = @IPS_GetScriptIDByName($name, $id); 
    if ($sid == 0){ 
        $sid = IPS_CreateScript(0); 
        IPS_SetName($sid, $name); 
        IPS_SetParent($sid, $id); 
    } 
    return $sid; 
} 

// Erzeugt ein WebHook
function RegisterHook($webhook, $id)
{
    $ids = IPS_GetInstanceListByModuleID('{015A6EB8-D6E5-4B93-B496-0D3F77AE9FE1}');
    if (count($ids) > 0) {
        $hooks = json_decode(IPS_GetProperty($ids[0], 'Hooks'), true);
        $found = false;
        foreach ($hooks as $index => $hook) {
            if ($hook['Hook'] == $webhook) {
                if ($hook['TargetID'] == $id) {
                    return;
                }
                $hooks[$index]['TargetID'] = $id;
                $found = true;
            }
        }
        if (!$found) {
            $hooks[] = ['Hook' => $webhook, 'TargetID' => $id];
        }
        IPS_SetProperty($ids[0], 'Hooks', json_encode($hooks));
        IPS_ApplyChanges($ids[0]);
    }
}

// Erzeugt ein Variablenprofil vom Typ {type} mit Namen {name} 
function CreateProfile($name, $type)
{
    if(!IPS_VariableProfileExists($name)) {
        IPS_CreateVariableProfile($name, $type);
    }
    else {
    $profile = IPS_GetVariableProfile($name);
        if($profile['ProfileType'] != $type)
            throw new Exception("Variable profile type does not match for profile ".$name);
    }
}

// Erzeugt ein Boolean-Variablenprofil (Boolean-Typ = 0)
function CreateProfileBoolean($name, $icon, $prefix, $suffix, $asso)
{
    CreateProfile($name, 0);
    IPS_SetVariableProfileIcon($name, $icon);
    IPS_SetVariableProfileText($name, $prefix, $suffix);

    if (($asso !== null) && (count($asso) !== 0)) {
        foreach ($asso as $ass) {
            IPS_SetVariableProfileAssociation($name, $ass[0], $ass[1], $ass[2], $ass[3]);
        }
    }
}

// Erzeugt ein Integer-Variablenprofil (Integer-Typ = 1)
function CreateProfileInteger($name, $icon, $prefix, $suffix, $minvalue, $maxvalue, $step, $digits, $asso = null)
{
    CreateProfile($name, 1);
    IPS_SetVariableProfileIcon($name, $icon);
    IPS_SetVariableProfileText($name, $prefix, $suffix);
    IPS_SetVariableProfileDigits($name, $digits);
/*
    if (($asso !== null) && (count($asso) !== 0)) {
        $minvalue = 0;
        $maxvalue = 0;
    }
*/    
    IPS_SetVariableProfileValues($name, $minvalue, $maxvalue, $step);

    if (($asso !== null) && (count($asso) !== 0)) {
        foreach ($asso as $ass) {
            IPS_SetVariableProfileAssociation($name, $ass[0], $ass[1], $ass[2], $ass[3]);
        }
    }
}

// Erzeugt ein Float-Variablenprofil (Float-Typ = 2)
function CreateProfileFloat($name, $icon, $prefix, $suffix, $minvalue, $maxvalue, $step, $digits, $asso = null)
{
    CreateProfile($name, 2);
    IPS_SetVariableProfileIcon($name, $icon);
    IPS_SetVariableProfileText($name, $prefix, $suffix);
    IPS_SetVariableProfileDigits($name, $digits);
/*
    if(($asso == null) && (count($asso) == 0)){
        $minvalue = 0;
        $maxvalue = 0;
    } 
*/
    IPS_SetVariableProfileValues($name, $minvalue, $maxvalue, $step);
    if(($asso !== null) && (count($asso) !== 0)){
        foreach($asso as $ass) {
            IPS_SetVariableProfileAssociation($name, $ass[0], $ass[1], $ass[2], $ass[3]);
        }
    }
}

// Erzeugt ein String-Variablenprofil (String-Typ = 3)
function CreateProfileString($name, $icon, $prefix, $suffix, $asso)
{
    CreateProfile($name, 3);
    IPS_SetVariableProfileIcon($name, $icon);
    IPS_SetVariableProfileText($name, $prefix, $suffix);

    if (($asso !== null) && (count($asso) !== 0)) {
        foreach ($asso as $ass) {
            IPS_SetVariableProfileAssociation($name, $ass[0], $ass[1], $ass[2], $ass[3]);
        }
    }
}

// Debug Ausgabe von Variablen, Felder & Objecten auf die Konsole
function EchoDebug($msg, $data, $pre = null) {
    // Safty Check for use!
    if(!isset($GLOBALS["DEBUG"])) {
        echo "!!! For Debug Output define global variable 'DEBUG' (true|false) !!!";
        return;
    }
    // only if Debug enabled
    if($GLOBALS["DEBUG"]) {
        if (is_object($data)) {
            foreach ($data as $key => $value) {
                EchoDebug($msg, $value, $key);
            }
        } elseif (is_array($data)) {
            if($pre!==null) {
                echo $msg . ': ' . $pre . '(array) =>' . PHP_EOL;
            }
            foreach ($data as $key => $value) {
                EchoDebug($msg, $value, $key);
            }
        } elseif (is_bool($data)) {
            echo $msg . ': ' .  ($pre!==null ? $pre . ' => ' : '') . ($data ? 'TRUE' : 'FALSE') . PHP_EOL;
        } else {
            echo $msg . ': ' . ($pre!==null ? $pre . ' => ' : '') . $data . PHP_EOL;
        }
    }
}

################################################################################
?>

Viel Spaß

PS: Sorry, aber für die Funktionen liefere ich keinen Support!

Sorry, pitti, ich wollte Dir keine Folgearbeit machen, es war ja klasse, dass Du das Skript überhaupt geteilt hast! :+1: Mir war einfach nicht klar, woher der Fehler kam… Lieben Dank für Deine Erläuterung und Unterstützung, ich box mich auf der Grundlage mal durch…

Viele Grüße!

Kein Problem, sag einfachbescheid wenn Du hilfe brauchst!

Das 2. Script einfach bei dir anlegen und die Include Anweisung (require_once) aus kommentieren und die richtige ID des 2.Scrpits eintragen - fertig!

Gruß Heiko

Vielen Dank, Heiko.

Ich habe das 2. Skript in die _autoload kopiert und das erste dann laufen lassen. Dann habe ich das erste in die Instanz eingetragen (Aufruf nach Durchlauf). So hat es bisher funktioniert (ich hoffe, mit der _autoload-Geschichte keinen Schaden anzurichten - viel Infos habe ich dazu noch nicht gefunden und die aus der Doku sind für mich als Laien nicht ohne Weiteres nachvollziehbar…).

Vielen Dank noch einmal und Grüße!

Hallo Zusammen,
ich häng mich mal hier mit an.

Was bedeutet denn dieser Fehler?

Zur Ergänzung, das ist der „Lichtwecker“:

Vielen Dank im Voraus
Dennis

PS: Falls noch jemand anderes mitliest: Wie kann ich denn die Zeiten im Webfront editierbar machen?

Im richtigen Thema hättest du die Lösung gefunden :wink:

Nicht mehrere Themen vermischen.
Antwort dazu findet sich bestimmt in einem Thema zu den Abläufplänen.

1 „Gefällt mir“