Code Schnipsel – Homematic Skript – CCU Informationen auslesen
Unter der Rubrik Code Schnipsel möchten wir hier zukünftig eigene, sowie nützliche Skripte anderer Autoren vorstellen und beschreiben. Dies soll allen HomeMatic Anwendern helfen bestimmte Funktionen oder Lösungen, welche über WebUI Konsolen Programme nicht möglich sind, mit Scripten umzusetzen. Das Ganze soll keine Unterweisung in der HomeMatic Skript Sprache darstellen, sondern vielmehr euch anhand von Fallbeispielen, Lösungen an die Hand zu geben und diese detailiert zu beschreiben. Natürlich werde ich in den Artikeln die Autoren nennen und auf die entsprechenden Seiten verlinken. Damit ist dann sichergestellt, das jeweils die aktuellste Version geladen werden kann. Außerdem wollen wir uns hier nicht mit fremden Federn schmücken. Ehre wem Ehre gebührt. Wenn ihr selbst Projekte über Skripte realisiert habt, welche ihr gerne anderen Usern zur Verfügung stellen möchtet, schreibt mich an und wir werden nach entsprechender Abstimmung gerne darüber berichten. Im ersten Artikel dieser Serie habe ich beschrieben wie man über ein Skript eine Systemvariable definieren kann. Diese Möglichkeit nutzen wir auch in diesem hier beschriebenen Skript.
Use Cases
In diesem Artikel möchte ich euch ein eigenes Skript vorstellen, mit dem ihr bestimmte Systeminformationen aus eurer Installation auslesen, in eine Systemvariable sowie in das Systemprotokoll schreiben könnt. Jeder HomeMatic Anwender hat sich bestimmt schon mal die Frage gestellt, wieviel Aktoren habe ich im Einsatz. Wie hoch ist die Summe aller Kanäle der eingesetzten Aktoren. Wieviele Programme laufen in meiner Installation oder wie viele Systemvariablen habe ich definiert. Als diese Fragen könnt ihr mit diesem hier beschriebenem Skript täglich auswerten und somit habt ihr immer einen Überblick über eure Installation. Sollten euch weitere Informationen interessieren, könnt ihr diese über die Kommentar Funktion mitteilen.
Allgemeines zum Skript
Oft haben wir hier im Block das Problem, das die Variablen mit einem anderen Namen oder mit einem anderen Variablen Typ angelegt werden, wie es für die korrekte Ausführung des Skriptes erforderlich wäre. Aus diesem Grund lege ich die Systemvariable im Skript selbst an. Ihr braucht euch also nicht darum zu kümmern die Systemvariable in der WebUI anzulegen. Beim ersten Lauf des Skriptes wird geprüft, ob die Systemvariable existiert. Wenn nicht, wird sie mit den erforderlich Vorgaben (Name, Typ, protokollieren) angelegt und mit einem Startwert gefüllt. Ab dem zweiten Lauf stellt das Skript fest, das die Systemvariable bereits existiert und füllt diese Systemvariable mit den aktuellen Werten, welche ihr im obigen Screenshot seht.
Beschreibung des Skriptes
Block eins
In diesem ersten Block des Skiptes wird geprüft ob die Systemvariable CCU-Information bereits existiert. Wenn dies der Fall ist, wird der zweite Block des Skriptes ausgeführt und die Systemvariable wird gefüllt. Wenn nicht, wird der Block drei ausgeführt, der die Systemvariable erstellt.
Block zwei
In diesem zweiten Block werden die gewünschten Informationen (Anzahl Programme, Anzahl Systemvariablen, Anzahl Aktoren und Anzahl Kanäle) ausgelesen und in die Systemvariable CCU_Informationen geschrieben.
Block drei
Der dritte Block des Skriptes läuft nur einmalig ab und zwar dann wenn das Skript erstmalig läuft und feststellt, das die Systemvariable CCU_Informationen nicht existiert. Die Systemvariable wird in diesem dritten Block mit den erforderlichen Parametern (Name, Typ und Protokollieren) angelegt. Protokollieren muss in diesem Fall aktiviert werden, damit bei einem neuen Eintrag in die Systemvariable CCU_Informationen automatisch ein Eintrag im Systemprotokoll vorgenommen wird. Während der Definition der Systemvariable wird der Text „Systemvariable neu erstellt – 1. Eintrag“ eingetragen.
Skript Code zum Kopieren
! CPU-Informationen auslesen und in Systemvariable sowie in Systemprotokoll schreiben
! (c) W. Weber 01.2019, Version 2.0
! Kontrolle ob die Systemvariable bereits existiert
object oVariable = dom.GetObject (ID_SYSTEM_VARIABLES).Get ("CCU_Informationen");
if (oVariable)
{
! Die Systemvariable existiert und wird mit aktuellen Werten gefüllt
string ccuinfo = "";
var info_programs = dom.GetObject(ID_PROGRAMS).Count();
var info_variables = dom.GetObject(ID_SYSTEM_VARIABLES).Count();
var info_devices = dom.GetObject(ID_DEVICES).Count();
var info_channels = dom.GetObject(ID_CHANNELS).Count();
ccuinfo = ("Programme: " # info_programs # " - Variablen: " # info_variables # " - Aktoren: " # info_devices # " - Kanäle: " # info_channels );
dom.GetObject(ID_SYSTEM_VARIABLES).Get("CCU_Informationen").State(ccuinfo);
}
else
{
! Die Systemvariable existiert nicht, wird definiert und mit Startwert gefüllt
! Dieser Teil des Skriptes läuft nur einmalig
string svName = "CCU_Informationen";
object svObj = dom.GetObject(svName);
if (!svObj){
object svObjects = dom.GetObject(ID_SYSTEM_VARIABLES);
svObj = dom.CreateObject(OT_VARDP);
svObjects.Add(svObj.ID());
svObj.Name(svName);
svObj.ValueType(ivtString);
svObj.ValueSubType(istChar8859);
svObj.DPInfo("CCU Informationen");
svObj.ValueUnit("");
svObj.DPArchive(true);
svObj.State("Systemvariable neu erstellt - 1. Eintrag");
svObj.Internal(false);
svObj.Visible(true);
dom.RTUpdate(false);
}
}
Skript in WebUI einbinden
Um das Skript regelmäßig laufen zu lassen, könnt ihr ein kleines WebUI Programm erstellen, welchen in meinem Beispiel täglich um 23:30 Uhr läuft. Ich habe diesen Zeitraum gewählt, weil um diese Zeit kaum Aktivitäten in meiner Installation laufen. Wobei ganz klar angemerkt werden muss, das dieses kleine Skript die CCU in keinster Weise belastet. Nachfolgend könnt ihr einen Ausdruck des WebUI Programmes sehen:
Was ihr bitte beachten müsst, ist die Tatsache, das im ersten Lauf des Programmes der Wert nach der Definition in die Variable geschrieben wird. Wenn ihr möchtet das beim ersten geplanten Lauf um 23:30 Uhr die aktuellen Daten der CCU eingetragen werden, müsst ihr das Programm nach der Einrichtung einmal manuell starten. Dann wird die Systemvariable erstellt und im nächsten Lauf werden die aktuellen CCU Informationen in die Variable eingetragen.
Abschließendes
Viel Spass beim Ausprobieren und wie gesagt, wenn ihr eigene Projekte habt, die ihr über Skripte realisiert habt, schreibt mir einfach eine Mail.
Hi,
Danke für das Skript. Habe noch „Aktoren“ in „Geräte“ umbenannt, da es besser passt. Funktioniert auf Anhieb und macht jedes Mal Spaß, etwas neues auszuprobieren. Danke für den tollen Blog!