die älteste: ein TCL Script das putParamSet Script. In der Ausführung funktional, musste aber gehandelt werden und vor allem mit den richtigen Parametern gefüttert werden, konnte wenn man wusste wie, auch modifiziert mit mehreren Parametern umgehen. Davon sind hier diverse Version veröffentlicht
Dann gab es die regascript methode über xmlrpc.PutParamset (), seinerseit als erstes von badenpower veröffentlicht. Eine elegante Methode für einen Parameter, nur mir ist meines Wissenstandes keine Möglichkeit bekannt, die mit mehreren Parametern gleichzeitig laufen zu lassen. Heisst nicht das es nicht doch eine gibt,- aber egal
Ansatz hier jetzt ist die unter HomeMatic XML-RPC-Schnittstelle kapitel 4.2.7 bekannte und dokumentierte xmlrpc Methode PutParamset
void putParamset(String address, String paramset_key, Paramset set)
der Set ist also ein Struct, kann also mehrer Werte beinhalten.
um nicht mehr auf ein TCL Script zurückgreifen zu müssen, das ganze klassisch in einen System Exec Aufruf gekapselt in der Art
Code: Alles auswählen
string cmd= "/bin/sh -c 'echo \"load tclrpc.so; " # sTCL # "\" |tclsh'";
am beispiel mal eines Präsenzmelders, beispielhaft ändern wir nun mal
die Zyclische Statusmeldung auf aus
und die LowBatSchwelle auf 2.4 V
erste schwierigkeit ist: wie heissen die Parameter. raten hilft nicht viel, so wie sie in der Web UI stehen heissen sie definitiv nicht. Also rumsuchen, selber ein Script schreiben zum Auslesen über getparamSet oder
es geht auch hiermit
Der Inspektor verrät hier: Die gesuchten Parameter liegen im Channel:0
heissen CYCLIC_INFO_MSG und LOW_BAT_LIMIT. und genauso wichtig, der richtige Datentyp steht hier auch schon
CYCLIC_INFO_MSG ist vom Typ i4, also integer
LOW_BAT_LIMIT ist vom Typ double, als Gleitkomma
bei CYCLIC_INFO_MSG hätte man eigentlich Bool erwartet, isses aber nicht. durch mal kurzes probieren in der WebUI und angucken im SDV sieht man,
haken weg, CYCLIC_INFO_MSG=0, haken gesetz in der WebUI, CYCLIC_INFO_MSG=1
gut, mit dem Wissen schreibt man dann die folgende Zeilen
Code: Alles auswählen
string stdErr = "";
string stdOut = "";
object oOBJ= channels.Get ("Präsenzmelder:0"); !- Weil die Sätze liegen im Channel 0 !!!
object oIFace= dom.GetObject (oOBJ.Interface () );
string sTCL= "puts [xmlrpc " # oIFace.InterfaceUrl()# "/ putParamset " # oOBJ.Address () # " MASTER [list struct \\"{LOW_BAT_LIMIT {double 2.40}} {CYCLIC_INFO_MSG {i4 0}}\\"]]" ;
string cmd= "/bin/sh -c 'echo \"load tclrpc.so; " # sTCL # "\" |tclsh'";
system.Exec(cmd,&stdout,&stderr);
{PARAMETERNAME {TYPE (aus dem SDV) WERT} davon kann man dann auch mehrere benutzen
{PARAMETERNAME1 {TYPE1 (aus dem SDV) WERT1} }{PARAMETERNAME2 {TYPE2 (aus dem SDV) WERT2}}.. {PARAMETERNAMEn {TYPEn (aus dem SDV) WERTn}}
und nach dem Ausführen des Scriptes das erwartete Bild:
beide parameter wurden geändert.
Anwendungsfälle:
Alles, wo mehrere Parameter in einem Rutsch geändert werden sollen. Einzeln führt zu mehr Funkoffset. noch schlimmer ist einzeln bei Batteriegeräten mit burst
ebenfalls geht natürlich auch der VALUES Bereich oder was auch extrem interessant ist, ändern von Experten Parametern von Direktverknüpfungen.
Die LINK Parameter der Direktverknüpfungen kann der SDV momentan noch nicht dastellen .. momentan, das auslesen klappt, kommt in einer der nächsten Versionen.
Vllt kann ja einer hier den Ansatz brauchen in eigenen Programmen
Black