Was bedeutet das, wenn ein Script und das Ereignis grau sind?
Das Ereignis löst aus und das Script tut fast was es soll.
Es handelt sich um eine Anzeige der Homematic -Servicemeldungen. Das Script ist schon sehr alt - entweder hier aus dem Forum oder es war bei dem Homematicmodul dabei - ich weiss es nicht mehr.
Nach meinem Wechsel auf Raspberrymatic tut es im Prinzip immer noch was es vorher getan hat. Unterschied ist, dass erledigte Servicemeldungen als „war gestört“ angezeigt werden. Bis auf die letzte Meldung verschwinden die irgendwann - die letzte „war gestört“-Meldung bleibt bis ich mal die Raspberrymatic aufrufe und die 0-Servicemeldungen ansehe. 5min später meldet das Auslesescript dann auch tatsächlich, dass 0 Servicemeldungen da sind.
Meine Fragen:
a.) warum ist das Script und Ereignis grau und arbeitet?
b.) hat jemand einen Tipp bzgl. Servicemeldungen und Raspberrymatic?
hier das Script, es wurde um die Anzahl der Servicemeldungen erweitert:
<?php
//Erstellt eine Variable die in der Visualisierung alle ServiceMeldungen anzeigt. Einfach in ein Skript kopieren und ausführen.
// 24.02.18: erweitert um Anzahl Meldungen
$Anzahl = 0;
//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)
{
$Anzahl = $Anzahl + 1 ;
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);
// echo "CCU2 - Meldungen: ". $Anzahl;
setvalueinteger(30009,$Anzahl) ;
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;
}