Homegear-UI

Ich habe in @pmayer 's Blog vom Homegear-UI gelesen. Daran bin ich sehr interessiert. Das ist so ziemlich der letzte Baustein, um vollständig von openHAB auf Homegear zu migrieren. Ich habe es mir auch installiert, leider kommt noch kein Ergebnis:

Mein aktuelles UI in openHAB ist schon relativ umfangreich. Ich habe halt relativ viele Geräte, da möchte ich beispielsweise nicht jeden Heizkörper einzeln einstellen müssen. Daher brauch ich die Möglichkeit beliebige Funktionen (Flows) aufzurufen. Also z.B. ein Schalter, der eine Systemvariable umstellt, wodurch dann der Flow gestartet wird. Es ist also für mich relativ wichtig UI-Elemente ohne direkte Peer erzeugen zu können. Ist so etwas geplant?

2 Likes

Hi,
um ein Element zu Visualisieren gibt es addUiElement().
Es können Geräte- oder Systemvariablen visualisiert werden.

Eine Variable muss einer Rolle hinzugefügt werden mit addRoleToVariable().

Die Rollen können der defaultRoles.json in /var/lib/homegear/ entnommen werden.
Die Variable, der Kanal oder das Gerät muss einem Raum und einem Stockwerk zugewiesen sein.
Entweder über die AdminUI oder z.B. mit addSystemVariableToRoom().

Beispiel:
Systemvariable erstellen:
homegear -e rc '$hg->setSystemVariable("Licht.Wohnzimmer", false);'

Raum und Stockwerk erstellen, Raum zu Stockwerk zuweisen über AdminUi.

Variable zu Raum hinzufügen:
homegear -e rc '$hg->addVariableToRoom(0, -1, "Licht.Wohnzimmer", 1);'
0, -1 = Systemvariablen, hier können auch Gerätevariablen stehen.

Variable zu einer Rolle hinzufügen:
homegear -e rc '$hg->addRoleToVariable(0, -1, "Licht.Wohnzimmer", 100001);'

UI Element erzeugen:
homegear -e rc '$hg->addUiElement(0, -1, "Licht.Wohnzimmer", "Deckenlicht");'

bei mir sieht das dann so aus:

test.homegear.eu zeigt eine etwas umfangreichere UI

Grüße Benni

4 Likes

Hallo zusammen,
gibt es für die UI irgendwo ein Fehler Log ?
ich habe die befehle genau so ausgeführt wie von benni.st beschrieben allerdings sehe ich nur das blaue Haus und keine Visu.
Es wurde mir auch kein Fehler ausgegen bei der Eingabe der Befehle.

installiert habe ich das aktuelle nightly.
Auf einem Rapi stretch.

Gruß Padi

@Micha - ne Idee?

Leider nein (die Frontend-UI ist auch nicht von mir).
Aber das “normale” homegear.log/.err bzw. -scriptengine.log/.err sollten bei Fehlern schon was zeigen. Ggf. das Loglevel hoeher stellen?

– Micha

Aber das “normale” homegear.log/.err bzw. -scriptengine.log/.err sollten bei Fehlern schon was zeigen.

Ja, da sollte was drinstehen, bzw. die RPC-Funktion sollte in jedem Fall eine Fehlermeldung zurückgeben, wenn das UI-Element nicht angelegt werden konnte.

Wichtig auch: Intern nennt sich diese Art UI-Elemente “addUiElementSimple”. Diese simple Elementerstellung erfordert eine UI-Elementzuordnung zu Rollen in der defaultRoles.json. Wenn es diese noch nicht gibt, funktioniert es nicht (aber es gibt dann eine Fehlermeldung). Es dürfte aber nicht mehr lange dauern, bis wir alles zugewiesen haben.

Viele Grüße

Sathya

Hallo,

bei mir läuft das aktuelle Nightly Version 0.8.0-2771 und dieser Thread hat mich neugierig gemacht, auch mal ein paar erste Gehversuche mit dem Homegear UI zu unternehmen.

Mein erstes Ziel ist es, den Zustand einer Device-Variable („STATE“ von Device 4) zu visualisieren, aber ohne etwas „Starthilfe“ komme ich vermutlich nicht weiter…

Wie in obigem Post als Beispiel angegeben, wollte ich zuerst der Variable eine Rolle zuweisen:

$hg->addRoleToVariable(4,1,"STATE",100001)

Obwohl die Rolle 100001 in der defaultRoles.json zu sehen ist, lässt sich diese Rolle nicht zuweisen und die Fehlermeldung lautet
HomegearException: Unknown Role

Bei der Ausgabe von getRoles() wird allerdings auch keine Rolle mit ID 100001 angezeigt.

Um weitermachen zu können, habe ich dann der Variablen zur Probe die Rolle 100000 zugewiesen, was auch funktioniert hat. Leider lässt sich dann aber trotzdem kein UI-Element hinzufügen.

rc $hg->addUiElement(4,1,"STATE","Licht")

liefert dann leider wieder eine Fehlermeldung

HomegearException: Role has no UI definition

Lohnt es sich beim aktuellen Entwicklungsstand überhaupt schon, mit dem UI zu experimentieren oder sollte ich mich besser noch etwas gedulden ?

Viele Grüße

FiveEights

Hallo @FiveEights,

ich werde bald eine Anleitung für die UI schreiben. Zu der “einfachen Elementerstellung” müssen zudem noch alle verfügbaren UI-Elemente hinzugefügt werden. Dein aktuelles Problem lässt sich vermutlich lösen mit:

 homegear -r
 reloadroles

Das ließt die defaultRoles.json neu ein. Hintergrund ist, dass manuelle Rollenänderungen möglich sind, so dass die defaultRoles.json automatisch nur eingelesen wird, wenn noch keine Rollen vorhanden sind.

Viele Grüße

Sathya

1 Like

Hallo,

bei mir läuft Homegear 0.8.0-2887.

Nach einigen Monaten habe ich weiter mit dem Homegear-UI experimentiert und für Lampen (Role 100001) funktioniert die GUI schon echt gut.

Jetzt wollte ich weitere Devices einbinden und in diesem Zusammenhang sind bei mir folgende Fragen aufgetaucht:

Tür-Fenster Kontakte HM-Sec-SCo

Hier habe ich dem „STATE“ mit addRoleToVariable für Türen die Rolle 301001 und für Fenster die 301002 zugewiesen, was auch soweit funktioniert hat.
Wenn ich aber die Variablen mit addUiElement in der GUI anzeigen möchte, dann klappt das nur für die Rolle 301002.

Bei Variablen mit der Rolle 301001 kommt immer folgende Fehlermeldung:

HomegearException: Role has no UI definition

Kann man diese Rolle noch nicht verwenden ?

Update von Variablen in der GUI

Der STATE von Tür-Fenster Kontakten wird in Homegear-UI nicht zuverlässig angezeigt und häufig nicht upgedatet.

Löschen von Elementen ?

Kann man eigentlich UI-Elemente wieder löschen d.h. gibt es eine Funktion wie removeUiElement o.ä. ?
Ich habe ein UI-Element für eine Variable doppelt angelegt und diese taucht jetzt doppelt in der GUI auf.

Vielen Dank.

Viele Grüße

FiveEights

Hallo,

der Fehler bei der Rolle 301001 kommt bei mir auch @marwinh kannst du dir das mal anschauen?

Löschen von UI Elementen geht so:
homegear -e rc 'print_v($hg->getAllUiElements("en-US"));' oder
homegear -e rc 'print_v($hg->getAllUiElements("de-DE"));'
je nach dem wie die Sprache eingestellt ist.

Danach das Element mit dem gewünschten Index löschen:
homegear -e rc 'print_v($hg->removeUiElement(1));'

Wichtig ist danach noch die Rolle der Variable zu entfernen, weil diese in der Geräteübersicht noch mitgezählt wird.
homegear -e rc '$hg->removeRoleFromVariable(1, 1, "STATE", 301002);'

Hallo,

vielen Dank für die ausführliche Beschreibung. Das Löschen hat bei mir funktioniert.

Man sollte vielleicht noch ergänzen, dass der Index eines UI-Elements im Feld [databaseId] steht, oder? Sonst kann man in der Ausgabe von getAllUiElements() ziemlich lange suchen.

Gibt es eigentlich eine Möglichkeit die Ausgabe von getAllUiElements() auf weniger Attribute einzuschränken ? Sonst muss man alles in eine Datei kopieren und dann mit grep suchen.

Noch eine kurze Frage: Mir ist aufgefallen, dass der Zustand meiner Tür-Fenster Kontakte immer genau umgekehrt angezeigt wird d.h. in der GUI ist “offen” zu sehen, wenn das Fenster in Wirklichkeit zu ist. Das liegt vermutlich daran, dass die Tür-Fenster-Kontakte in der Variable “STATE” den Wert FALSE zurückliefern, wenn das Fenster geschlossen ist.

Ist es möglich, die Zustände in der GUI durch irgendeinen Parameter umzukehren ?

Viele Grüße

FiveEights

Die Funktion ist berücksichtigt, war bislang nur noch nicht dokumentiert. Sathya war so freundlich, das auf ref.homegear.eu - addRoleToVariable mit zu ergänzen. Zum Rest kann ich leider nichts sagen.

Ja. So ist die Methode zu komplex. Ich habe die UI-Methoden gerade dokumentiert: https://ref.homegear.eu/rpc.html#addUiElement

Viele Grüße

Sathya