WebMatic Beta: Verlaufsdiagramme auf der CCU berechnet

alternative Weboberfläche für die HomeMatic-Zentrale (CCU)

Moderator: Co-Administratoren

KilamMalik
Beiträge: 152
Registriert: 31.12.2011, 11:12
Wohnort: Augschburg

WebMatic Beta: Verlaufsdiagramme auf der CCU berechnet

Beitrag von KilamMalik » 08.01.2013, 00:59

Hi,

[Update]: Beta hier zum Download: http://homematic-forum.de/forum/viewtop ... 300#p86300

ich bin gerade dabei, in WebMatic Verlaufsdiagramme einzubauen. Das geht natürlich auch mit CCU-Historian, aber dazu brauche ich einen Rechner, der immer läuft. Deswegen habe ich nach einer anderen Lösung gesucht. CCU-Historian ist natürlich nicht ersetzbar, wenn es darum geht, über länger Zeiträume und viele Datenpunkte zu loggen. Aber ich wollte eine kleine Lösung schaffen, mit der ich ein paar Datenpunkte über kürzere Zeiträume loggen und darstellen kann.

Ich wollte euch die Idee und Screenshot vom Prototypen hier vorstellen und diskutieren, was ihr dazu meint. Denn ich habe etwas Bedenken, was die Performance der CCU betrifft -> Ich bin mir nicht sicher, ab wann das zu viel wird und vielleicht könnt ihr mir dazu was sagen.

Ok, jetzt erst mal zwei Screenshots als Teaser :-)
verlauf-temp.png
verlauf-stellmotor.png
verlauf-stellmotor.png (20.41 KiB) 13701 mal betrachtet
Die Verlaufswerte stehen dabei in einer Variable. Wer WebMatic kennt, sieht auch das (d) in der Variablenbeschreibung. Damit erkenne ich, dass der Inhalt der Variable als Diagramm dargestellt werden soll (analog zu (r) für ReadOnly).

Da SystemExec ja nicht zu viel verwendet werden sollte, wollte ich einfach alles in eine Variable loggen. Anscheinend kann eine Zeichenkette sehr lang sein, also wollte ich ein Script schreiben, der die Datenpunkte in Variablen loggt. Glücklicherweise hat das schon mal jemand gemacht:

http://homematic-forum.de/forum/viewtop ... =32#p62941

Das Script habe ich genommen und ein wenig abgeändert, dass es gleich mehrere Datenpunkte loggen kann. Ich muss nun nur in der ersten Zeile des Scripts die Variablen und Datenpunkte angeben, immer abwechselnd mit Komma und Strichpunkt getrennt:

Code: Alles auswählen

string logValues = "Verlauf Temp Arbeitszimmer,BidCos-RF.IEQ0528362:1.TEMPERATURE;Verlauf Ventil Arbeitszimmer,BidCos-RF.IEQ0529757:1.VALVE_STATE;Verlauf Temp Aussen,BidCos-RF.IEQ0404444:1.TEMPERATURE";
Das bedeutet, "BidCos-RF.IEQ0528362:1.TEMPERATURE" wird nach "Verlauf Temp Arbeitszimmer" geloggt usw. Der Inhalt der Variablen sieht dann so aus:

Code: Alles auswählen

125,2013-01-07 21:32:43,17.300000,2013-01-07 21:45:00,17.100000,2013-01-07 22:00:00,16.900000,2013-01-07 22:15:01,16.800000,2013-01-07 22:30:00,16.700000,2013-01-07 22:45:00,17.200000,2013-01-07 23:00:00,17.700000,2013-01-07 23:15:00,18.100000,2013-01-07 23:30:01,18.500000,2013-01-07 23:45:00,19.000000,2013-01-08 00:00:07,19.400000,2013-01-08 00:02:10,... usw.
Die erste Zahl gibt an, welches Element als nächstes geloggt wird. Es ist dann ein Rolling Buffer.

In WebMatic nehme ich mir nun den String raus und wandle den in das Diagramm um.

Die ganze Rechenzeit für die Diagrammerstellung läuft im Browser ab, damit nicht auf der CCU. Aber der Rolling-Logger läuft auf der CCU. Ich habe jetzt 4 Datenpunkte, die ich alle 15 Minuten logge. Maximale Anzahl ist 288, damit habe ich 3 Tage im Puffer. Man könnte auch z.B. nur einmal am Tag loggen, dann kriegt man mit 365 Werten auch ein Jahr voll. Allerdings weiß ich nicht, ob die Variablen bei einem Neustart evtl. mal geleert werden? Das ist auch wie gesagt eher was für CCU-Historian, ich wollte hier nur von ein paar Räumen die letzten paar Tage sehen und IST/SOLL/STELLMOTOR gegenüberstellen. Oder Stromverbrauch usw.

Das wird dann auch das nächste, dass ich Diagramme überlagern kann, aber das ist alles WebMatic und damit Sache des Browsers. Es wird auch Optionen geben, ob Linie oder gefüllt und Farben usw. Aber was meint ihr denn zu der Performance Sache? Kann man das irgendwie messen? Kann so ein Script, wenn es zu lange läuft, auch die CCU abschießen? Wie verlangsamt sich das Script mit mehr Datenpunkten pro Variable? Zumindest mit den 4 läuft es bei mir seit paar Tagen ohne Probleme.

Grüße,
Kilam.
Zuletzt geändert von KilamMalik am 13.01.2013, 02:12, insgesamt 3-mal geändert.

KilamMalik
Beiträge: 152
Registriert: 31.12.2011, 11:12
Wohnort: Augschburg

Re: WebMatic: Verlaufsdiagramme ohne zusätzliche Software

Beitrag von KilamMalik » 08.01.2013, 01:06

Hier noch das Script. Ursprünglich von goersch, etwas von mir abgeändert:

Code: Alles auswählen

!Liste von Variablen und Datenpunkten zum Loggen.
string logValues = "Verlauf Temp Arbeitszimmer,BidCos-RF.IEQ0528362:1.TEMPERATURE;Verlauf Soll Arbeitszimmer,BidCos-RF.IEQ0528362:2.SETPOINT;Verlauf Ventil Arbeitszimmer,BidCos-RF.IEQ0529757:1.VALVE_STATE;Verlauf Temp Aussen,BidCos-RF.IEQ0404444:1.TEMPERATURE";

integer maxEntries = 288; ! max Eintraege im Umlaufbuffer festlegen. 288 alle 5 Minuten = 24h.
integer values = 1;  ! Anzahl Messwerte
time now = system.Date("%Y-%m-%d %H:%M:%S").ToTime();
!----------------

string logVal;
foreach(logVal, logValues.Split(";"))
{
  string valueStringName = logVal.StrValueByIndex(",", 0);
  string stringDP = logVal.StrValueByIndex(",", 1);
  string valueDP = dom.GetObject(stringDP).State();

  string newEntryString = "," # now.ToString() # "," # valueDP; !hier den neuen Eintrag zusammenbauen - das erste , muss sein
  var valueString = dom.GetObject(valueStringName);
  string initString = "0";
  if ((valueString.Variable() == "???")) 
  { 
      integer counter = 0;
      while (counter < values)
      {
        initString = initString # ",0";
        counter = counter + 1;
      }
      valueString.State(initString); 
  }
  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 == values+1) 
     {
        if ( rowCounter == nextEntry ) {entryString = newEntryString;}
        valueStringNew = valueStringNew # entryString;
        entryString = "";
        valueCounter = 0;
        rowCounter = rowCounter + 1;
     }
  }
  if (rowCounter < nextEntry)
  {
    valueStringNew = valueStringNew # newEntryString;
  }
  valueString.State(valueStringNew);
}

Berni
Beiträge: 425
Registriert: 18.07.2011, 15:35
Kontaktdaten:

Re: WebMatic: Verlaufsdiagramme auf der CCU berechnet

Beitrag von Berni » 08.01.2013, 08:50

Das sieht sehr interessant aus

Ich werde das mal bei mir ausprobieren
250 Kanäle in 117 Geräten und 29 CUxD-Kanäle in 3 CUxD-Geräten

Benutzeravatar
Herbert_Testmann
Beiträge: 11062
Registriert: 17.01.2009, 11:30
Danksagung erhalten: 7 Mal

Re: WebMatic: Verlaufsdiagramme auf der CCU berechnet

Beitrag von Herbert_Testmann » 08.01.2013, 09:04

Hallo

für den schnellen Überblich finde ich das vollkommen ausreichend. Da reichen 5 , 7 oder 14 Tage auf jeden Fall.

sehr schön
---
Dieses Schreiben wurde maschinell erstellt und ist ohne Unterschrift gültig

Benutzeravatar
anli
Beiträge: 4326
Registriert: 10.06.2009, 14:01
Wohnort: 20 Min. nördlich von Hannover und bei Bremen
Hat sich bedankt: 1 Mal
Danksagung erhalten: 23 Mal
Kontaktdaten:

Re: WebMatic: Verlaufsdiagramme auf der CCU berechnet

Beitrag von anli » 08.01.2013, 10:34

Finde ich auch sehr schön!
Performance kann ja nur gebraucht werden, wenn die Werte geschrieben oder abgerufen werden. Zusätzlich wird es darauf ankommen, wieviele Werte wie häufig geloggt werden. Bei mir wären das ebenfalls Stellantriebe und Raumtemperaturen :) Da wäre es natürlich interessant, alle drei Minuten zu loggen, damit man mitbekommt, wie der SA geregelt wird. Wenn man das weiß, kann das später auch gröber werden :)
Herzliche Grüße, anli

Alle Angaben ohne Gewähr und Haftung meinerseits. Verwendung der von mir zur Verfügung gestellten Downloads auf eigene Gefahr. Ich bitte um Verständnis, dass ich aus zeitlichen Gründen keine unaufgeforderte Hilfestellung per PN/Mail geben kann. Bitte allgemeine Fragen ins Forum stellen, hier können viele fähige User viel schneller helfen.

Homematic-Manager v2: einfaches Tool zum Erstellen von Direktverknüpfungen und Bearbeiten von Gerätenamen, -parametern etc. für Homematic und HomematicIP (Alternative diesbzgl. zur WebUI)

Einsteiger-Hilfeerweiterter Skript-Parser

Onthefly
Beiträge: 937
Registriert: 07.12.2009, 11:55
Hat sich bedankt: 2 Mal
Danksagung erhalten: 3 Mal

Re: WebMatic: Verlaufsdiagramme auf der CCU berechnet

Beitrag von Onthefly » 08.01.2013, 11:56

Hallo Kilam,
das sieht echt gut aus, unbedingt weiter machen. Ist schon erstaunlich was man aus der CCU herausholen kann. Umso ärgerlicher dass eQ3 nichts wirklich daraus macht!

An die Performance Limits kann man sich langsam herantasten. Ich kann gerne an meine HM Installation (9 Thermostate und 11 Ventilantriebe) am WE die Performance Limits der CCU mal ausreizen. Gibt es eine einfache Möglichkeit die CCU CPU Auslastung zu mitzuloggen? Lässt sich die CPU Auslastung per HM Script in eine Variable schreiben?

Ich finde allerdings bis zu 4 Werte/Raum interessant: Isttemp., Solltemp., Ventilstellung, RH.

Gruß,
OTF

leinich
Beiträge: 157
Registriert: 03.09.2012, 22:30

Re: WebMatic: Verlaufsdiagramme auf der CCU berechnet

Beitrag von leinich » 08.01.2013, 12:41

KilamMalik hat geschrieben:Hi,
Die Verlaufswerte stehen dabei in einer Variable. Wer WebMatic kennt, sieht auch das (d) in der Variablenbeschreibung. Damit erkenne ich, dass der Inhalt der Variable als Diagramm dargestellt werden soll (analog zu (r) für ReadOnly).
Vom Ansatz her finde ich das ganz gut, leider ist das keine schöne Variante für die, die mit dem ccu-historian arbeiten.
Hier wird dann jede Änderung im Archiv abgelegt, was dazu führt, dass die Datenbank gigantisch aufgebläht wird.
Leider kann man am ccu-historian keine einzelnen SystemVariablen vom Loggen ausschließen.

Wäre es hier nicht besser ein Programm auf der CCU laufen zu lassen, welche die Werte lokal per tclsh (siehe http://www.tcl.tk/man/tcl8.4/TclCmd/open.htm ) in eine Textdatei o.ä. schrieben zu lassen und die Werter per http request aufzubereiten?

Pseudocode:
Welche ID? = $ID
Welcher $Wert? = $value
Wieviel Werte? = $num_max
Schriebe ("date()","$value"/n) nach /webmatic/diagram/$ID.csv
Wenn Anzahl Zeilen /webmatic/diagram/$ID.csv > $num_max
Dann lösche letzte Zeile.

Wenn die Variable dann (d) erkannt, müsste in der Wert der Variabel nur noch die $ID mitgeliefert werden.
zusätzlich könnte man hier dann noch weitere Parameter benutzten, wie Anzahl der Werte, die Angezeigt werden sollen, oder Aussehen, Größe, etc.
Die Systemvariable könnt dann folgendermaßen aussehen:

Systemwariable "Test"
Beschreibung "Diagramm für ID 1234 80px Hoch in rot (d)"
Wert "ID=1234,h=80px,num_max=80,farbe=0xFF0000"

her http request könnte man dann die /webmatic/diagram/$ID.csv von csv für einen jquery trend Diagramm aufbereiten.

Welche jquery libary verwendest du aktuell?

Benutzeravatar
unlight
Beiträge: 484
Registriert: 23.12.2012, 13:03
Wohnort: Ruhrpott

Re: WebMatic: Verlaufsdiagramme auf der CCU berechnet

Beitrag von unlight » 08.01.2013, 12:50

Kann mich nur anschließen! Mir war das mit dem historian bisher auch zu nervig; wenn es so die Möglichkeit gibt einfach ein paar Verlaufsdiagramme einzubinden wäre das hervorragend!

Außerdem noch ein Lob für die sexy Webmatic Oberfläche allgemein , damit ist die CCU wenigstens vorzeigbar und der WAF steigt direkt um 10 Punkte!

Gruß
unlight
“Sometimes I think the surest sign that intelligent life exists elsewhere in the universe is that none of it has tried to contact us.”

Onthefly
Beiträge: 937
Registriert: 07.12.2009, 11:55
Hat sich bedankt: 2 Mal
Danksagung erhalten: 3 Mal

Re: WebMatic: Verlaufsdiagramme auf der CCU berechnet

Beitrag von Onthefly » 08.01.2013, 13:28

leinich hat geschrieben:Leider kann man am ccu-historian keine einzelnen SystemVariablen vom Loggen ausschließen.
Hallo leinich,
die Datenpunkte im Historian kann man doch unter "Verwaltung Datenpunkte" als Inaktiv markieren! Dann werden sie auch nicht mehr archiviert.

Gruß,
OTF

leinich
Beiträge: 157
Registriert: 03.09.2012, 22:30

Re: WebMatic: Verlaufsdiagramme auf der CCU berechnet

Beitrag von leinich » 08.01.2013, 13:54

Onthefly hat geschrieben:
leinich hat geschrieben:Leider kann man am ccu-historian keine einzelnen SystemVariablen vom Loggen ausschließen.
Hallo leinich,
die Datenpunkte im Historian kann man doch unter "Verwaltung Datenpunkte" als Inaktiv markieren! Dann werden sie auch nicht mehr archiviert.

Gruß,
OTF
OK, danke für den Hinweis, wusste ich nicht. Werde ich dann mal ausprobieren.

Antworten

Zurück zu „WebMatic“