NEWS
Generische Geräte Verwaltung
-
Hi All,
nach den grunds
ä
tzlichen Diskussionen zu einem Hardware-Tab (ich nenn es jetzt mal so) und der M
ö
glichkeit (generisch) Ger
ä
te zu verwalten hier mal eine Idee wie man es vllt generisch genug machen k
ö
nnte.Seht es mal als Idee - man kann alles darin noch diskutieren. Vor allem Namen und "technische Bezeichner" sind erstmal "zum verstehen des Contents/Scopes" benannt ... kann sp
ä
ter alles anders heissen - geht hier um Verst
ä
ndnis der Idee.Generelle Technische Idee
Die ganze Idee basiert auf vordefinierten oder dynamisch vom Backend generierten JSonConfig "Formulare" und eine Reihe von vordefinierten Messages die der Adapter unterst
ü
tzen muss.hardwareConfig.json
Json File mit der Konfig f
ü
r den Hardware Tab. Enth
ä
lt:- Liste mit vordefinierten JSonConfig Formularen die eine eindeutige ID bekommen und sp
ä
ter genutzt werden k
ö
nnen - Konfig f
ü
r die Instanz-Funktionen um zu bestimmen welche Buttons und Elemente angezeigt werden
Wenn das File da ist zeigt der Adapter mit common.adminConfig.hardware="json" in der io-package das er Hardware Funktionen unterst
ü
tzt.Messages
Zur Kommunikation nutzen wir vor allem messages (sendTo/onMessage).
Der Hardware-Tab definiert/nutzt zwei Typen von Messages: Datenabfrage-Messages und Aktions-Messages, die am Ende eine gewisse einheitliche Struktur der Daten der Message definieren.Datenabfrage-Messages
Werden genutzt um Details zu lesen die f
ü
r die Anzeige der Seite ben
ö
tigt werdenAktions-Messages
Der Ursprung ist ein Button der in der UI geklickt wird.
Das UI generiert f
ü
r den Button-Press eine "unique Session-ID" und sendet die mit. Diese ID ist sp
ä
ter dazu da das das Backend einen "Message Flow" verarbeiten kann.Als Response der Message definieren wir das eine "Aktion" zur
ü
ckgegeben wird und ggf weitere Daten. Aktion kann sein:- Query - Backend erfordert das (erneute) Anzeigen eines Formulars, sendet die jsonconfig ID oder direkt ein dynamisches JSonConfig als Antwort und Daten und definiert die Message f
ü
r die n
ä
chste Antwort. Session-ID bleibt gleich und geht wieder mit zur
ü
ck. - ProcessInfo - Backend antwortet mit ner Statusinfo die Als Message oder Log-Style angezeigt werden kann um einen Prozessinfo zB von einem Pairing-Verlauf anzuzeigen. UI sendet direkt message wieder ans Backend (Log polling approach). Alternativ k
ö
nnte der adapter eine state ID zur
ü
ckgeben die die UI subscribed um von dort status meldungen zu bekommen zur Anzeige - Pending - nach zb 20s sollte das Backend auf jeden Fall antworten und UI macht neuen Long.Polling message call
- Done - Aktion abgeschlossen, UI zeigt ein "Ok bzw eine "zur
ü
ckgegebene Meldung" (Lokalisierung todo), Device-List wird aktualisiert - Error -Fehler passiert, Anzeige Fehlermeldung
Die ganze Backend Logik k
ö
nnte man in eine Conenient Klasse packen um ggf f
ü
r Devs zu erleichtern, aber im ersten Schritt geht das auch mit Plain "onMessage".Oberfl
ä
che/UIDie Oberfl
ä
che besteht aus drei "Teilen".Hardware-Overview
Wenn man den Hardware-Tab
ö
ffnet landet man in der "Hardware-
Ü
bersicht". Dort sind alle Instanzen gelistet die die Hardware-Funktionen unterst
ü
tzen. Jede Instanz bekommt einen "Hardware-getOverviewDetails"-Message call der zB- Anzahl erkannte/discovered Ger
ä
t - Anzahl verbundene Ger
ä
te
zur
ü
ckgibt
Hardware-Instance Overview
Nach Auswahl einer Instanz werden einerseits eine Liste von Buttons f
ü
r generelle Aktionen angezeigt und eine Liste von Ger
ä
ten mit einem Status.Buttons:
- Discover (wenn konfiguriert im hardwareConfig)
- Add Device (wenn konfiguriert, zB um per IP oder so direkt Ger
ä
te hinzuzuf
ü
gen)
Die Buttons l
ö
sen direkt eine Message aus die im Json konfiguriert ist, oder erlauben die Anzeige eines JsonConfig forumlars (auch konfiguriert im json) und sendet die angegebenen Daten als "Aktions-Message".Ger
ä
teliste:- ID, Name
- Status (connected, disconnected, discovered/no-paired)
- Erlaubte Aktionen (Buttons) wie: Configure, Delete/Unpair (mit dynamischer konfig ob/welche Message gesendet wird und ob/welches Formular angezeigt wird)
Um die Daten f
ü
r die Ger
ä
teliste zu bekommen bekommt der Adapter einen Message call "Hardware-getDeviceList" bzw vor Configure ein "Hardware-getDeviceConfig" um die Daten zu bekommen."Button Actions"
Die Buttons l
ö
sen direkt eine Message aus die im Json konfiguriert ist, oder erlauben die Anzeige eines JsonConfig forumlars (auch konfiguriert im json) und sendet die angegebenen Daten als "Aktions-Message".Wir haben als quasi 3 "Datenabfrage-Messages" (Hardware-getOverviewDetails, Hardware-getDeviceList, Hardware-getDeviceConfig) und "frei konfigurierbare" Aktions-Messages.
Als Oberfl
ä
che muss man "einmal" die "Aktions-Message-UI-Logik" bauen die den gesamten Flow als Komponente abbildet in der UI und dann "einfach" von allen Buttons generisch verwendet wird. Der Rest der Ui ist denke ich eher
ü
berschaubar (ok ich als nicht FE Dev muss das sagen) :-))Ich denke
ü
ber so einen Ansatz k
ö
nnen wir sehr viel abbilden:- einen pairing prozess der nach Kommunikation mit dem Ger
ä
t R
ü
ckfragen stellen kann - einen Prozess ala zigbee der sek
ü
ndlich status infos gibt w
ä
hrend der controller f
ü
r "including" freigeschaltet ist - Einfache Aktionen die nur aus klick, ergebnis bestehen
Weitere Features des tabs (pro Devcie) k
ö
nnte es noch sein Funktion und Room festzulegen ... das sind dann zentrale Enum Eintr
ä
ge o.
ä
, und mus ggf gar nicht zum Adapter direkt gehen sondern kann der Tab machen wenn er das "Device Object" kennt. Gleiches f
ü
r den namen ... Aber da muss man mal
ü
berlegen was noch Sinn machtWas denkt Ihr?
Ingo
@apollon77
finde die Idee super.
Meinen relevanten Adapter (dlink) w
ü
rde ich da gut unterkriegen und das tendentiel als Erleichterung sehen, weil dann eine gewisse Struktur und die Darstellung der Ger
ä
te schon da ist. (bzw in konkretisiere: wenn ich den Adapter heute neu schreiben w
ü
rde, und es g
ä
be das alles schon, w
ü
rde mir das vermutlich leichter fallen -> so gibt es den Adapter schon und ich muss den dann irgendwann nochmal anfassen und das ist nat
ü
rlich mehr Arbeit
)
Weil so ein onMessage-Protokoll baut ja am Ende auch fast jeder Ger
ä
teadapter zu seiner eigenen UI. - Liste mit vordefinierten JSonConfig Formularen die eine eindeutige ID bekommen und sp
-
Um mal meinen Senf dazu zu geben, weil ich grade genau das durchgespielt habe mit Z-Wave 2 und dem durch S2 etwas komplexer gewordenen Inklusionsprozess. Unter der Haube nutzt dieser folgendes:
- Nachrichten (
sendTo) vom Frontend an den Adapter, um Prozesse zu starten oder fortzuf
ü
hren. Dies wird ganz klassisch im Backend im on("message"...)handler abgearbeitet. - State-Subscribes, um den Status eines Prozesses (aktiv/nicht aktiv)
ü
ber UI reloads hinweg zu persistieren - Push vom Backend (via long-polling), um Fortschritte zu berichten, oder das Frontend aufzufordern, etwas anzuzeigen/abzufragen. Dabei fragt das Frontend in einer (async) Schleife, was es neues gibt. Gibts nichts neues, wird der Callback vom Adapter gemerkt und beim n
ä
chsten "push" genutzt. Gibt es bei einem Push gerade keinen Callback, werden die Antworten gemerkt bis die n
ä
chste Anfrage kommt. Kleiner Teaser am Rande - in meinem WIP Wrapper f
ü
r adapter-react gibt's daf
ü
r frontend-seitige Hooks:

F
ü
r die Fortschrittsberichte/Push hatte ich auch schon damit gespielt, States zu nutzen, aber das sorgt sehr schnell f
ü
r viele unn
ö
tige Datenpunkte.
Ü
ber den Long-Polling approach geht es viel sch
ö
ner und man kann sich die messages auch sauber definieren:{ type: "inclusion", // ... spezifische Daten für die Inklusion } // oder { type: "firmwareUpdate", // ...spezifische Daten fürs Firmwareupdate }Grunds
ä
tzlich denke ich daher, dass das vorgeschlagene "Protokoll" die meisten F
ä
lle (wenn nicht alle) relativ elegant abdecken k
ö
nnen sollte.
Die Vorschl
ä
ge zum UI-Layout habe ich ebenfalls rein intuitiv ziemlich
ä
hnlich umgesetzt: Oben allgemeine Buttons f
ü
r Inklusion/Exklusion - letzteres ist bei Z-Wave unbedingt n
ö
tig, darunter die Ger
ä
teliste mit ger
ä
tespezifischen Aktionen:

Hier gibt's einige Schwierigkeiten, wo ich mir noch nicht sicher bin, dass das mit dem Vorschlag oben abgehandelt werden kann:
Ger
ä
tespezifische Aktionen m
ü
ssen einen globalen Einfluss haben:
W
ä
hrend eines Firmwareupdates sollte ich nicht in der Lage sein, Z-Wave Ger
ä
te zu entfernen oder hinzuzuf
ü
gen und besser auch kein erneutes Interview durchzuf
ü
hren. Au
ß
erdem darf ich nicht die M
ö
glichkeit haben, ein zweites Update parallel anzusto
ß
en. Wenn ich einen ausgefallenen Node entferne, darf ich nicht parallel andere Aktionen ausf
ü
hren (w
ü
rde sich
ü
ber einen modal Dialog l
ö
sen lassen)Erkl
ä
rung:
Bei Z-Wave ist vieles komplex - viele Entscheidungen, die erkl
ä
rt werden wollen. Das f
ä
ngt beim Inklusionsprozess schon an:

Ich bin mir nicht sicher, ob und wie gut das mit JSONConfig geht. Den Wunsch nach Einheitlichkeit verstehe ich, aber wir m
ü
ssen aufpassen, dass es nicht zu einschr
ä
nkend ist.Adapterspezifische Spalten:
Nicht jeder Adapter wird sowas brauchen, aber f
ü
r Z-Wave gibt es eine Spalte, die das Verschl
ü
sselungsprotokoll darstellt. Wird z.B. ein Schloss ohne Verschl
ü
sselung betrieben (oder mit der falschen) funktioniert es nicht richtig. Ohne diese Info in der
Ü
bersicht kann man lange suchen, was faul ist. - Nachrichten (
-
Um mal meinen Senf dazu zu geben, weil ich grade genau das durchgespielt habe mit Z-Wave 2 und dem durch S2 etwas komplexer gewordenen Inklusionsprozess. Unter der Haube nutzt dieser folgendes:
- Nachrichten (
sendTo) vom Frontend an den Adapter, um Prozesse zu starten oder fortzuf
ü
hren. Dies wird ganz klassisch im Backend im on("message"...)handler abgearbeitet. - State-Subscribes, um den Status eines Prozesses (aktiv/nicht aktiv)
ü
ber UI reloads hinweg zu persistieren - Push vom Backend (via long-polling), um Fortschritte zu berichten, oder das Frontend aufzufordern, etwas anzuzeigen/abzufragen. Dabei fragt das Frontend in einer (async) Schleife, was es neues gibt. Gibts nichts neues, wird der Callback vom Adapter gemerkt und beim n
ä
chsten "push" genutzt. Gibt es bei einem Push gerade keinen Callback, werden die Antworten gemerkt bis die n
ä
chste Anfrage kommt. Kleiner Teaser am Rande - in meinem WIP Wrapper f
ü
r adapter-react gibt's daf
ü
r frontend-seitige Hooks:

F
ü
r die Fortschrittsberichte/Push hatte ich auch schon damit gespielt, States zu nutzen, aber das sorgt sehr schnell f
ü
r viele unn
ö
tige Datenpunkte.
Ü
ber den Long-Polling approach geht es viel sch
ö
ner und man kann sich die messages auch sauber definieren:{ type: "inclusion", // ... spezifische Daten für die Inklusion } // oder { type: "firmwareUpdate", // ...spezifische Daten fürs Firmwareupdate }Grunds
ä
tzlich denke ich daher, dass das vorgeschlagene "Protokoll" die meisten F
ä
lle (wenn nicht alle) relativ elegant abdecken k
ö
nnen sollte.
Die Vorschl
ä
ge zum UI-Layout habe ich ebenfalls rein intuitiv ziemlich
ä
hnlich umgesetzt: Oben allgemeine Buttons f
ü
r Inklusion/Exklusion - letzteres ist bei Z-Wave unbedingt n
ö
tig, darunter die Ger
ä
teliste mit ger
ä
tespezifischen Aktionen:

Hier gibt's einige Schwierigkeiten, wo ich mir noch nicht sicher bin, dass das mit dem Vorschlag oben abgehandelt werden kann:
Ger
ä
tespezifische Aktionen m
ü
ssen einen globalen Einfluss haben:
W
ä
hrend eines Firmwareupdates sollte ich nicht in der Lage sein, Z-Wave Ger
ä
te zu entfernen oder hinzuzuf
ü
gen und besser auch kein erneutes Interview durchzuf
ü
hren. Au
ß
erdem darf ich nicht die M
ö
glichkeit haben, ein zweites Update parallel anzusto
ß
en. Wenn ich einen ausgefallenen Node entferne, darf ich nicht parallel andere Aktionen ausf
ü
hren (w
ü
rde sich
ü
ber einen modal Dialog l
ö
sen lassen)Erkl
ä
rung:
Bei Z-Wave ist vieles komplex - viele Entscheidungen, die erkl
ä
rt werden wollen. Das f
ä
ngt beim Inklusionsprozess schon an:

Ich bin mir nicht sicher, ob und wie gut das mit JSONConfig geht. Den Wunsch nach Einheitlichkeit verstehe ich, aber wir m
ü
ssen aufpassen, dass es nicht zu einschr
ä
nkend ist.Adapterspezifische Spalten:
Nicht jeder Adapter wird sowas brauchen, aber f
ü
r Z-Wave gibt es eine Spalte, die das Verschl
ü
sselungsprotokoll darstellt. Wird z.B. ein Schloss ohne Verschl
ü
sselung betrieben (oder mit der falschen) funktioniert es nicht richtig. Ohne diese Info in der
Ü
bersicht kann man lange suchen, was faul ist.@alcalzone sagte in Generische Ger
ä
te Verwaltung:Ger
ä
tespezifische Aktionen m
ü
ssen einen globalen Einfluss haben:
W
ä
hrend eines Firmwareupdates sollte ich nicht in der Lage sein, Z-Wave Ger
ä
te zu entfernen oder hinzuzuf
ü
gen und besser auch kein erneutes Interview durchzuf
ü
hren. Au
ß
erdem darf ich nicht die M
ö
glichkeit haben, ein zweites Update parallel anzusto
ß
en. Wenn ich einen ausgefallenen Node entferne, darf ich nicht parallel andere Aktionen ausf
ü
hren (w
ü
rde sich
ü
ber einen modal Dialog l
ö
sen lassen)Man k
ö
nnte das im "Protokoll" reinnehmen das man "alle Buttons sperren kann" f
ü
r diese UI .. aber am Ende m
ü
sste in solchen F
ä
llen das backend andere Requests ablehnen w
ä
hrend da sein FW-Update l
ä
uft. "Diese Aktion kann aktuell nicht ausgef
ü
hrt werden". Am Ende kann eh nur das Backend den Status wissen (never trust the client) 
Ich bin mir nicht sicher, ob und wie gut das mit JSONConfig geht. Den Wunsch nach Einheitlichkeit verstehe ich, aber wir m
ü
ssen aufpassen, dass es nicht zu einschr
ä
nkend ist.Am Ende sehe ich JSon Config als "Formular Builder" und da sind auch Texte drin. Welche Limitierungen siehst Du? Aus deinem Flow ists ein Formular - Button - n
ä
chstes Formular - Btton - statusscreen - ... Das w
ä
re der Flow.
Interessant wird wie wir es schaffen solche Flows" im backend sinnvoll abzubilden sonst baut sich jeder seine eigene aufw
ä
ndige State Engine Implementierung ... Aber naja so viele Adapter mit so komplexen Flows haben wir auch nicht denke ich.Adapterspezifische Spalten:
Nicht jeder Adapter wird sowas brauchen, aber f
ü
r Z-Wave gibt es eine Spalte, die das Verschl
ü
sselungsprotokoll darstellt. Wird z.B. ein Schloss ohne Verschl
ü
sselung betrieben (oder mit der falschen) funktioniert es nicht richtig. Ohne diese Info in der
Ü
bersicht kann man lange suchen, was faul ist.Sollte ja auch mit Konfiguration der Device Anzeige abdeckbar sein.
- Nachrichten (
-
@alcalzone sagte in Generische Ger
ä
te Verwaltung:Ger
ä
tespezifische Aktionen m
ü
ssen einen globalen Einfluss haben:
W
ä
hrend eines Firmwareupdates sollte ich nicht in der Lage sein, Z-Wave Ger
ä
te zu entfernen oder hinzuzuf
ü
gen und besser auch kein erneutes Interview durchzuf
ü
hren. Au
ß
erdem darf ich nicht die M
ö
glichkeit haben, ein zweites Update parallel anzusto
ß
en. Wenn ich einen ausgefallenen Node entferne, darf ich nicht parallel andere Aktionen ausf
ü
hren (w
ü
rde sich
ü
ber einen modal Dialog l
ö
sen lassen)Man k
ö
nnte das im "Protokoll" reinnehmen das man "alle Buttons sperren kann" f
ü
r diese UI .. aber am Ende m
ü
sste in solchen F
ä
llen das backend andere Requests ablehnen w
ä
hrend da sein FW-Update l
ä
uft. "Diese Aktion kann aktuell nicht ausgef
ü
hrt werden". Am Ende kann eh nur das Backend den Status wissen (never trust the client) 
Ich bin mir nicht sicher, ob und wie gut das mit JSONConfig geht. Den Wunsch nach Einheitlichkeit verstehe ich, aber wir m
ü
ssen aufpassen, dass es nicht zu einschr
ä
nkend ist.Am Ende sehe ich JSon Config als "Formular Builder" und da sind auch Texte drin. Welche Limitierungen siehst Du? Aus deinem Flow ists ein Formular - Button - n
ä
chstes Formular - Btton - statusscreen - ... Das w
ä
re der Flow.
Interessant wird wie wir es schaffen solche Flows" im backend sinnvoll abzubilden sonst baut sich jeder seine eigene aufw
ä
ndige State Engine Implementierung ... Aber naja so viele Adapter mit so komplexen Flows haben wir auch nicht denke ich.Adapterspezifische Spalten:
Nicht jeder Adapter wird sowas brauchen, aber f
ü
r Z-Wave gibt es eine Spalte, die das Verschl
ü
sselungsprotokoll darstellt. Wird z.B. ein Schloss ohne Verschl
ü
sselung betrieben (oder mit der falschen) funktioniert es nicht richtig. Ohne diese Info in der
Ü
bersicht kann man lange suchen, was faul ist.Sollte ja auch mit Konfiguration der Device Anzeige abdeckbar sein.
@apollon77 sagte in Generische Ger
ä
te Verwaltung:Welche Limitierungen siehst Du?
Um ehrlich zu sein, ich hab mit JSONConfig noch nicht gearbeitet.
- PIN m
ü
ssen 5 Ziffern sein. Alles andere kann man nicht eingeben. Solange ist der "Weiter"-Knopf gesperrt. - Unterschiedliche Buttons in den Dialogen, abh
ä
ngig vom jeweiligen Step und Status - Verschiedene Textgr
ö
ß
en (wie in MUI body1,body2,caption) - Wie flexibel bin ich da allgemein im Ausrichten von Dingen in der UI / im Grid?
sonst baut sich jeder seine eigene aufw
ä
ndige State Engine ImplementierungDa f
ü
hrt f
ü
r mich z.B. schon kein Weg dran vorbei, weil die vorgeschriebener Teil des Inklusionsprozesses ist. Die Library hat die Kontrolle, der Adapter reagiert nur. - PIN m
-
@apollon77 sagte in Generische Ger
ä
te Verwaltung:Welche Limitierungen siehst Du?
Um ehrlich zu sein, ich hab mit JSONConfig noch nicht gearbeitet.
- PIN m
ü
ssen 5 Ziffern sein. Alles andere kann man nicht eingeben. Solange ist der "Weiter"-Knopf gesperrt. - Unterschiedliche Buttons in den Dialogen, abh
ä
ngig vom jeweiligen Step und Status - Verschiedene Textgr
ö
ß
en (wie in MUI body1,body2,caption) - Wie flexibel bin ich da allgemein im Ausrichten von Dingen in der UI / im Grid?
sonst baut sich jeder seine eigene aufw
ä
ndige State Engine ImplementierungDa f
ü
hrt f
ü
r mich z.B. schon kein Weg dran vorbei, weil die vorgeschriebener Teil des Inklusionsprozesses ist. Die Library hat die Kontrolle, der Adapter reagiert nur.@alcalzone Ich w
ü
rde ja auch kein "ein grosses JsonConfig" machen sondern f
ü
r jedes anzuzeigende Formular kann man ein vordefiniertes JSons konfig angeben oder sogar dynamich eins zur
ü
ckgeben in der Message die sagt "zeig mal an".Aber soweit ich weiss (habe es auch noch nicht aktiv genutzt) sollten die Dinge gehen
- PIN m
-
@alcalzone Ich w
ü
rde ja auch kein "ein grosses JsonConfig" machen sondern f
ü
r jedes anzuzeigende Formular kann man ein vordefiniertes JSons konfig angeben oder sogar dynamich eins zur
ü
ckgeben in der Message die sagt "zeig mal an".Aber soweit ich weiss (habe es auch noch nicht aktiv genutzt) sollten die Dinge gehen
@apollon77 Klar, das hab ich verstanden. Ist allerdings nachher die Frage, ob der Dialog selbst Teil der Definition ist, oder inklusive Buttons oder nur der Inhalt und inwiefern "von innen" Kontrolle
ü
ber den Dialog besteht. -
@apollon77 sagte in Generische Ger
ä
te Verwaltung:Welche Limitierungen siehst Du?
Um ehrlich zu sein, ich hab mit JSONConfig noch nicht gearbeitet.
- PIN m
ü
ssen 5 Ziffern sein. Alles andere kann man nicht eingeben. Solange ist der "Weiter"-Knopf gesperrt. - Unterschiedliche Buttons in den Dialogen, abh
ä
ngig vom jeweiligen Step und Status - Verschiedene Textgr
ö
ß
en (wie in MUI body1,body2,caption) - Wie flexibel bin ich da allgemein im Ausrichten von Dingen in der UI / im Grid?
sonst baut sich jeder seine eigene aufw
ä
ndige State Engine ImplementierungDa f
ü
hrt f
ü
r mich z.B. schon kein Weg dran vorbei, weil die vorgeschriebener Teil des Inklusionsprozesses ist. Die Library hat die Kontrolle, der Adapter reagiert nur.@alcalzone said in Generische Ger
ä
te Verwaltung:@apollon77 sagte in Generische Ger
ä
te Verwaltung:Welche Limitierungen siehst Du?
Um ehrlich zu sein, ich hab mit JSONConfig noch nicht gearbeitet.
- PIN m
ü
ssen 5 Ziffern sein. Alles andere kann man nicht eingeben. Solange ist der "Weiter"-Knopf gesperrt. - Unterschiedliche Buttons in den Dialogen, abh
ä
ngig vom jeweiligen Step und Status - Verschiedene Textgr
ö
ß
en (wie in MUI body1,body2,caption) - Wie flexibel bin ich da allgemein im Ausrichten von Dingen in der UI / im Grid?
sonst baut sich jeder seine eigene aufw
ä
ndige State Engine ImplementierungDa f
ü
hrt f
ü
r mich z.B. schon kein Weg dran vorbei, weil die vorgeschriebener Teil des Inklusionsprozesses ist. Die Library hat die Kontrolle, der Adapter reagiert nur.Punkt 1 und 2 gehen. Du kannst f
ü
r einzelne Elemente eine "validation" Methode definieren. Und auch Sichtbarkeit von einzelnen Elementen mit einer methode. Beides (meine ich, bei Sichtbarkeit wei
ß
ich es sicher) kann auch auf den Inhalt von anderen Elementen zugreifen.Zu Punkten 3 und 4, das sind eher die, vor denen ich schreiend weglaufe hust, aber, du kannst (bzw. musst) jedem Element diese "wie viele Spalten in welcher Displaygr
ö
ß
e bin ich" Einstellung mitgeben und es gibt daf
ü
r auch noch organisierende Elemente. Damit hab ich aber selber noch nicht viel gespielt.
Au
ß
erdem kann jedes Element einen style Member haben, meine ich. Vielleicht sogar klasse schulterzuck (Wie gesagt, da laufe ich eher schreiend vor weg, aber Text rot machen ging
)Also ich denke mit der bestehenden JsonConfig (so man die daf
ü
r nutzt / darauf umsetzt) sollte das gehen. - PIN m
-
@apollon77 Klar, das hab ich verstanden. Ist allerdings nachher die Frage, ob der Dialog selbst Teil der Definition ist, oder inklusive Buttons oder nur der Inhalt und inwiefern "von innen" Kontrolle
ü
ber den Dialog besteht.@alcalzone In dem Ansatz muss man die Buttons mal nachdenken. Sperren durch "validatoren" ist denke ich Problemlos m
ö
glich auch wenn die Buttons nicht Teil des Jsons sind. Die Frage ist ob man auch F
ä
lle wie "ich brauch aber 3 Buttons" abbilden will, weil dann m
ü
ssten die mit rein -
Hallo zusammen
Ich habe haupts
ä
chlich auf Grund der Spezifikation von @apollon77 einen Adapter erstellt, der die Basis f
ü
r weitere Diskussionen sein soll:https://github.com/UncleSamSwiss/ioBroker.dm
Ich freue mich auf euer Feedback, bitte behaltet aber im Kopf, dass es sich hier um einen Prototypen und um die ersten Schritte der kompliziertesten L
ö
sung handelt, die wir machen k
ö
nnen. Das soll heissen: wir werden f
ü
r einfache Use Cases sicherlich noch einiges vereinfachen k
ö
nnen, aber ich wollte mal komplexe Use Cases wie den zwave2 von @AlCalzone abbilden k
ö
nnen.Zudem ist noch bei weitem nicht alles implementiert und das GUI hat noch seeeehr viel Verbesserungspotential (wie immer: PRs are welcome
).Wer einfach mal schnell testen will, wie das ganze funkioniert:
- https://github.com/UncleSamSwiss/ioBroker.dm in einem Test-ioBroker installieren
- https://github.com/UncleSamSwiss/ioBroker.dm-test auf demselben ioBroker installieren und eine Instanz erstellen
Wenn ihr selber einen Adapter anpassen wollt, dann schaut in die Dokumentation der Hilfs-Library:
https://github.com/UncleSamSwiss/dm-utilsSo, und jetzt bin ich auf euer kritisches Feedback gespannt (Schulterklopfen brauche ich nicht, das kann ich auch selber machen
)./UncleSam
-
Hallo zusammen
Ich habe haupts
ä
chlich auf Grund der Spezifikation von @apollon77 einen Adapter erstellt, der die Basis f
ü
r weitere Diskussionen sein soll:https://github.com/UncleSamSwiss/ioBroker.dm
Ich freue mich auf euer Feedback, bitte behaltet aber im Kopf, dass es sich hier um einen Prototypen und um die ersten Schritte der kompliziertesten L
ö
sung handelt, die wir machen k
ö
nnen. Das soll heissen: wir werden f
ü
r einfache Use Cases sicherlich noch einiges vereinfachen k
ö
nnen, aber ich wollte mal komplexe Use Cases wie den zwave2 von @AlCalzone abbilden k
ö
nnen.Zudem ist noch bei weitem nicht alles implementiert und das GUI hat noch seeeehr viel Verbesserungspotential (wie immer: PRs are welcome
).Wer einfach mal schnell testen will, wie das ganze funkioniert:
- https://github.com/UncleSamSwiss/ioBroker.dm in einem Test-ioBroker installieren
- https://github.com/UncleSamSwiss/ioBroker.dm-test auf demselben ioBroker installieren und eine Instanz erstellen
Wenn ihr selber einen Adapter anpassen wollt, dann schaut in die Dokumentation der Hilfs-Library:
https://github.com/UncleSamSwiss/dm-utilsSo, und jetzt bin ich auf euer kritisches Feedback gespannt (Schulterklopfen brauche ich nicht, das kann ich auch selber machen
)./UncleSam
@unclesam sagte in Generische Ger
ä
te Verwaltung:Schulterklopfen brauche ich nicht, das kann ich auch selber machen
Bekommst du von mir Trotzdem erstmal, weil du die diese Mammut Aufgabe angegangen bist. Danke.
Ich werd mir das die Tage anschauen und versuchen einen Adapter an zu passen.
-
Hi, ein interessanter Ansatz. Wobei hier evtl auch ein gewisser Standard eingef
ü
hrt werden k
ö
nnte. Die meisten Adapter beziehen
ü
bernehmen Ihre Wertebereiche aus dem f
ü
hrenden System oder dem Device itself. Das f
ä
llt mir auf, wenn es um Leuchtmittel oder Ger
ä
te f
ü
r Leuchtmittel geht.
Die einen arbeiten mit Kelvin (2700 - 6500), die anderen mit unknown 452 - 252 f
ü
r die Farbtemperatur. Oder wird mit HEX, RGB oder XY f
ü
r die Farben gearbeitet. Hier w
ä
re ein Standard hervorragend. Die Umrechnung m
ü
sste demnach mit dem Device Manager gemacht werden, um die Arbeit den Entwicklern abzunehmen. Hier mal ein Auszug meiner Config f
ü
r Leuchtmittel:Bei meinem Adapter (aktuell in der Entwicklung) biete ich dem User f
ü
r alle Leuchtmittel, egal welcher Hersteller und Adapter folgende Wertebereiche:PowerOn/Off => true/false
Brightness => 0-100%
Color-Temp. => 2700 - 6500 K
Color => HEX (#FFFFFF)F
ü
r die Umsetzung ben
ö
tige ich vom User die unten stehenden Infos. Wenn nun m
ö
glich w
ä
re, dass ich mit meinen Adapter direkt das Ger
ä
t im Ger
ä
te Manager ansprechen k
ö
nnte, und der Manager sich um die Umrechnung oder
ä
hnlich k
ü
mmern muss, bleibt bei mir nur noch die Logik f
ü
r die eigentliche Lichtsteuerung."Strahler1": { "power": { "oid": "0_userdata.0.lightcontrol_DEV.Lamps.Lamp1.power", "onVal": true, "offVal": false }, "bri": { "oid": "0_userdata.0.lightcontrol_DEV.Lamps.Lamp1.bri", "minVal": 0, "maxVal": 100, "defaultVal": 100 }, "ct": { "oid": "0_userdata.0.lightcontrol_DEV.Lamps.Lamp1.ct", "minVal": 454, "maxVal": 250 }, "sat": { "oid": "0_userdata.0.lightcontrol_DEV.Lamps.Lamp1.sat", "minVal": 0, "maxVal": 100 }, "modeswitch": { "oid": "0_userdata.0.lightcontrol_DEV.Lamps.Lamp1.colorModeSwitch", "whiteModeVal": false, "colorModeVal": true }, "color": { "oid": "0_userdata.0.lightcontrol_DEV.Lamps.Lamp1.colorHEX", "type": "hex", "default": "" } }, -
Hi, ein interessanter Ansatz. Wobei hier evtl auch ein gewisser Standard eingef
ü
hrt werden k
ö
nnte. Die meisten Adapter beziehen
ü
bernehmen Ihre Wertebereiche aus dem f
ü
hrenden System oder dem Device itself. Das f
ä
llt mir auf, wenn es um Leuchtmittel oder Ger
ä
te f
ü
r Leuchtmittel geht.
Die einen arbeiten mit Kelvin (2700 - 6500), die anderen mit unknown 452 - 252 f
ü
r die Farbtemperatur. Oder wird mit HEX, RGB oder XY f
ü
r die Farben gearbeitet. Hier w
ä
re ein Standard hervorragend. Die Umrechnung m
ü
sste demnach mit dem Device Manager gemacht werden, um die Arbeit den Entwicklern abzunehmen. Hier mal ein Auszug meiner Config f
ü
r Leuchtmittel:Bei meinem Adapter (aktuell in der Entwicklung) biete ich dem User f
ü
r alle Leuchtmittel, egal welcher Hersteller und Adapter folgende Wertebereiche:PowerOn/Off => true/false
Brightness => 0-100%
Color-Temp. => 2700 - 6500 K
Color => HEX (#FFFFFF)F
ü
r die Umsetzung ben
ö
tige ich vom User die unten stehenden Infos. Wenn nun m
ö
glich w
ä
re, dass ich mit meinen Adapter direkt das Ger
ä
t im Ger
ä
te Manager ansprechen k
ö
nnte, und der Manager sich um die Umrechnung oder
ä
hnlich k
ü
mmern muss, bleibt bei mir nur noch die Logik f
ü
r die eigentliche Lichtsteuerung."Strahler1": { "power": { "oid": "0_userdata.0.lightcontrol_DEV.Lamps.Lamp1.power", "onVal": true, "offVal": false }, "bri": { "oid": "0_userdata.0.lightcontrol_DEV.Lamps.Lamp1.bri", "minVal": 0, "maxVal": 100, "defaultVal": 100 }, "ct": { "oid": "0_userdata.0.lightcontrol_DEV.Lamps.Lamp1.ct", "minVal": 454, "maxVal": 250 }, "sat": { "oid": "0_userdata.0.lightcontrol_DEV.Lamps.Lamp1.sat", "minVal": 0, "maxVal": 100 }, "modeswitch": { "oid": "0_userdata.0.lightcontrol_DEV.Lamps.Lamp1.colorModeSwitch", "whiteModeVal": false, "colorModeVal": true }, "color": { "oid": "0_userdata.0.lightcontrol_DEV.Lamps.Lamp1.colorHEX", "type": "hex", "default": "" } },@schmakus
ü
ber das Thema Vereinheitlichung haben wir schon mal Diskutiert. Es gab nie eine Einigung.
Bitte schau dazu in das Thema -> https://forum.iobroker.net/topic/24936/diskussion-objektdefinition-lichtDer Sinn und Zweck des Device Manager ist ganz etwas anderes, der soll die Verwaltung der Ger
ä
te Zentralisieren. Der hat aber keinen Einfluss auf Objekte oder deren Struktur.
Die Funktionalit
ä
t was du dir W
ü
nscht w
ä
re im js-controller oder adapter-utils zu verankern. -
Hi, ein interessanter Ansatz. Wobei hier evtl auch ein gewisser Standard eingef
ü
hrt werden k
ö
nnte. Die meisten Adapter beziehen
ü
bernehmen Ihre Wertebereiche aus dem f
ü
hrenden System oder dem Device itself. Das f
ä
llt mir auf, wenn es um Leuchtmittel oder Ger
ä
te f
ü
r Leuchtmittel geht.
Die einen arbeiten mit Kelvin (2700 - 6500), die anderen mit unknown 452 - 252 f
ü
r die Farbtemperatur. Oder wird mit HEX, RGB oder XY f
ü
r die Farben gearbeitet. Hier w
ä
re ein Standard hervorragend. Die Umrechnung m
ü
sste demnach mit dem Device Manager gemacht werden, um die Arbeit den Entwicklern abzunehmen. Hier mal ein Auszug meiner Config f
ü
r Leuchtmittel:Bei meinem Adapter (aktuell in der Entwicklung) biete ich dem User f
ü
r alle Leuchtmittel, egal welcher Hersteller und Adapter folgende Wertebereiche:PowerOn/Off => true/false
Brightness => 0-100%
Color-Temp. => 2700 - 6500 K
Color => HEX (#FFFFFF)F
ü
r die Umsetzung ben
ö
tige ich vom User die unten stehenden Infos. Wenn nun m
ö
glich w
ä
re, dass ich mit meinen Adapter direkt das Ger
ä
t im Ger
ä
te Manager ansprechen k
ö
nnte, und der Manager sich um die Umrechnung oder
ä
hnlich k
ü
mmern muss, bleibt bei mir nur noch die Logik f
ü
r die eigentliche Lichtsteuerung."Strahler1": { "power": { "oid": "0_userdata.0.lightcontrol_DEV.Lamps.Lamp1.power", "onVal": true, "offVal": false }, "bri": { "oid": "0_userdata.0.lightcontrol_DEV.Lamps.Lamp1.bri", "minVal": 0, "maxVal": 100, "defaultVal": 100 }, "ct": { "oid": "0_userdata.0.lightcontrol_DEV.Lamps.Lamp1.ct", "minVal": 454, "maxVal": 250 }, "sat": { "oid": "0_userdata.0.lightcontrol_DEV.Lamps.Lamp1.sat", "minVal": 0, "maxVal": 100 }, "modeswitch": { "oid": "0_userdata.0.lightcontrol_DEV.Lamps.Lamp1.colorModeSwitch", "whiteModeVal": false, "colorModeVal": true }, "color": { "oid": "0_userdata.0.lightcontrol_DEV.Lamps.Lamp1.colorHEX", "type": "hex", "default": "" } },@schmakus Der Device Manager w
ä
re vllt die Stelle wo Du die Konfiguration hinpacken kannst ...Das ist in meinen Augen auch weniger js-controller oder so. Die aktuelle Idee war das User mit Aliases arbeiten und am Ende die Aliases hier zu einer generischen Definition betragen. So ist es aktuell auch schon mit den Device-Templates die der Devices Adapter mitbringt. Dort ist eine "Lampe mit Farbe und zeug definiert" und damit auch "DER" Wertebereich. Die Idee ist das k
ü
nftig relevante Visu bzw Alexa/Google/... mit den Aliases arbeiten. Aliases haben m
ö
glichkeiten umrechnungsformeln zu definieren.
Der n
ä
chste Schritt ist also in meinen Augen eher hier anzusetzen und "ne Sammlung an "vorgefertigten Formeln" zu bieten und auch hier
ü
ber solche Wertbereichthemen abzubilden. Das w
ä
re in meinen Augen konsequenter ... Oder es gibt ggf "spezialisiertere Adapter" die aus solchen Definitionen f
ü
r den user Aliases anlegen o.
ä
. -
So ... nach etwas Bedenk-, Reife- und Polishingzeit habe ich mal hier meine Gedanken zusammengefasst wie man das hier Diskutiere Themen mit Mehrwert in eine auch f
ü
r den User sinnvolle Geschichte packen k
ö
nnte ...--> https://forum.iobroker.net/topic/56308/iobroker-user-onboarding-flow-verbesserungen-2022
-
Da @apollon77 Neugierig ist
schreibe ich hier mal was zum Aktuellen Stand des Device Managers.Die Basis des Device Manager ist nach wie vor dm-utils von @UncleSam, daran habe ich nichts ge
ä
ndert bzw. noch keine Notwendigkeit daf
ü
r gesehen.
Die Eigentliche Baustelle ist das Frontend. Hier hat mir vor allem die Optik nicht gefallen und ich bin an ein paar Grenzen gesto
ß
en beim Umsetzen eines Dialogs.
Nachdem das ganze Projekt bereits 1 Jahr Brach lag, weil scheinbar niemand es beachtet hat, hab ich mich entschieden es nochmal in Angriff zu nehmen.Und was soll ich sagen, das war ein ganz sch
ö
ner K(r)ampf. Weder hab ich zuvor mit Typescript gearbeitet noch mit React.
Da ich so einfach nicht weitergekommen bin, habe ich das ganze von Typescript nach Javascript migriert um anschlie
ß
end alles auf einen Aktuellen Stand zu bringen.
Das heist React Version und andere Abh
ä
ngigkeiten hoch gezogen, eine Aktuelle Version der JSONConfig Components geholt und von React Klassen auf Funktionen umgebaut.
Insgesamt war das ziemlich anstrengend und frustrierend, was unter anderem der Grund war warum es immer wieder mal eine weile lag und fast 6 Monate gedauert hat bis zum heutigen Stand.
Jetzt versteh ich React zumindest soweit das ich damit Arbeiten kann, trotzdem mag ich es noch immer nicht.Ich erinnere mich noch an ein Zitat (Sinngem
ä
ß
) von @UncleSam: "Das war eine ganze sch
ö
ne Operation die JSONConfig aus dem Admin heraus zu bekommen."
Das kann ich jetzt sehr gut Nachvollziehen. Das Konstrukt ist recht Komplex.
Umso mehr m
ö
chte ich mich nochmal bei @UncleSam f
ü
r die Arbeit bedanken.

1 => Instance Actions: Die Buttons in diesem Bereich k
ö
nnen frei vom Adapter definiert werden und mit Funktionen hinterlegt werden die f
ü
r die Instanz relevant sind. Zum Beispiel ein neues Ger
ä
t anlernen.2 => Auswahl der Aktiven Instanz. Hier werden nur Instanzen angezeigt die Liefen als die Ger
ä
temanager Seite ge
ö
ffnet wurde.3 => Ger
ä
te nach Namen Filtern: Es wird Ausschlie
ß
lich nach den Namen gefiltert die man auch im Objekte Tab in der Spalte Name sieht. IDs werden hier nicht Ber
ü
cksichtigt.4 => Bild/Icon vom Ger
ä
t: Der Adapter liefert eine URL zum Bild. In Zukunft soll auch ein Upload durch Benutzer erm
ö
glicht werden.5 => Name: Der Name des Ger
ä
tes wie er in common.name hinterlegt ist.6 => Details Button:
Ö
ffnet ein Fenster mit Zus
ä
tzlichen Informationen zum Ger
ä
t. Wird ausgeblendet wenn keine Zus
ä
tzlichen Informationen verf
ü
gbar sind.7 => Status Bereich: Hier kann der Status eines Ger
ä
tes angezeigt werden, die m
ö
glichen Stati sind vorgegeben um m
ö
glichst einheitlich zu bleiben/werden. Derzeit sind das Verbunden, Signalst
ä
rke und Akkuzustand. Weitere Stati k
ö
nnen nach absprache aufgenommen werden.8 => Basis Informationen: ID, Name und Model. Dieser Bereich ist ebenfalls fest vorgegeben und es sollten nach M
ö
glichkeit alle Informationen geliefert werden.9 => Action Buttons: Die Buttons in diesem Bereich k
ö
nnen frei vom Adapter definiert werden und mit Funktionen hinterlegt werden die f
ü
r das Ger
ä
t relevant sind. Zum Beispiel das Ger
ä
t l
ö
schen oder Umbenennen.
Bekannte Probleme/Einschr
ä
nkungen- Wird eine Instanz neu gestartet w
ä
hrend der Device Manager ge
ö
ffnet ist kann kein Befehl mehr an die Instanz gesendet werden. Hier fehlt ein Automatischer reload oder eine Benachrichtigung. - Theme Support funktioniert nicht, zurzeit k
ö
nnen nur Helle Themes genutzt werden. - Im Log erscheint die Meldung: TypeError: Cannot read properties of undefined (reading 'apiVersion')
Testen
Bitte nur auf einem Testsystem, das ist alles absolut Alpha.
Der Device Manager kann von npm installiert werden: iobroker.device-manager
Zu Demo Zwecken habe ich den Net-Tools Adapter
Ü
berarbeitet, dieser kann auch von npm installiert werden: iobroker.net-tools@1.0.0-alpha
Den Net-Tools Adapter habe ich gew
ä
hlt weil damit jeder den Device Manager Testen kann ohne das es Spezieller Hardware bedarf.Au
ß
erdem habe ich bereits vorher angefangen im EnOcean Adapter die Device Manager Unterst
ü
tzung eingebaut. Die ist aber auf Grund des Umfangs und der Komplexit
ä
t beim Anlernen neuer Ger
ä
te noch nicht Vollst
ä
ndig. Der Adapter steht auf Github in Version 0.9.1 zur Verf
ü
gung.Wer sich den Code vom Aktuellen Device Manager anschauen mag findet ihn hier: https://github.com/Jey-Cee/ioBroker.device-manager
Net-Tools Adapter: https://github.com/Jey-Cee/ioBroker.net-tools/tree/v1 - Wird eine Instanz neu gestartet w
-
Hey,
das sieht ja nach coolem progress aus. Frage: Wie weit weg/nah dran ist das an dem was @UncleSam gebaut hatte? Ich hatte mal in https://github.com/Apollon77/ioBroker.homekit-controller/blob/main/src/lib/devicemgmt.ts angefangen das testweise zu integrieren dann aber gestoppt ... geht das noch ... also wie showForm und so?
-
Hey,
das sieht ja nach coolem progress aus. Frage: Wie weit weg/nah dran ist das an dem was @UncleSam gebaut hatte? Ich hatte mal in https://github.com/Apollon77/ioBroker.homekit-controller/blob/main/src/lib/devicemgmt.ts angefangen das testweise zu integrieren dann aber gestoppt ... geht das noch ... also wie showForm und so?
@apollon77 sagte in Generische Ger
ä
te Verwaltung:Frage: Wie weit weg/nah dran ist das an dem was @UncleSam gebaut hatte?
Backend ist identisch. Im Front End kann es sein das nicht mehr alles funktioniert bzw. anders.
-
@apollon77 sagte in Generische Ger
ä
te Verwaltung:Frage: Wie weit weg/nah dran ist das an dem was @UncleSam gebaut hatte?
Backend ist identisch. Im Front End kann es sein das nicht mehr alles funktioniert bzw. anders.
Hey! Du scheinst an dieser Unterhaltung interessiert zu sein, hast aber noch kein Konto.
Hast du es satt, bei jedem Besuch durch die gleichen Beiträge zu scrollen? Wenn du dich für ein Konto anmeldest, kommst du immer genau dorthin zurück, wo du zuvor warst, und kannst dich über neue Antworten benachrichtigen lassen (entweder per E-Mail oder Push-Benachrichtigung). Du kannst auch Lesezeichen speichern und Beiträge positiv bewerten, um anderen Community-Mitgliedern deine Wertschätzung zu zeigen.
Mit deinem Input könnte dieser Beitrag noch besser werden 💗
Registrieren Anmelden