Nutzer externer Steuerungen (ioBroker / NodeRed / Homeassistant) kennen das.
Damit sie z.B. auf einen Tastendruck eines HmIP-Tasters reagieren können müssen sie auf der Zentrale einmalig ein "Dummy-Programm" anlegen welches den Tastendruck als Trigger hat. Anschließend wird die Konfiguration auf den Taster übertragen und danach kann das Programm gelöscht werden.
Hierbei wird ein (so von mir genannter) CENTRAL-LINK angelegt, quasi eine Direktverknüpfung vom IP-Tasterkanal zu einem (unsichbaren) "Zentralengerät".
Daraus folgt das nun die Zentrale die Events des Tasters mitbekommt und diese an die Schnittstellen für die externen Steuerungen durchreicht.
Gute Sache... eigentlich.
Der "Haken" an der Sache ist folgender:
Der Taster sendet nun sein Event und erwartet ein "Ack" nicht nur vom Verknüpfungpartner (IP-Aktor), sondern auch von der Zentrale.
Solange die Zentrale läuft merkt man kaum was, ist sie aber aus dann wird die eigentlich schnelle und nützliche DV zum Verknüpfungspartner "zäh", bzw. funktioniert teilweise gar nicht mehr. Wie sich das genau auswirkt hatte ich mal >> hier beschrieben <<.
Dieser CENTRAL-LINK wird aber auch bei allen möglichen anderen Triggern angelegt, z.B....Für ein Userproblem aus einem anderen Thread habe ich mal untersucht wie sich "ReportValueUsage" (aktiviert bei einem Sender [WRC6]) auf eine Direktverknüpfung bei "ausgefallener" Zentrale auswirkt.
Testsetup: HmIP-PSM <DV> HmIP-WRC6 (Schalter ein / aus)
Ohne "ReportValueUsage" des Senders (Taster) funktioniert die DV problemlos wenn die Zentrale down ist.
Mit "ReportValueUsage" funktioniert sie auch, aber äußerst zäh. Und wie erwartet ist der Sender freudig gelb mit anschließendem rot am blinken. Der erste Befehl wird zwar instant ausgeführt, für den nächsten muss man aber das rote leuchten abwarten. Das kann gefühlt fast eine Minute dauern und macht keinen Spaß.
Wenn IP-Fensterkontakt = offen, oder WENN IP-Thermostat = 20°C usw.
Bei laufender Zentrale kein Problem, aber wehe die ist mal aus.
Beim WTH-2 gibt es damit z.B. das skurille Problem das dieses selbst bei laufender Zentrale u.U. kein "ack" bekommt und damit munter vor sich hinblinkt. Nachzulesen >> hier <<.
Den CENTRAL-LINK loswerden:
- Bisherige Lösung:
- Neue Lösung:
(getestet aktuell nur auf RaspberryMatic)
Vorgehensweise:
Ihr geht in die Geräteübersicht (> Einstellungen > Geräte), pickt euch euer IP-Gerät raus und nutzt den Button "Programme" um euch alle Programme anzeigen zu lassen die dieses Gerät als Trigger enthalten, dann...
- A: ihr löscht das Gerät in den WENN/Sonst, wenn... Blöcken der Programme
- B: ihr löscht die Programme komplett
("kanalname" natürlich anpassen!)
Code: Alles auswählen
!- CENTRAL-LINK zwischen IP-Aktorkanal und Zentrale löschen
!- by @Baxxy
!- v1.0 24.10.22
!- coding support by @Black's SDV
!- mental support by @jp112sdl
!- Vorgehensweise:
!- Gerätekanal/Datenpunkt aus allen Programmen im WENN-Bereich entfernen...
!- oder...
!- alle Programme die den Gerätekanal/Datenpunkt im WENN-Bereich enthalten löschen
!- erst dann macht es Sinn auch den CENTRAL-LINK zu löschen!!!
string kanalname = "Fensterkontakt BX: SWDM-B2:1 - Fensterstatus"; !- Kanalnamen wie in der WebUI zu sehen eintragen, bspw: Fenstersensor Badezimmer
boolean testmode = false; !- true/false; im Testmode wird der Befehl zum löschen des Links nicht ausgeführt
!- +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
!- ab hier möglichst Finger weg... ;-)
string stdErr; string stdOut;
object oCHANNEL= dom.GetObject (ID_CHANNELS).Get (kanalname);
if (oCHANNEL) {
integer channel_id = dom.GetObject(oCHANNEL).ID();
string programIds = dom.GetObject(channel_id).ChnEnumDPUsagePrograms();
if (programIds.Length() == 0) {
WriteLine("Kanal: "# kanalname #" gefunden, Prüfung auf Benutzung in Programmen ergab 0.\n");
object oIFace= dom.GetObject (oCHANNEL.Interface ());
string sTCL = ^puts [xmlrpc ^ #oIFace.InterfaceUrl()# ^/ removeLink [list string \"^#oCHANNEL.Address()#^\"] [list string \"CENTRAL_DEVICE:63\"]]^;
if (testmode) {WriteLine("Testmodus aktiv - Befehl zur Löschung des CENTRAL-LINK wird nicht ausgeführt!\n");}
if (!testmode) { system.Exec ("/bin/sh -c 'echo \"load tclrpc.so; " # sTCL # "\" |tclsh'",&stdOut,&stdErr); }
!WriteLine("Ausgabe: "# stdErr);
string ausgabe = "CENTRAL-LINK zum Kanal: "# kanalname #" wurde gelöscht!";
if (stdErr.Contains("-10")) { ausgabe = "CENTRAL-LINK zum Kanal: "# kanalname #" wurde gelöscht, Konfiguration muss noch übertragen werden."; }
elseif (stdErr.Contains("-1")) { ausgabe = "CENTRAL-LINK zum Kanal: "# kanalname #" existiert nicht."; }
elseif (stdErr.Contains("-9")) { ausgabe = "Fehler! - Das Gerät ist nicht in Reichweite."; }
elseif (stdErr.Contains("-8")) { ausgabe = "Fehler! - Es steht nicht genug Duty-Cycle zur Verfügung."; }
elseif (stdErr.Contains("-7")) { ausgabe = "Fehler! - Das Interface ist nicht in der Lage eine Update durchzuführen."; }
WriteLine("Ausgabe: "# ausgabe);
}
else {
string liste; integer count = 0;
foreach (liste, programIds) {
count = count + 1; }
WriteLine("Kanal: "# kanalname #" wird noch in > "# count #" < Programmen genutzt!\nDer CENTRAL-LINK wird nicht gelöscht!\n\nProgrammauflistung:\n");
foreach (liste, programIds) {
WriteLine(dom.GetObject (ID_PROGRAMS).Get (liste).Name()); }
}}
else { WriteLine("Kanal: "# kanalname #" nicht gefunden!"); }
Beispielausgaben von meinem Testsystem:
A: "Fensterkontakt BX: SWDM-B2:1 - Fensterstatus" in 3 Programme integriert, ergo CENTRAL-LINK aktiv
Code: Alles auswählen
Kanal: Fensterkontakt BX: SWDM-B2:1 - Fensterstatus wird noch in > 3 < Programmen genutzt!
Der CENTRAL-LINK wird nicht gelöscht!
Programmauflistung:
A_Test_SWDM_A
A_Test_SWDM_B
A_Test_SWDM_C
Code: Alles auswählen
Kanal: Fensterkontakt BX: SWDM-B2:1 - Fensterstatus gefunden, Prüfung auf Benutzung in Programmen ergab 0.
Ausgabe: CENTRAL-LINK zum Kanal: Fensterkontakt BX: SWDM-B2:1 - Fensterstatus wurde gelöscht, Konfiguration muss noch übertragen werden.
Das ist jetzt primär was für User die wissen worum es geht und was sie tun, kann aber natürlich auch von anderen genutzt werden die wissentlich oder unabsichtlich diesen CENTRAL-LINK aktiviert haben und ihn (ohne löschen / neuanlernen des IP-Gerätes) wieder loswerden wollen.
Auch wenn es heißt "...keine Fragen!" dürft ihr natürlich fragen.
Viel Erfolg!