Eine Datei Scheiben und Lesen per Script und Variablen füllen

Allgemeines zur HomeMatic Haussteuerung

Moderator: Co-Administratoren

MichaelN
Beiträge: 9688
Registriert: 27.04.2020, 10:34
System: CCU
Hat sich bedankt: 700 Mal
Danksagung erhalten: 1627 Mal

Re: Eine Datei Scheiben und Lesen per Script und Variablen füllen

Beitrag von MichaelN » 19.09.2023, 11:53

Auf der CCU gibt es keine systemweiten Schaltzeiten.
Am besten alles von früher vergessen, und neu starten.
Wie man auf der CCU solche Systeme organisiert, siehe Signatur, Rollo steuerung
LG, Michael.

Wenn du eine App zur Bedienung brauchst, dann hast du kein Smarthome.

Wettervorhersage über AccuWeather oder OpenWeatherMap+++ Rollladensteuerung 2.0 +++ JSON-API-Ausgaben auswerten +++ undokumentierte Skript-Befehle und Debugging-Tipps +++

WAdler 68
Beiträge: 1431
Registriert: 09.11.2008, 16:29
Hat sich bedankt: 2 Mal

Re: Eine Datei Scheiben und Lesen per Script und Variablen füllen

Beitrag von WAdler 68 » 19.09.2023, 20:59

Ich habe eine Idee die funktionieren müsste. Ich habe einen Link mit meinem Vedrzeichniss, in das mal die Schaltdaten rein sollen im www Verzeichniss angelegt.
eine Datei kann ich so:

Code: Alles auswählen

string datei = "/media/usb1/Schaltzeiten/mein.txt";

dom.GetObject("CUxD.CUX2801001:1.CMD_EXEC").State("rm "#datei);

WriteLine("Datei: " # datei # " wurde gelöscht" );

dom.GetObject("CUxD.CUX2801001:1.WRITE_FILE").State("0:" # datei #":: "#dom.GetObject(ID_SYSTEM_VARIABLES).Get("Schaltzeiten_Heizung_Flur").Value());
rein schreiben.

Code: Alles auswählen

dom.GetObject("CUxD.CUX2801001:1.CMD_EXEC").State("rm "#datei);

^^ Die Zeile soll mir vor dem schreiben der Datei, die alte löschen. Doch ist die Zeile so drin, wird keine neue Datei angelegt. Wo liegt da der Fehler?
Zuletzt geändert von alchy am 20.09.2023, 21:35, insgesamt 1-mal geändert.
Grund: Code in Codetags posten

Xel66
Beiträge: 14172
Registriert: 08.05.2013, 23:33
System: Alternative CCU (auf Basis OCCU)
Wohnort: Nordwürttemberg
Hat sich bedankt: 587 Mal
Danksagung erhalten: 1501 Mal

Re: Eine Datei Scheiben und Lesen per Script und Variablen füllen

Beitrag von Xel66 » 19.09.2023, 22:55

Selbst wenn Du solche Strings in irgendeine Datei schreiben kannst, gibt es keine CCU-Funktionalität, die damit irgendwas anfangen kann. Du zäumst Dein Pferd von hinten auf. Das Problem: das Pferd kann dann trotzdem nicht laufen.

Gruß Xel66
-------------------------------------------------------------------------------------------
524 Kanäle in 146 Geräten und 267 CUxD-Kanäle in 34 CUxD-Geräten:
343 Programme, 334 Systemvariablen und 183 Direktverknüpfungen,
RaspberryMatic Version: 3.65.11.20221005 + Testsystem: CCU2 2.61.7
-------------------------------------------------------------------------------------------
Einsteigerthread, Programmlogik-Thread, WebUI-Handbuch

Benutzeravatar
Henke
Beiträge: 1526
Registriert: 27.06.2022, 20:51
System: CCU
Hat sich bedankt: 141 Mal
Danksagung erhalten: 306 Mal

Re: Eine Datei Scheiben und Lesen per Script und Variablen füllen

Beitrag von Henke » 19.09.2023, 23:43

Lesen/Schreiben einer Variable in und aus Datei:

Code: Alles auswählen

string textOut = "aBBB";
string DateiName = "/media/usb1/aaa";
string stdout; string stderr;

system.Exec ("echo '" # textOut # "' > '" # DateiName # "'",&stdout,&stderr);
if ( stderr ){WriteLine ( "Fehler" );}
system.Exec ("cat '" # DateiName # "'",&stdout,&stderr);
if ( stderr ){WriteLine ( "Fehler" );}
WriteLine ( "Dateiinhalt: " # stdout );

textOut = "nun was anderes";
system.Exec ("echo '" # textOut # "' > '" # DateiName # "'",&stdout,&stderr);
if ( stderr ){WriteLine ( "Fehler" );}
system.Exec ("cat '" # DateiName # "'",&stdout,&stderr);
if ( stderr ){WriteLine ( "Fehler" );}
WriteLine ( "Dateiinhalt: " # stdout );

Benutzeravatar
Baxxy
Beiträge: 10850
Registriert: 18.12.2018, 15:45
System: Alternative CCU (auf Basis OCCU)
Hat sich bedankt: 610 Mal
Danksagung erhalten: 2230 Mal

Re: Eine Datei Scheiben und Lesen per Script und Variablen füllen

Beitrag von Baxxy » 19.09.2023, 23:49

Zunächst mal... auch ich rate von dieser Vorgehensweise ab :!:

Dann bitte endlich mal die Sache mit den Code Tags beherzigen.
Es kann doch nicht so schwer sein den Button </> zu drücken und dann seinen Code dazwischen einzufügen. :roll:

Zur Machbarkeit:
Grundsätzlich wäre das mittels zyklisch aufgerufenem Script machbar. Die Daten würde ich in verschiedene Dateien ablegen, also z.B. für Früh/Spät/Nacht usw. Dazu eine Werteliste-SysVar die festlegt welche Datei benutzt werden soll. Die Daten jetzt extra noch in Text-SysVars vorzuhalten finde ich überflüssig, es sei denn du willst sie per Visualisierung o.ä. häufig ändern. Man ist auch schneller wenn man die Dateien direkt auf Dateiebene editiert (ssh / WinSCP o.ä.).
Andererseits kann man auch auf die Dateien verzichten und die Daten nur in den SysVars vorhalten. Für die Auswertung im Script spielt es keine Rolle wo die Daten herkommen. Mit RaspberryMatic kann man alle SysVars auch direkt über die WebUI editieren.

Zyklisches Triggern ist eher unschön.
Wenn aber deine Schaltzeiten z.B. nur immer alle 5 Minuten sind, dann bräuchte man auch nur alle 5Min triggern.
Hier:

Code: Alles auswählen

16:00,23|18:00,16|15:00,23|20:00,16|20:37,99|21:15,88
... sieht das bis auf 20:37 ganz gut aus mit dem 5Min Raster.

Dann kommt noch die Komplexität im "Auswerte-Script" dazu.
Das Beispiel für die Heizung ist ja noch einfach.
"Wenn aktuelle Uhrzeit mit einer der Zeiten im Datenstring übereinstimmt, dann setze Thermostat xyz auf den zugehörigen Wert."
5 Thermostate auf den gleichen Wert setzen ist auch einfach, aber wenn alle 5 Thermostate zu diesem Zeitpunkt einen anderen Sollwert bekommen sollen dann müssen die Werte natürlich im Datenstring enthalten sein und noch korrekt zugeordnet werden.
Lässt sich natürlich mit "Script-Disziplin" auch umsetzen.

WAdler 68
Beiträge: 1431
Registriert: 09.11.2008, 16:29
Hat sich bedankt: 2 Mal

Re: Eine Datei Scheiben und Lesen per Script und Variablen füllen

Beitrag von WAdler 68 » 20.09.2023, 00:33

Ich habe vor eine HTML Seite zu erstellen, in der ich durch Zeichenauswertung an Die gespeicherten Daten komme. Es funktioniert bis jetzt ganz gut im Test. nur wird die Datei immer größer, weil ich sie nicht löschen kann.

Code: Alles auswählen

/]var url = "http://127.0.0.1/addons/Meine/Schaltzeiten/mein.txt";
 
dom.GetObject("CUxD.CUX2801001:1.CMD_SETS").State("wget -q -O - '"#url#"'");
dom.GetObject("CUxD.CUX2801001:1.CMD_QUERY_RET").State(1);

string text = dom.GetObject("CUxD.CUX2801001:1.CMD_RETS").State();
WriteLine(text);[/code/ das Liest mir den Text der Seite in text ein. nun muss ich nur mit einer Split Funktion dann die Zeiten den Geräten zu ordnen. Ich hoffe nur, das ich in die Variable text genug rein bekomme und die Auswertung nicht all zu lange läuft.
Zuletzt geändert von WAdler 68 am 20.09.2023, 00:45, insgesamt 1-mal geändert.

Benutzeravatar
Henke
Beiträge: 1526
Registriert: 27.06.2022, 20:51
System: CCU
Hat sich bedankt: 141 Mal
Danksagung erhalten: 306 Mal

Re: Eine Datei Scheiben und Lesen per Script und Variablen füllen

Beitrag von Henke » 20.09.2023, 00:41

Abgesehen davon das im ersten Beispiel die Datei immer überschrieben wird, nun mal noch das löschen:

Code: Alles auswählen

string DateiName = "/media/usb1/aaa";
string stdout; string stderr;

system.Exec ("rm '" # DateiName # "'",&stdout,&stderr);
if ( stderr ){WriteLine ( "Fehler" );}

Benutzeravatar
Henke
Beiträge: 1526
Registriert: 27.06.2022, 20:51
System: CCU
Hat sich bedankt: 141 Mal
Danksagung erhalten: 306 Mal

Re: Eine Datei Scheiben und Lesen per Script und Variablen füllen

Beitrag von Henke » 20.09.2023, 00:47

Mit der letzten Version brauchst du keine Datei mehr.
Den Umweg über CUx kannst du dir sparen. Das geht auch direkt mit Exec.
WAdler 68 hat geschrieben:
20.09.2023, 00:33
Ich hoffe nur, das ich in die Variable text genug rein bekomme und die Auswertung nicht all zu lange läuft.
Darüber musst du dir keine Gedanken machen. Weder die Größe noch die Laufzeit bei der Auswertung werden ein Problem werden.

WAdler 68
Beiträge: 1431
Registriert: 09.11.2008, 16:29
Hat sich bedankt: 2 Mal

Re: Eine Datei Scheiben und Lesen per Script und Variablen füllen

Beitrag von WAdler 68 » 20.09.2023, 00:49

ja, so geht es vielen Dank!

Antworten

Zurück zu „HomeMatic allgemein“