Closed eikowagenknecht closed 2 years ago
Also das ist ein echtes Sch.. Thema, weil es echt schlecht zu testen ist. Ich glaube es gibt 3 Usecases:
not available
not available
Ich glaube Du redest über den dritten Fall. Hier ist das Problem, das wir die nicht Erreichbarkeit eines Gerätes über das UNREACH Event auswerten. Die CCU sendet das UNREACH Event direct nach dem initialisieren des Clients, also zu einer Zeit wo Gerät eventuell noch nicht in HA initialisiert wurde. Ich muss mal schauen wie man das noch abfangen kann. Aber für die Zwischenzeit sollten die nicht verfügbaren Geräte in den Persistenten Notifications auftauchen.:wink:
Ich wüsste jetzt aber auch nicht das Fall 3 sauber funktioniert hat. Das hab ich bisher nicht so ausgetestet.
Vielleicht verwandt mit dem Issue:
Ich habe 2 HmIP-SMI55
, welche aus Sicht der CCU eigentlich immer funktionieren. Wenn ich jedoch die neue Integration (oder generell Home Assistant) neu starte, dann sind sie hinterher in HA nicht verfügbar, und auf der CCU werden hierzu auch Service-Meldungen erzeugt. Etwa eine Stunde später erwachen sie dann allerdings wieder zum leben und funktionieren ganz normal.
Ich habe das bisher so interpretiert (und vorerst für mich behalten), dass - weil es batteriebetriebene Sensoren sind - die CCU halt nichts von dem Verbindungsabbruch mitbekommt, und erst durch das getValue
beim Start merkt, dass sie das Gerät nicht erreichen kann. Interessanterweise ist aber immer nur das entity für den CURRENT_ILLUMINATION
Parameter betroffen. Was es eigentlich noch merkwürdiger macht.
Ist wie gesagt nur eine Beobachtung über die ich mir gerade noch Gedanken mache. Aber da es thematisch passt dachte ich ich erwähnte es trotzdem mal. Vielleicht ist ja gerade der Punkt mit dem 1-2 Stunden warten in diesem Kontext relevant.
Bei mir wird ein HmIP-SLO immer beim starten einer HA Instanz nicht verfügbar. Das wird auch so auf parallellaufenden Ha Instanzen angezeigt (Fall 2), da die CCU wohl ein UNREACH Event sendet. Mein Gefühl sagt, da die CCU bei getValue wirklich auf das Gerät durchgreift, wohingegen bei anderen Geräten, auch batteriebetriebenen Sensoren, normalerweise Werte aus dem CCU-Cache gelesen werden. Ist aber eher so meine Theorie.
Ich hab das noch nicht richtig untersucht, aber manchmal werden Entitäten als nicht verfügbar angezeigt wenn der value
None
ist. Das würde zu deinem HmIP-SMI55 passen, und eigentlich den Fall 3 abbilden.
@danielperna84
Lösung Fall 3
Bei den generischen Entitäten könnte man den Status auch vom Entity Value abhängig machen.
Wenn beim initialisieren im HA keine initialen Daten geladen werden können, dann ist die Entity not available
. Der Status löst sich dann wieder auf wenn Events eintreffen. Ich gehe mal davon aus, das eine Entität im Normalfall nicht den Wert None
erhält.
Bei custom Entitäten ist der Status von den verwendeten generischen Entitäten abhängig, die ja die Werte halten.
Hier bin ich mir noch unsicher ob eine Entität not available
reicht, oder ob alle Entitäten not available
sein müssen.
Das Ganze ist natürlich nur in der Startphase relevant. Danach kommen Daten über die Daten Events, oder ein Signal über das UNREACH Event.
.... oder man initialisiert beim starten UNREACH.
Ich finde den Lösungsansatz gut.
Wobei mir hier noch die Idee kommt zu schauen, ob in den Paramsets LOWBAT
/ LOW_BAT
enthalten ist. So wie ich HomeMatic bisher gesehen habe ist es so, dass netzbetriebene Geräte zyklisch ihren Status mitteilen, und sich die CCU deshalb sehr sicher sein kann was der aktuelle Status ist. Und wenn ein Gerät offline ist merkt sie das ja auch. Ohne einer der lowbat-Varianten im Paramset wissen wir also, dass eine getValue
Exception gleichbedeutend mit not available
sein muss. In dem Fall müsste es also auch immer schon vorab eine passende Servicemeldung geben. Und den Zustand liefert die CCU vermutlich aus dem Cache.
Die Exception besagt im Prinzip auch dasselbe für batteriebetriebene Sensoren, nur wird hier durch die Anfrage per getValue
erst von der CCU bemerkt, dass der Sensor nicht verfügbar ist. Das kann grundsätzlich genauso behandelt werden. Also Gerät / Entity ist dann erst mal not available
, und wenn dann das Event ankommt wird es aktiv. Hierdurch wird dann aber erst zu diesem Zeitpunkt die Servicemeldung auf der CCU erzeugt.
Auf UNREACH
würde ich glaube ich nicht prüfen. Da würde man bei einem Gerät außer Reichweite ja genauso eine Exception bekommen wie für z.B. STATE
. Da kann man sich den Request eigentlich sparen. Zumal ich auch schon gesehen habe, dass das getValue
nur bei manchen Parametern nicht klappt, bei anderen hingegen schon. Und nicht zu vergessen sind hier auch z.B. die Stromzähler wo man verschiedene Sensoren dran hängen kann. Da wäre es dann völlig normal bei bestimmten Parametern immer eine Exception (oder zumindest None
) zu bekommen.
Also zusammengefasst: das getValue
kommt in ein try-except. Bei einer Exception oder None
ist der Parameter (nicht das Gerät) unavailable. Erzeugt wird das Entity trotzdem, und irgendwann kommt dann per Event der aktuelle Staus rein (oder auch nicht) und aktiviert das Entity.
So wie ich HomeMatic bisher gesehen habe ist es so, dass netzbetriebene Geräte zyklisch ihren Status mitteilen, und sich die CCU deshalb sehr sicher sein kann was der aktuelle Status ist.
Nur ein kleiner Kommentar: Da würde ich mich nicht drauf verlassen, es ist ein frei konfigurierbarer Parameter bei quasi allen Homematic (IP) Geräten, ob und wie oft es seinen Status meldet. Im Default ist es so, wie du sagst, aber gerade bei größeren Installationen, wo das niedrig halten des Duty Cycle relevant wird, schaltet auch der ein oder andere bei netzbetriebenen Geräten die zyklischen Statusmeldungen komplett ab.
Guter Einwand. Dann kann man sich wohl doch nur bei wired-Geräten auf das getValue
verlassen. 🤔
@eikowagenknecht versuch mal die 0.25.0
Sieht soweit ich es beurteilen kann gut aus, die Entitäten werden korrekt als Offline angezeigt und es gibt keine Warnungen oder Fehler in den Logs. Danke!
custom_component/hahomematic version (if applicable): latest
Home Assistant version (if applicable): 2021.11.10
CCU version: CCU3 with Raspberrymatic
Problem-relevant configuration: Do you use tls? no Do you use callback? no Do you use username and password? yes Which interfaces do you use? hm, hmip
Describe the bug The CCU shows some of my devices (correctly) as offline:
Home Assistant does not:
e.g.
I can't see any logs related to this, the debug of initializing it is:
Maybe related later:
Expected behavior Offline devices should be seen as "not reachable"
Additional context This worked fine for some days now since you fixed the old issue https://github.com/danielperna84/hahomematic/issues/157. I just noticed it today again, maybe one of the newer changes broke it again?