Parameter (z.B. Thermostat-Modus) per WebUI/Script ändern

Problemlösungen und Hinweise von allgemeinem Interesse zur Haussteuerung mit HomeMatic

Moderator: Co-Administratoren

virgin
Beiträge: 636
Registriert: 09.01.2013, 18:36
Wohnort: Leichlingen
Hat sich bedankt: 124 Mal
Danksagung erhalten: 5 Mal
Kontaktdaten:

Re: Parameter (z.B. Thermostat-Modus) per WebUI/Script änder

Beitrag von virgin » 05.01.2014, 19:09

sambasamba hat geschrieben:ich lese hier nur diagonal...
powerup hat geschrieben:Also wäre es möglich die Tabelle mit einem externen Programm auszulesen in einer Datenbank zu speichern und dann modifiziert wieder reinzuschreiben? Ohne händisch am Thermostat die Aktion zu bestätigen ?
Dafür ein Kochrezept wäre super... das können andere auch brauchen.
Bitte aber dafür einen neuen thread unter T&T aufmachen, damit es übersichtlich bleibt.
Danke im Namen des Forums!
V.

Frage nochmal dazu: hat jemand eine Lösung? Oder wurde diese schon an anderer anstelle gepostet?

Gruß


Peter
Bernd

virgin
Beiträge: 636
Registriert: 09.01.2013, 18:36
Wohnort: Leichlingen
Hat sich bedankt: 124 Mal
Danksagung erhalten: 5 Mal
Kontaktdaten:

Re: Parameter (z.B. Thermostat-Modus) per WebUI/Script änder

Beitrag von virgin » 20.03.2014, 09:34

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!
Bernd

ueffchen
Beiträge: 176
Registriert: 29.03.2011, 10:35
Hat sich bedankt: 4 Mal
Danksagung erhalten: 13 Mal

Re: Parameter (z.B. Thermostat-Modus) per WebUI/Script änder

Beitrag von ueffchen » 22.10.2014, 15:32

Hallo

muss ich für jeden Raumthermostat den komplette Code nutzen (Beispiel unten)

Code: Alles auswählen

var addr=dom.GetObject("Thermostat Kueche 1").Address();
var stdout;
var stderr;
system.Exec("tclsh /usr/local/setparam.tcl "+addr+" MODE_TEMPERATUR_REGULATOR int 1",&stdout,&stderr);

var addr=dom.GetObject("Thermostat Wohnzimmer 1").Address();
var stdout;
var stderr;
system.Exec("tclsh /usr/local/setparam.tcl "+addr+" MODE_TEMPERATUR_REGULATOR int 1",&stdout,&stderr);
oder sollte ich
var stdout;
var stderr;
nur zu Beginn setzen

und var addr= **** durch addr=**** ersetzen?

VG, ueffchen

grazcrew
Beiträge: 302
Registriert: 14.12.2010, 23:27
Danksagung erhalten: 1 Mal

Re: Parameter (z.B. Thermostat-Modus) per WebUI/Script änder

Beitrag von grazcrew » 26.10.2014, 14:14

Ich bekomme den Aufruf über ein WegBui-Script nicht hin. Wenn ich in einer Shell dies aufrufe, dann geht es:

Code: Alles auswählen

tclsh setparam.tcl JEQ0231088:2 MODE_TEMPERATUR_REGULATOR int 0
(es wird eine Servicemeldung erzeugt)

We ich das in einem Scrip mache, dann passiert nichts:

Code: Alles auswählen

string stdout;
string stderr;

system.Exec("/usr/local/setparam.tcl JEQ0231088:2 MODE_TEMPERATUR_REGULATOR int 0",&stdout,&stderr); 
Das "setparm.tcl" hat die Rechte 777, sollte also nicht am Zugriff liegen.

Kann jemand helfen?
Warum wird das "system.Exec" nicht ausgeführt? Kann man das irgenwie debuggen (Ausgabe sehen?)

Stimpy
Beiträge: 153
Registriert: 29.12.2012, 01:14

Re: Parameter (z.B. Thermostat-Modus) per WebUI/Script änder

Beitrag von Stimpy » 23.11.2014, 23:13

kann das vielleicht mal wieder einer ausführlich erklären wie das genau geht.
Ich möchte gerne in allen Räumen bei der Heizung auch den Mode (manu, auto, Cent) angezeigt bekommen.
Daran zerbreche ich schon.
Hab eine Systemvariable vom Typ Wertliste (Manu;Auto;Cent) angelegt und einer Heizung zugeordnet.
und diese setparam.tcl benutzt:

Code: Alles auswählen

    #
    # Aufruf für ein putParamset (z.B. via system.Exec)
    # =================================================
    # von Oliver Wagner <owagner@vapor.com>
    #
    # tclsh setparam <addresse> <item> <datentyp> <wert>
    # z.B.
    # tclsh setparam GEQ004711:2 MODE_TEMPERATUR_REGULATOR int 1
    #
    # Diese Version ist fuer Funk. Fuer Wired muss unten der Port von 2001 auf 2000 geaendert werden.
    #
    load tclrpc.so
    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]
Es liegt auf der CCU in /usr/local/setparam.tcl
Mir wird immer angezeig, dass die Heizung auf Manu steht.
was mache ich falsch?
Der 2. Schritt soll dann erst das schalten der Zustände über Mediola werden.

virgin
Beiträge: 636
Registriert: 09.01.2013, 18:36
Wohnort: Leichlingen
Hat sich bedankt: 124 Mal
Danksagung erhalten: 5 Mal
Kontaktdaten:

Re: Parameter (z.B. Thermostat-Modus) per WebUI/Script änder

Beitrag von virgin » 24.11.2014, 08:41

Stimpy hat geschrieben:kann das vielleicht mal wieder einer ausführlich erklären wie das genau geht.
Ich möchte gerne in allen Räumen bei der Heizung auch den Mode (manu, auto, Cent) angezeigt bekommen.
Daran zerbreche ich schon.
Hab eine Systemvariable vom Typ Wertliste (Manu;Auto;Cent) angelegt und einer Heizung zugeordnet.
und diese setparam.tcl benutzt:

Code: Alles auswählen

    #
    # Aufruf für ein putParamset (z.B. via system.Exec)
    # =================================================
    # von Oliver Wagner <owagner@vapor.com>
    #
    # tclsh setparam <addresse> <item> <datentyp> <wert>
    # z.B.
    # tclsh setparam GEQ004711:2 MODE_TEMPERATUR_REGULATOR int 1
    #
    # Diese Version ist fuer Funk. Fuer Wired muss unten der Port von 2001 auf 2000 geaendert werden.
    #
    load tclrpc.so
    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]
Es liegt auf der CCU in /usr/local/setparam.tcl
Mir wird immer angezeig, dass die Heizung auf Manu steht.
was mache ich falsch?
Der 2. Schritt soll dann erst das schalten der Zustände über Mediola werden.
Gleiches Problem hier! Hilfe Forum;-))))
Bernd

paul53
Beiträge: 2554
Registriert: 26.04.2012, 20:42
Wohnort: Berlin
Danksagung erhalten: 15 Mal

Re: Parameter (z.B. Thermostat-Modus) per WebUI/Script änder

Beitrag von paul53 » 29.12.2014, 21:00

grazcrew hat geschrieben:We ich das in einem Scrip mache, dann passiert nichts:

Code: Alles auswählen
string stdout;
string stderr;

system.Exec("/usr/local/setparam.tcl JEQ0231088:2 MODE_TEMPERATUR_REGULATOR int 0",&stdout,&stderr);

Das "setparm.tcl" hat die Rechte 777, sollte also nicht am Zugriff liegen.
So funktioniert der Aufruf nur, wenn Du das Skript von OWagner in der ersten Zeile änderst:

Code: Alles auswählen

#!/bin/tclsh
# Aufruf für ein putParamset (z.B. via system.Exec)
...
Ohne diese Änderung muss der TCL-Interpreter "tclsh" im Kommando mit angegeben werden:

Code: Alles auswählen

system.Exec("tclsh /usr/local/setparam.tcl JEQ0231088:2 MODE_TEMPERATUR_REGULATOR int 0",&stdout,&stderr);
Ich empfehle die Verwendung von CUxD CMD_EXEC anstelle von system.Exec().
Versionen: HM-CC-TC 2.1, HM-LC-Sw1 1.9, HM-CC-RT-DN 1.1, HM-MOD-RPI-PCB 1.2.1 (keine CCU)

virgin
Beiträge: 636
Registriert: 09.01.2013, 18:36
Wohnort: Leichlingen
Hat sich bedankt: 124 Mal
Danksagung erhalten: 5 Mal
Kontaktdaten:

Re: Parameter (z.B. Thermostat-Modus) per WebUI/Script änder

Beitrag von virgin » 29.12.2014, 21:48

Danke, checke ich bei mir in den nächsten Tagen
Bernd

didi1963
Beiträge: 5
Registriert: 04.12.2016, 08:22

Re: Parameter (z.B. Thermostat-Modus) per WebUI/Script änder

Beitrag von didi1963 » 12.12.2016, 19:33

Hallo,
kann ich das setparam.tcl auch für das setzen des Wochenprogramms bei den Gruppen verwenden?
Ich bekomme folgende Meldung wenn ich das mit dem CUxD Shell command aufrufe:
tclsh /usr/local/setparam.tcl INT0000003 WEEK_PROGRAM_POINTER int 2
>> Fault received on xmlrpc call putParamset({"INT0000003","MASTER",[WEEK_PROGRAM_POINTER:2]})
>> faultCode=-2
>> faultString=Unknown instance

PS: bei einem Wandthermostat hab ich das Wochenprogramm erfolgreich setzen können. Ich hab
aber alles in Gruppen organsiert...

Thx

BadenPower

Re: Parameter (z.B. Thermostat-Modus) per WebUI/Script änder

Beitrag von BadenPower » 12.12.2016, 20:23

didi1963 hat geschrieben:Hallo,
kann ich das setparam.tcl auch für das setzen des Wochenprogramms bei den Gruppen verwenden?
Diese setparam.tcl hier ist nur für Funkkomponenten.

Aber warum so umständlich über CUxD und ein TCL?

So geht es doch viel einfacher direkt im Skript und das egal, ob Funk, Wired, oder Gruppe:

Code: Alles auswählen

object lDevice = devices.Get("Name_des Gruppengerätes");
if(lDevice)
{
xmlrpc.PutParamset(lDevice.Interface(),lDevice.Address(),"MASTER","WEEK_PROGRAM_POINTER",2);
}

Antworten

Zurück zu „HomeMatic Tipps & Tricks - keine Fragen!“