Homegear UI - Wie fügt man eine neue Rolle hinzu um ein VirtualSwitch darzustellen?

Moin moin in die Runde,

da es letztens ja so erfolgreich lief (Einbinden des Rollladen Aktor), lasst uns doch ein neues Thema bearbeiten! :partying_face:

Was ich aktuell versuche ist, ein virtuelles Device in diesem Falle einen Switch, welcher in meinem Fall die Heizung komplett An- oder Aus- schalten kann einer anderen Rolle und Gerätegruppe zu zuwiesen (Aktuell nutze ich 400001, weil ich es nicht anders gelöst bekomme).

Straight forward ist klar, was man machen muss ist:

  1. Ein virtuelles Device im AdminUI anlegen
  2. Dem STATE des Devices einer Variablen und einem Raum zuweisen und dann
    die entsprechende Rolle setzen
  • Final noch dem UI hinzufügen und schon hat man einen funktionsfähigen Button

    homegear -e rc ‘print_v($hg->addVariableToRoom(26, 1, “STATE”, 8));’
    homegear -e rc ‘print_v($hg->addRoleToVariable(26, 1, “STATE”, 400001));’
    homegear -e rc ‘print_v($hg->addUiElement(26, 1, “STATE”, “Profil Heizung”));’

Dann sieht das folgender Maßen aus:

Was ich aber gerne hätte, wäre eine eigene Gruppe / Geräte, z.B. “Schalter/Switch”, welches auch ein anderes Icon besitzt. Das socket_1 Icon ist im Falle eines Softswitch einfach unpassend. Ein simpler “On/Off” Schalter als eigenständige Rolle und Gerät mach mehr Sinn. Ich habe bereits versucht die RolIen ID 100000 und 100001 zu duplizieren und anzupassen, aber irgendwie will das nicht als STATE zusammen passen. Lasst uns versuchen das HowTo weiter zu füllen und anhand der Aufgabenstellung eine tolle Lösung schaffen. Ich bin gespannt auf Eure Vorschläge. Vielleicht hat ja auch der Eine oder Andere bereits ein Lösung parat, dann gerne her damit, Bitte.

Im Repertoire von homegear-ui sind auf alle Fälle diese beiden Icon’s brauchbar und sicher auch für solche Zwecke vorgesehen. Auf GitHub:
switches_1
on_off_1

Viele Grüße
Sven

Hallo Sven,

das ist in der Tat eine Funktion, die ich auch gerne hätte. Deinen enthusiasmus gefällt mir, ich befürchte aber das wird nicht ganz so einfach möglich sein. Innerhalb einer Rolle Anpassungen zu machen, sollte auch jetzt schon möglich sein. Vorhandene Unterrollen lassen sich in der defaultroles.json eigentlich kopieren, anpassen und nach einem HG-Neustart zuweisen und verwenden. Wo es schwierig wird, sind die Hauptrollen. Die sind derzeit (das soll nicht unbedingt heißen, dass es sich zeitnah ändern wird) nämlich hart codiert. Das hat auch mit seinen Hintergrund in der Aggregation der Status und ist etwas tricky. Ein Status 0-1 kann mal offen/mal geschlossen, dann wieder an/aus, … bedeuten. Natürlich kann man jetzt sagen: dann wird halt in diesem Fall nicht in der Hauptrolle aggregiert, doch dazu müsste eine eigene Rolle geschaffen werden. Ich nehme es mal auf ins Backlog und lasse mich gerne von @marwinh korrigieren, sollte ich da falsch liegen. :slight_smile:

Grüße, Simon

[Edit]: würde es für deinen Anwendungfall nicht reichen, zwei Profile für jedes Gerät anzulegen? Das ist dann eben kein Toggle, aber aus meiner Sicht ein ganz hinnehmbares Workaround:

1 Like

Guten Morgen Simon, aka @Sim :upside_down_face:

vielen Dank für dein Feedback. Damit hätte ich jetzt nicht gerechnet, klingt irgendwie ernüchternd.
Der Vorschlag mit den verschieden Profilen mag unter gewissen Umständen ein gangbarer Weg sein aber für mich nicht befriedigend.
Die Heizung-Schaltung war nur exemplarisch. Ich hätte duzende vergleichbare Use-Cases bei denen ein “simpler” Schalter sinnvoll wäre. Ein Beispiel wäre ein Schalter für die Ferienzeit der Kinder, wenn dieser aktiv ist, fahren die Jalousien erst um 09:00 Uhr nach oben statt wie gewöhnlich um 07:00 Uhr.

Du meintest:

Heißt das: man kann keine “neue” Hauptrolle anlegen? Ich habe auch schon versucht mit https://ref.homegear.eu/rpc.html#createRole eben solches zu bewerkstelligen. Aber leider ist die neue rolle id nur ein auto-increment und fügt sich nahtlos an die 700014 an.
Die RPC Documentation zeigt mir zu mindestens keine Möglichkeit um eine entsprechende RoleLevel::mainCategory zu erzeugen damit diese Bedingung auch erfüllt werden kann.

Fragen wir mal anders:

Wäre es ein gangbarer Weg die defaultRoles.json Datei zu erweitern mit einer neuen role? Ich habe in diesem Beispiel einfach mal die 47110000 (Role::id ist ja ein uint64_t) als Hauptrolle genommen. Das würde als ‘simple’ Switch so aussehen:

{
    "id": 47110000,
    "translations": {
        "en-US": "switch",
        "de-DE": "Schalter"
    }
},
{
    "id": 47110001,
    "types": [
        "bool",
        "int"
    ],
    "translations": {
        "en-US": "switch - state",
        "de-DE": "Schalter - Zustand"
    },
    "ui": {
        "simpleCreationInfo": {
            "element": "Base.switchSwitch",
            "roleIdsIn": [
                [
                    47110001
                ]
            ],
            "roleIdsOut": [
                [
                    47110001
                ]
            ]
        },
        "icon": "switches_1",
        "roleProfileValues": {
            "type": "select",
            "options": {
                "true": "an",
                "false": "aus"
            }
        },
        "label": {
            "en-US": "Switch",
            "de-DE": "Schalter"
        },
        "translations": {
            "de-DE": {
                "0": "aus",
                "1": "an"
            },
            "en-US": {
                "0": "off",
                "1": "on"
            }
        }
    }
},

Und einen Clone von socketButton.xml als switchSwitch.xml zu schaffen, damit wir ein Base.switchSwitch Element definiert bekommen? Quasi ein:

<uniqueUiElementId>Base.switchSwitch</uniqueUiElementId>

Oder ist das zu einfach gedacht bzw. worauf müsste man noch achten?

Ich freue mich auf neue Denkanstöße, bis dahin
VG Sven

Ganz richtig, es lassen sich gerade keine Hauptrollen selbst hinzufügen. Wenn es dich allerdings nicht stört, dass ein 4711-Schalter in der Rolle der Steckdosen geschaltet wird, dann sollte deine Vorgehensweise ein gangbarer Weg sein. Sooo tief in der Materie bin ich da allerdings nicht, dass ich das ins Detail beantworten kann, habe aber auf gleiche Weise auch schon mal eine eigene Rolle ‘dazubeschissen’ :slight_smile: .
Du solltest vielleicht darauf achten, dass deine Rolle 6-stellig ist, also 471101. Zum Test hätte ich an deiner Stelle erstmal fortlaufend weiter gemacht mit 400002, denn die Rollen mit 0 am Ende sind i.d.R. Hauptrollen.
Viel Erfolg :wink:

siehe: Nightly 0.8.0-3087 Fehler in UI