hansfriedrich / homebridge-feller-wiser

Homebridge Plugin for the Feller Wiser system.
Apache License 2.0
5 stars 2 forks source link

uuid und Namen #18

Open dmoibm opened 1 year ago

dmoibm commented 1 year ago

Ich bin nun dazu gekommen tiefer in deinen Code zu schauen. Zuerst mal: super Job! Das Plugin ist sehr gut umgesetzt! Dann hätte ich zwei Anregungen: 1. die Generierung der uuid und zweitens den Namen.

uuid: Die uuid wird aus Name, ID und Channel des Loads generiert. Wenn ich nun in einem bestehenden System den Namen des Loads anpasse kriege ich in Homekit einen neuen Device (Raum, Namen, Automationen etc. gehen verloren).
In einem Wiser-System ist jedoch die Device ID und der Channel eindeutig und wechseln nur wenn der Device physisch ausgetauscht wird. Daher bietet sich für Loads eine Kombination aus Device und Channel für die uuid an. Mein Vorschlag wäre daher die Zeile 78 in platform.ts so zu ändern: const uuid = this.api.hap.uuid.generate(load.device + '-' + load.channel);

Name des Device Die Verwendung von load.channel für den Devicenamen führt dazu dass ich mehrere Devices mit gleichem Namen habe. Ein weiteres Problem: Homebridge (oder Homekit) setzt spontan in Home (oder eve) verteilte Namen auf ihren ursprünglichen Namen zurück. Die Vergabe von Namen erst in der Home App ist also nicht sehr effizient;-) (dieser Effekt ist auch in anderen Homebridge Plugins zu sehen.)

Grundsätzlich können in der Wiser Home App den Loads Namen vergeben werden. Um diese Namen im Wiser Plugin zu erhalten muss das Authorization token auf das secret des Users aus der Wiser Home App gesetzt werden (bei mir ist dies der Benutzer admin). Wiser führt ua. die Namen von Loads je User!

Darum schlage ich vor den Namen in der Homebridge auf den Namen aus Wiser Load zu setzen. Wenn kein Name vorhanden ist sollte er auf load.devic + + load.channel gesetzt werden. Das sieht dann so aus in Zeile 97 in platform.ts: `const accessory = new this.api.platformAccessory(load.name.trim()? load.name : load.device + '' + load.channel, uuid);`

Ich habe dies mal bei mir so umgesetzt. Nach ersten Tests sieht es ganz gut aus. Namen und Zuordnungen bleiben bestehen. Wird in Wiser Home App ein Load umbenannt so erscheint der neue Name auch in der Home App und in Eve.

Wie gesagt: nur ein Vorschlag (Feature Request) ;-)

dmoibm commented 1 year ago

Korrektur: Umbenennung in Wiser führt nicht automatisch zur Umbenennung in Homebridge/Homekit! Da müsste noch etwas implementiert werden. Aber es geht jedenfalls ohne neuanordnung/bennenung/zuordnung nach update. Mal schauen wie es in einigen Tage ausschaut.

hansfriedrich commented 1 year ago

Ich bin nun dazu gekommen tiefer in deinen Code zu schauen. Zuerst mal: super Job!

Danke für die Blumen!

Mein Vorschlag wäre daher die Zeile 78 in platform.ts so zu ändern: const uuid = this.api.hap.uuid.generate(load.device + '-' + load.channel);

Den Vorschlag nehme ich gerne auf. War mir bisher nie aufgefallen, da ich die entdeckten Accessoires in der App umbenenne und den entsprechenden Räumen zuordne. Inzwischen wird ja in der App auch beim Hinzufügen gefragt, wo das Accessoire zuzuordnen ist. Den Namen habe ich jeweils in der App vergeben und noch nicht in der Bridge - daher sind die IDs auch stets gleich geblieben.

Die Sache mit dem Namen ist etwas schwieriger - HomeKit braut da wohl sein eigenes Süppchen zusammen. Die AccessoryInfo stellt je die entsprechenden Felder bereit (wird hier im Plugin auch implementiert), sie sind aber allesamt readonly (Supported Events: get). Gleichzeitig lassen sie sich in der HomeKitApp umbenennen ohne ein Event zu triggern.

dmoibm commented 1 year ago

sie sind aber allesamt readonly (Supported Events: get). Gleichzeitig lassen sie sich in der HomeKitApp umbenennen ohne ein Event zu triggern.

Ich denke die Namen müssen, aus Sicht Homebridge, read only bleiben! Ansonsten wird es eher sehr schwierig zu definieren wer bei den Namen nun das Sagen hat;-) Zudem sind es ja auch verschiedene Sichten auf das System. Aus Sicht Wiser habe ich andere Namen als aus Sicht Homekit/Homebridge da in Homekit auch Geräte anderer Systeme angezeigt werden.

Es geht mir eigentlich nur darum in der Home App besser zu erkennen um welchen Button es sich handelt. Momentan habe ich bei allen 2K Devices in der Home App zwei Geräte mit identischem Namen (z.B.: . 0000a3b5 und 0000a3b5). Würde der channel noch angefügt so hätte ich einen 0000a3b5_0 und einen 0000a3b5_1. 0 ist immer der linke und 1 ist immer der rechte Button/Buttonkombi.

Wenn ich in die Geräte in Homebridge anschaue so habe ich die angezeigten Namen dort bereits so wie von mir vorgeschlagen. Homebridge nimmt anscheinend das Property name aus accessory.context.load als displayName. Nun müssen wir dies nur noch in den HomeKit rüber bringen.

Wie (auch von Dir) gesagt: der Rückweg der Namen aus HomeKit zu Homebridge zu Wiser ist nicht vorgesehen in einem Homebridge Plugin.