Zum Inhalt

Diagramme

In der Smarthome-Oberfläche können Diagramme erstellt und angezeigt werden. Auf diese Weise können verschiedene Daten aufgezeichnet und dargestellt werden. So kann z.B. der Temperaturverlauf aufgezeichnet und als Diagramm dargestellt werden.

Die Smartha App unterstützt die Visualisierung

Auch die Smartha App unterstützt die Visualisierung dieser Diagramme.

Einrichtung auf der HomeMatic Zentrale

Programm erstellen

Um ein Diagramm in der Smarthome-Oberfläche anlegen zu können, muss zunächst ein Programm mit dem Namen _CM_diagram_logger_ angelegt werden. Als Wenn-Bedingung muss das Zeitmodul gewählt werden, welches in einem Zeitintervall von 5 Minuten ausgeführt werden soll. In die Dann-Aktivität muss das nachfolgende Skript eingefügt werden.

!V1.0
!CloudMatic Diagrammlogger
!(c) EASY SmartHome GmbH

object logVar = dom.GetObject("_CM_diagrams_");
if (logVar)
{
    string logValues = logVar.Value();
    integer maxEntries = 365;
    time now = system.Date("%Y-%m-%d %H:%M:%S").ToTime();
    real nowSeconds = now.ToInteger();

    string logVal;
    foreach(logVal, logValues.Split(";"))
    {
        string stringDP = logVal.StrValueByIndex(",", 0);
        string valueStringName = logVal.StrValueByIndex(",", 1);
        real digits = logVal.StrValueByIndex(",", 2);
        string diffMinutes = logVal.StrValueByIndex(",", 3);
        integer active = logVal.StrValueByIndex(",", 4);

        if (active != 0)
        {
            real timeDiffSeconds = -1;
            if (diffMinutes != "d")
            {
                timeDiffSeconds = diffMinutes.ToInteger() * 60;
            }
            string valueDP = dom.GetObject(stringDP).Value().ToString(digits);

            var valueString = dom.GetObject(valueStringName);
            real timeDiagram = valueString.Timestamp().ToInteger();

            boolean doLog = false;
            if ((timeDiffSeconds >= 0) && ((nowSeconds - timeDiagram) > (timeDiffSeconds - 30))) { doLog = true; }
            if ((timeDiffSeconds == -1) && (now.Hour() == 23) && (now.Minute() >= 54)) { doLog = true; }

            if (doLog)
            {
                string newEntryString = "," # now.ToString() # "," # valueDP;
                if ((valueString.Variable() == "???") || (valueString.Variable() == ""))
                { 
                    string initString = "2" # newEntryString;
                    valueString.State(initString); 
                }
                else
                {
                    string valueStringV = valueString.Variable();
                    string valueStringBuf = valueStringV.Substr(valueStringV.Find(",")+1,valueStringV.Length()-valueStringV.Find(","));
                    integer lastEntry = valueStringV.StrValueByIndex(",",0).ToInteger();
                    integer nextEntry = lastEntry +1;
                    if (nextEntry >  maxEntries) {nextEntry = 1;}
                    string value;
                    integer valueCounter = 0;
                    integer rowCounter = 1;
                    string valueStringNew = nextEntry.ToString();
                    string entryString = "";
                    foreach (value,valueStringBuf.Split(","))
                    {
                        valueCounter = valueCounter + 1;
                        entryString = entryString # "," # value;
                        if (valueCounter == 2) 
                        {
                            if ( rowCounter == nextEntry ) {entryString = newEntryString;}
                            valueStringNew = valueStringNew # entryString;
                            entryString = "";
                            valueCounter = 0;
                            rowCounter = rowCounter + 1;
                        }
                    }            
                    if (rowCounter < nextEntry)
                    {
                        valueStringNew = valueStringNew # newEntryString;
                    }
                    valueString.State(valueStringNew);
                }
            }
        }
    }
}

Systemvariablen erstellen

Damit die Diagramme funktionieren können, muss auch eine Systemvariable vom Typ Zeichenkette mit dem Namen _CM_diagrams_ erstellt werden. In diese Variable speichert die Smarthome-Oberfläche wichtige Informationen zur Verarbeitung der Daten für die Diagramme.

Nun muss für jeden Datenpunkt jedes Gerätes, welches in einem Diagramm festgehalten werden soll, eine separate Systemvariable vom Typ Zeichenkette angelegt werden. Soll beispielsweise von Heizung Küche und Heizung Wohnzimmer die Temperatur sowie die Ventilstellung erfasst werden, müssen vier separate Systemvariablen vom Typ Zeichenkette angelegt werden. Beispielsweise mit den Bezeichnungen Temperatur Küche, Ventilstellung Küche, Temperatur Wohnzimmer und Ventilstellung Wohnzimmer.

Kanalzuordnung

Damit die Diagramme funktionieren können, dürfen die Variablen keine Kanalzuordnung aufweisen!

Einrichtung in der Smarthome-Oberfläche

Die Diagramme können jetzt in der Smarthome-Oberfläche definiert werden. Dazu muss in der Oberfläche über das Zahnrad in der oberen rechten Ecke der Menüpunkt Diagrammaufzeichnungen ausgewählt werden. Sollten mehrere Zentralen vorhanden sein, muss zunächst die passende HomeMatic Zentrale ausgewählt werden. Mit der Schaltfläche Hinzufügen kann ein neues Diagramm konfiguriert werden.

CloudMatic Complete - Diagramm hinzufügen

CloudMatic Complete - Diagramm hinzufügen

Zunächst muss definiert werden, ob das Diagramm aktiv sein soll oder nicht. Unter Beschreibung kann ein frei wählbarer eindeutiger Name für das Diagramm vergeben werden. Als Datenpunkt wählen muss der im Diagramm zu erfassende Datenpunkt ausgewählt werden (beispielsweise den Datenpunkt VALVE_STATE eines Heizkörperthermostaten). Mit der Log-Variable muss festgelegt werden, in welcher Variable die Werte des Datenpunktes gespeichert werden sollen (beispielsweise die Variable Ventilstellung, die im vorherigen Verlauf angelegt wurde).

Achtung

Die Variable _CM_diagrams_ darf nicht als Log-Variable verwendet werden!

Des Weiteren muss die Anzahl der Dezimalstellen sowie der Zeitintervall für die Erfassung definiert werden. Mit Speichern werden die Einstellungen für das Diagramm gespeichert und die Diagramme werden in der tabellarischen Übersicht angezeigt.

CloudMatic Complete - Diagramm Übersicht

CloudMatic Complete - Diagramm Übersicht

Anzeige des Diagramms

Das Diagramm kann nun in der Smarthome-Oberfläche angezeigt werden. Dazu muss der Kanaltyp Diagramm im Bereich Spezielle Kanäle ausgewählt und konfiguriert werden. Hier ist es wichtig, die Variable zu wählen, in der die Diagrammdaten gespeichert sind.

CloudMatic Complete - Diagramm Ansicht

CloudMatic Complete - Diagramm Ansicht