sunnyww
24. Februar 2021 um 06:50
1
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
sewo
24. Februar 2021 um 07:10
2
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ß
sunnyww
24. Februar 2021 um 07:17
3
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?
pitti
24. Februar 2021 um 10:16
4
Das mit den Servicemessages geht nur für HM-Geräte, für IP-Geräte ist es herstellerseitig nicht implementiert
Gruß Heiko
sunnyww
24. Februar 2021 um 11:11
5
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…
pitti
24. Februar 2021 um 11:55
6
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
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:
Achtung! Das aktuellste Changelog mit Systemvoraussetzungen und Dokumentation ist immer auf GitHub!
Diese Version ist nur mit IPS 5.0 und neuer funktionsfähig!
Die Version 2.44 ist unter dem Zweig IPS4 archiviert.
Dokumentation und Details sind hier zu finden:
Nall-chan/IPSHomematicExtended · GitHub
https://github.com/Nall-chan/IPSHomematicExtended.git
Funktionsumfang
HomeMatic Systemvariablen:
Abfragen von System- und Alarmvariablen inkl. Profilen und Werten von der CCU.
Schreiben von…
Michael