Servicemeldungen mehrerer CCUs auslesen

Hi,

ich mache mal hierfür einen neuen Thread auf.

Das Auslesen meiner „ersten“ CCU im IP-Nummernkreis funktioniert nun (Danke an nancilla) perfekt.

Allerdings habe ich eine zweite CCU im Einsatz, welche zwar eine Servicemeldung hat, die aber nicht in der Variablen dargestellt wird.

Muss man an dem Script etwas ändern, wenn man multiple CCUs im Einsatz hat? Wenn ja, was?

//Erstellt eine Variable die im WebFront alle ServiceMeldungen anzeigt. Einfach in ein Skript kopieren und ausführen.
 
//Ab hier nichts mehr ändern
$object = IPS_GetObject($_IPS['SELF']);
$parentID = $object['ParentID'];
 
//Installer
if ($_IPS['SENDER'] == "Execute")
{
    IPS_SetHidden($_IPS['SELF'], true);
    IPS_SetName($_IPS['SELF'], "Auslese-Skript");
    $parentObject = IPS_GetObject($parentID);
    if ($parentObject['ObjectType'] !== 1)
    {
        $instanceID = IPS_CreateInstance("{485D0419-BE97-4548-AA9C-C083EB82E61E}");
        IPS_SetParent($instanceID, $parentID);
        $parentID = $instanceID;
        IPS_SetParent($_IPS['SELF'], $parentID);
        IPS_SetName($instanceID, "Servicemeldungen");
    }
    IPS_SetScriptTimer($_IPS['SELF'], 300);
}
 
$texte = Array(
    "CONFIG_PENDING" => "Konfigurationsdaten stehen zur Übertragung an",
    "LOWBAT" => "Batterieladezustand gering",
    "STICKY_UNREACH" => "Gerätekommunikation war gestört",
    "UNREACH" => "Gerätekommunikation aktuell gestört"
);
 
$str = "<table width='90%' align='center'>"; // Farbe anpassen oder style entfernen
$str .= "<tr><td><b>Gerätname</b></td><td><b>GeräteID</b></td><td><b>Meldung</b></td></tr>";
 
$ids = IPS_GetInstanceListByModuleID("{A151ECE9-D733-4FB9-AA15-7F7DD10C58AF}");
if(sizeof($ids) == 0)
    die("Keine HomeMatic Socket Instanz gefunden!");
 
$msgs = HM_ReadServiceMessages($ids[0]);
if($msgs === false)
    die("Verbindung zur CCU fehlgeschlagen");
 
if(sizeof($msgs) == 0)
    $str .= "<tr><td colspan=3><br/>Keine Servicemeldungen!</td></tr>";
 
foreach($msgs as $msg)
{
    if(array_key_exists($msg['Message'], $texte)) {
        $text = $texte[$msg['Message']];
    } else {
        $text = $msg['Message'];
    }
 
    $id = GetInstanceIDFromHMID($msg['Address']);
    if(IPS_InstanceExists($id)) {
        $name = IPS_GetLocation($id);
    } else {
        $name = "Gerät nicht in IP-Symcon eingerichtet";
    }
 
    $str .= "<tr><td>".$name."</td><td>".$msg['Address']."</td><td>".$text."</td></tr>";
}
$str .= "</table>";
 
$vid = CreateVariableByName($parentID, "Content", 3);
IPS_SetIcon($vid, "Information");
IPS_SetVariableCustomProfile($vid, "~HTMLBox");
SetValue($vid, $str);
 
function GetInstanceIDFromHMID($sid)
{
    $ids = IPS_GetInstanceListByModuleID("{EE4A81C6-5C90-4DB7-AD2F-F6BBD521412E}");
    foreach($ids as $id)
    {
        $a = explode(":", IPS_GetProperty($id, 'Address'));
        $b = explode(":", $sid);
        if($a[0] == $b[0])
        {
            return $id;
        }
    }
    return 0;
}
 
function CreateVariableByName($id, $name, $type)
{
    $vid = @IPS_GetVariableIDByName($name, $id);
    if($vid === false)
    {
        $vid = IPS_CreateVariable($type);
        IPS_SetParent($vid, $id);
        IPS_SetName($vid, $name);
    }
    return $vid;
}

Danke im Voraus.

Gruß

Jimmy

Die Suche machts möglich:

CCU Meldungen in IPS bei 2 CCUs

Danke:)

Gruß Jimmy