Mini SV-Datalogger v2.11 (stable)

Problemlösungen und Hinweise von allgemeinem Interesse zur Haussteuerung mit HomeMatic

Moderator: Co-Administratoren

Benutzeravatar
blackhole
Beiträge: 3718
Registriert: 21.07.2015, 14:03
System: CCU
Hat sich bedankt: 184 Mal
Danksagung erhalten: 586 Mal

Mini SV-Datalogger v2.11 (stable)

Beitrag von blackhole » 04.07.2016, 13:04

Der "Mini SV-Datalogger" ist ein winziges Skript, welches einen Wert aus einer Systemvariablen ausliest und in einer anderen Systemvariablen sammelt. Bei Überschreitung einer konfigurierbaren Maximalanzahl, werden die gesammelten Werte "durchrotiert", so dass der jeweils älteste Wert verworfen wird.


Motivation

Der Code-Schnippsel ist entstanden, weil ich auch in TinyMatic einen schnellen Überblick über die letzten Duty-Cycle-Werte haben wollte.
Da das Skript unversell einsetzbar ist, stelle ich es hier zur freien Verfügung.

Grund für die Veröffentlichung ist der (OSS-)Gedanke, dass andere von meiner Arbeit profitieren können, wie ich von der Arbeit Dritter profitiert habe.


Skript

Code: Alles auswählen

! Mini SV-Datalogger v2.11
!---------------------------------------------------------------------------------
! Urheber: blackhole
!---------------------------------------------------------------------------------

!Voreinstellung Datenquelle, Systemvariable (Default: "Duty-Cycle")
string datasource = "Duty-Cycle";

!Voreinstellung Datenlogger, Systemvariable (Default: "Duty-Cycle-Data")
string datalogger = "Duty-Cycle-Data";

!Voreinstellung maximale Anzahl an gesammelten Werten (Default: 144)
string maxvalues = 144;

!Voreinstellung Werte mit Zeistempel versehen (ja/nein, Default: "nein")
string logtime = "nein";

string svvalue = dom.GetObject(ID_SYSTEM_VARIABLES).Get(datasource).Value();
string svdata = dom.GetObject(ID_SYSTEM_VARIABLES).Get(datalogger).Value();
string cut1 = ","; integer find1; string index; integer counter;
if (( svdata == "???" ) || (svdata == "")) { svdata = "Start"; }
if ( logtime == "ja" ) { logtime = "@" # system.Date("%H:%M"); }
else { logtime = ""; }
foreach(index, svdata.Split(cut1)) {
   counter = counter + 1;
   if (counter >= maxvalues) {
      find1 = svdata.Find(cut1);
      svdata = svdata.Substr(find1 + 2, svdata.Length());
   }
}
svdata = svdata # cut1 # " " # svvalue # logtime;
dom.GetObject(ID_SYSTEM_VARIABLES).Get(datalogger).State(svdata);
Voreinstellungen

Die Voreinstellungen (siehe Skript) sind denkbar einfach und schnell erklärt:
  • Angabe einer Systemvariable, aus welcher ein Wert ausgelesen soll (Datenquelle).
  • Angabe einer Systemvariable, in welche die Werte gesammelt werden (Datenlogger).
  • Angabe der maximalen Anzahl an Werten die gesammelt werden sollen.
  • Angabe ob Werte mit Zeitstempel versehen werden sollen (ja/nein).
Hinweise

Mit dem ersten Befüllen, der noch jungfräulichen/leeren "Sammel"-Systemvariable, wird automatisch das Wort "Start" vorangestellt, welches nach Erreichen der maximalen Anzahl an Werten "wegrotiert" wird (vgl. u.).

Nach Erreichen der maximalen Anzahl werden die gesammelten Werte "durchrotiert". D.h., der erste und somit älteste Wert wird gelöscht, der neue Wert wird hinten angefügt, so dass die voreingestellte maximale Anzahl an Werten nicht überschritten wird.


Changelog
  • v2.01: Erstes öffentliches Release von "Mini SV-Datalogger"
  • v2.02: Werte können optional mit einem Zeitstempel versehen werden
  • v2.10: Voreinstellungen etabliert und Verwendung der Methode Get()
  • v2.11: Kleinere Anpassungen für neue ReGaHss
  • v3.10 Spezialversion "Zwei Quell-Sysvars", siehe hier
  • v3.66 Spezialversion "Energieverbräuche", siehe hier
Zuletzt geändert von blackhole am 28.01.2021, 19:06, insgesamt 29-mal geändert.

Benutzeravatar
blackhole
Beiträge: 3718
Registriert: 21.07.2015, 14:03
System: CCU
Hat sich bedankt: 184 Mal
Danksagung erhalten: 586 Mal

Re: Mini SV-Datalogger v2.02

Beitrag von blackhole » 06.07.2016, 18:14

Mini SV-Datalogger v2.02 ist veröffentlicht (Changelog)
  • Auf besonderen Wunsch können Werte jetzt optional mit einem Zeitstempel versehen werden (WERT@HH:MM)
Zuletzt geändert von blackhole am 10.06.2017, 01:26, insgesamt 1-mal geändert.

kafisc
Beiträge: 131
Registriert: 08.09.2015, 15:14
Hat sich bedankt: 18 Mal
Danksagung erhalten: 4 Mal

Re: Mini SV-Datalogger v2.02

Beitrag von kafisc » 19.07.2016, 09:46

Hallo blackhole,

vielen Dank für das Skript. Ich würde die Ausgabe gerne anpassen. Ich nutze den SV-Datalogger um zu dokumentieren, wann ein Gerät (Ping/CUXD) erreichbar ist und wann nicht.

Sobal das Gerät nicht mehr erreichbar ist, setze ich die Systemvariable "Erreichbarkeit_Rassberry" auf offline.
Sobald wieder erreichbar ist, setze ich die Systemvaraible "Erreichbarkeit_Rasspberry" auf online.
Das Skirpt schreibt in die Varaible "Datalogger".

Als Ergebnis erhalte ich z. B. Folgendes:
true - 18.07.2016 15:19 Uhr
false - 18.07.2016 17:19 Uhr

Ich würde mir aber eine Anpasung a la TCL-Skript im Email-Addon wünschen:
if (dom.GetObject("Raspberry").Value() == 'false') {
var v20 = "online";
}else {
var v20 = "offline";
}

--> mit folgendem Ergebnis:
online - 18.07.2016 15:19 Uhr
offline - 18.07.2016 17:19 Uhr

Ich habe bereits versucht, mich etwas am TCL-Skript des Email-Adoons zu orientieren.
Leider bin ich bisher auf keinen grünen Zweig gekommen.

Hier das verwendete Skript:

Code: Alles auswählen

    !----------------------------------------------------------------
    ! Mini SV-Datalogger v2.02 von blackhole
    !----------------------------------------------------------------

    string svvalue = dom.GetObject("Erreichbarkeit_Raspberry").Value();
    string svdata = dom.GetObject("Datalogger").Value();
    integer maxvalues = 10;
    string logtime ="ja";

    string cut1 = ""; integer find1; string index; integer counter;
        if ( logtime == "ja" ) { logtime = "@" # system.Date("%d.%m.%Y %H:%M Uhr"); }
    else { logtime = ""; }
    foreach(index, svdata.Split(cut1)) {
       counter = counter + 1;
       if (counter >= maxvalues) {
          find1 = svdata.Find(cut1);
          svdata = svdata.Substr(find1 + 2, svdata.Length());
       }
    }
    svdata = svdata # cut1 # " " # svvalue # logtime;
    dom.GetObject("Datalogger").State(svdata);
Ich bin für jeden Tipp dankbar.

Viele Grüße
kafisc

Cash
Beiträge: 1184
Registriert: 09.01.2016, 17:42
Wohnort: Sauerland
Hat sich bedankt: 1 Mal
Danksagung erhalten: 1 Mal

Re: Mini SV-Datalogger v2.02

Beitrag von Cash » 19.07.2016, 10:17

Ich würde die erste Zeile ersetzen:

Also dieses löschen

Code: Alles auswählen

string svvalue = dom.GetObject("Erreichbarkeit_Raspberry").Value();
und dies dort einfügen

Code: Alles auswählen

string svvalue;
if(dom.GetObject("Erreichbarkeit_Raspberry").Value()) {svvalue = "Raspi online";}
if(!dom.GetObject("Erreichbarkeit_Raspberry").Value()) {svvalue = "Raspi offline";}
alternativ geht das genauso

Code: Alles auswählen

    string svvalue;
    if(dom.GetObject("Erreichbarkeit_Raspberry").Value()) {svvalue = "Raspi online";}
    else {svvalue = "Raspi offline";}
Vorrausgesetzt die Systemvariable "Erreichbarkeit_Raspberry" bedeutet bei true online. Ansonsten einfach tauschen

kafisc
Beiträge: 131
Registriert: 08.09.2015, 15:14
Hat sich bedankt: 18 Mal
Danksagung erhalten: 4 Mal

Re: Mini SV-Datalogger v2.02

Beitrag von kafisc » 19.07.2016, 10:44

Cash hat geschrieben:Ich würde die erste Zeile ersetzen:

Also dieses löschen

Code: Alles auswählen

string svvalue = dom.GetObject("Erreichbarkeit_Raspberry").Value();
und dies dort einfügen

Code: Alles auswählen

string svvalue;
if(dom.GetObject("Erreichbarkeit_Raspberry").Value()) {svvalue = "Raspi online";}
if(!dom.GetObject("Erreichbarkeit_Raspberry").Value()) {svvalue = "Raspi offline";}
alternativ geht das genauso

Code: Alles auswählen

    string svvalue;
    if(dom.GetObject("Erreichbarkeit_Raspberry").Value()) {svvalue = "Raspi online";}
    else {svvalue = "Raspi offline";}
Vorrausgesetzt die Systemvariable "Erreichbarkeit_Raspberry" bedeutet bei true online. Ansonsten einfach tauschen
Vielen Dank für die Rückmeldung. Das funktioniert so 1A.
Da hätte ich auch selbst drauf kommen können... :).

Grüße
kafisc

Fruehwi
Beiträge: 16
Registriert: 18.02.2015, 11:23
Wohnort: Franken

Re: Mini SV-Datalogger v2.02

Beitrag von Fruehwi » 26.12.2016, 00:08

Hallo zusammen,

leider versuche ich jetzt schon seit mehreren Stunden das Script zum laufen zu bekommen.
Habe durch dieses Forum schon sehr sehr viel umgesetzt, aber jetzt stehe ich leider auf dem Schlauch.

Habe die Systemvariable Debug angelegt als Zeichenkette.
Egal ob ich jetzt nur eine andere Variable auslese z.B. Brenner letzte Ausschaltzeit oder wie ursprünglich geplant nur Texte Hinzufügen soll (z.B. Status von verschiedene Programme) funktioniert das Script nicht.
string svvalue = "Status xyz";

Beste Grüße,
Fruewhi

Code: Alles auswählen

!----------------------------------------------------------------
! Mini SV-Datalogger v2.02 von blackhole
!----------------------------------------------------------------

string svvalue = dom.GetObject("Brenner letzte Ausschaltzeit").Value();
string svdata = dom.GetObject("Debug").Value();
integer maxvalues = 144; 
string logtime ="nein";

string cut1 = ","; integer find1; string index; integer counter;
if (( svdata == "???" ) || (svdata == "")) { svdata = "Start"; }
if ( logtime == "ja" ) { logtime = "@" # system.Date("%H:%M"); } 
else { logtime = ""; }
foreach(index, svdata.Split(cut1)) {
   counter = counter + 1;
   if (counter >= maxvalues) {
      find1 = svdata.Find(cut1);
      svdata = svdata.Substr(find1 + 2, svdata.Length());
   }
}
svdata = svdata # cut1 # " " # svvalue # logtime;
dom.GetObject("Debug").State(svdata);
CCU2 • HM-PB-6-WM55 • HM-LC-SW1-PCB • 2xHM-SEN-MDIR-O • HM-Sen-MDIR-SM • HM-Sec-MDIR-2 • HM-MOD-EM-8 • 2xHM-Sw4-Ba-PCB • 13xHM-Sec-SCo • HM-OU-CFM-TW • HM-WDS100-C6-0 • HM-RC-4-2 • 4xHM-CC-RT-DN • 3xHM-WDS30-OT2-SM • 3xHM-LC-Sw1-PI-2 • HM-Sec-3-FM • 1xHM-SEN-DB-PCB • 1xHM-PB-2-WM55 • HM-LC-Dim1TPBU-FM • 1x HM-LC-Sw1PBU-FM • 1x HM-LC-Sw1-Ba-PCB • HM-WDS10-TH-O • 5x HM-TC-IT-WM-W-EU • 1xHM-ES-PMSw1-PI
Visualisiert auf iPad/iPhone CCU.IO und dashui

Benutzeravatar
blackhole
Beiträge: 3718
Registriert: 21.07.2015, 14:03
System: CCU
Hat sich bedankt: 184 Mal
Danksagung erhalten: 586 Mal

Re: Mini SV-Datalogger v2.02

Beitrag von blackhole » 27.12.2016, 19:43

Deine Änderungen im Skript scheinen in Ordnung zu sein. Poste einen Screenshot von dem zugehörigen Programm.
Überprüfe in diesem Zusammenhang auch unter "Status und Bedienung" -> "Systemvariable" den Zeitpunkt der letzten Änderung der zu loggenden Systemvariable.

Benutzeravatar
blackhole
Beiträge: 3718
Registriert: 21.07.2015, 14:03
System: CCU
Hat sich bedankt: 184 Mal
Danksagung erhalten: 586 Mal

Re: Mini SV-Datalogger v2.10

Beitrag von blackhole » 06.01.2017, 10:26

Mini SV-Datalogger v2.10 ist veröffentlicht (Changelog)
  • Voreinstellungen können jetzt im oberen Bereich des Skriptes vorgenommen werden
  • Verwendung der Methode Get() statt globales Suchen nach Namen (Danke an BadenPower)

Fruehwi
Beiträge: 16
Registriert: 18.02.2015, 11:23
Wohnort: Franken

Re: Mini SV-Datalogger v2.10

Beitrag von Fruehwi » 26.02.2017, 20:53

Hallo zusammen,

ein sehr schönes Skript auf das ich schon lange gewartet habe.
Ich verwende es um gewisse Statusmeldungen in meiner Dashui Oberfläche anzeigen zu lassen.
Um die Systemvariable und Zeit zu vertauschen, bekomme ich noch selbst hin.

Nun zu meiner Frage, wie bekomme ich ein CR (Zeilenumbruch) nach jeder Zeile/Eintrag in das Skript?

Vielen Dank und Grüße,
Fruehwi
CCU2 • HM-PB-6-WM55 • HM-LC-SW1-PCB • 2xHM-SEN-MDIR-O • HM-Sen-MDIR-SM • HM-Sec-MDIR-2 • HM-MOD-EM-8 • 2xHM-Sw4-Ba-PCB • 13xHM-Sec-SCo • HM-OU-CFM-TW • HM-WDS100-C6-0 • HM-RC-4-2 • 4xHM-CC-RT-DN • 3xHM-WDS30-OT2-SM • 3xHM-LC-Sw1-PI-2 • HM-Sec-3-FM • 1xHM-SEN-DB-PCB • 1xHM-PB-2-WM55 • HM-LC-Dim1TPBU-FM • 1x HM-LC-Sw1PBU-FM • 1x HM-LC-Sw1-Ba-PCB • HM-WDS10-TH-O • 5x HM-TC-IT-WM-W-EU • 1xHM-ES-PMSw1-PI
Visualisiert auf iPad/iPhone CCU.IO und dashui

Benutzeravatar
blackhole
Beiträge: 3718
Registriert: 21.07.2015, 14:03
System: CCU
Hat sich bedankt: 184 Mal
Danksagung erhalten: 586 Mal

Re: Mini SV-Datalogger v2.10

Beitrag von blackhole » 26.02.2017, 21:56

Du kannst einmal versuchen ein <br /> einzubauen.

Antworten

Zurück zu „HomeMatic Tipps & Tricks - keine Fragen!“