[GELÖST] CUxD - Übergabe Systemzustand mit der WebUI
Moderator: Co-Administratoren
-
wolwin
- Beiträge: 350
- Registriert: 06.06.2018, 12:27
- Hat sich bedankt: 22 Mal
- Danksagung erhalten: 64 Mal
[GELÖST] CUxD - Übergabe Systemzustand mit der WebUI
Hallo zusamen,
mit CUxD 2.13 und aktueller OCCU 3.87.6.20260614 ist mir folgendes aufgefallen:
Über einen CUxD Timer starte ich ein Skript, das aus einem Textstring die Zeiten der HT / NT Tarif-Stromumschaltungen und den Tarif ausliest und dann als Systemvariablen für andere Zwecke bereitstellt. Hier wird dann auch der Zeitpunkt als String für den CUxD-Timer in der Systemvariablen 'sys_TStrom_Tarif_Timer' abgespeichert. Wenn ich nun den CUxD-Timer in der WebUI wie im Snapshot gezeigt zuweise und dabei die Systemvariable benutze, wird der Timer NICHT gesetzt.
Setze ich den CUxD-Timer direkt im Skript, funktioniert alles wie es soll: der Timer wird gesetzt.
Ich kann jetzt nicht ausmachen, wo sich der Fehler befindet ... Ich benutze zwar nun die zweite Variante, aber es würde mich interessieren, ob da eine Fehler beim Zusammenwirken CUxD / OCCU besteht, oder, ob ich etwas falsch aufgesetzt habe.
mit CUxD 2.13 und aktueller OCCU 3.87.6.20260614 ist mir folgendes aufgefallen:
Über einen CUxD Timer starte ich ein Skript, das aus einem Textstring die Zeiten der HT / NT Tarif-Stromumschaltungen und den Tarif ausliest und dann als Systemvariablen für andere Zwecke bereitstellt. Hier wird dann auch der Zeitpunkt als String für den CUxD-Timer in der Systemvariablen 'sys_TStrom_Tarif_Timer' abgespeichert. Wenn ich nun den CUxD-Timer in der WebUI wie im Snapshot gezeigt zuweise und dabei die Systemvariable benutze, wird der Timer NICHT gesetzt.
Setze ich den CUxD-Timer direkt im Skript, funktioniert alles wie es soll: der Timer wird gesetzt.
Ich kann jetzt nicht ausmachen, wo sich der Fehler befindet ... Ich benutze zwar nun die zweite Variante, aber es würde mich interessieren, ob da eine Fehler beim Zusammenwirken CUxD / OCCU besteht, oder, ob ich etwas falsch aufgesetzt habe.
Zuletzt geändert von wolwin am 17.07.2026, 12:29, insgesamt 1-mal geändert.
- Baxxy
- Beiträge: 15079
- Registriert: 18.12.2018, 15:45
- System: Alternative CCU (auf Basis OCCU)
- Wohnort: Berlin
- Hat sich bedankt: 972 Mal
- Danksagung erhalten: 3449 Mal
Re: CUxD - Übergabe Systemzustand mit der WebUI
Meine erste Frage wäre: Ging das früher mal, und wenn ja mit welchen Versionen?
Grüße... Baxxy
- Raspberry Pi 4 als Homematic-Zentrale - Tipps und Informationen
- Analysescript für genutzte Funk-Adressen, Funkmodul-Hardware und Zentralen Hardware
- NANO CUL 868MHz - Stick zum AskSin Analyzer XS umflashen (Anleitung für ArduinoIDE unter Windows)
- Firmware Updates für IP-Aktoren / Sensoren... Info's, Tipps und Sonstiges
- CCU funkt nicht - CarrierSense (CS) Probleme erkennen und lösen
- MichaelN
- Beiträge: 13170
- Registriert: 27.04.2020, 10:34
- System: CCU
- Hat sich bedankt: 876 Mal
- Danksagung erhalten: 2266 Mal
Re: CUxD - Übergabe Systemzustand mit der WebUI
und geht es ohne Verzögerung?
LG, Michael.
Wenn du eine App zur Bedienung brauchst, dann hast du kein Smarthome.
Wettervorhersage über AccuWeather, Open-Meteo 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, Open-Meteo oder OpenWeatherMap+++ Rollladensteuerung 2.0 +++ JSON-API-Ausgaben auswerten +++ undokumentierte Skript-Befehle und Debugging-Tipps +++
-
wolwin
- Beiträge: 350
- Registriert: 06.06.2018, 12:27
- Hat sich bedankt: 22 Mal
- Danksagung erhalten: 64 Mal
Re: CUxD - Übergabe Systemzustand mit der WebUI
Habe das erst neu aufgesetzt und lange debugged, da die Werteübergabe über Systemvariablen bei anderen Skripten funktioniert.
Habe ich nicht getestet - hatte vorher 1 Sekunde eingestellt, um sicher zu gehen, dass die Systemvariable im Skript gesetzt wurde.
- Baxxy
- Beiträge: 15079
- Registriert: 18.12.2018, 15:45
- System: Alternative CCU (auf Basis OCCU)
- Wohnort: Berlin
- Hat sich bedankt: 972 Mal
- Danksagung erhalten: 3449 Mal
Re: CUxD - Übergabe Systemzustand mit der WebUI
Nicht sehr aufschlussreich.
Ich kann das erstmal nicht reproduzieren.
Eine Text-SysVar gefüllt mit...
...wird hier problemlos in einen CUxD-Timer geschrieben.
Ich kann das erstmal nicht reproduzieren.
Eine Text-SysVar gefüllt mit...
Code: Alles auswählen
20:00:00Grüße... Baxxy
- Raspberry Pi 4 als Homematic-Zentrale - Tipps und Informationen
- Analysescript für genutzte Funk-Adressen, Funkmodul-Hardware und Zentralen Hardware
- NANO CUL 868MHz - Stick zum AskSin Analyzer XS umflashen (Anleitung für ArduinoIDE unter Windows)
- Firmware Updates für IP-Aktoren / Sensoren... Info's, Tipps und Sonstiges
- CCU funkt nicht - CarrierSense (CS) Probleme erkennen und lösen
-
wolwin
- Beiträge: 350
- Registriert: 06.06.2018, 12:27
- Hat sich bedankt: 22 Mal
- Danksagung erhalten: 64 Mal
Re: CUxD - Übergabe Systemzustand mit der WebUI
Siehe ersten Snapshot
- MichaelN
- Beiträge: 13170
- Registriert: 27.04.2020, 10:34
- System: CCU
- Hat sich bedankt: 876 Mal
- Danksagung erhalten: 2266 Mal
Re: CUxD - Übergabe Systemzustand mit der WebUI
liegt vermutlich am rest des Skriptes. Bitte als Code </> einfügen!
LG, Michael.
Wenn du eine App zur Bedienung brauchst, dann hast du kein Smarthome.
Wettervorhersage über AccuWeather, Open-Meteo 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, Open-Meteo oder OpenWeatherMap+++ Rollladensteuerung 2.0 +++ JSON-API-Ausgaben auswerten +++ undokumentierte Skript-Befehle und Debugging-Tipps +++
- Baxxy
- Beiträge: 15079
- Registriert: 18.12.2018, 15:45
- System: Alternative CCU (auf Basis OCCU)
- Wohnort: Berlin
- Hat sich bedankt: 972 Mal
- Danksagung erhalten: 3449 Mal
Re: CUxD - Übergabe Systemzustand mit der WebUI
Was du vorhast und wie es umgesetzt ist, ist mir schon klar.
Und die üblichen Debugging-Tipps sind dir auch gebräuchlich würde ich sagen.
- Triggert das Programm überhaupt durch den Timer?
- wie sieht es aus wenn du das Programm händisch (nur 1. dann) ausführst?
- was passiert wenn du die SysVar über die WebUI (statt mit dem unbekannten Script) beschreibst
- usw.
Grüße... Baxxy
- Raspberry Pi 4 als Homematic-Zentrale - Tipps und Informationen
- Analysescript für genutzte Funk-Adressen, Funkmodul-Hardware und Zentralen Hardware
- NANO CUL 868MHz - Stick zum AskSin Analyzer XS umflashen (Anleitung für ArduinoIDE unter Windows)
- Firmware Updates für IP-Aktoren / Sensoren... Info's, Tipps und Sonstiges
- CCU funkt nicht - CarrierSense (CS) Probleme erkennen und lösen
-
wolwin
- Beiträge: 350
- Registriert: 06.06.2018, 12:27
- Hat sich bedankt: 22 Mal
- Danksagung erhalten: 64 Mal
Re: CUxD - Übergabe Systemzustand mit der WebUI
Yep ...
Also hier das benutzte Skript - es stammt aus meinem globalen Energieskript (Strom, Gas, Wasser), in dem die NT / HT Umschaltung bei jedem Stromzähler Event abgefragt wird - daher die vielleicht umständlich erscheinenden Namenskonventionen.
Es werden folgende Systemvariablen (Text) benötigt (das Feiertagsskript muss nicht installiert sein):
Code: Alles auswählen
sKosten_Tarif_Flag = "sys_TStrom_Tarif_Flag";
sKosten_Tarif_Zeiten = "sys_TStrom_Tarif_Zeiten";
sKosten_Tarif_Timer = "sys_TStrom_Tarif_Timer";
sKosten_Tarif_Debug = "sys_TStrom_Tarif_Debug";
Code: Alles auswählen
00:00,NT|00:00,NT ; 06:00,HT ; 20:00,NT|00:00,NT ; 06:00,HT ; 20:00,NT|00:00,NT ; 06:00,HT ; 20:00,NT|00:00,NT ; 06:00,HT ; 20:00,NT|00:00,NT ; 06:00,HT ; 20:00,NT|00:00,NT ; 06:00,HT ; 20:00,NT|00:00,NT
Hier das Test-Skript ...
Code: Alles auswählen
! Vorsatzbezeichnung für die Systemvariablen-Namen der Zähler aus der Geräteliste
! Beispiel 1: 'xxxxYYYY_Verbrauch_aktuell' mit xxxx = 'sys_' und YYYYY = 'Gas'
! zu 'sys_ZS-Gas_Verbrauch_aktuell'
! Beispiel 2: 'xxxxYYYY_Verbrauch_aktuell' mit xxxx = '' und YYYYY = 'Gas'
! zu 'ZS-Gas_Verbrauch_aktuell'
! string preSysVar = "";
string preSysVar = "sys_";
! Global - Feiertag-Script - Feiertag-Systemvariable
! Bei Auswertung eines Tarifstrom-Zählers wird die Installation des Feiertags-Script benötigt
! https://homematic-forum.de/forum/viewtopic.php?f=31&t=4058&hilit=feiertags#p23994
! string sFeiertag_Heute = "Feiertag-Heute"; ! Original-Bezeichnung im Feiertag-Script
!
! string sFeiertag_Heute = "Feiertag-Heute";
string sFeiertag_Heute = preSysVar # "Feiertag-Heute";
object oFeiertag_Heute = null;
! ==========================================
! === Ab hier keine Änderungen vornehmen ===
! ==========================================
! Typ-Definition der Zähler - !!! nicht ändern !!!
string type_gas = "Gas"; ! Gas-Zähler
string type_strom = "Strom"; ! Strom-Zähler
string type_tstrom = "TStrom"; ! Tarifstrom-Zähler
string type_wasser = "Wasser"; ! Wasser-Zähler
! Aus dem Namen des Zähler-Sensors wird der Typ ermittelt. Ein Device muss also
! immer am Ende des Namens einen Seperator (z.B.: 'ZS-') gefolgt von dem Typ
! (z.B.: 'Gas' oder 'GasXYZ') enthalten, der sich in der Liste 'types' befindet.
! Beispiel 1: "XXXXX_ZS-Gas" oder "XXXXXX_ZS-WasserG" mit 'namesSep="_ZS-"' als Trenner
! Beispiel 2: "XXXXX-Gas" oder "XXXXXX-WasserG" mit 'namesSep="-"' als Trenner
! string nameSep = "ZS-";
string nameSep = "";
! Allgemeine Kennzeichnung Zähler-Sensor
preSysVar = preSysVar # nameSep;
! Listen-Trennzeichen
string sTvar = "|";
string sTbez = ",";
string sTsem = ";";
string sHT = "HT";
string sNT = "NT";
real vWNull = 0.0;
! sys_ZS-TStrom_Tarif_Flag
! Werteliste HT;NT
! sys_ZS-TStrom_Tarif_Zeiten
! Zeichenkette
! 00:00,NT|00:00,NT ; 06:00,HT ; 20:00,NT|00:00,NT ; 06:00,HT ; 20:00,NT|00:00,NT ; 06:00,HT ; 20:00,NT|00:00,NT ; 06:00,HT ; 20:00,NT|00:00,NT ; 06:00,HT ; 20:00,NT|00:00,NT ; 06:00,HT ; 20:00,NT|00:00,NT
string sKosten_Tarif_Flag = "_Tarif_Flag";
string sKosten_Tarif_Zeiten = "_Tarif_Zeiten";
string sKosten_Tarif_Timer = "_Tarif_Timer";
string sKosten_Tarif_Debug = "_Tarif_Debug";
! string sKosten_Tarif_Flag = "sys_TStrom_Tarif_Flag";
! string sKosten_Tarif_Zeiten = "sys_TStrom_Tarif_Zeiten";
! string sKosten_Tarif_Timer = "sys_TStrom_Tarif_Timer";
! string sKosten_Tarif_Debug = "sys_TStrom_Tarif_Debug";
object oKosten_Tarif_Zeiten = null;
object oKosten_Tarif_Flag = null;
object oKosten_Tarif_Timer = null;
object oKosten_Tarif_Debug = null;
! dom.GetObject("_sys_Debug").State(counter # " - " # system.Date("%H:%M:%S"));
! Objekt Systemvariablen
object sysvar = dom.GetObject(ID_SYSTEM_VARIABLES);
string sCUXD_Timer_TarifStrom = "CUxD.CUX2800001:4";
! TStrom Tarif-Zeiten für HT oder NT
! sys_ZS-TStrom_Tarif_Zeiten
! Zeiten Feiertag|Zeiten Montag|Zeiten Dienstag|Zeiten Mittwoch|Zeiten Donnerstag|Zeiten Freitag|Zeiten Samstag|Zeiten Sonntag
! 00:00,NT|00:00,NT ; 06:00,HT ; 20:00,NT|00:00,NT ; 06:00,HT ; 20:00,NT|00:00,NT ; 06:00,HT ; 20:00,NT|00:00,NT ; 06:00,HT ; 20:00,NT|00:00,NT ; 06:00,HT ; 20:00,NT|00:00,NT ; 06:00,HT ; 20:00,NT|00:00,NT
! Anmerkung: Die Zeiten müssen aufsteigend angeordnet werden.
! string sTFt = "00:00,NT";
! string sTMo = "00:00,NT ; 06:00,HT ; 20:00,NT";
! string sTDi = "00:00,NT ; 06:00,HT ; 20:00,NT";
! string sTMi = "00:00,NT ; 06:00,HT ; 20:00,NT";
! string sTDo = "00:00,NT ; 06:00,HT ; 14:53,NT ; 14:55,HT ; 20:00,NT";
! string sTFr = "00:00,NT ; 06:00,HT ; 20:00,NT";
! string sTSa = "00:00,NT ; 06:00,HT ; 20:00,NT";
! string sTSo = "00:00,NT";
! string sTAl = sTFt # "|" # sTMo # "|" # sTDi # "|" # sTMi # "|" # sTDo # "|" # sTFr # "|" # sTSa # "|" #sTSo;
! WriteLine(sTAl);
! Für den Tarifstrom den aktuellen HT- oder NT-Tarif ermitteln
oKosten_Tarif_Flag = sysvar.Get(preSysVar # type_tstrom # sKosten_Tarif_Flag);
oKosten_Tarif_Zeiten = sysvar.Get(preSysVar # type_tstrom # sKosten_Tarif_Zeiten);
oKosten_Tarif_Timer = sysvar.Get(preSysVar # type_tstrom # sKosten_Tarif_Timer);
oKosten_Tarif_Debug = sysvar.Get(preSysVar # type_tstrom # sKosten_Tarif_Debug);
! oKosten_Tarif_Zeiten.State(sTAl);
oKosten_Tarif_Debug.State("");
if (oKosten_Tarif_Flag && oKosten_Tarif_Zeiten && oKosten_Tarif_Timer) {
! ---
! Aktuelle Tarif-Zeiten auslesen und aktuelle Tarif-Einstellung HT oder NT setzen
! ---
! Test, ob Feiertag
boolean bFeiertag = false;
oFeiertag_Heute = sysvar.Get(sFeiertag_Heute);
if (oFeiertag_Heute) {
if (oFeiertag_Heute.Value()) {
bFeiertag = true;
}
}
! Aktuelle Tages-Tarif Zeile einlesen
string sTarifTag;
integer iTag = 0;
integer iDT_Tag = system.Date("%u");
foreach(sTarifTag, oKosten_Tarif_Zeiten.Value().Split(sTvar)) {
sTarifTag = sTarifTag.Trim();
! Test, ob Feiertag ist
if (bFeiertag && (iTag == 0)) { break; }
! Test, ob Listeneintrag der aktuelle Wochentag ist
if (iDT_Tag == iTag) { break; }
iTag = iTag + 1;
}
! Aktuellen Tages-Zeit-Tarif einlesen
string sTarifEintrag;
string sTarifZeit;
string sTarifTarif;
string sTarifTimer = "00:02:00";
! 1 Minute nach Timer für Feiertagsberechnung um 00:01:00
integer iTarifAktuell = 0;
string sDT_HM = system.Date("%H:%M");
! WriteLine(sDT_HM);
foreach(sTarifEintrag, sTarifTag.Split(sTsem)) {
sTarifEintrag = sTarifEintrag.Trim();
sTarifZeit = sTarifEintrag.StrValueByIndex(sTbez, 0).Trim();
sTarifTarif = sTarifEintrag.StrValueByIndex(sTbez, 1).Trim().ToUpper();
! WriteLine(sTarifEintrag);
! WriteLine(sTarifZeit);
! WriteLine(sTarifTarif);
oKosten_Tarif_Debug.State(sDT_HM # " => " # sTarifEintrag # " => " # sTarifZeit # " - " # sTarifTarif);
if ( sDT_HM >= sTarifZeit ) {
if (sTarifTarif == sNT) {
iTarifAktuell = 1;
} else {
iTarifAktuell = 0;
}
} else {
sTarifTimer = sTarifZeit # ":00";
break;
}
}
! WriteLine("=> " # iTarifAktuell);
! WriteLine("=> " # sTarifTimer);
oKosten_Tarif_Debug.State(sDT_HM # " => " # sTarifEintrag # " => " # sTarifZeit # " - " # sTarifTarif # " => " # iTarifAktuell # " " # sTarifTimer);
! Ermittelte aktuelle Tarif-Einstellung HT oder NT setzen
oKosten_Tarif_Flag.State(iTarifAktuell);
! Timer-Wert für nächste Timer-Abfrage setzen
oKosten_Tarif_Timer.State(sTarifTimer);
! --- Timer setzen ---
! dom.GetObject(sCUXD_Timer_TarifStrom # ".TIMER_SET").State(sTarifTimer);
dom.GetObject(sCUXD_Timer_TarifStrom # ".TIMER_SET").State(oKosten_Tarif_Timer.Value());
! ---
! ---
}
- Baxxy
- Beiträge: 15079
- Registriert: 18.12.2018, 15:45
- System: Alternative CCU (auf Basis OCCU)
- Wohnort: Berlin
- Hat sich bedankt: 972 Mal
- Danksagung erhalten: 3449 Mal
Re: CUxD - Übergabe Systemzustand mit der WebUI
Sehr aufschlussreich.
Du änderst die SysVar mit der Timerzeit in der ersten Aktion des Programms ("Dann 1") per Script.
Danach zeitversetzt soll diese geänderte SysVar mit dem CUX-Timer synchronisiert werden ("Dann 2").
Bin ich erstmal überfragt und hab ich so auch noch nie probiert. Teste ich aber bei Gelegenheit mal.
Spekulation:
Die Änderung der Timer-SysVar wird während der Programm-Laufzeit nicht berücksichtigt und es wird der Wert benutzt der vor dem Start des Programms drin stand.
Könnte man testen.
Du änderst die SysVar mit der Timerzeit in der ersten Aktion des Programms ("Dann 1") per Script.
Danach zeitversetzt soll diese geänderte SysVar mit dem CUX-Timer synchronisiert werden ("Dann 2").
Bin ich erstmal überfragt und hab ich so auch noch nie probiert. Teste ich aber bei Gelegenheit mal.
Spekulation:
Die Änderung der Timer-SysVar wird während der Programm-Laufzeit nicht berücksichtigt und es wird der Wert benutzt der vor dem Start des Programms drin stand.
Könnte man testen.
Grüße... Baxxy
- Raspberry Pi 4 als Homematic-Zentrale - Tipps und Informationen
- Analysescript für genutzte Funk-Adressen, Funkmodul-Hardware und Zentralen Hardware
- NANO CUL 868MHz - Stick zum AskSin Analyzer XS umflashen (Anleitung für ArduinoIDE unter Windows)
- Firmware Updates für IP-Aktoren / Sensoren... Info's, Tipps und Sonstiges
- CCU funkt nicht - CarrierSense (CS) Probleme erkennen und lösen