Seite 1 von 1

Homematic Script: Aktoren einem Gateway zuordnen

Verfasst: 16.06.2022, 12:30
von Piri22
Hallo da draussen.

Für meine Beschattungssteuerung versuche ich, auftretende UNREACH Meldungen begegnen zu können.
Dazu überprüfe ich einige Zeit nach dem Herunterfahren meiner Jalousien (mit Aktor HM-LC-Ja1PBU-FM), ob bei den genutzen Aktoren ein UNREACH aufgetreten ist und versuche noch einmal, die betroffenen Aktoren in die gewünschte Lage zu fahren.

Zur maximalen Funkabdeckung in meinem Haus, habe ich die CCU (Raspberrymatic) und zwei LAN-Gateways, denen ich die Aktoren zugeordnet habe (Roaming hat sich als eher unzuverlässig herausgestellt). Dabei habe ich die Erfahrung gemacht, dass immer wieder mal eine Zuordnung (die sonst tadellos funktionierte) zu UNREACH Fehlern führte.
Ich würde hier gerne beim zweiten Versuch, diese Zuordnung Scriptgesteuert verändern.
Wie mache ich das?

LG
Andreas

Re: Homematic Script: Aktoren einem Gateway zuordnen

Verfasst: 19.06.2022, 10:31
von Black
siehe:
Homatic xmlrpc dokumentation

Kapitel 4.3.23 auf Seite 21

4.3.23 setBidcosInterface
BidCos-RF
Void setBidcosInterface(String device_address, String interface_address,Boolean roaming)

Black

Re: Homematic Script: Aktoren einem Gateway zuordnen

Verfasst: 12.09.2022, 12:16
von Piri22
Ja, genau so etwas habe ich gesucht.
Vielen Dank

Jetzt muss ich nur noch herausfinden, wie man diese API über PHP oder Homematic Skript anspricht

Re: Homematic Script: Aktoren einem Gateway zuordnen

Verfasst: 12.09.2022, 12:43
von Fonzo
Piri22 hat geschrieben:
12.09.2022, 12:16
Jetzt muss ich nur noch herausfinden, wie man diese API über PHP oder Homematic Skript anspricht
Wenn Du Dich nicht extra ewig in APIs einlesen willst, kannst Du existierende professionelle Lösungen nutzten, wenn Du Zeit sparen willst. Symcon nutzt PHP und kann alle von eQ-3 dokumentierten Datenpunkte auslesen und ansprechen.

Re: Homematic Script: Aktoren einem Gateway zuordnen

Verfasst: 12.09.2022, 12:59
von MichaelN
Der SDV von Black kann das auch :wink:

Re: Homematic Script: Aktoren einem Gateway zuordnen

Verfasst: 12.09.2022, 13:17
von jp112sdl
MichaelN hat geschrieben:
12.09.2022, 12:59
Der SDV von Black kann das auch :wink:
Und das sogar kostenlos!

Re: Homematic Script: Aktoren einem Gateway zuordnen

Verfasst: 12.09.2022, 21:00
von Black
Das ist eine der einfachsten Dinge, die eine CCU nativ beherrscht und wofür es Fonzos Advertisung Produkte natürlich nicht bedarf. (Kostenlose professionelle Midleware wie IOBroker beherrschen direkten API Zugriff auf die Schnittstellenprozesse natürlich auch, kosten aber nicht mehrere hundert Euro). Davon mal ganz abgesehen, ist diese Information nicht über einen einfachen, "normalen" Datenpunkt auslesbar und änderbar, sondern nur direkt auf dem Schnittstellenprozess.

Zur Fragestellung des TO:

es geht natürlich über HM-Script, als Shell via TCL würde es auch funktionieren , man kanns auch ohne den Wrapper über TCL direkt als kommando auf den schnittstellenprozess schicken via HM Script, der SDV von Black beherrscht das auch (folglich weiss Black auch wie es geht, weil der hat den SDV programmiert), ebenso kann das auch der Homematic Manager von Hobbyquaker.

Black

Wenn ich Mittwoch von Dienstreise zurück bin, poste ich hier mal die HM-Script Lösung. Werden 3 oder 4 Programmzeilen HM-Script. Also nix, in das sich ein auch nur einigermassen erfahrener Anwender ewig einarbeiten müsste.




Dieser Tip ist kostenlos und erfordert weder Softwareinvestitionskosten noch jährlich anfallende SUS-Gebühren

Re: Homematic Script: Aktoren einem Gateway zuordnen

Verfasst: 15.09.2022, 20:31
von Black
so, dann nehmen wir uns mal das ewig komplizierte API Interface vor. Aus dem ewig kompliziert bleibt als Ansatz folgendes überschaubare Template übrig:

Code: Alles auswählen

string stdErr=""; string stdOut="";
object oIFace;   !Muss auf gültiges Interface Objekt zeigen, welches den Schnittstellenprozess definiert
string sTCL="";
system.Exec ("/bin/sh -c 'echo \"load tclrpc.so; puts [xmlrpc " # oIFace.InterfaceUrl() # "/ "# sTCL # "]\" |tclsh'",&stdOut,&stdErr); 
So, aber nun zu der Aufgabenstellung, via Script die Zuordung Gateway - Zentrale zu ändern.

als erstes braucht man die Seriennummern vom Gateway und dem Zentralenfunkmodul.

das kleine , ewig komplizierte Template von eben dient da wieder als Vorlage:

Code: Alles auswählen

string stdErr=""; string stdOut="";
object oIFace=interfaces.GetAt(0); ;   !Muss auf gültiges Interface Objekt zeigen, welches den Schnittstellenprozess definiert
string sTCL="listBidcosInterfaces";
system.Exec ("/bin/sh -c 'echo \"load tclrpc.so; puts [xmlrpc " # oIFace.InterfaceUrl() # "/ "# sTCL # "]\" |tclsh'",&stdOut,&stdErr);
Als Ausgabestring erhält man z.B.:

Code: Alles auswählen

{ADDRESS NEQ6666666 CONNECTED 1 DEFAULT 0 DESCRIPTION {} DUTY_CYCLE 1 FIRMWARE_VERSION 1.4.1 TYPE HMLGW2}
 {ADDRESS QEQ0123456 CONNECTED 1 DEFAULT 1 DESCRIPTION {} DUTY_CYCLE 12 FIRMWARE_VERSION 4.4.22 TYPE CCU2}
(die realadressen sind natürlich geändert)
die Ausgabe entspricht damals dem ersten überhaupt publizierten weg zum Auslesen eines Dutycycles, von mir veröffentlicht ich glaub 2015 oder 2016.
NEQ6666666 ist die Adresse des Gateways,
QEQ0123456 ist die ADresse des Zentralenmodules

mit dem Wissen nun nehmen wir uns wieder das ewig komplizierte Template zur Api Ansteuerung:
(dazu brauchen wir die in meinem ersten Post oben genannte Methode setBidCosInterface sowie deren dokumentierte Syntax

Code: Alles auswählen

string stdErr=""; string stdOut="";
string sGW="NEQ6666666";
string sCCU="QEQ0123456";
string sDev="MEQ1111111"; ! Die Adresse des Devices, welches CCU oder Gateway zugeordnet werden soll
object oIFace=interfaces.GetAt(0); ;   !Muss auf gültiges Interface Objekt zeigen, welches den Schnittstellenprozess definiert
string sTCL='setBidcosInterface [list string \\\"'#sDev#'\\\"] [list string \\\"'# sCCU# '\\\"] [list bool 0]';
system.Exec ("/bin/sh -c 'echo \"load tclrpc.so; puts [xmlrpc " # oIFace.InterfaceUrl() # "/ "# sTCL # "]\" |tclsh'",&stdOut,&stdErr);   
mit paar Zeilen ein paar hundert Euro gespart. ^^

Black