Ich brauche Hilfe, weil ich irgendwie zu dumm bin;-)
habe das hier gepostete TCL Script (modifiziert für MEIN Testgerät) auf die CCU übertragen:
Code: Alles auswählen
#
# Aufruf für ein putParamset (z.B. via system.Exec)
# =================================================
# nach Idee von Oliver Wagner <owagner@vapor.com>
#
# tclsh setparam <addresse> <item> <datentyp> <wert>
# z.B.
# tclsh setparam GEQ004711:2 MODE_TEMPERATUR_REGULATOR int 1
#
# tclsh /usr/local/parameterset.tcl JEQ0552888:2 MODE_TEMPERATUR_REGULATOR int 2 ---> für Jörg
#
# Diese Version ist fuer Funk. Fuer Wired muss unten der Port von 2001 auf 2000 geaendert werden.
#
load tclrpc.so
load tclrega.so
set device [lindex $argv 0]
set item [lindex $argv 1]
set datatype [lindex $argv 2]
set val [lindex $argv 3]
set cmd "{$item {$datatype $val}}"
xmlrpc http://127.0.0.1:2001/ putParamset [list string [lindex $argv 0]] [list string "MASTER"] [list struct $cmd]
#
# Abruf Parameter z.B. GEQ004711:2 MASTER
#
set ausgabe [xmlrpc http://127.0.0.1:2001/ getParamset [list string [lindex $argv 0]] [list string "MASTER"] ]
#puts $ausgabe
#
# Aufsplittung Parameter MODE_TEMPERATUR_REGULATOR 0/1/2 [Manu/Auto/Cent]
# setzen der Variablen nach <addresse> und füllen mit Parameter
foreach zeile [split $ausgabe \n] {
if [regexp {MODE_TEMPERATUR_REGULATOR [012]} $zeile param] {
set rega_cmd ""
append rega_cmd "var w0 = dom.GetObject('$device:Mode');"
append rega_cmd "w0.State('$val');"
rega_script $rega_cmd
puts $rega_cmd
};
};
#puts $parameter
#puts $device
#
Nun versuche ich es via homematic Script aufzurufen:
Code: Alles auswählen
! RT Thermostat auslesen............................. #
var addr=dom.GetObject("Thermostat Joerg Keller 1").Address();
string cmdline = "tclsh /usr/local/parameterset.tcl JEQ0552888:2 MODE_TEMPERATUR_REGULATOR int 2";
string stdout;
string stderr;
system.Exec(cmdline,&stdout, &stderr);
var merker;
merker = dom.GetObject("Ausgabe").Value();
WriteLine("merker: " # merker);
WriteLine("addr: " # addr);
WriteLine("stdout: " # stdout);
Vorher habe ich natürlich eine Systemvariabe namens "Ausgabe" in der WebUI angelegt. Ziel ist es, um zu testen, mit die Adresse und im merker den Status der Systemvariable anzeigen zu lassen.
Die "Überraschung" für mich ist: der Status wir im Thermostat korrekt geändert! Aaaaber, die Systemvariable augenscheinlich NICHT. Die bleibt, was immer ich auch ändere (0,1,2) stets bei 0. Die Ausgabe des Programms ist:
merker: 0
addr: JEQ0552888:2
stdout: var w0 = dom.GetObject('JEQ0552888:2:Mode');w0.State('2');
Was mache ich falsch? Wo ist mein Denkfehler?
Danke für Euere Hilfe!