Daten loggen nur mit HM-Script (ohne Add-Ons/tcl-Dateien)

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

Moderator: Co-Administratoren

Antworten
ChristianW
Beiträge: 1
Registriert: 27.01.2018, 22:43

Daten loggen nur mit HM-Script (ohne Add-Ons/tcl-Dateien)

Beitrag von ChristianW » 27.01.2018, 23:57

Hallo,

Hier ist ein Vorschlag, um mit einer 'vanilla' CCU2 Daten auf die SD-Karte zu loggen. Er basiert auf einem Vorschlag von alchy, vereinfacht diese Lsg allerdings, da keine tcl-Dateien angelegt werden müssen.

GRUNDIDEE: Erstelle mit HM-Script eine Textzeile und schreibe diese in eine Datei (genauer: Die Zeile wird 'angehängt', sodass die Datei wächst). Verwende dazu die üblichen UNIX-Werkzeuge, die auf der CCU2 sowieso vorhanden sind (also ohne eine tcl-Datei im Dateisystem der CCU2 anlegen zu müssen). Benutze zum Aufruf der UNIX-Befehle (a) entweder den HM-Script Befehl "system.Exec()" oder (b) (falls CUxD installiert ist) den entsprechenden Befehl von CUxD "dom.GetObject("CUxD.CUX2801001:1.CMD_EXEC").State()". Da ich selbst CUxD nicht installiert habe, fokusiere ich hier vor allem auf Variante (a); für Variante (b) muss lediglich der eine Befehl ersetzt werden, siehe auch: Vorschlag alchy

BEISPIELSCRIPT für Variante a (es wird also lediglich eine 'vanilla' CCU2 mit SD-Karte benötigt). Dieses Beispielscript einfach in das Fenster 'Skript testen' kopieren, es legt eine Datei: test1.txt auf der SD-Karte an. Wenn es in einem Programm verwendet werden soll, muss DEBUG auf 'false' gesetzt werden.

Code: Alles auswählen

! Settings und Variablen: 
boolean DEBUG = true;
string slist;
string myCommand;
string stdout;
string stderr;

! Generiere Text, der in Datei geschrieben werden soll:
slist = "Text mit Werten, der in das File geschrieben werden soll";

! Schreibe in Datei:
myCommand = "/bin/sh -c 'echo "#slist#" >> /media/sd-mmcblk0/test1.txt' ";
if(DEBUG){
  WriteLine("Shell-Kommando, das ausgefuehrt werden soll:");
  WriteLine(myCommand);                               
  }
system.Exec(myCommand, &stdout, &stderr);
if(DEBUG){
  Write("stdout nach Aufruf Shell-Kommando:");
  WriteLine(stdout);
  Write("stderr nach Aufruf Shell-Kommando:");
  WriteLine(stderr);
  WriteLine("Inhalt der geschriebenen Datei:");
  system.Exec("cat /media/sd-mmcblk0/test1.txt", &stdout, &stderr);
  WriteLine(stdout);
  WriteLine(stderr);
  }
BEFÜLLEN DER TEXTZEILE: Wie die Textzeile 'slist' befüllt werden kann
ist z.B. in dem Vorschlag von alchy beschrieben. Hier ein Bsp basierend auf meinem Setup:

Code: Alles auswählen

slist = system.Date("%Y-%m-%d %H:%M");
slist = slist#","#dom.GetObject("AZi:4").DPByHssDP("ACTUAL_TEMPERATURE").Value().ToString();
slist = slist#","#dom.GetObject("AZi:4").DPByHssDP("SET_TEMPERATURE").Value().ToString();
slist = slist#","#dom.GetObject("AZi:4").DPByHssDP("VALVE_STATE").Value().ToString();
slist = slist#","#dom.GetObject("Aussen:1").DPByHssDP("TEMPERATURE").Value().ToString();
slist = slist#","#dom.GetObject("Aussen:1").DPByHssDP("HUMIDITY").Value().ToString();
Bei mir wird diese Skript einfach alle 15 min aufgerufen (mittels Zeitsteuerung/Zeitmodul).

TRANSFER DER DATEN VON SD-Karte: Um die Daten mit einem anderen
Rechner über das lokale Netzwerk 'abzuholen', verwende ich diesen Befehl auf einer Shell/Terminal des Zielrechners ausführen (bitte
199.999.999.99 mit der IP der CCU2 ersetzen):

Code: Alles auswählen

scp -vr 'root@199.999.999.99:/media/sd-mmcblk0/test1.txt' .
POTENTIELLE PROBLEME: Es ist bekannt, dass der Befehl system.Exec() zu
Problemen führen kann, insbesondere wenn die Parameter '&stdout,
&stderr' vergessen werden. Ich hatte bisher damit keine Probleme,
nutze ihn aber auch nur 'sparsam' (z.B. wird das Skript zum
Datenlogging nur alle 15 min aufgerufen). Da jedes Add-On aus meiner Sicht ebenfalls eine potentielle Quelle von Problemen ist, würde ich daher gerne bei system.Exec() bleiben. Wer hier unsicher ist, kann CUxD installieren und den Befehl (wie oben beschrieben) ersetzen. Siehe auch: http://www.christian-luetgens.de/homema ... Exec().htm

Zudem sollte man natürlich darauf achten, dass die SD-Karte genug Speicherplatz hat und ab und zu die angelegte log-Datei entfernen. Das ist aber bei den üblichen Kartengrößen (z.B. 8GB) für lange Zeit kein Thema.

ALTERNATIVEN:

Folgende Alternativen habe ich angesehen und sie hatten aus meiner
Sicht alle Nachteile:

1. Historian (http://ccu-historian.de/) scheint externen Rechner zu
benötigen, der 24/7 läuft! Das ist sehr viel Aufwand für meine
Ziele (einfaches Loggen von Daten) und benötigt zudem erheblich
Energie, daher leider keine Option für mich.

2. Native Diagramm-Funktion der CCU2: Die Diagramme der CCU2 legen ihre Daten in
/media/sd-mmcblk0/measurement als rrd4j Dateien ab. Zudem können
die Daten teilweise per graphischer Oberfläche als csv-Datei
exportiert werden. Aber es scheint mit diesem Format schwierig zu
sein, ein langfristiges, kontinuierliches Logging mit konstanter
Datenrate (z.B. alle 15 min ein Datenpunkt) zu generieren. Daher
leider keine Option für mich.

NickHM
Beiträge: 3733
Registriert: 23.09.2017, 12:04
Hat sich bedankt: 66 Mal
Danksagung erhalten: 120 Mal

Re: Daten loggen nur mit HM-Script (ohne Add-Ons/tcl-Dateien

Beitrag von NickHM » 28.01.2018, 09:46

Guten Morgen

danke für die Beschreibung. Ein einfaches Textfile kann für bestimmte Abwendungen sicher sinnvoll sein, um z.B. das CCU interne "protokollieren" zu ersetzen, welches nach dem Booten weg ist.

Anmerkungen ....

zu 2. interne Diagramme sind unflexibel, haben fest vorgegebene Datenpunkte als Auswahl, die nur einen sehr kleinen Bereich der Geräte abdecken. Exportfunktion ist zwar vorhanden, muss aber manuell angestoßen werden und hat nur die Datenauflösung wie das grade angezeigte Diagramm. Bei langen Zeiträumen unbrauchbar.

zu 1. Historian kann auf einem PasPi laufen (Stromverbrauch). Oder auf einem vorhandenen NAS.
Es gibt vielfältige Möglichkeiten die zu speichernden Daten zu beeinflussen. So kann das Speichern des immer gleichen Wertes (z.B. Soll Temperatur) unterbunden werden, oder / und es wird eine Mindestabweichung angegeben.
Diagramme sind in Historian direkt verfügbar.
Durch die o.g. sparsame Datenspeicherung, können beliebige Daten "auf Vorrat" gespeichert werden um später Fehler zu suchen. Man muss nicht vorher entscheiden, welche wenigen Daten man loggen will.

Man kann eine Datenbanklösung nicht mit einer Textdatei auf SD Karte vergleichen. Beides hat seine Berechtigung und seinen Anwendungsfall.

Eine "Nummer größer" wäre dann ioBroker, SQL History auf eine MySQL Datenbank und Flot für Diagramme. Selber Hardwareaufwand und noch viel mehr Möglichkeiten als bei Historian.

Lampi
Beiträge: 42
Registriert: 07.03.2011, 11:48
Hat sich bedankt: 1 Mal
Danksagung erhalten: 1 Mal

Re: Daten loggen nur mit HM-Script (ohne Add-Ons/tcl-Dateien

Beitrag von Lampi » 14.02.2018, 13:56

Hallo,

danke für die asführliche Beschreibung.
Eine kleine Anmerkung. Wenn man ein Semikolon zum trennen der einzelnen Werte verwenden möchte einfach die Zeile

myCommand = "/bin/sh -c 'echo "#slist#" >> /media/sd-mmcblk0/test1.txt' ";

ersetzen durch

myCommand = "/bin/sh -c 'echo "#'"'#slist#'"'#" >> /media/stick/test1.txt' ";

Dann geht es auch mit

slist = "Text mit Werten; der in das File geschrieben werden soll";


Gruß
Jörg

Antworten

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