Systemvariable "Statusmeldung" aus CCU3 in IPS darstellen

Guten Morgen,

ich scheitere mal wieder an einer simplen Weitergabe einer Systemvariable aus der CCU3 in IPS.

Was ich bisher gemacht habe:

1 - Logik in der CCU3 angelegt um zu erkennen, dass eine Statusmeldung vorhanden ist:
eine Meldung ist vorhanden:

Programm wie folgt eingerichtet:

Systemprotokoll:

2 - Homematic Extended Modul installiert und die Systemvariablen anlegen lassen:


Leider wird die Variable nun nicht von „keine Meldungen“ auf „Meldungen vorhanden“ aktualisiert.
Wo habe ich meinen Logikfehler?

Ich würde mir gerne in meiner Hausübersicht anzeigen lassen, ob die CCU3 ein Problem hat oder nicht (unten rechts)


Hier wird mir aber angezeigt, dass keine Meldungen vorhanden sind, obwohl in der CCU3 nachweislich eine Statusmeldung vorliegt.
Die Anzeige im WebFront kann aktuell nicht richtig sein, weil die dahinterstehende Variable nicht passt - das habe ich verstanden. Nur warum wird die Variable nicht aktualisiert?

Danke für die Hilfe!
Simon

Hi,

es gibt ein Script für die CCU Meldungen.

<?

//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;
}

?>

Gruß

Danke für das Script, nur leider wird hier die Meldung auch nicht angezeigt:

Meldung ist aber definitiv vorhanden:

Muss ich für das Script an der CCU noch eine spezielle Einstellung vornehmen?

Das mit den Servicemessages geht nur für HM-Geräte, für IP-Geräte ist es herstellerseitig nicht implementiert :frowning:

Gruß Heiko

das heißt ich kann weder über ein CCU-Programm noch über das Script die Statusmeldung abfragen?
was ist das für ein Quatsch bitte…

Also für normale Homeatic-Geräte geht es via Script bzw HM_ReadServiceMessages

Für HmIP-Geräte funktioniert es nicht - bedank Dich bei ELV :wink:

Ob es via CCU-Programm geht weiß ich nicht - muss jemand anderes beantworten!

Gruß Heiko

Du hast in der Konfiguration der Instanz der Homematic Systemvariablen ein Abfrage Intervall von 1440 Sekunden eingetragen.
Somit wird sich die Variable in Symcon erst nach 1440 aktualisieren.
Besser, und in der Dokumentation auch beschrieben, ist die Verwendung eines Triggers für den Refresh (Push). Dann hast du die aktuellen Systemvariablen quasi sofort in Symcon.
Weitere Fragen zum Modul bitte hier schreiben:

Michael