Daten filebasierend auf CCU2 SD-Karte / USBStick loggen

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

Moderator: Co-Administratoren

4_motion
Beiträge: 64
Registriert: 24.01.2016, 12:13
Hat sich bedankt: 13 Mal
Danksagung erhalten: 1 Mal

Re: Daten filebasierend auf CCU2 SD-Karte / USBStick loggen

Beitrag von 4_motion » 17.02.2018, 18:51

Hallo Alchy,

ich habe Dein Script probiert und wollte eine csv-Datei mit einer SV-Variablen auf die SD-Card der CCU2 schreiben. Leider tat sich bei mir nichts.
Ich habe die "src"-Änderung von Rolf A verwendet, weil bei mir das Programm zeitgesteuert ausgelöst werden soll. Nach dem Hinweis von Rolf A habe ich auch auf der SD-Card das Verzeichnis "log2file" und darin die Datei "log2file.csv" angelegt. Aber auch dann wird nichts reingeschrieben.

Hast Du noch eine Idee?

Könnte man eigentlich die Datei auch gleich auf ein angeschlossenes NAS-Laufwerk schreibene lassen. Dann braucht man nicht immer den Umweg über Filezilla.

Danke für Deine Hilfe und ein schönes Wochenende.

4--motion
Viele Grüße

4_motion

Benutzeravatar
Rolf A
Beiträge: 95
Registriert: 06.04.2016, 20:01
System: Alternative CCU (auf Basis OCCU)
Wohnort: Oberlichtenau
Hat sich bedankt: 2 Mal
Danksagung erhalten: 1 Mal

Re: Daten filebasierend auf CCU2 SD-Karte / USBStick loggen

Beitrag von Rolf A » 18.02.2018, 11:18

Hallo,

die Frage ging zwar nicht an mich, aber da auch von mir die rede ist, mische ich mich mal mit ein.

Ich habe versucht Alchys Skript Zeile für Zeile zu verstehen, und dann für mich modifiziert. Für mich eine Methode um Skript-Programierung zu lernen. Bei mir läuft das Skript jetzt so:

Code: Alles auswählen

! Systemvariable in Log schreiben
! SV = Gas Zaehlerstand
! SV = Gas Verbrauch heute
string slist = "Fehler";

object src1 = dom.GetObject("Gas Zaehlerstand");
object src2 = dom.GetObject("Gas Verbrauch heute");

slist = system.Date("%d.%m.%y,%H:%M")#","#dom.GetObject(src1).Name()#","#src1.Value().ToString(3)#","#src1.ValueUnit()#","#dom.GetObject(src2).Name()#","#src2.Value().ToString(3)#","#src2.ValueUnit() ;
dom.GetObject("CUxD.CUX2801003:8.CMD_EXEC").State("tclsh /usr/local/addons/log2file/log2file.tcl " # slist);

! WriteLine(slist);
Das Ergebnis sieht dann so aus:
log2file.csv
(1.93 KiB) 144-mal heruntergeladen
Was mein nächster Schritt sein soll, ist daß die Datei zum Monatsbeginn neu geschrieben wird, und dem entsprechend im Namen ein Datum trägt. Wie zum Beispiel: 2018 02 log2file.csv

Aber als jemand der sich da jeden Schritt mühevoll erarbeiten muß, dauert das halt.

Gruß

Rolf

4_motion
Beiträge: 64
Registriert: 24.01.2016, 12:13
Hat sich bedankt: 13 Mal
Danksagung erhalten: 1 Mal

Re: Daten filebasierend auf CCU2 SD-Karte / USBStick loggen

Beitrag von 4_motion » 18.02.2018, 18:04

Hallo Rolf A,

sorry, das war von mir unhöflich. Natürlich war die Anfrage an alle gerichtet und jeder darf antworten. Vielen Dank für die Info.

Ich habe es mal bei mir mit folgendem Programm versucht.

Code: Alles auswählen

 ! Programmauslösende Systemvariable (jedes Types) oder Kanalnamen (soweit ich es überblicken kann) und auch das Zeitmodul ermitteln und...
    ! by Alchy 0.2a gekürzt
    ! +++++++++++++++++

! Systemvariable in Log schreiben
! SV = Küche Heizzeit

string slist = "Fehler";

object src = dom.GetObject("Kue_Heizzeit");

slist = system.Date("%d.%m.%y,%H:%M")#","#dom.GetObject(src).Name()#","#src.Value().ToString(2)#","#src.ValueUnit();
dom.GetObject("CUxD.CUX2801001:1.CMD_EXEC").State("tclsh /usr/local/addons/log2file/log2file.tcl " # slist);

! WriteLine(slist);
Bei Script Testen läuft das Programm durch, aber es tut sich in der Datei nichts. Im log2file.tcl steht folgendes:

Code: Alles auswählen

#!/bin/tclsh
file mkdir "/media/sd-mmcblk0/log2file"
set filename "/media/sd-mmcblk0/log2file/log2file.csv"
set args [join $argv " "]
set fileId [open $filename "a+"]
puts $fileId $args
 close $fileId

Verzeichnis und Datei "/media/sd-mmcblk0/log2file/log2file.csv" existieren.

Hast Du oder jemand anderes noch eine Idee?

Danke 4--motion
Zuletzt geändert von alchy am 18.02.2018, 18:42, insgesamt 1-mal geändert.
Grund: Code in Codetags posten
Viele Grüße

4_motion

Benutzeravatar
Rolf A
Beiträge: 95
Registriert: 06.04.2016, 20:01
System: Alternative CCU (auf Basis OCCU)
Wohnort: Oberlichtenau
Hat sich bedankt: 2 Mal
Danksagung erhalten: 1 Mal

Re: Daten filebasierend auf CCU2 SD-Karte / USBStick loggen

Beitrag von Rolf A » 18.02.2018, 18:25

Hallo 4__motion,

Wenn ich bei mir das Skript in der WebUI teste/ausführe, dann schreibt es mir jeweils den aktuellen Wert der Systemvariablen in die Datei. Wie schaust Du Dir die log2file.csv an. Ich hole sie mir beim Testen immermit Filezilla per kopieren von der CCU bzw. bei mir vom Raspi. So daß sie weiter hin am Zielort ist.
Am Anfang hat es bei mir auch nicht funktioniert, bis ich dahinter gekommen bin, daß die log2file.cvs bereit im Zielverzeichnis sein muß (zuerst sogar leer). Ist diese Datei nicht da, dann wird auch nichts geschrieben. Zumindest bei mir.

Das steht für mich auch noch auf der Wunschliste, daß das tcl-Skript vor demSchreiben des Wertes erst prüft, ob die Datei da ist, und wenn nicht, dann erstellt.

Gruß

Rolf

4_motion
Beiträge: 64
Registriert: 24.01.2016, 12:13
Hat sich bedankt: 13 Mal
Danksagung erhalten: 1 Mal

Re: Daten filebasierend auf CCU2 SD-Karte / USBStick loggen

Beitrag von 4_motion » 18.02.2018, 18:39

Hallo Rolf,

danke für die schnelle Antwort.

Wenn ich das Script Teste und "WriteLine(slist)" aktiviere, dann wird der korrekte Wert angezeigt. Ich denke, es hängt an der Zeile:

Code: Alles auswählen

dom.GetObject("CUxD.CUX2801001:1.CMD_EXEC").State("tclsh /usr/local/addons/log2file/log2file.tcl " # slist);
Ich musste das CUxD Gerät etwas abändern, weil sonst beim Script testen das Programm nicht durchlief. Genaue Ahnung habe ich davon aber nicht. Ich habe das "CUxD.CUX2801001:1" aus einem anderen Programm kopiert, wo etwas in eine "txt-Datei" geschrieben wird. Mit meiner obenstehenden Änderung lief dann das Script testen auch durch, schreibt aber nichts in log2file.csv. Das Verzeichnis und die Datei habe ich angelegt. Die Datei hat 0 Byte, egal wie oft ich das Programm starte.
Zuletzt geändert von alchy am 18.02.2018, 18:43, insgesamt 1-mal geändert.
Grund: Code in Codetags posten
Viele Grüße

4_motion

4_motion
Beiträge: 64
Registriert: 24.01.2016, 12:13
Hat sich bedankt: 13 Mal
Danksagung erhalten: 1 Mal

Re: Daten filebasierend auf CCU2 SD-Karte / USBStick loggen

Beitrag von 4_motion » 18.02.2018, 18:52

Hallo Rolf, Hallo Alchy, Hallo alle,

ich habe meinen Fehler gefunden. Ich hatte das TCL-Script an einem falschen Ort.

Sorry für meine Unwissenheit und danke Euch.

Trotzdem würde ich gerne noch einmal die Frage aufwerfen, ob man denn die Datei gleich auf einem NAS-Laufwerk erstellen lassen kann. Ich habe eine Synology.

Danke

4--motion
Viele Grüße

4_motion

Benutzeravatar
Rolf A
Beiträge: 95
Registriert: 06.04.2016, 20:01
System: Alternative CCU (auf Basis OCCU)
Wohnort: Oberlichtenau
Hat sich bedankt: 2 Mal
Danksagung erhalten: 1 Mal

Re: Daten filebasierend auf CCU2 SD-Karte / USBStick loggen

Beitrag von Rolf A » 18.02.2018, 19:18

Hallo 4--motion,
4_motion hat geschrieben: Trotzdem würde ich gerne noch einmal die Frage aufwerfen, ob man denn die Datei gleich auf einem NAS-Laufwerk erstellen lassen kann. Ich habe eine Synology.
4--motion
Ich habe mich dafür entschieden die Datei mit dem täglichen Backup zusammen auf ein anderes Laufwerk nachts um 1:00 Uhr zu verschieben. Dafür war meine Vorlage das hier:
https://www.schellenberger.biz/automati ... errymatic/

Die Lösung läßt für mich auch noch Wünsche offen, wie oben erwähnt, aber ich habe für alle Fälle erstmal ein tägliches Backup. Und da war es kein Problem die cvs-Datei gleich mit von der CCU zu schubsen.

Gruß

Rolf

4_motion
Beiträge: 64
Registriert: 24.01.2016, 12:13
Hat sich bedankt: 13 Mal
Danksagung erhalten: 1 Mal

Re: Daten filebasierend auf CCU2 SD-Karte / USBStick loggen

Beitrag von 4_motion » 24.02.2018, 14:15

sorry, dass ich so lange wieder nicht da war.

Es funktioniert alles bestens.

Danke

4_motion
Viele Grüße

4_motion

Gildo
Beiträge: 17
Registriert: 17.06.2018, 11:36
Hat sich bedankt: 1 Mal

Re: Daten filebasierend auf CCU2 SD-Karte / USBStick loggen

Beitrag von Gildo » 21.12.2018, 12:08

Hallo zusammen.

Alchy hat mich auf diese Tema hingewiesen und ich habe soweit auch alles zum laufen gebracht.

Das Script hab ich an meine Bedürfnisse soweit erst mal angepasst.
Bin leider noch ein Anfänger bei dem Script schreiben und hab da noch so einiges zu lernen und zu Verstehen.

Deshalb habe ich noch fragen in die Runde.

So sieht mein Script im moment aus:

Code: Alles auswählen

! Programmauslösende Systemvariable (jedes Types) oder Kanalnamen (soweit ich es überblicken kann) und auch das Zeitmodul ermitteln und...
! by Alchy 0.2a gekürzt
! +++++++++++++++++
! SV = Gas Zaehlerstand
! SV = Gas Verbrauch heute
string slist = "Fehler";
! object src = dom.GetObject("$src$");
object src = dom.GetObject("Stromverbrauch HT");
if (src){
if (src.TypeName() == "HSSDP") {
slist = system.Date("%y-%m-%d %H:%M:%S")#","#dom.GetObject(((dom.GetObject(src)).Channel())).Name()#","#src.Value(); 
} else {
slist = system.Date("%y-%m-%d %H:%M:%S")#","#src.Value().ToString(3)#","; 
}
dom.GetObject("CUxD.CUX2801004:8.CMD_EXEC").State("tclsh /usr/local/addons/log2file/StromverbrauchHT.tcl " # slist);
}

Dabei kommt folgender Text raus

18-12-21 11:49:03,13180.57
18-12-21 11:49:06,13180.57
18-12-21 11:49:07,13180.57
18-12-21 11:49:08,13180.57
18-12-21 11:49:09,13180.57
18-12-21 11:52:49,13180.57 ,
18-12-21 11:52:51,13180.57 ,
18-12-21 11:52:52,13180.57 ,
18-12-21 11:52:53,13180.57 ,

Wie bekomme ich das Lehrzeichen zwischen Zahl und Komma raus.
Wie bekomme ich die Zahlen hintereinander, nicht für jede Aufruf eine neue Zeile anlegen.

Danke für alle Hinweise :D
Je älter mann wird, um so mehr Zeit hat man für die Bastelei an der HomeMatic :lol:

alchy
Beiträge: 10754
Registriert: 24.02.2011, 01:34
System: CCU
Hat sich bedankt: 65 Mal
Danksagung erhalten: 673 Mal

Re: Daten filebasierend auf CCU2 SD-Karte / USBStick loggen

Beitrag von alchy » 22.12.2018, 18:37

Warum benutzt du keine Systemvariable vom Typ Zahl?
oder anders,
welchen Typ entspricht "Stromverbrauch HT" ?

Alchy

Blacklist................... almost full
Ignoranz ist die Summe aller Maßnahmen die man ergreift, um bestehende Tatsachen nicht sehen zu müssen.

© Sandra Pulsfort (*1974)

Lies bitte die Logik von WebUI Programmen und die Tipps und Tricks für Anfänger.

Wichtig auch CUxD ersetzt System.exec. Die HM Script Doku (Downloadart Skripte) hilft auch weiter.
Zum Testen von Scripten den >> HomeMatic Script Executor << von Anli benutzen.

Antworten

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