Dev-Integration für Zoneminder

Ich habe zwei spezifische Anwendungsfälle.
In beiden Fällen würde es sich um eine Aktion mit einer Dropdown-Auswahl handeln. (Und für einen davon wäre das Ideal eine dynamische Auswahl basierend auf den Möglichkeiten des Geräts. Hier die Farbwirkung eines LED-Bands, nicht nur die Farbe)
Bei Zoneminder ging es darum, einen bestimmten Modus einer Kamera zu aktivieren. Ich könnte eine Auswahl vom Typ SWITCH verwenden, aber es ist nicht intuitiv, 1 = normal, 2 = Überwachung, 3 = Aufzeichnung usw. zu sagen…

Ok, in beiden Fällen denke ich, dass wir eine „benutzerdefinierte“ Kontrolle mit den Übersetzungen und so machen können

Für den ZoneMinder-Zonenwechsel wird es sehr benutzerdefiniert sein (spezifisch für ZoneMinder), für den LED-Streifen-Effekt, mal sehen, wie ähnlich es anderen LED-Streifen-Marken ist, um es zu faktorisieren.

In jedem Fall, wenn wir feststellen, dass das Faktorisieren die Benutzererfahrung verschlechtert, machen wir etwas Benutzerdefiniertes :slight_smile:

Beim LED-Streifen geht es eigentlich hauptsächlich darum, Hyperion (GitHub - hyperion-project/hyperion.ng: The successor to Hyperion aka Hyperion Next Generation · GitHub) zu verwalten.

Also der Link ist die neueste Version, die ich noch nicht getestet habe.
Bei der alten Version kann man ihm entweder eine Farbe oder einen Effekt über eine Zeichenkette übergeben.. ich weiß nicht genau, wie ich das handhaben soll.

Für die benutzerdefinierte Box, hättest du ein Beispiel, wie ich das in meiner Integration deklarieren kann?

Die Farben kannst du mit der bereits vorhandenen Farbsteuerung verwalten:

Du musst nur eine kleine Routine zur Farbformatumwandlung zwischen Hyperion und Gladys erstellen (schau dir an, wie die anderen Dienste das machen, wir haben bereits einige Konvertierungsfunktionen)

Das ist nicht in deiner Integration, sondern in der Box „device-in-rooms“ im Frontend, du kannst das hier codieren:

Aber bevor du anfängst, könntest du hier eine kleine Spezifikation schreiben, damit wir darüber diskutieren können, das wäre besser :slight_smile: Die Idee ist wirklich zu sehen, ob es sich nicht um ein Verhalten handelt, das wir mit anderen Integrationen zusammenfassen können, und wenn es nicht zusammenfassbar ist, denke ich, dass wir trotzdem darüber diskutieren sollten, damit du in die richtige Richtung gehst!

Für die Farbkonvertierung werde ich mir Hyperion ansehen, der derzeit in seiner alten Version beispielsweise red oder blue anfordert.

Für die Funktion ist es ähnlich, der aktuelle Bedarf, wenn ich zoneminder nehme, ist, dass ich dies an die API übergebe:

Monitor[Function]=Modect

Hier interessiert mich Modect
Es ist also diese Zeichenkette, die ich brauche. Zuvor, in der V3, habe ich es anders gemacht, weil ich die API nicht genutzt habe, ich hatte etwas Eigenes nur bei mir, das ein Skript aufrief.. Aber das Ziel war dasselbe, auf Gladys-Seite habe ich eine Integer (1, 2, 3..) gesendet und die Zuordnung vorgenommen.
Aber auf der UI-Seite ist es schlecht, du musst wissen, dass 1=Modect, 2=Monitor..

Ich würde also entweder ein Dropdown-Menü mit den entsprechenden Strings haben, oder etwas anderes.

Ich könnte auch im Zweifelsfall N features für jeden möglichen Modus haben, wobei jede ein Binary ist und wenn eine On ist, werden alle anderen auf Off geschaltet.
Dafür ist keine Entwicklung außer in der Integration erforderlich.

Zögere nicht, dir die Logik auf der Home-Assistant-Seite anzuschauen, es gibt eine Integration mit automatischer Erkennung.

Ich denke, in diesem Fall ist das am besten :slight_smile: Mit den passenden Übersetzungen funktioniert es dann auf Französisch und Englisch.

Also, der Farbauswahl ist super, ich dachte, ich könnte meiner Hyperion-Instanz eine Farbe wie rot oder blau übergeben, aber überhaupt nicht, ich gebe RGB wie Hue an, also funktioniert es direkt.
Ich muss nur noch die Effekte verwalten.

Also schlägst du vor, eine Box auf der Frontend-Seite zu entwickeln, die ein Dropdown-Menü mit Optionen aus der Integration verwaltet, die dieses Gerät steuert, oder?
In diesem Fall, da der Wert ein Integer bleibt, sollte die zurückgegebene Option also ein Objekt des Typs sein:

{ 
  name: <string: Name des Werts>,
  id: <int:value>
}

Ich hätte also die Idee, eine API in der Integration zu haben, die die Liste für die Frontend-Seite zurückgibt..
Auf der Backend-Seite würde dann die Integration die Zuordnung zwischen dem im setValue empfangenen Wert und dem an den Client zu sendenden Namen verwalten.
Bin ich auf dem richtigen Weg?

Nicht genau eine Box, sondern ein Komponent der Box « devices-in-room », aber ja, das ist die Idee. Es wird einfach ein Komponent mit einem Dropdown-Menü sein, das die richtigen ganzzahligen Werte sendet.

Falls du Hilfe brauchst, können wir es zusammen machen, zögere nicht :slight_smile:

Nicht nötig, es ist statisch. Es ist einfach ein Frontend-Komponent und Übersetzungen in den Frontend-Übersetzungen.

Genau!

Hallo,

Ich greife das Thema der Box mit einem Select noch einmal auf.
Ich dachte, eine einfache Lösung wäre, für jede mögliche Option des Modus (hier der Kameramodus) ein device_feature zu erstellen.
Aber im Fall der Integration, die ich für meine Hyperion-Installation schreibe, habe ich 15 Modi für das Band hinter meinem Fernseher, was mir 15 device_features geben würde, alle im Binärformat.. kurz gesagt, ich finde das nicht elegant.

Daher scheint mir die Option, die Komponente devices-in-room zu ändern, die beste zu sein. Ich habe den Code angesehen, insbesondere:

const ROW_TYPE_BY_FEATURE_TYPE = {
  [DEVICE_FEATURE_TYPES.LIGHT.BINARY]: BinaryDeviceFeature,
  [DEVICE_FEATURE_TYPES.LIGHT.COLOR]: ColorDeviceFeature,
  [DEVICE_FEATURE_TYPES.SWITCH.DIMMER]: MultiLevelDeviceFeature,
  [DEVICE_FEATURE_TYPES.LIGHT.BRIGHTNESS]: MultiLevelDeviceFeature,
  [DEVICE_FEATURE_TYPES.LIGHT.TEMPERATURE]: LightTemperatureDeviceFeature
};

Aber ich weiß nicht, wie ich die Optionen des SELECT verwalten soll, den ich erstellen möchte. Du sagst, dass ich statische Ganzzahlwerte einfügen soll, okay, aber wir sind uns einig, dass die Werte je nach Dienst unterschieden werden müssen? Also eine Erkennung des Dienstes über den Selector der device_feature zum Beispiel?

Das erscheint mir auch sauberer!

Nun, in deinem Fall würde ich dir empfehlen, ein spezifisches category/type-Paar für dieses Select zu erstellen und daran zu unterscheiden.