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: 5480
Registriert: 12.09.2015, 22:31
System: Alternative CCU (auf Basis OCCU)
Wohnort: Wegberg
Hat sich bedankt: 422 Mal
Danksagung erhalten: 1074 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
Wenn das Fernsehprogramm immer mehr durch nervende Werbung unterbrochen wird und der Radiomoderator nur noch Müll erzählt, ist es besser, die Zeit für sinnvolle Dinge zu nutzen -
mal aufs Klo zu gehen, ein Bier zu holen oder einfach mal den roten AUS-Knopf zu drücken. Klick - und weg

Script Time Scheduler V1.3
AstroSteuerung über Zeitmodul flexibel mit Offset / spätestens, frühestens
SDV 5.03.01 Das umfassende Entwicklungs und Diagnosetool für Homematik
Selektive Backups - Nützliche Dinge, die die WebUI nicht kann

Intel NUC6 Celeron 16GB mit 512GB SSD unter Proxxmox mit insgesamt 5 VM: 2 x bloatwarebefreiter Raspberrymatik, 2 x IOBroker als Middleware und einer MariaDB zur Archivierung. Verbrauch: 6W

technical contribution against annoying advertising

Antworten

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