HowTo: Auslesen eines bestimmten Wertes aus einem MasterParametersatz

Einrichtung, Anschluss und Programmierung der HomeMatic CCU

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: 424 Mal
Danksagung erhalten: 1074 Mal
Kontaktdaten:

HowTo: Auslesen eines bestimmten Wertes aus einem MasterParametersatz

Beitrag von Black » 06.11.2019, 16:14

Letzten kam nochmal die Fragestellung auf, wie man ohne viel Aufwand einen bestimmten Wert eines Masterparametersatzes alternativ auch LinkSatzes lesen kann.
Beispielsweise hier nmal von einem Wandthermosten die Minimaltemperatur.

Diejenigen die es wissen, gehen über die xmlrpc schnittstelle oder benutzen xmlrpc.GetParamSet () im HMScript. Übrig bleibt dann immer noch das Auswerten des xmlgenöles. Da ja die XML_NODES auch nicht gerade Allgemeinwissen sind und auch nicht ganz trivial im Handling, hier eine schnelle Lösung, wie man "mal eben" an einen Wert des Paramset kommt. bei mehreren ist das ineffektiv, da baut man das TCL Kommando anders zusammen.

aber dies erstmal als Lösungsansatz:

readMP.jpg

Ein paar zeilen Code, die als Rückgabewert den gewünschten Parameter liefern. Umcodieren mit .ToFloat oder .ToInteger () muss dann noch bei Bedarf gemacht werden. Bei HMIp geräten aufpassen, dass der richtige Channel angegeben wird anstatt des devices !

Diejenigen , die mit dem SDV arbeiten, müssen weniger aufpassen, hier wird automatisch die Auswahl Device /Channel richtig eingesetzt, ebenso können mehrere Parameter in einem Rutsch abgefragt werden. Das Ergebnis ist dann allerdings eine Liste. (Noch nicht den Menüpunkt xmlrpc.GetParamset (..) suchen, der ist erst in der nächsten Version offen.)

Code: Alles auswählen

!- MasterSetparameter Abfrage aus HM Script von einem Device
!-------- Black in September 2019 - Zeilen aus SDV V3.x.x
!---------------------------------------------------------------------

string stdOut;
string stdErr;
string ParName= "TEMPERATURE_MINIMUM"; !- Wert der abgefragt werden soll
object oDEVICE= dom.GetObject (ID_DEVICES).Get ("IchBinDerGeräteName");
!- ab hier Fingers weg !!
if (oDEVICE) {
   object oIFace= dom.GetObject (oDEVICE.Interface () );
   string sTCL= "regexp {" # ParName # " ([\.0-9]*)} [xmlrpc " # oIFace.InterfaceUrl() # "/ getParamset " # oDEVICE.Address () # " MASTER ] matched sub1 ;puts \$sub1";
   system.Exec ("/bin/sh -c 'echo \"load tclrpc.so; " # sTCL # "\" |tclsh'",&stdOut,&stdErr);
   WriteLine (stdOut); !- Ich bin das Ergebnis
} 
ich hoffe die Zeilen können dem ein oder anderen bei der Umsetzung eigener Ideen oder Projekte helfen


Black
Zuletzt geändert von Black am 07.11.2019, 18:07, insgesamt 1-mal geändert.
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

debianatoe
Beiträge: 475
Registriert: 05.12.2016, 19:04
Hat sich bedankt: 31 Mal
Danksagung erhalten: 4 Mal

Re: HowTo: Auslesen eines bestimmten Wertes aus einem MasterParametersatz

Beitrag von debianatoe » 07.11.2019, 17:56

Interessanter Programmcode ... aber bei mir funktioniert die Zeile
object oDEVICE= dom.GetObject (ID_DEVICES).Get ("HM-TC-IT-WM-W-EU OEQ1666340");
leider nicht. Ich habe natürlich die Seriennummer durch die meines Gerätes ersetzt, aber oDEVICE wird trotzdem nicht gesetzt und somit komme ich auch nicht in die nachfolgende if-Abfrage rein.
Viele Grüße,
debianatoe

Benutzeravatar
Black
Beiträge: 5480
Registriert: 12.09.2015, 22:31
System: Alternative CCU (auf Basis OCCU)
Wohnort: Wegberg
Hat sich bedankt: 424 Mal
Danksagung erhalten: 1074 Mal
Kontaktdaten:

Re: HowTo: Auslesen eines bestimmten Wertes aus einem MasterParametersatz

Beitrag von Black » 07.11.2019, 18:01

debianatoe hat geschrieben:
07.11.2019, 17:56
(..)Ich habe natürlich die Seriennummer durch die meines Gerätes ersetzt, aber oDEVICE wird trotzdem nicht gesetzt und somit komme ich auch nicht in die nachfolgende if-Abfrage rein.
@debianatoe

Devicename, nicht die Seriennumer !

Ich bin immer ein Freund von symbolischer Programmierung, Devicename ist bei Gerätetausch bei Defekt normalerweise gleich, Seriennummer nicht !)
Probier mal bitte mit dem Namen an der Stelle !

gruss, Black

(Mein Devicename da ist verwirrend, weil der Code vom meinem Spielesystem ist, und da war das gerät nach dem Anlernen mit Type & Seriennumer, wie immer halt frisch nach dem Anlernen, noch nicht umbenannt)
Edit:
hab die zeile eindeutiger gemacht hoffe ich: object oDEVICE= dom.GetObject (ID_DEVICES).Get ("IchBinDerGeräteName");
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

debianatoe
Beiträge: 475
Registriert: 05.12.2016, 19:04
Hat sich bedankt: 31 Mal
Danksagung erhalten: 4 Mal

Re: HowTo: Auslesen eines bestimmten Wertes aus einem MasterParametersatz

Beitrag von debianatoe » 07.11.2019, 18:13

Danke für die schnelle Antwort! Mit dem Devicenamen funktioniert es.
Gibt es denn irgendwo eine Auflistung der Parameter dieses MasterParametersatzes und ihrer Bedeutung? Vermutlich sind die ja auch vom Gerätetyp abhängig. Ich konnte aber z.B. den Begriff TEMPERATURE_MINIMUM im hm_devices_Endkunden-Dokument nicht finden.
Viele Grüße,
debianatoe

Benutzeravatar
Black
Beiträge: 5480
Registriert: 12.09.2015, 22:31
System: Alternative CCU (auf Basis OCCU)
Wohnort: Wegberg
Hat sich bedankt: 424 Mal
Danksagung erhalten: 1074 Mal
Kontaktdaten:

Re: HowTo: Auslesen eines bestimmten Wertes aus einem MasterParametersatz

Beitrag von Black » 07.11.2019, 18:17

Der beispielhafte Wert steht bei dem Wandthermostatem classic (RF) für die Minimaltemperatur die du bei geräte einstelen in der WebUI einstellen kannst.

So ne richtige Doku kenne ich eigentlich auch nicht ^^

Wenn du allerdings z.b. mein programm benutzt, kannst du die zu Geräten und Kanälen die vorhandenen Mastersets anzeigen lassen, inkl Datentyp und Wert, Die werte lassen sich auch markieren und dann im Scripteditor auomatisch der Code für das schreiben der Parameter generieren. (Wobei da automatisch auch gerät / kanal eingesetzt wird und auch der datentyp beim Aufruf richtig gesetz wird

gruss, 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

debianatoe
Beiträge: 475
Registriert: 05.12.2016, 19:04
Hat sich bedankt: 31 Mal
Danksagung erhalten: 4 Mal

Re: HowTo: Auslesen eines bestimmten Wertes aus einem MasterParametersatz

Beitrag von debianatoe » 07.11.2019, 19:08

Seltsam ist das schon, daß der Hersteller hier keine vollständige Doku bietet. Wenn ich die Zeile mit dem TCL-Code so umschreibe
string sTCL= "puts [xmlrpc " # oIFace.InterfaceUrl() # "/ getParamset " # oDEVICE.Address () # " MASTER ];";
bekomme ich eine Auflistung aller Parameter und Werte des Gerätes, wobei man die genaue Bedeutung nur erraten kann.
Mit "mein Programm" meinst Du den Scripteditor oder den Scriptdeveloper? Das klingt alles sehr interessant, scheint aber aufwendig zu installieren, weil man da Lizenzen usw. benötigt.
Viele Grüße,
debianatoe

Benutzeravatar
Black
Beiträge: 5480
Registriert: 12.09.2015, 22:31
System: Alternative CCU (auf Basis OCCU)
Wohnort: Wegberg
Hat sich bedankt: 424 Mal
Danksagung erhalten: 1074 Mal
Kontaktdaten:

Re: HowTo: Auslesen eines bestimmten Wertes aus einem MasterParametersatz

Beitrag von Black » 07.11.2019, 19:44

yap, da ist dann etwas raten und probieren angesagt. zielführend ist dann immer, in der webi ändern, im XMLSatz die änderung checken, nochmal ändern, nochmal prüfen und dann hat man den Wert.

[OT-Modus]
Editor und Rega-Inspektionstool und Reparaturtools ergeben zusammen den Scriptdeveloper, der enthält alles. Installieren brauchts auch nicht viel,
hier von Github runterladen, https://github.com/HMMike/Script-Developer-CCU , entpacken in ein verzeichnis deiner Wahl, Mit notepad oder so die INI entsprechend bearbeiten (IP der CCU eintragen etc) starten, wenn er sich verbunden hat, Anfrageschlüssel generieren und mir per PN schicken.

Die Freischaltung hat 2 Gründe: zum einen möchte ich die Kommerzielle Nutzung unterbinden (wenn dann bringe ich selber eine Commercial variante), aber gleichzeitig die private Nutzung frei erlauben.
[/OT-Modus]

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 Zentrale (CCU / CCU2 / CCU3 / Charly)“