Ballo hat geschrieben: ↑01.02.2023, 18:27
device.DPByHssDP("PARTY_MODE").State(true);
Kann eigentlich nicht funktionieren, da dieser Datenpunkt read/event ist und nicht zum Setzen verwendet werden kann.
Experimente mit "SET_POINT_MODE" und "CONTROL_MODE" setzen zwar die Werte für den Urlaubsmodus, aber, zumindest unter RasberryMatic, wird der Urlaubsmodus nicht angezeigt.
Das Setzen des Urlaubsmodus über ein CCU-Programm geht bei mir überhaupt nicht. Da werden andere Daten erwartet und es ist nicht möglich ein Startdatum anzugeben.
Auf der anderen Seite ist es trivial über RPC in NodeRed und daher weiß ich, das Konzept funktioniert einwandfrei.
Der richtige Weg ist die Baxxy Lösung auf Basis von Blacks TCL Export, doch dort haben wird das "^"/Caret Problem.
Aufgrund der Struktur der Daten bei der Parameterübergabe, bin ich auf folgende (kreative?) Lösung gestoßen (ersetze "\"" durch "{" bzw. "}"):
Code: Alles auswählen
string sChannel = "U-Büro WTH-2:1";
string sUrlaubStart = "2024_03_27 14:20";
string sUrlaubEnde = "2024_03_30 19:10";
real rSollTehmperatur = 10.5;
!- PutParamset VALUES-Zuweisung vom SDV V5.03.01B LCL für Gerät: HmIP-WTH-2
string stdErr=""; string stdOut="";
string TCL="";
TCL=TCL#" {SET_POINT_TEMPERATURE {double $SollTemp}}"; !Datentyp Float beachten ! Wertebereich: 4.500000°C ... 30.500000°C
TCL=TCL#" {SET_POINT_MODE {i4 2}}"; !Datentyp Integer beachten ! Wertebereich: 0 ... 3
TCL=TCL#" {PARTY_TIME_START {string {$UlStart}}}"; !Datentyp String beachten ! Keine Anführungszeichen setzen
TCL=TCL#" {PARTY_TIME_END {string {$UlEnd}}}"; !Datentyp String beachten ! Keine Anführungszeichen setzen
TCL = TCL.Replace( "$UlStart", sUrlaubStart );
TCL = TCL.Replace( "$UlEnd", sUrlaubEnde );
TCL = TCL.Replace( "$SollTemp", rSollTehmperatur.ToString(1) );
object oCHANNEL= dom.GetObject (ID_CHANNELS).Get (sChannel);
object oIFace= dom.GetObject (oCHANNEL.Interface () );
string sTCL= "load tclrpc.so; puts [xmlrpc " #oIFace.InterfaceUrl()# "/ putParamset [list string {"#oCHANNEL.Address()#"}] [list string {VALUES}] [list struct {"#TCL#"}]]";
!WriteLine ("/bin/sh -c 'echo \"" # sTCL # "\" '");
system.Exec ("/bin/sh -c 'echo \"" # sTCL # "\" |tclsh'",&stdOut,&stdErr);
!system.Exec ("/bin/sh -c 'echo \"" # sTCL # "\" '",&stdOut,&stdErr);
!WriteLine (stdOut);
WriteLine (stdErr);
NOTAM:
Das sollte eigentlich auch bei anderen TCL Aufrufen so laufen und dürfte das eine oder andere Problem beseitigen.
PS:
Getestet auf RasberryMatic, Kontrolle Standard CCU wäre gut.
PS2:
Was ist SET_POINT_MODE 3 eigentlich?
0 = Auto
1 = Manu
2 = Urlaub
3 = ?