HowTo: Gleichzeitiges Übertragen mehrerer Parameter (MASTER, LINKS) ohne externes TCL Script

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

Moderator: Co-Administratoren

Antworten
Benutzeravatar
Black
Beiträge: 1926
Registriert: 12.09.2015, 22:31
Wohnort: Wegberg
Hat sich bedankt: 8 Mal
Danksagung erhalten: 26 Mal
Kontaktdaten:

HowTo: Gleichzeitiges Übertragen mehrerer Parameter (MASTER, LINKS) ohne externes TCL Script

Beitrag von Black » 29.08.2019, 14:10

bekannterweise gibt es aus der Historie folgende Möglichkeiten

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'"; 
Wobei STCL dann der auszuführende TCLCode ist. Auch nix neues, ein Standart Pipe halt.

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

MasterSet1.jpg
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); 
jeweils einer der Parameter wird in folgendes TCL Struct gepackt
{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:
master2.jpg
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
Die Wahrheit ist ein Chor aus Wind
Meine Seite, ok noch bisschen im Aufbau

RaspberryMatic 3.45.7.20190507 mit Groundplane Antennenmod (Mein Grundstück ist halt etwas gross)
jede Menge Sensoren und Aktoren, Logamatic 2107 Gateway zum Buderus Kessel
ioBroker unter ProxMox auf NUC als Hauptsteuersystem und Visualisierung
Script Time Scheduler V1.3
SDV 3.08.13 Scripteditor und Objektinspektor

Antworten

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