Eine Datei Scheiben und Lesen per Script und Variablen füllen
Moderator: Co-Administratoren
Eine Datei Scheiben und Lesen per Script und Variablen füllen
Ich steige gerade von der CL Software um auf HM Script. Desshalb bitte ich schon mal um Geduld.
Mein Plan: Ich arbeite in Schichten in denen ich unterschiedliche Zeiten für alle meine Geräte benötige. Dafür werte ich schon eine Zeichenkette aus, die mir sagt, was ich an wechem tag, für Schicht habe. Nun möchte ich einen Pool an Zeiten erstellen z.B. eine Datei Frühschicht .... (Lampe 1 um xx:xx Uhr an Radio .... usw... ) Spätschicht ....
Dafür will ich die Systemvariabeln abspeichern und wieder laden können. Mit einer habe ich das nun mit der Anleitung: viewtopic.php?f=19&t=68325&start=20 geschafft.
Das ist der Inhalt der Datei: 18.09.2023 20:51:02 :
18.09.2023 20:51:47 : 16:00,23|18:00,16|15:00,23|20:00,16|20:37,99|l So könnte ich meine Heizung für eine Schicht schalten lassen..... nur wie kann ich den Bezug zu Varieble bekommen und auch noch andere Geräte mit abspeichern, ohne durch zu drehen? Dei eVariable die ich speicher möchte ist ein String. Ich dachte an einen Aufbau Zeit,Temperatur| ... so kann ich für ein Gerät pro Pool beliebig viele Schaltzeiten einrichten. Das klappe für eine Zeit auch schon mal sehr gut. Nur das speichern und lesen fehlt.
Mein Plan: Ich arbeite in Schichten in denen ich unterschiedliche Zeiten für alle meine Geräte benötige. Dafür werte ich schon eine Zeichenkette aus, die mir sagt, was ich an wechem tag, für Schicht habe. Nun möchte ich einen Pool an Zeiten erstellen z.B. eine Datei Frühschicht .... (Lampe 1 um xx:xx Uhr an Radio .... usw... ) Spätschicht ....
Dafür will ich die Systemvariabeln abspeichern und wieder laden können. Mit einer habe ich das nun mit der Anleitung: viewtopic.php?f=19&t=68325&start=20 geschafft.
Das ist der Inhalt der Datei: 18.09.2023 20:51:02 :
18.09.2023 20:51:47 : 16:00,23|18:00,16|15:00,23|20:00,16|20:37,99|l So könnte ich meine Heizung für eine Schicht schalten lassen..... nur wie kann ich den Bezug zu Varieble bekommen und auch noch andere Geräte mit abspeichern, ohne durch zu drehen? Dei eVariable die ich speicher möchte ist ein String. Ich dachte an einen Aufbau Zeit,Temperatur| ... so kann ich für ein Gerät pro Pool beliebig viele Schaltzeiten einrichten. Das klappe für eine Zeit auch schon mal sehr gut. Nur das speichern und lesen fehlt.
-
- Beiträge: 13162
- Registriert: 08.05.2013, 23:33
- System: Alternative CCU (auf Basis OCCU)
- Wohnort: Nordwürttemberg
- Hat sich bedankt: 469 Mal
- Danksagung erhalten: 1301 Mal
Re: Eine Datei Scheiben und Lesen per Script und Variablen füllen
Hier habe ich mal meine Schichtplanlösung vorgestellt. Vielleicht kannst Du das ja für Dich adaptieren.
Gruß Xel66
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
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
Re: Eine Datei Scheiben und Lesen per Script und Variablen füllen
Das habe ich schon so gelöst: ! string summanden = "1,2,3,Butter,Ende";
Doch nun muss ich Den Geräten sagen, was sie bei welcher Schicht machen sollen. das finde ich in dem Link nicht.
Code: Alles auswählen
string zeit = system.Date("%d.%m.:");
string datum = (localtime).Format("%u|%d.%m.,");
string datumtext= dom.GetObject("Schichtplan_Datum").Value();
string zeichenkette = dom.GetObject("Schichtplan").Value();
integer summe = dom.GetObject("Schichtplan_Nummer").Value();
string zeichen = zeichenkette.StrValueByIndex(":", summe); ! ErsteZutat = Butter;;
integer tag = 0;
integer taginsekunden = 0;
WriteLine( zeit );
WriteLine("Zeichenkette " # zeichenkette );
WriteLine("Anzeigetag " # summe);
WriteLine("Zeichen |" # zeichen # "|");
dom.GetObject("Schichtplan_Zeichen").State(zeichen);
if(zeichen == "Ende" )
{summe = 0;
datumtext = "";
foreach(zeichen, zeichenkette.Split(":"))
{
taginsekunden = 86400 * tag;
datum = (localtime+taginsekunden).Format("%u|%d.%m.:");
datumtext = datumtext # datum;
WriteLine( datum );
tag = tag + 1;
! summe = summe + summand.ToInteger();
}
dom.GetObject("Schichtplan_Datum").State(datumtext);
string zeichen = zeichenkette.StrValueByIndex(":", summe); ! ErsteZutat = Butter;;
}
elseif (summe > 42)
{summe = 0;}
else
{summe = summe + 1;}
dom.GetObject("Schichtplan_Nummer").State(summe);
dom.GetObject("Schichtplan_Zeichen").State(zeichen);
WriteLine( "Ergebniss: " # datumtext );
! summe = 6
WriteLine("neuer Tag! " # summe);
Zuletzt geändert von alchy am 20.09.2023, 21:31, insgesamt 1-mal geändert.
Grund: Code in Codetags posten
Grund: Code in Codetags posten
-
- Beiträge: 8654
- Registriert: 27.04.2020, 10:34
- System: CCU
- Hat sich bedankt: 640 Mal
- Danksagung erhalten: 1428 Mal
Re: Eine Datei Scheiben und Lesen per Script und Variablen füllen
Wenn du code in Code Tags postest, ist es für alle Beteiligten leichter lesbar. Habe ich in den Debugging-Tips sogar erklärt.
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 +++
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 +++
Re: Eine Datei Scheiben und Lesen per Script und Variablen füllen
Für mein Problem hier habe ich noch gar nichts. Auch keinen Ansatz oder Idee.
Was ich habe, ist die Auswertung, welche Schicht ich an welchem Tag habe. Es fehlt mir aber nun, wir ich alle Geräte in jeder einzelnen Schicht optimal schalte. Bei CL Software habe ich das in Dateien gespeichert und bei Schichtwechsel geladen. Mein 1. Speicherversuch sieht so aus:
das kommt da raus:
Mein Leseversuch sieht so aus:
Da passiert jedoch nichts.
Was ich habe, ist die Auswertung, welche Schicht ich an welchem Tag habe. Es fehlt mir aber nun, wir ich alle Geräte in jeder einzelnen Schicht optimal schalte. Bei CL Software habe ich das in Dateien gespeichert und bei Schichtwechsel geladen. Mein 1. Speicherversuch sieht so aus:
Code: Alles auswählen
dom.GetObject("CUxD.CUX2801001:1.WRITE_FILE").State("0:/media/usb1/meinTest.txt:: "#dom.GetObject(ID_SYSTEM_VARIABLES).Get("Schaltzeiten_Heizung_Flur").Value());
Code: Alles auswählen
18.09.2023 21:37:23 : 16:00,23|18:00,16|15:00,23|20:00,16|20:37,99|21:15,88
Code: Alles auswählen
dom.GetObject("CUxD.CUX2801001:1.Read_FILE").State("0:/media/usb1/meinTest.txt:: "#dom.GetObject(ID_SYSTEM_VARIABLES).Get("Schaltzeiten_Heizung_Flur").Value());
Zuletzt geändert von alchy am 20.09.2023, 21:32, insgesamt 1-mal geändert.
Grund: Code in Codetags posten
Grund: Code in Codetags posten
-
- Beiträge: 8654
- Registriert: 27.04.2020, 10:34
- System: CCU
- Hat sich bedankt: 640 Mal
- Danksagung erhalten: 1428 Mal
Re: Eine Datei Scheiben und Lesen per Script und Variablen füllen
der code sieht sehr falsch aus
Hast Du Dir die Skript Doku schon angesehen?
Hast Du Dir die Skript Doku schon angesehen?
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 +++
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 +++
-
- Beiträge: 13162
- Registriert: 08.05.2013, 23:33
- System: Alternative CCU (auf Basis OCCU)
- Wohnort: Nordwürttemberg
- Hat sich bedankt: 469 Mal
- Danksagung erhalten: 1301 Mal
Re: Eine Datei Scheiben und Lesen per Script und Variablen füllen
Wieder so ein Versuch, simple logische Dinge (WENN/DANN) krampfhaft in einem ereignisgesteuerten System mit einem zyklisch getriggerten Script erledigen zu müssen. Das Leben kann so einfach sein. Hast Du ein Mal die Sollschicht in einer Variable (möglichst Mehrfachauswahl) hinterlegt, brauchst doch nur (ein) Programm(e), welches durch Zeitmodule (Zeitpunkte, an denen irgendwas geschaltet werden soll) getriggert wird und gegen die verUNDete Schichtvariable prüfen und die gewünschten Aktoren im zugehörigen DANN ansteuern. Das war es dann schon.
Beispiel:
Das Beispiel-Programm ergibt zwar keinen Sinn bezüglich einer sinnvollen Anwendung, sondern soll nur das Prinzip verdeutlichen (steuert man den gleichen Aktor an, könnte man die verUNDeten Bedingungen auch verODERn). Klar, das ist einmalig etwas Klickarbeit, aber dafür funktioniert es und es ist für jeden nachvollziehbar. Meine Schichtvariable(n) ist/sind in unzähligen Programmen als Bedingung(en) verklöppelt, um eine bedarfsgerechte Steuerung zu ermöglichen. Hierzu zählen in erster Linie die Heizung/Klima-Steuerung, die Beleuchtung, Beschattung und sonstige Rollladensteuerung. Ich berechne meine Schicht für den aktuellen und den Folgetag (um beispielsweise abends die Rollladen- und Heizungssteuerung an vorgezogene Zeiten anzupassen, wenn ich am Folgetag Frühschicht habe und etwas zeitiger zu Bett gehe als gewöhnlich). Auch für kurzfristige Änderungen (Vertretungen etc.) gibt es noch eine Variable für den Folgetag (diese wird nachts dann in die aktuelle Schicht geschrieben, um morgendliche Steuerungen zu ermöglichen). Die Urlaubsvariable wird aus einem Kalender ausgelesen und löscht die Soll-Schicht.
Gruß Xel66
Beispiel:
Code: Alles auswählen
WENN Zeitmodul 6:00 Uhr
UND Schicht ist F(rühschicht)
DANN Licht ein
SONST WENN Zeitmodul 13:00 Uhr
UND Schicht ist S(pätschicht)
DANN Licht ein
usw.
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
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
Re: Eine Datei Scheiben und Lesen per Script und Variablen füllen
Ja die Idee ist zwar einfach, doch nicht elegant. Das muss man ja für alle Schichtzeiten durch ziehen und für alle Geräte. In der CL Software konnte ich eine Datei laden, die ich z.b. "Frühschicht" genannt habe. In dieser sind dann alle dafür nötige Schaltzeiten drin. Bei Spätschicht lud ich dann die Datei Spätschicht ... usw. So konnte ich mir beliebig viele Schaltvorlagen erstellen.
-
- Beiträge: 4640
- Registriert: 30.05.2019, 11:37
- System: Alternative CCU (auf Basis OCCU)
- Wohnort: Chemnitz
- Hat sich bedankt: 90 Mal
- Danksagung erhalten: 619 Mal