HomeKit- und Siri-Integration

Du musst einen Feature-Request stellen, damit das integriert wird. Vorerst nur Schalter, Lampen und Temperaturen (falls ich nichts vergessen habe).

Diese Sensoren werden tatsächlich noch nicht von der HomeKit-Integration unterstützt. Ich werde das für die nächste Version notieren, und zögere nicht, einen Feature-Request wie von @GBoulvin empfohlen zu schreiben, damit wir eine Nachverfolgung haben.

Nach einigen Tagen der Nutzung habe ich Änderungen vorgenommen, um die Integration zu verbessern. Dieser neue Pull Request

  • fügt die Öffnungssensoren (Tür, Fenster…) auf Anfrage von @bouillou7 hinzu
  • behebt den Helligkeitsbereich der Lampen. Heute zum Beispiel bei Philips Hue, wenn man die Helligkeit auf 100% über die Maison-App einstellt, liegt man tatsächlich nur bei ~40% bei Gladys
  • behebt den Empfang neuer Werte bei HomeKit. Derzeit werden die neuen Werte der Gladys-Geräte nicht direkt vom HomeKit-Netzwerk empfangen, sondern die App muss diese neuen Werte anfordern (beim Starten, beim Wechseln der Ansicht in der App…). Mit dieser Entwicklung sendet Gladys eine „Benachrichtigung“ an das HomeKit-Netzwerk bei jedem neuen Wert eines kompatiblen Geräts, die Anzeige in der Maison-App wird tatsächlich in Echtzeit und dies wird die Automatisierungen der Maison-App verbessern, die von den Sensoren abhängig sind

Für diejenigen, die einen Blick darauf werfen oder testen möchten, der Pull Request:

Ein Docker-Image ist verfügbar bertrandda/homekit

Genial, das! :slight_smile:

Ich habe dir einen Kommentar zur Häufigkeit des Sendens der neuen Zustände hinterlassen. Alle Zustände zu senden, ist wirklich zu aggressiv. Ich habe es bei der Alexa/Google Home-Integration etwas anders gemacht :slight_smile:

Bei Google/Alexa ist das der Fall, weil wir API-Aufrufe und Serveranfragen tätigen. Wenn alles lokal bleibt, ist das dann nicht unnötig?

Ich habe mir den Code ein bisschen angesehen. Kannst du mir bitte bestätigen, ob ich die Funktionsweise richtig verstanden habe: Sobald wir ein Ereignis über den neuen Zustand einer Funktion erhalten, starten wir einen Timeout von 5 Sekunden. Wenn innerhalb dieser 5 Sekunden kein neues Ereignis für dieselbe Funktion eintrifft, senden wir die Information. Andernfalls starten wir einen neuen Timeout mit dem neuen Wert.

Wenn das stimmt, habe ich zwei Fragen:

  • Was passiert, wenn ein Gerät alle 2 Sekunden automatisch einen neuen Wert sendet (ich habe kein Beispiel, aber ich versuche, extreme Fälle zu berücksichtigen, z. B. mit dem Zigbee-Modul des Linky)? Wird man dann nicht in einer Endlosschleife stecken, ohne den neuen Wert zu senden?
  • Können wir den Timeout nicht etwas verkürzen? Denn wenn der Benutzer z. B. einen Alarm/eine Warnung in den HomeKit-Automatisierungen programmiert hat, der/die bei einem Öffnungssensor von Gladys ausgelöst wird, könnte es sein, dass ein Fenster/Tür geöffnet und dann innerhalb von 5 Sekunden wieder geschlossen wird und der Alarm nicht ausgelöst wird. Ist das nicht etwas, das wir aus Sicherheitsgründen vermeiden wollen?

Genau das habe ich mir auch gedacht, als ich dir den Code-Schnipsel geschickt habe :stuck_out_tongue: Das ist ein Bug, es sollte eine Art « Maximalverzögerung » geben.

Das erzeugt wirklich enormen Traffic, und wir haben das bei der Entwicklung der InfluxDB-Integration gesehen: Es verbraucht wirklich viel CPU auf Gladys-Seite, jeden einzelnen Event ohne irgendwelche Grenzen zu verwalten.

Selbst wenn die Grenze bei 1 Event pro Sekunde liegt, ist das schon super. Manche Geräte sind sehr ausführlich.

In diesem Fall können wir die Verzögerung tatsächlich reduzieren. Danach kann die Verzögerung für bestimmte Arten von « kritischen » und wenig ausführlichen Geräten (z. B. Türöffnung) unterschiedlich sein.

Aber ich versichere dir, dass bei den Installationen einiger Benutzer dieses Forums das Senden von allem ihr Netzwerk und ihre Gladys-Instanz töten wird :sweat_smile:

Eine andere Frage: Du sendest nur die Zustände der Geräte, die « Gladys-Homekit-kompatibel » sind, oder?

Okay, ich werde es versuchen, indem ich das Doppelte als Maximum einstelle (wenn die Tempo 5 Sekunden beträgt und wir in einem Fall sind, in dem ein Ereignis alle 2 Sekunden auftritt, wird der neue Wert mit dem Ereignis gesendet, das 10 Sekunden nach dem ersten auftritt)

Standardmäßig werde ich also 5 Sekunden einstellen und im Service-Mapping ein Feld hinzufügen, um diese Verzögerung bei Bedarf anzupassen

Ja, nur die neuen Werte der Geräte, die an HomeKit angeschlossen sind, werden gesendet

Ich habe das Bild bertrandda/gladys:homekit mit den neuesten Änderungen aktualisiert, um die Anzahl der gesendeten Ereignisse zu reduzieren.

Vielen Dank @bertrandda für das Fix :slight_smile:

Jetzt Feedback einholen, um zu prüfen, ob es funktioniert und nicht zu aggressiv ist. Wenn ihr testet, wäre ein Vergleich „CPU-Nutzung vor/nach“ super.

Ein kleines Up für alle, die dieses Thema während der Ferien testen können :slight_smile:

Ansonsten @bertrandda, nichts damit zu tun, aber wir haben einen Typen im englischen Forum, der Fragen zu Node-HAP stellt (kein Bezug zu Gladys), falls du ihm mal helfen möchtest:

https://en-community.gladysassistant.com/t/we-are-trying-to-use-hap-nodejs-we-are-able-to-control-devices-from-home-app-but-when-we-control-the-devices-manually-the-status-is-not-reflecting-in-home-app-can-you-please-help-us-on-this/65

Ich schaue mal, was ich tun kann

Ich habe das Bild aktualisiert, um jetzt Node 18 zu verwenden. Zur Erinnerung ermöglicht das Bild bertrandda/gladys:homekit das Testen der folgenden Änderungen:

  • Echtzeitdaten in HomeKit empfangen
  • Helligkeit der Lampen korrigiert
  • Verwaltung von Öffnungssensoren hinzugefügt.

Hallo,

Ich habe diesen Fehler in den Logs

2023-01-10T17:45:47+0100 <warn> functionsWrapper.js:15 (EventEmitter.<anonymous>) Fehler beim Ausführen der Funktion () { [native code] }
2023-01-10T17:45:47+0100 <warn> functionsWrapper.js:16 (EventEmitter.<anonymous>) TypeError: Cannot read properties of undefined (reading 'notifDelay')
    at HomeKitHandler.notifyChange (/src/server/services/homekit/lib/notifyChange.js:23:71)
    at EventEmitter.<anonymous> (/src/server/utils/functionsWrapper.js:13:13)
    at EventEmitter.emit (node:events:525:35)
    at Event.emit (/src/server/lib/event/index.js:18:16)

et diesen Fehler auf dem iPad, wenn ich versuche, Gladys hinzuzufügen (obwohl ich sie bereits gelöscht habe)

Nach dem Löschen der Variablen in t_variables in der Datenbank konnte ich Gladys neu verbinden.
Die Öffnungssensoren funktionieren (und können als Türen angezeigt werden).

Aber immer noch die gleichen Fehler in Gladys und der Zustand der Öffnungssensoren ändert sich nicht in HomeKit (er scheint übrigens invertiert zu sein)

Vielen Dank @cicoub13 für deine Tests. Das zeigt die Grenzen der Entwicklungsumgebung mit falschen Geräten.

Ich glaube, ich weiß, was passiert ist. Kannst du mir bitte die Referenz deines Türsensors geben?

Ich werde diesen Punkt überprüfen

In den HomeKit-Foren habe ich viele ähnliche Fälle gesehen. Es scheint, dass der Löschbefehl nicht immer bis zum Gerät durchdringt, sodass das Gerät aus deiner Home-App verschwindet, aber nicht aus der internen Konfiguration des Geräts. Ich werde einen zurücksetzen-Button auf der Integrationsseite hinzufügen, um den Konfigurationsordner zu löschen. Das sollte es ermöglichen, nicht in die Tabelle eingreifen zu müssen, wenn man diese Meldung erhält.

Dieser hier: Aqara MCCGQ11LM control via MQTT | Zigbee2MQTT

Das ist eine gute Idee, aber man muss gut erklären, was der Button macht (und ihn vielleicht rot einfärben).
Denn es gibt bereits einen Button, wenn die Hinzufügung eines Geräts in HomeKit nicht funktioniert, um den « Dienst neu zu laden ».

Ich habe dir ein Bild mit dem Fix für den invertierten Wert und das Senden des Live-Werts erstellt. Kannst du mir sagen, ob es okay ist?

Alles klar für mich, danke für die Korrektur

Alles klar bei mir, nur eine Frage vor dem Merge: Kann ich das ohne Bedenken in die Produktion deployen? Der Nutzer muss nichts neu verknüpfen, oder? :slight_smile:

Normalerweise gilt Gladys als Brücke, neue Geräte werden automatisch zu HomeKit hinzugefügt. Man muss nur die Namen/Räume der neuen Geräte konfigurieren (sie haben standardmäßig einen Raum, bis dies erledigt ist).

Das Problem, über das wir mit Cyril gesprochen haben, ist ein Sonderfall, den ich in einem anderen PR behandeln werde. Es muss der Fall verwaltet werden, in dem der Benutzer versucht, Gladys von HomeKit zu trennen, aber er zu diesem Zeitpunkt nicht im Netzwerk erreichbar ist. Auf der Seite der Maison Gladys-App wird Gladys vergessen, aber auf der Seite von Gladys weiß es nicht, dass die Verbindung gelöst werden muss, daher ist ein Reset erforderlich (siehe FAQ · homebridge/HAP-NodeJS Wiki · GitHub).

Alles klar, Nickel!

Ich habe gerade etwas im Code gesehen, ich habe dir hier einen Kommentar hinterlassen: