brutella / hkknx-public

hkknx is a HomeKit KNX bridge for KNX.
https://hochgatterer.me/hkknx
98 stars 6 forks source link

HomeKit light button to trigger KNX-scenes #44

Closed petnau closed 3 years ago

petnau commented 4 years ago

In quite a few installations KNX-scenes are used to set "light scenarios" especially when you want to control multiple different light sources, that are preconfigured with specific light levels, with one physical or virtual light switch/button. Is this something that would be possible to implement into hkknx in the future?

brutella commented 4 years ago

Do I understand that correctly that you would like to have to a switch in HomeKit, which sends a scene id to KNX when it is turned on/off?

BugRoger commented 4 years ago

Yes. It would also be cool if the switch could send different scene IDs for ON and OFF.

petnau commented 4 years ago

For example, I would like to be able to tell Siri, “Hey Siri please turn on the lights”, when I come home and that would trigger a specific KNX-scene which has been predefined with the correct light sources and light levels for that action.

rw71 commented 4 years ago

Why don't you create this scene in Home App? It could do the same that you have defined in you KNX-scene.

petnau commented 4 years ago

Hi,

I have some 20-25 KNX-scenes that are used around the buildning. Majority are different light scenarios that are triggered with hard-buttons around the house. The KNX-scenes are quite regularly adjusted depending on different lighting situations. We use the ”Button long press store current light values to KNX scene memory" function for easy adjustments of the scenarios, so basically anyone can adjust the scenarios. For me it would make a lot of sense to be able the re-use the same KNX-scenes and also be able to call them with HomeKit, instead of creating duplicates in HomeKit.

/Petri

On 3 Aug 2020, 17:14 +0200, rw71 notifications@github.com, wrote:

Why don't you create this scene in Home App? It could do the same that you have defined in you KNX-scene. — You are receiving this because you authored the thread. Reply to this email directly, view it on GitHub, or unsubscribe.

brutella commented 4 years ago

Controlling KNX scenes via an accessory in HomeKit doesn't feel right to me, because HomeKit also has the concept of scenes. Meaning that KNX scenes should appear as HomeKit scenes to the user. Because HomeKit scenes can only be created by an iOS app, we could use the Configurator app to do that.

chef76 commented 4 years ago

In my opinion a "Bridge" can be used in both directions. On the KNX Side Scenes are from the beginning an important feature. Only because on the HomeKit Side, there's another way to create scenes, the present KNX scenes shouldn't be excluded from use in the bridge.

brutella commented 4 years ago

The only problem is that the HomeKit Accessory Protocol (that's the communication protocol between the bridge and HomeKit) doesn't include information about scenes. HomeKit scenes can only be created by an iOS app.

chef76 commented 4 years ago

I'm not sure we're talking about the same thing. To trigger an existing KNX scene the bridge only has to send a scene-ID on the bus. So there only has to be a way to tell a button which ID to send on push and release. Whether or not, that's possible I don't know.

brutella commented 4 years ago

Yeah, but this means that you have a button for every KNX scene.

chef76 commented 4 years ago

Exactly! (with Option to trigger another scene on release)

feanmg commented 4 years ago

(Hallo Brutella, nur mein kurzes Feedback: deine Idee mit dem Anlegen von "Szenen-Buttons" in der Home-Configurator-App wäre ein prima Workaround, um Szenen oder andere Aktionen anzutriggern. Über eine solche Umsetzung würde ich mich freuen.)

Superwuzy commented 3 years ago

@brutella Ich schließe mich an. Ich nutze in meinem Haus auch diverse KNX-Szenen. Ich hätte einen großen Bedarf, mittels eines HomeKit-Schalters (oder eines Objektes, was besser passt, hier würde ein Push-Button reichen) eine festgelegte KNX-Szenen-ID triggern zu können.

Es gäbe noch einen ähnlichen Anwendungsfall, z.B. zum Steuern von HVAC-Geräten wie z.B. Lüftungsanlagen. Hier wäre es super, wenn man einen bestimmten numerischen Wert über eine GA senden könnte, z.B. zum Ansteuern der richtigen Lüfterstufe.

Superwuzy commented 3 years ago

@brutella Ohne die Möglichkeit, von HomeKit aus KNX-Szenen triggern bzw. alternativ feste numerische Werte an KNX-GAs senden zu können, ist in meinen Augen die hkknx-Unterstützung noch lückenhaft. KNX-Szenen gehören von Anfang an zur DNA von KNX. Sie über HomeKit noch nicht auslösen zu können, empfinde ich wirklich als großes Defizit.

brutella commented 3 years ago

@Superwuzy HomeKit hat ein eigenes Konzept hinsichtlich Szenen und die Vermischung von HomeKit Szenen und KNX Szenen ist nicht so ohne weiteres möglich. Besonders da alles was in HKKNX konfiguriert wird, mit der Standard Apple Home App funktionieren soll.

Ich habe mir aber dahingehend schon etwas Gedanken gemacht.

Superwuzy commented 3 years ago

@brutella Mir ist bekannt, dass HomeKit eine eigene Szenenunterstützung hat und dass man Konzepte nicht vermischen soll.

Daher hatte ich geschrieben, dass es reichen würde, den Nutzern eine Art PushButton-Lösung anzubieten (es gibt ja auch HomeKit-fähige PushButtons), deren Typ gar nicht den Namen "Szene" tragen muss.

Es würde hier völlig reichen, eine Möglichkeit zur Erzeugung von Objekten des Typs "PushButton" anzubieten.

In hkknx würde dann der Nutzer dafür eine Gruppenadresse und einen selbstgewählten numerischen Wert eingeben, der für die GA gesetzt wird.

KNX-Szenennummern (>= 1) werden aufgrund des DPT-Typs bekanntlich praktisch um den numerischen Wert 1 niedriger auf den KNX-Bus gesendet. Aber das macht nichts aus. So kann ein hkknx-User beispielsweise für eine Szene mit der Nummer "6" als Wert "5" hinterlegen - fertig.

Man benötigt für diesen Button weder eine Rückmeldung noch einen Initialisierungswert. Wenn Du das so integrieren könntest, wären Dir schätzungsweise alle hkknx-User dankbar, die viele KNX-Szenen im Haus einsetzen.

Und das würde in meinen Augen auch nicht dem HomeKit-Konzept entgegenstehen, weil PushButtons meines Wissens offiziell von HomeKit unterstützt werden.

Könntest Du eine derartige Lösung zur Verfügung stellen? Das wäre total super! Danke im voraus!

brutella commented 3 years ago

Man benötigt für diesen Button weder eine Rückmeldung noch einen Initialisierungswert.

Genau so etwas gibt es eben in HomeKit nicht. Das heißt nicht, dass es nicht möglich ist so etwas in HomeKit abzubilden, aber die Apple Home App wird das nicht richtig angezeigt bekommen.

Und das würde in meinen Augen auch nicht dem HomeKit-Konzept entgegenstehen, weil PushButtons offiziell von HomeKit unterstützt werden.

Push-Buttons werden unterstützt, aber in die andere Richtung. Ein Push-Button in HomeKit kann nicht über die Home App gedrückt werden. Es wird die Art des Drucks (Kurz Gedrückt, Lange Gedrückt, Doppelt Gedrückt) an HomeKit gesendet, damit auf diese Ereignisse reagiert werde kann.

Superwuzy commented 3 years ago

@brutella Danke für die Erläuterung. Jetzt habe ich es verstanden. In diesem Fall würde es in meinen Augen reichen, wenn man einem gewöhnlichen Schalter die Möglichkeit geben könnte, optional einen festen KNX-Wert setzen zu können, der immer auf den KNX-Bus gesendet wird, ganz egal, ob der Schalter ein- oder ausgeschaltet wird. In der HomeKit-App würde dann der Schalter quasi immer "Ein" anzeigen, ganz egal, wie oft man drückt. Bei jedem Druck würde der fest eingestellte Wert auf den KNX-Bus gesendet werden. Um den Namen "Szene" im Namen des Objekts zu vermeiden, würde ich dann diesem "Schalter" Beispielsweise den Namen "Wohnen Trigger Abend" geben. Dann könnte man wahrscheinlich Siri mit "Schalte Wohnen Trigger Abend Ein" (oder AUS) steuern.

brutella commented 3 years ago

Ja, das wäre eine Möglichkeit. Ist aber meiner Meinung nach nicht optimal.

Optimal wäre es, wenn man vorhandene Szenen auslesen (aus der ETS Projektdatei?) und als HomeKit Szenen anlegen könnte.

Superwuzy commented 3 years ago

Das wäre natürlich eine sehr elegante Lösung, die bei Dir jedoch wahrscheinlich den größten Implementierungsaufwand nach sich zöge. Die Schwierigkeit, die ich hier jedoch sehe, ist, dass die Ausprägungen einer Szene letztlich in der Applikation des jeweiligen Tasters (bei mir GIRA Tastsensor 3 oder MDT Glassensor) festgelegt werden. Man könnte dann zwar wohl aus der Projektdatei herauslesen, welche Szenen-GAs generell genutzt werden, aber wahrscheinlich nicht so einfach, welche Ausprägungen denn für die jeweilige GA auch real benötigt werden. Ich nutze beispielsweise für einen Raum wie "Wohnen" eine Szenen-GA, die die Ausprägungen "Aus", "Allgemein", "Abend", "TV" und "Nacht" einnehmen kann. Einige dieser Ausprägungen triggere ich dabei über den Tastsensor, andere dabei über den Glassensor.

Superwuzy commented 3 years ago

In der Visualisierung (bei mir der GIRA HomeServer) sind die Szenen dann für einen Raum beispielsweise so abgebildet: E752BDBE-CA6F-4A20-9D1E-005462873C71_1_105_c

chef76 commented 3 years ago

andere Hersteller scheinen mit Szenen nicht solche Probleme zu haben:

image

Zeigt übrigends die ETS aktuell als Werbung an.

chef76 commented 3 years ago

... und im Prinzip hast Du schon einen Push-Button umgesetzt: Garagentor. Der sendet auch immer 1 oder immer 0, je nachdem wie er konfiguriert ist.

Ich habe weiter oben schon mal versucht klar zu machen, dass das die HKKNX Bridge wirklich nach vorne bringen könnte und ich verstehe ehrlich gesagt nicht, was Du für Probleme damit hast. Das in meinen Augen sinnlose Motorschloss hast Du sofort umgesetzt.

chef76 commented 3 years ago

Unterstützt auch Szenetasten: https://www.xxter.com/voice/?gclid=Cj0KCQiA2af-BRDzARIsAIVQUOcx5W7Nwo172_Iw7RnyStoBHETwfwMysMQlMaT_RPcFqFSjURn0VEMaAvrpEALw_wcB

brutella commented 3 years ago

[...] ich verstehe ehrlich gesagt nicht, was Du für Probleme damit hast.

Warum sollte ich Probleme damit haben?

Unterstützt auch Szenetasten: https://www.xxter.com/voice/?gclid=Cj0KCQiA2af-BRDzARIsAIVQUOcx5W7Nwo172_Iw7RnyStoBHETwfwMysMQlMaT_RPcFqFSjURn0VEMaAvrpEALw_wcB

Stellt sich nur die Fragen, wie das umgesetzt wurde. Vermutlich wird für jede Szene ein Schalter angelegt – was ich aber für keine gute Lösung finde.

Ich bleibe dabei, dass ich keine halbe Lösungen integrieren möchten. Ich bin mir sicher, dass eine "richtige" Umsetzung möglich ist.

chef76 commented 3 years ago

ich unterstütze hier in jeder erdenklichen Weise gerne, egal ob mit Ideen oder zum Testen.

Wieso ist ein Schalter für jede Szene eine "halbe Lösung" für Dich? Wie soll das denn sonst gehen?

Als erstes müsstest Du generell mal Taster einführen, bei denen man vorgeben kann, welcher Wert beim Auslösen gesendet wird (1 oder 0). Taster sind Standard in KNX. Wie löst Du ohne Taster z.B. sauber eine Treppenhausautomatik aus? Da darf nur eine 1 gesendet werden. Eine 0 soll der Taster nie senden.

Wie gesagt, ich steuere gerne alles bei, was nötig ist, aber dass man mit Deiner Brücke keine Szenen auslösen kann, ist schon ein großer Nachteil. Und etwas garnicht umzusetzen, weil man auf eine "richtige" Umsetzungsidee wartet bringt das Produkt nicht voran. Man kann Sachen auch im Nachhinein noch verbessern, wenn man eine gute Idee hat.

brutella commented 3 years ago

Wieso ist ein Schalter für jede Szene eine "halbe Lösung" für Dich?

Ganz einfach, in HomeKit kann man einen Taster ein- und ausschalten. Was soll passieren, wenn der Taster ausgeschaltet wird?

Wie soll das denn sonst gehen?

Optimal wäre es, wenn eine KNX Szene als Szenen in HomeKit auftaucht.

Wie das genau umgesetzt werden kann, muss ich mir noch ansehen. Da ich aber zurzeit an einem großen Update for Home+ arbeite, kann ich das gerade nicht tun. Ich warte also nicht auf eine bessere Lösung, sondern kann mir erst Gedanken darüber machen, wenn ich Zeit dazu habe. 😉

chef76 commented 3 years ago

einen Taster kann man nicht ausschalten, ein Taster schaltet sich "von selbst" aus. Oder ist das in Homekit nicht so? Wenn man einen Taster ausschalten könnte wäre es kein Taster, sondern ein Schalter.

chef76 commented 3 years ago

... und ich kann natürlich warten, bis Du Zeit dafür hast! :-)

brutella commented 3 years ago

Wenn man einen Taster ausschalten könnte wäre es kein Taster, sondern ein Schalter.

Ok, das sag ich es so. Einen Taster, der von HomeKit aus (zB der Apple Home-App) gedrückt werden kann, gibt es nicht.

willgf commented 3 years ago

Hallo zusammen,

für mich ist das auch ein großes Defizit und ich sehe es nicht als "halbe Lösung" wenn dafür ein Schalter in HK angelegt wird, der auf eine GA eine Szenennr schickt.

Thinka hat es gelöst - was für mich eine durchaus elegante Lösung zu dem Problem ist:

-In HK ist die KNX Szene als Schalter abgebildet -Diesen Schalter kann man 2-fach parametrieren: also zb. Szene "1" auf eine bestimmte GA wenn der "Schalter" eingeschaltet wird, und Szene "2" auf eine GA wenn der Schalter "aus" ist -Wenn man nur eine KNX Szene parametriert, wird der HK-Schalter nach einigen Sekunden von der Brücke wieder in den ausgangszustand gesetzt (quasi ein "stateless" Schalter)

-Rückmeldung etc. gibt es nicht und braucht es auch nicht - gibt es in KNX ja auch nicht

chef76 commented 3 years ago

Wenn man einen Taster ausschalten könnte wäre es kein Taster, sondern ein Schalter.

Ok, das sag ich es so. Einen Taster, der von HomeKit aus (zB der Apple Home-App) gedrückt werden kann, gibt es nicht.

Und wie hast Du das dann mit dem Garagentor gemacht? Das ist ein Taster im Sinne meiner Definition. Einmal Drücken wird eine 1 gesendet. Nochmal drücken wird wieder eine 1 gesendet. Der bleibt auch nicht gedrückt, sondern bekommt seinen Status über eine Rückmelde GA. Genauso sollte es sein, nur dass man nicht nur einstellen kann, dass 1-1-1 oder 1-0 gesendet wird, sondern immer eine beliebige Szenen-ID.

chef76 commented 3 years ago

Hallo zusammen,

für mich ist das auch ein großes Defizit und ich sehe es nicht als "halbe Lösung" wenn dafür ein Schalter in HK angelegt wird, der auf eine GA eine Szenennr schickt.

Thinka hat es gelöst - was für mich eine durchaus elegante Lösung zu dem Problem ist:

-In HK ist die KNX Szene als Schalter abgebildet -Diesen Schalter kann man 2-fach parametrieren: also zb. Szene "1" auf eine bestimmte GA wenn der "Schalter" eingeschaltet wird, und Szene "2" auf eine GA wenn der Schalter "aus" ist -Wenn man nur eine KNX Szene parametriert, wird der HK-Schalter nach einigen Sekunden von der Brücke wieder in den ausgangszustand gesetzt (quasi ein "stateless" Schalter)

-Rückmeldung etc. gibt es nicht und braucht es auch nicht - gibt es in KNX ja auch nicht

... stimmt, die Rückmeldung bräuchte es nicht. Zwei Szene-IDs für Ein- und Ausschalten würden es tun oder eben halt nur eine beim Einschalten und automatisches Rücksetzen in den Zustand aus ohne dass was gesendet wird.

Superwuzy commented 3 years ago

Hallo zusammen, für mich ist das auch ein großes Defizit und ich sehe es nicht als "halbe Lösung" wenn dafür ein Schalter in HK angelegt wird, der auf eine GA eine Szenennr schickt. Thinka hat es gelöst - was für mich eine durchaus elegante Lösung zu dem Problem ist: -In HK ist die KNX Szene als Schalter abgebildet -Diesen Schalter kann man 2-fach parametrieren: also zb. Szene "1" auf eine bestimmte GA wenn der "Schalter" eingeschaltet wird, und Szene "2" auf eine GA wenn der Schalter "aus" ist -Wenn man nur eine KNX Szene parametriert, wird der HK-Schalter nach einigen Sekunden von der Brücke wieder in den ausgangszustand gesetzt (quasi ein "stateless" Schalter) -Rückmeldung etc. gibt es nicht und braucht es auch nicht - gibt es in KNX ja auch nicht

... stimmt, die Rückmeldung bräuchte es nicht. Zwei Szene-IDs für Ein- und Ausschalten würden es tun oder eben halt nur eine beim Einschalten und automatisches Rücksetzen in den Zustand aus ohne dass was gesendet wird.

Ich habe beispielsweise für den Raum "Wohnen" 7 Szenen (die "Aus"-Szene habe ich mitgerechnet). Ich würde mir daraus 7 Schalter basteln und jeden der Schalter für den Ein-Zustand mit einer der 7 Szene-IDs belegen. Den "Aus"-Zustand des Schalters würde ich in meinem Fall nicht mit einer eigenen Szene-ID belegen, da ich es gut finde, wenn der Schalter nach einigen Sekunden von der Bridge wieder auf "0" zurückgesetzt wird.

Letztlich geht es nur darum, einem simplen Schalter die Möglichkeit zu bieten, eine oder zwei Szene-IDs auf den Bus zu legen und sich, je nach Parametrierung, nach kurzer Zeit wieder zurückzusetzen.

Da ich noch den Gira HomeServer im Einsatz habe, könnte ich dieses Verhalten auch mit neu gebastelten Logiken simulieren (virtuelle GAs mit 1-Bit-EIN-Zuständen, die dann auf die jeweiligen Szene-IDs mappen). Ich sehe jedoch ehrlich gesagt nicht ein, 200 Euro für die hkknx-Bridge bezahlt zu haben und dann auf wesentliche Features wie eine rudimentäre Unterstützung für KNX-Szenen verzichten zu müssen.

Superwuzy commented 3 years ago

@brutella Gibt es schon Neuerungen bzgl. der Szene-Unterstützung?

traxanos commented 3 years ago

Ich hätte es so implementiert, dass wenn man einen Schalter einschaltet, dieser so schnell wie möglich wieder ausgeht. Dabei verschickt es immer ein True an eine GA. Somit könnte man (ohne den Schalter zu öffnen) einen Taster simulieren. Was ich mit dem 1bit anstelle kann dann jeder selber überlegen. Ob ich es später auf eine Szene mappe oder eine 1bit Szene aufrufe, kann dann jeder in KNX lösen wie er es braucht.

Beim Ausschalten eine "Aus" Szene zu schalten, halt ich für Schwachsinn, da ja überhaupt keine Zustand bekannt ist.

@brutella wäre das nicht eine einfach und saubere Lösung.

PS: Ich verwende das übrigens genau so und der Schalter ist nur ein Bruchteil einer Sekunde überhaupt eingeschaltet. Also funktioniert sogar bei Sowas wie Hoch / Runter oder Lauter / Leister.

brutella commented 3 years ago

Diese Funktion ist im Pre-Release Build für Version 1.3.0 verfügbar.

BugRoger commented 3 years ago

Tried it today. Works. Nice, thank you for implementing this feature.

brutella commented 3 years ago

Great. I will close the issue then.