snowdd1 / homebridge-knx-de

German Issue/Discussion forum for homebridge-knx
https://github.com/snowdd1/homebridge-knx
20 stars 4 forks source link

Add-In für Bilton KNX-LED-RGB-Dimmer Steel #38

Closed kustus closed 5 years ago

kustus commented 7 years ago

Hallo Raoul,

nachdem ich mit homebridge-knx (0.2) richtig gut voran komme, bin ich nun auf meine KNX-RGB-Steuerung gestoßen und finde keine Entsprechung.

HomeHit scheint mit dem accessory "MagicHome" schon die perfekte RGB-Stereung zu haben (feste Farbvorauswahl und freies Farbrad, sowie dimmen und ein/ausschalten). Siehe dazu hier im Video unten: http://stephenradford.me/cheap-homekit-led-strips-lighting/ https://youtu.be/9bKLK6YNErw

Ich habe diesen KNX-Aktor: http://www.bilton.at/de/product-category/knx/knx-led-dimmer-steel

Toll wäre jetzt ein PlugIn, mit dem man diesen Aktor mit dem MagicHome verbinden könnte. Der Aktor hat dazu diese wesentlichen KNX-Events:

  1. Dimmkontrolle Kanal R (jeweils setzen, Status) (DPT5.001)
  2. Dimmkontrolle Kanal G (jeweils setzen, Status)(DPT5.001)
  3. Dimmkontrolle Kanal B (jeweils setzen, Status)(DPT5.001)
  4. Szenenummer (jeweils setzen, Status; dient dazu eine Szenenummer aufzurufen mit der im Aktor eine Farbe definiert wurde) (DPT17.001)
  5. Start/Stopp Farbkreis (jeweils setzen/Status; boolean und startet/stopp den im Aktor definierten Farbverlauf) (DPT1.001)
  6. Alle Kanäle EIN/AUS (jeweils setzen, Status) (DPT1.001)

Hast du bei deinem RGBKight-AddIn sowas vor oder geht es in eine andere Richtung?

snowdd1 commented 7 years ago

Ich muss zugeben dass ich nicht verstanden habe wozu den MagicHome-Controller zu brauchen glaubst. Die Steuerung im Video ist die Home App von Apple.

Das RGB-Light-Add-in kann schon

Aus der Diskussion https://github.com/snowdd1/homebridge-knx/issues/60 kannst Du sehen, dass ich den "freihändig" ohne Hardware versucht habe zu entwickeln. Das Debugging ist schwierig, da der einzige Nutzer und ich uns offensichtlich öfter missverstehen.

Wozu ist die Szenensteuerung gut? Ich meine im Zusammenhang mit HomeKit? Siri kennt nur HomeKit-Szenen, und eine zusätzliche Eigenschaft "Szene" versteht Siri wieder nicht, und zumindest Apple's Home App mag auch keine "freie definierten" Eigenschaften.

Wozu ist Start/Stop Farbkreis gut? Startet das einen automatischen Farbwechsel? Das würde ich als eigenen Lichtschalter (Service Lightbulb) oder Schalter (Service Switch) definieren.

Wie gesagt, das RGBLight-Add-in ist derzeit experimentell, da ich es nicht wirklich testen kann (wenn mir jemand einen Aktor+Leuchtmittel schenken will, bitte Kontakt per Mail.. 😄 )

kustus commented 7 years ago

Ja sorry habe inzwischen deine Implementierung entdeckt und angeschaut und gesehen, dass es auf Lightbulb basiert mit Hue, vergiss also MagicHome, falsche Annahme. BTW: da sind Kommas zu viel in deinem config-Beispiel nach "Type": "Hue", und "Type": "Hue",

Die Implementierung an sich schaut aber gut aus, müsste mit meinem RGB-Aktor prinzipiell funktionieren, denn die Werte für die Farbkanäle und Ein/Aus reichen aus.

Ich kämpfe aktuell damit, dass ein Update auf homebridge-knx 0.3.8 trotzdem zu einer Exception führt, dass er RGBLight.js nicht findet. Ich werde noch herausfinden, was ich tun muss. Hab mich vor zwei Tagen das erste Mal auf eine Linux-Umgebung eingelassen. Sobald ich das hin bekommen habe, schaue ich, ob deine Implementierung bei mir mit dem RGB-Aktor funktioniert und kann dir das Ergebnis berichten.

Sie Szenen im KNX sind unabhängig von Siri zu betrachten. Das KNX ist ist und bleibt ja das Primärsystem und wird von Siri nicht ersetzt, sondern nur ergänzt. Meine Touch-Panels, Taster und sonstige Logik ist ja Apple-unabhängig und soll es auch bleiben. Ich kann Szenen auch anders mit Logik bauen und dann vielleicht per Switch aufrufen. Hat aber nur Prio 2. Genau wie der Farbkreis (ja durchlaufender Farbwechsel).

kustus commented 7 years ago

Habe es nun geschafft, RGBLight einzusetzen (heißt jetzt RGBBiltonSteel.js). Nach ein paar Korrekturen werden jetzt die Werte berechnet und auf den Bus geschickt. Dort kommt aber zu 95% immer nur ein Wert (Rot) an, manchmal auch der zweite (Green), nie der Dritte (Blue). Wenn ich die Reihenfolge der Aufrufe beim Schreiben auf den Bus ändere, dreht sich das Bild oben entsprechend. Beispiel für andere Reihenfolge:

        this.myAPI.knxWrite('Blue', b, 'DPT5');
        this.myAPI.knxWrite('Green', g, 'DPT5');
        this.myAPI.knxWrite('Red', r, 'DPT5');

Es sieht so aus, dass knxWrite es nicht mag, mehrere Werte hintereinander zu verarbeiten. Läuft die Funktion asynchron? Frage daher: wie kann ich das Schreiben auf den Bus abwarten, um dann erst den nächsten Wert zu senden? Das Problem müsste je eigentlich dauernd auftreten, wenn viel zum Bus gesendet werden soll, z. B. in Home-Szenen. Eine Alternative wäre DPT232.600, das ist ein 3-Byte-Wert mit allen drei Farbwerten, die der Aktor auch verarbeiten kann.

snowdd1 commented 7 years ago

Was hast Du den für ein physisches Gerät am knxd? Es gibt wohl einige die nicht buffern wenn der Bus belegt ist. Das Problem wirst Du dann auch haben wenn Du mit Siri ganze Etagen etc. schaltest ("Siri, schalte das Licht im Erdgeschoss aus") dann warden auch ganz viele Telegramme hintereinander geschickt, so schnell der knxd kann. Bei Tunnel-Verbindungen (-b ipt: ) gibt es ein neues Flag (--send-delay=milliseconds ) für den knxd um die Geschwindigkeit zu drosseln, siehe https://github.com/knxd/knxd issues.

kustus commented 7 years ago

Ha! Mit einem Delay mit 50ms funktioniert es jetzt. Danke! Dein RGBLight.js geht also. In der Beispiel-Config ist aber immer noch ein Komma zu viel ;)

snowdd1 commented 7 years ago

Immer noch? Copy&paste hell...

snowdd1 commented 7 years ago

Wo? Ich dachte ich hätte heute mittag das letzte auch noch gefunden.

kustus commented 7 years ago

Im aktuellen Source ist es jetzt weg. Hatte heute morgen geschaut.

kustus commented 7 years ago

Hab leider Problem festgestellt bei der Auswahl von fest voreingestellten Farben. Beispiel: wenn ich Grün wähle, dann errechnet RGBLight folgendes (hab das Log erweitert):

  RGBLight INFO Hue value: 114 +1ms
  RGBLight INFO Saturation value: 1 +1ms
  RGBLight INFO Brightness value: 0.8 +0ms
  RGBLight INFO Writing Red value of 20 to KNX bus  +6ms
  RGBLight INFO Writing Green value of 204 to KNX bus  +0ms
  RGBLight INFO Writing Blue value of 0 to KNX bus  +0ms

(Umrechnung HSV nach RGB stimmt, habs auf onlineseite nachgerechnet) http://www.rapidtables.com/convert/color/hsv-to-rgb.htm hsv-konvertierung

mit knxWrite wird dann folgenedes geschrieben:

[2017-02-22 19:34:35] [homebridge-knx.KNX] RGBLight->customServiceAPI.knxWrite(Red,20,DPT5)
[2017-02-22 19:34:35] [homebridge-knx.KNX] RGBLight->customServiceAPI.knxWrite(Green,204,DPT5)
[2017-02-22 19:34:35] [homebridge-knx.KNX] RGBLight->customServiceAPI.knxWrite(Blue,0,DPT5)

Als Ergebnis kommen dann aber auf dem Bus komische Werte an, dementsprechend ist die Farbe dann falsch. Aus dem Freifarbrad geht es besser, da kommt die richtige Farbe an. das kann ich aber hier nicht protokollieren, da zu viele Werte. Ist doch komisch (0xCC=204; 0x0A=10). Rot sollte eigentlich 20 sein und Blau ist mit Grün vertauscht). rgb

Hast du eine Idee? Ich hab jetzt schon 1h überlegt, aber nix plausibles gefunden.

kustus commented 7 years ago

Die Konfig noch:

{
                    "ServiceType": "Lightbulb",
                    "ServiceName": "Farblicht",
                    "Handler": "RGBLight",
                    "Characteristics": [
                        {
                            "Type": "On",
                            "Set": [
                                "0/5/7"
                            ],
                            "Listen": [
                                "8/5/7"
                            ]
                        },
                        {
                            "Type": "Hue"
                        },
                        {
                            "Type": "Saturation"
                        },
                        {
                            "Type": "Brightness"
                        }
                    ],
                    "KNXObjects": [
                        {
                            "Type": "Red",
                            "Set": "0/5/3",
                            "DPT": "DPT5"
                        },
                        {
                            "Type": "Green",
                            "Set": "0/5/4",
                            "DPT": "DPT5"
                        },
                        {
                            "Type": "Blue",
                            "Set": "0/5/5",
                            "DPT": "DPT5"
                        }
                    ],
                    "KNX-ReadRequests": [
                        "8/5/7"
                    ],
                    "subtype": "SUB_1cc4369d-ab41-4b7a-8a13-608a4a68091c"
                }
snowdd1 commented 7 years ago

Sehr merkwürdig. Blau enthält gar kein Blau? Bist Du sicher dass das alles vom selben Event stammt?

kustus commented 7 years ago

Das ist es ja, Blau und Grün sind genau vertauscht. Hab alles schon zig mal kontrolliert. Über das Farbrad geht es ja auch, es sind also keine Events vertauscht. Vielleicht liegt es wieder am Buffer und irgend welche Events überschreiben gleiche Speicherbereiche intern oder sowas. In der ETS sind die Events richtig zugeordnet: rgbconfig

Und ja, gleiches Event. Starte homebridge und ETS-Monitor, mache genau nur diese eine Aktion und alles wieder stoppen. Das Ergebnis ist das von oben.

Ich schau mir das morgen nochmal in Ruhe an.

snowdd1 commented 7 years ago

Hab leider Problem festgestellt bei der Auswahl von fest voreingestellten Farben. Beispiel: wenn ich Blau wähle, dann errechnet RGBLight folgendes (hab das Log erweitert): RGBLight INFO Hue value: 114 +1ms RGBLight INFO Saturation value: 1 +1ms RGBLight INFO Brightness value: 0.8 +0ms RGBLight INFO Writing Red value of 20 to KNX bus +6ms RGBLight INFO Writing Green value of 204 to KNX bus +0ms RGBLight INFO Writing Blue value of 0 to KNX bus +0ms (Umrechnung HSV nach RGB stimmt, habs auf onlineseite nachgerechnet)

Das meinte ich, das kommt mir schon komisch vor: Du hast als Beispiel "Blau" genannt und bei der Umrechnung kommt gar kein Blau raus: Writing Blue value of 0.

Das ist doch schon komisch.

snowdd1 commented 7 years ago

Das die Werte in der ETS noch verdrehter ankommen ist das zweite Thema!

kustus commented 7 years ago

Text war falsch, muss "Grün" heißen zum Text oben, habs korrigiert. Es geht also nur darum, dass falsche Werte auf dem Bus landen, obwohl die Berechnung der RGB-Werte korrekt ist. Ich habe jetzt noch ein paar Versuche gemacht per Siri "Farbe in der Küche auf grün stellen". Wenn ich das mehrmals hintereinander mache, dann wird es irgend wann auch grün. Ich denke es ist der Bus-Delay, ich werde das im Laufe des Tages probieren, habe jetzt aber keine Zeit mehr.

snowdd1 commented 7 years ago

Ich habe noch einen Verdacht, vielleicht komme ich dazu Dir eine Testversion zu basteln: Die ganzen callbacks beim Schreiben der Werte könnten einander überholen (race condition) und evtl dadurch krumme Telegramme erzeugen. Um das zu verhindern müsste ich erst einen Buffer füllen und dann getaktet abarbeiten - das liefe anders als bisher.

snowdd1 commented 7 years ago

@kustus Jörg, Du könntest den Branch pool-knx-conn ausprobieren. In diesem wird die Verbindung zwischen homebridge-knx und dem knxd für Schreibvorgänge offengelassen, statt jedes Mal eine neue zu öffnen und hinterher zu schließen. Vielleicht löst das ja schon das Problem.
Achtung: Das ist noch experimenteller als der ganze Rest ohnehin schon!

kustus commented 7 years ago

Hallo Raoul, das klingt plausibel. Im ETS-Monitor sieht man ja auch, dass die Quell-Adresse ständig wechselt, sprich neue Sessions oder Kanäle oder what ever ständig entstehen. Eine Erhöhung des Delays hatte übrigens keinen Erfolg und macht deine Theorie der Nebenläufigkeit wahrscheinlicher. Ich probiere den Branch mal aus, hab eine virtuelle Machine und kann auf die Schnelle eine Kopie machen vorher. Muss jetzt nur noch herausfinden, wie ich den Branch installiere.

kustus commented 7 years ago

Ich brauche Hilfe für die Installation des Branch. Was muss ich machen?

snowdd1 commented 7 years ago

Anleitung Global: sudo npm install -g github:snowdd1/homebridge-knx#pool-knx-conn
Lokal: npm install github:snowdd1/homebridge-knx#pool-knx-conn

kustus commented 7 years ago

Der Branch funktioniert leider nicht. Es kommt nix mehr an am Bus. Bin auf 0.3 zurück und habe das delay noch höher geschraubt. nun funktioniert es. zwar immer noch unerwartet, aber es kommen die richtigen Werte an.

[2017-02-24 16:29:27] [homebridge-knx.KNX] RGBLight->customServiceAPI.knxWrite(Red,12.749999999999954,DPT5)
[2017-02-24 16:29:27] [homebridge-knx.KNX] RGBLight->customServiceAPI.knxWrite(Green,0,DPT5)
[2017-02-24 16:29:27] [homebridge-knx.KNX] RGBLight->customServiceAPI.knxWrite(Blue,255,DPT5)

Ergebnis ist dann 2 * RGB. Einmal wie zuvor die vertauschten Werte und dann sofort die richtigen Werte hinterher: rgb delay

Keine Ahnung, wieso da 6 Werte kommen statt 3 wie im Protokoll.

Anderer Hinweis: Vielleicht macht du noch ein Runden nach der Berechnung (Math.round()), denn sonst wird beim Lesen ein Unterschied festgestellt durch fehlende Nachkommazahlen.

kustus commented 7 years ago

Und gleich noch eine Merkwürdigkeit. Wenn ich pure Farben über Siri spreche, dann erscheint eine Fehlermeldung und auf dem Bus kommt nix an (die Errors in der Mitte):

[2017-02-24 16:45:02] [homebridge-knx.KNX] RGBLight->customServiceAPI.knxWrite(Red,255,DPT5)
[2017-02-24 16:45:02] [homebridge-knx.KNX] RGBLight->customServiceAPI.knxWrite(Green,0,DPT5)
[2017-02-24 16:45:02] [homebridge-knx.KNX] RGBLight->customServiceAPI.knxWrite(Blue,0,DPT5)
[2017-02-24 16:45:02] [homebridge-knx.KNX] DEBUG got dest=1283
[2017-02-24 16:45:02] [homebridge-knx.KNX] DEBUG got dest=1284
[2017-02-24 16:45:02] [homebridge-knx.KNX] DEBUG got dest=1285
[2017-02-24 16:45:02] [homebridge-knx.KNX] DEBUG got dest=1283
[2017-02-24 16:45:02] [homebridge-knx.KNX] DEBUG got dest=1284
[2017-02-24 16:45:02] [homebridge-knx.KNX] DEBUG got dest=1285
[2017-02-24 16:45:02] [homebridge-knx.KNX] DEBUG got dest=1287
[2017-02-24 16:45:02] [homebridge-knx.KNX] DEBUG got dest=1283
[2017-02-24 16:45:02] [homebridge-knx.KNX] DEBUG got dest=1284
[2017-02-24 16:45:02] [homebridge-knx.KNX] DEBUG got dest=1285
[2017-02-24 16:45:02] [homebridge-knx.KNX] [ERROR] knxwrite:openTGroup: Error: request invalid
[2017-02-24 16:45:02] [homebridge-knx.KNX] [ERROR] knxwrite:openTGroup: Error: request invalid
[2017-02-24 16:45:02] [homebridge-knx.KNX] [ERROR] knxwrite:openTGroup: Error: request invalid
[2017-02-24 16:45:02] [homebridge-knx.KNX] RGBLight->customServiceAPI.getProperty(On, minValue)
[2017-02-24 16:45:02] [homebridge-knx.KNX] RGBLight->customServiceAPI.getProperty(On, maxValue)
[2017-02-24 16:45:02] [homebridge-knx.KNX] RGBLight->customServiceAPI.getProperty(On, perms)
[2017-02-24 16:45:02] [homebridge-knx.KNX] RGBLight->customServiceAPI.setValue(On,0)
[2017-02-24 16:45:02] [homebridge-knx.KNX] Value changed, updating homebridge
[2017-02-24 16:45:02] [homebridge-knx.KNX] exiting writeValueHK()
snowdd1 commented 7 years ago

Viel dank für den letzten Tipp, das mache ich noch.
Ich muss mir mal im Gira HS einen RGB-Dummy anlegen, damit ich auch sehen kann was da läuft. Ach verflixt, der hängt auch am knxd, das wird nichts.

snowdd1 commented 7 years ago

OpenTGroup-Fehler sind ein Kommunikationsproblem mit dem knxd, das kann eigentlich nichts mit der Art der Ansteuerung der App zu tun haben.

snowdd1 commented 7 years ago

Hallo Jörg @kustus ,
Was mir mehr Sorgen macht ist das 3malige Auftauchen Deiner Addressen für R,G,B in Deinem Log.

[2017-02-24 16:45:02] [homebridge-knx.KNX] DEBUG got dest=1283
[2017-02-24 16:45:02] [homebridge-knx.KNX] DEBUG got dest=1284
[2017-02-24 16:45:02] [homebridge-knx.KNX] DEBUG got dest=1285
[2017-02-24 16:45:02] [homebridge-knx.KNX] DEBUG got dest=1283
[2017-02-24 16:45:02] [homebridge-knx.KNX] DEBUG got dest=1284
[2017-02-24 16:45:02] [homebridge-knx.KNX] DEBUG got dest=1285
[2017-02-24 16:45:02] [homebridge-knx.KNX] DEBUG got dest=1287
[2017-02-24 16:45:02] [homebridge-knx.KNX] DEBUG got dest=1283
[2017-02-24 16:45:02] [homebridge-knx.KNX] DEBUG got dest=1284
[2017-02-24 16:45:02] [homebridge-knx.KNX] DEBUG got dest=1285

Ich nehme an dass 1283, 4, 5 die RGB-Adressen sind, 7 ist "On" und funkt irgendwie dazwischen.

Im Code wird über das Array der Set-Adressen für das jew. Characteristic iteriert und der Wert an alle Adressen geschickt. Da scheint mir ein Wurm drin zu sein, wenn mehrere Adressen für verschiedene Nicht-HomeKit-Characteristics vorhanden sind. Das gucke ich mir noch an.

kustus commented 7 years ago

Ich müsste mir den Teil der Implementierung erst mal richtig anschauen und ein paar Debug-Ausgaben hinzufügen und den Fall durchspielen. Leider scheint es keinen richtigen Debugger zu geben. Vielleicht komme ich dieses WE mal dazu.

snowdd1 commented 5 years ago

stale