Gestörte Kommunikation - Komponenten automatisch ansprechen

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

Moderator: Co-Administratoren

bastianr
Beiträge: 5
Registriert: 23.08.2015, 20:41

Gestörte Kommunikation - Komponenten automatisch ansprechen

Beitrag von bastianr » 17.11.2015, 21:50

Hallo zusammen,

da ich mehrere Rolladenaktoren mein Eigen nenne ist es mir wie vielen anderen hier ein ständiges Ärgernis geworden zu beobachten, dass bei Verbindungsfehlern meine Programme im Prinzip ihren Zweck nicht erfüllen. Man stelle sich vor man ist im Urlaub und wegen eines blöden Verbindungsfehlers bleiben die Rolläden oben - Einbrecher Herzlich Willkommen.

Ich habe hier von jemandem gelesen, der regelmäßig alle paar Minuten erneut den Status seiner Geräte setzt wenn sie nicht den gewünschten Wert haben. Die Grundidee dahinter fand ich nicht schlecht, aber das verhindert gewissermaßen, dass man die Komponenten auch mal von Hand bedient, denn dann würden sie nach 5 minuten (oder wann immer das Skript läuft) wieder zurückfahren - also auch nicht ideal.

Ich möchte hier nun meine Lösung teilen, die ich seit einigen Wochen im Einsatz habe und endlich zu meiner Zufriedenstellung funktioniert:

Meine Grundidee ist, für jedes Gerät eine Systemvariable mit dem Namen CCU2Wert_<Kanal ID> anzulegen. Im jeweiligen Programm muss man dann neben dem Gerät selbst immer auch diese Variable setzen. Diese Variable speichert sozusagen den Wert, den das Gerät eigentlich nun aufgrund der Programmierung in der CCU2 haben sollte. Wenn eine Störung auftritt (und nur dann!), wird versucht das Gerät wieder auf genau diesen Wert zu setzen. Es empfiehlt sich, die Variablen kanalbezogen zu definieren damit man sie in den Programmen leichter findet.

Zum Einsatz kommt eine Abwandlung des bekannten Servicemeldungsskripts von Christian Luetges. Unterschied ist bei mir nur, dass ich das ganze in ein Skript gepackt habe, denn ich persönlich habe noch nicht den Vorteil gesehen es aufzuteilen und bin eher ein Freund davon die Anzahl der Programme überschaubar zu halten. Dieses Skript fragt dann alle 5 Minuten ab, ob es Geräte gibt, für die "Kommunikation war gestört" gemeldet wurde. Wenn dies der Fall ist, wird nicht nur die Meldung einfach bestätigt, sondern versucht, das Gerät auf den Wert zu setzen, der in der dazugehörigen CCU2Wert_* Variablen drinsteht. Zusätzlich schreibe ich auch noch ein Mail darüber, dass die Kommunikation gestört war, so hat man ein bisschen im Überblick wie oft das passiert.

Code: Alles auswählen

! Skript zur Bestätigung der Servicemeldungen und Retriggern der letzten Aktion
! (Anlehnung an http://www.christian-luetgens.de/homematic/funkstoerungen/servicemeldungen/Servicemeldungen.htm)

string itemID;
string address;
object aldp_obj;
string channel;
var newstate;
var curstate;
string stdout;
string stderr;
string cmd;

! Versuch der Kommunikation mit dem Gerät bei "Kommunikation ist gestört"
foreach(itemID, dom.GetObject(ID_DEVICES).EnumUsedIDs()) {
	address = dom.GetObject(itemID).Address();
	aldp_obj = dom.GetObject("AL-" # address # ":0.UNREACH");
	if (aldp_obj) {
		if (aldp_obj.Value()) {
			foreach (channel, dom.GetObject(itemID).Channels().EnumUsedIDs()) {
				curstate = dom.GetObject(channel).State();
			}
		}
	}
}

! Prüfen auf "Kommunikation war gestört"
! Für jedes Gerät muss eine Systemvariable mit dem Namen "CCU2Wert_<CHANNEL>" existieren
! In den jeweiligen Programmen oder Skripten muss dann immer neben dem Gerät selbst auch die Variable auf den Zielwert gesetzt werden
! Beispiel: CCU2Wert_KEQ4711463:1 = 1

foreach(itemID, dom.GetObject(ID_DEVICES).EnumUsedIDs()) {
	address = dom.GetObject(itemID).Address();
	aldp_obj = dom.GetObject("AL-" # address # ":0.STICKY_UNREACH");
	if (aldp_obj) {
		if (aldp_obj.Value()) {
			foreach (channel, dom.GetObject(itemID).Channels().EnumUsedIDs()) {
				if (dom.GetObject("CCU2Wert_" # dom.GetObject(channel).Address()))
				{
					newstate = dom.GetObject("CCU2Wert_" # dom.GetObject(channel).Address()).State();
					dom.GetObject(channel).State(newstate);

					cmd = "/etc/config/addons/email/email 02 \"" # dom.GetObject(channel).Name() # "\" " # newstate # " " # dom.GetObject(channel).State();
					system.Exec(cmd, &stdout, &stderr);
					
					aldp_obj.AlReceipt();
				}
			}
		}
	}
}



Feedback ist herzlich willkommen!

VG
Bastian

Luxtra
Beiträge: 452
Registriert: 13.12.2014, 07:00
Danksagung erhalten: 1 Mal

Re: Gestörte Kommunikation - Komponenten automatisch ansprec

Beitrag von Luxtra » 18.11.2015, 07:47

Zum Verständnis eine Frage:

Wenn du jetzt einen Aktor mit der Hand bedienst und eine Kommunikationsstörung vorliegt, dann setzt ihn dein Script aber auf den letzten von einem Programm eingestellten Sollwert, oder?

bastianr
Beiträge: 5
Registriert: 23.08.2015, 20:41

Re: Gestörte Kommunikation - Komponenten automatisch ansprec

Beitrag von bastianr » 19.11.2015, 22:10

Ja das ist korrekt, mit diesem "Restfehler" muss man leben. Ich finde das aber vernachlässigbar denn das kommt ja nur zum Tragen wenn man den Aktor innerhalb von 5 Minuten nach dem Auftreten eines Kommunikationsfehlers manuell bedient (und dann auch noch auf einen anderen Wert setzt als das Programm vorgesehen hätte). Noch zu bedenken wäre allenfalls dass der Kommunikations Fehler auch durch ein manuelles anstarten per CCU2 über das WebUI oder die eHome App anstatt des Programms kommen konnte. Aber diese beiden Lücken sind wohl unvermeidlich solange es keine firmwareseitige Lösung für das Problem gibt (eigentlich würde ich erwarten, dass eine Lösung ähnlich wie meine automatisch ausgeführt werden kann...)
In beiden Fällen ist man aber wenigstens zuhause und es kann nicht mehr passieren, dass Programme während der Abwesenheit nicht sauber laufen.

Tomiliy
Beiträge: 163
Registriert: 03.12.2014, 19:28
Hat sich bedankt: 13 Mal
Danksagung erhalten: 1 Mal

Re: Gestörte Kommunikation - Komponenten automatisch ansprechen

Beitrag von Tomiliy » 28.04.2024, 12:04

Hallo,

ich finde dein Skript super und habe das auch schon seit längerem im Einsatz. Vielen Dank für die Bereitstellung.
Ich möchte das jetzt gerne ein bisschen abwandeln, weiß aber nicht wie.

ich habe eine alte CCU2 als Repeater eingesetzt. Jetzt kam es schonmal vor, das die Verbindung zwischen CCU & Repeater verloren ging, obwohl alle 3 Leuchten am Repeater eingeschaltet waren und der Repeater pingt.

Für so einen Fall würde ich gerne eine gewisse Zahl von Devices abfragen: LEQ0920824, LEQ0920846, LEQ0920888, QEQ1570201.
Und erst wenn alle diese Devices gleichzeitig über 10 Minuten ein unreach melden soll mittels: system.Exec("/usr/bin/ssh root@repeater-ccu2-eingang /sbin/reboot");
der Repeater neu gestartet werden.

Frage:
Wäre jemand so nett und hat das Verständnis das Script so anzupassen?
Ich kann es leider nicht. Mir fehlt die Kenntnis im Programmiereren.

Vielen Dank
Tom
--------------------------------------------
4 Kanäle in 42 Geräten:
1x HM-LC-Dim1T-FM, 1x HM-RC-8, 12x HM-Sec-SCo, 3x HM-LC-Sw1-Pl-2, 1x HM-PBI-4-FM, 1x HM-OU-CFM-Pl, 3x HM-Sen-EP, 1x HM-CC-VG-1, 1x HM-Sec-MDIR-2, 12x HM-CC-RT-DN, 1x HM-LC-Bl1PBU-FM, 1x HM-Sen-RD-O, 2x HM-PB-2-WM55-2, 1x HM-TC-IT-WM-W-EU, 1x 10000
--------------------------------------------

Tomiliy
Beiträge: 163
Registriert: 03.12.2014, 19:28
Hat sich bedankt: 13 Mal
Danksagung erhalten: 1 Mal

Re: Gestörte Kommunikation - Komponenten automatisch ansprechen

Beitrag von Tomiliy » 29.04.2024, 13:27

Hallo,

jemand eine Idee wie man das Skript anpassen kann? Das wäre toll..
Danke
--------------------------------------------
4 Kanäle in 42 Geräten:
1x HM-LC-Dim1T-FM, 1x HM-RC-8, 12x HM-Sec-SCo, 3x HM-LC-Sw1-Pl-2, 1x HM-PBI-4-FM, 1x HM-OU-CFM-Pl, 3x HM-Sen-EP, 1x HM-CC-VG-1, 1x HM-Sec-MDIR-2, 12x HM-CC-RT-DN, 1x HM-LC-Bl1PBU-FM, 1x HM-Sen-RD-O, 2x HM-PB-2-WM55-2, 1x HM-TC-IT-WM-W-EU, 1x 10000
--------------------------------------------

Benutzeravatar
Baxxy
Beiträge: 10932
Registriert: 18.12.2018, 15:45
System: Alternative CCU (auf Basis OCCU)
Hat sich bedankt: 617 Mal
Danksagung erhalten: 2253 Mal

Re: Gestörte Kommunikation - Komponenten automatisch ansprechen

Beitrag von Baxxy » 29.04.2024, 15:08

Tomiliy hat geschrieben:
29.04.2024, 13:27
jemand eine Idee
Klar, man muss nicht alles mit Scripten erschlagen. :wink:

PRG-A:

Code: Alles auswählen

WENN
Dev-A Unreach bei Änderung
UND
Dev-B Unreach bei Änderung
UND
Dev-C Unreach bei Änderung
.
.
.
DANN
SysVar "tut's mein CCU2-LGW noch?" verzögert um 10Min "nein"
Sonst
SysVar "tut's mein CCU2-LGW noch?" sofort "ja"


PRG-B:

Code: Alles auswählen

WENN
SysVar "tut's mein CCU2-LGW noch?" "nein" bei Änderung 
DANN
Script system.Exec("/usr/bin/ssh root@repeater-ccu2-eingang /sbin/reboot");
Mit RaspberryMatic bräuchte man den Aufwand nicht betreiben, hier gäb's nen Watchdog-Alarm wenn das LGW disconnected.

Tomiliy
Beiträge: 163
Registriert: 03.12.2014, 19:28
Hat sich bedankt: 13 Mal
Danksagung erhalten: 1 Mal

Re: Gestörte Kommunikation - Komponenten automatisch ansprechen

Beitrag von Tomiliy » 02.05.2024, 23:32

Hallo,

sorry, für die Späte Antwort5. Ich war leider unterwegs.
Ich habe keine "Unrech" nur:
2024-05-02 23_30_07-Clipboard.png
2024-05-02 23_30_07-Clipboard.png (8.55 KiB) 187 mal betrachtet
Das sind noch die originalen Homematic, keine HMIP
--------------------------------------------
4 Kanäle in 42 Geräten:
1x HM-LC-Dim1T-FM, 1x HM-RC-8, 12x HM-Sec-SCo, 3x HM-LC-Sw1-Pl-2, 1x HM-PBI-4-FM, 1x HM-OU-CFM-Pl, 3x HM-Sen-EP, 1x HM-CC-VG-1, 1x HM-Sec-MDIR-2, 12x HM-CC-RT-DN, 1x HM-LC-Bl1PBU-FM, 1x HM-Sen-RD-O, 2x HM-PB-2-WM55-2, 1x HM-TC-IT-WM-W-EU, 1x 10000
--------------------------------------------


Tomiliy
Beiträge: 163
Registriert: 03.12.2014, 19:28
Hat sich bedankt: 13 Mal
Danksagung erhalten: 1 Mal

Re: Gestörte Kommunikation - Komponenten automatisch ansprechen

Beitrag von Tomiliy » 02.05.2024, 23:51

Hallo,

ja, ich denke ich weiß was du vor hast.
Aber ob die weitere Kanäle zum Abfragen haben weiß ich nicht.
Modell ist: HM-Sec-SCo
Das sagt HM-Explorer:
2024-05-02 23_50_39-Homematic Explorer.png
--------------------------------------------
4 Kanäle in 42 Geräten:
1x HM-LC-Dim1T-FM, 1x HM-RC-8, 12x HM-Sec-SCo, 3x HM-LC-Sw1-Pl-2, 1x HM-PBI-4-FM, 1x HM-OU-CFM-Pl, 3x HM-Sen-EP, 1x HM-CC-VG-1, 1x HM-Sec-MDIR-2, 12x HM-CC-RT-DN, 1x HM-LC-Bl1PBU-FM, 1x HM-Sen-RD-O, 2x HM-PB-2-WM55-2, 1x HM-TC-IT-WM-W-EU, 1x 10000
--------------------------------------------

Benutzeravatar
Roland M.
Beiträge: 9851
Registriert: 08.12.2012, 15:53
System: CCU
Wohnort: Graz, Österreich
Hat sich bedankt: 255 Mal
Danksagung erhalten: 1397 Mal

Re: Gestörte Kommunikation - Komponenten automatisch ansprechen

Beitrag von Roland M. » 02.05.2024, 23:53

Hallo!
Baxxy hat geschrieben:
02.05.2024, 23:38
Haben die ggf. noch einen weiteren Kanal (:0) den man abfragen könnte?
Du verwendest Raspberrymatic, aber kann man (mittlerweile) auch bei der originalen CCU3 den Kanal :0 abfragen?


Roland
(derzeit in der Nähe von Harlingen, NL)
Zur leichteren Hilfestellung bitte unbedingt beachten:
  • Bezeichnung (HM-... bzw. HmIP-...) der betroffenen Geräte angeben (nicht Artikelnummer)
  • Kurzbeschreibung des Soll-Zustandes (Was soll erreicht werden?)
  • Kurzbeschreibung des Ist-Zustandes (Was funktioniert nicht?)
  • Fehlermeldungen genau abschreiben, besser noch...
  • Screenshots von Programmen, Geräteeinstellungen und Fehlermeldungen (direkt als jpg/png) einstellen!

-----------------------------------------------------------------------
1. CCU2 mit ~100 Geräten (in Umstellung auf RaspberryMatic-OVA auf Proxmox-Server)
2. CCU2 per VPN mit ~50 Geräten (geplant: RaspberryMatic auf Charly)
3. CCU2 per VPN mit ~40 Geräten (geplant: RaspberryMatic auf CCU3)
CCU1, Test-CCU2, Raspi 1 mit kleinem Funkmodul, RaspberryMatic als VM unter Proxmox, Access Point,...

Antworten

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