« Back to Product

Documentation

HM_ReadServiceMessages

 array HM_ReadServiceMessages (int $InstanceID) 

Parameters

InstanceID

ID of the HomeMatic Socket Instance

Returns

The following information are available as key => value pairs:

Index Type Description
Address string Address of the relevant device
Message string Cryptic description of the error message. Text can be found partially in the stringtable_de.txt from the Home Automatic configuration tool.
Value variant Value of the error message

Description

Reads the service news of the CCU/ LAN adapter with the ID InstanceID.

Example

//Creates a variable that displays all service messages in the Visualization. Copy in a script and run. 

//From here change anything
$object = IPS_GetObject($_IPS['SELF']);
$parentID = $object['ParentID'];

//Installer
if ($_IPS['SENDER'] == "Execute")
{
    IPS_SetHidden($_IPS['SELF'], true);
    IPS_SetName($_IPS['SELF'], "Script");
    $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, "Servic messages");
    }
    IPS_SetScriptTimer($_IPS['SELF'], 300);
}

$texte = Array(
    "CONFIG_PENDING" => "Configuration data are due for transfer",
    "LOWBAT" => "Low battery condition",
    "STICKY_UNREACH" => "Device communication was disrupted",
    "UNREACH" => "Disrupted communication devices currently"
);

$str = "<table width='90%' align='center'>"; // Adjust color or remove style
$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("No HomeMatic Socket instance found!");

$msgs = HM_ReadServiceMessages($ids[0]);
if($msgs === false)
    die("Connect to the CCU failed");

if(sizeof($msgs) == 0)
    $str .= "<tr><td colspan=3><br/>No service messages!</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 = "Device is not set up in IP Symcon";
    }
    
    $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(":", HM_GetAddress($id));
        $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);
        IPS_SetInfo($vid, "this variable was created by script #".$_IPS['SELF']);
    }
    return $vid;
}
Any questions?