felixganzer / ioBroker.hyperion_ng

adapter for control hyperionng for iobroker
MIT License
4 stars 5 forks source link

Verstellen der Helligkeit ist nicht möglich (Adapter schmiert ab) #1

Closed Cosmicbase closed 3 years ago

Cosmicbase commented 3 years ago

Hallo,

gerne ich will ich meine Erfahrungen mitteilen und so bei der Entwicklung des Adapters unterstützen.

Meine Platform:

Hyperion (NG) 9.0 Plattform: Raspbian OS RAM: 1.8 GB Node.js: v14.15.1 NPM: 6.14.8 Kernel: Linux 5.4.83-v7l+ PRETTY_NAME="Raspbian GNU/Linux 10 (buster)" NAME="Raspbian GNU/Linux" VERSION_ID="10" VERSION="10 (buster)" VERSION_CODENAME=buster ID=raspbian ID_LIKE=debian

Leider schmiert mir der Adapter in ioBroker ab sobald ich unter Adjustment die Helligkeit verstelle. Bitte um Hilfe!

Gruß, Markus

felixganzer commented 3 years ago

Kannst du den Fehler dokumentieren, indem du das Loglevel auf Debug stellst und den Fehler reproduzierst?

Cosmicbase commented 3 years ago

Hier ist der log. Adapter stürzt ab sobald die Helligkeit verstellt wird.

hyperion_ng.0 2021-01-29 16:03:25.377 info (12464) setup finished hyperion_ng.0 2021-01-29 16:03:25.293 info (12464) create effects hyperion_ng.0 2021-01-29 16:03:25.145 info (12464) read out priorities finished hyperion_ng.0 2021-01-29 16:03:25.143 info (12464) create priorities hyperion_ng.0 2021-01-29 16:03:24.883 info (12464) create priorities hyperion_ng.0 2021-01-29 16:03:24.601 warn (12464) This value will not be set in future versions. Please report this to the developer. hyperion_ng.0 2021-01-29 16:03:24.601 warn (12464) State value to set is invalid for hyperion_ng.0.0.priorities.0-COLOR.value: The state contains the forbidden properties HSL, RGB! hyperion_ng.0 2021-01-29 16:03:24.598 info (12464) create priorities hyperion_ng.0 2021-01-29 16:03:24.327 info (12464) read out Adjustments finished hyperion_ng.0 2021-01-29 16:03:23.831 info (12464) read out components finished hyperion_ng.0 2021-01-29 16:03:23.099 info (12464) socket is connected hyperion_ng.0 2021-01-29 16:03:22.919 info (12464) create Control Parameter hyperion_ng.0 2021-01-29 16:03:22.861 info (12464) starting. Version 0.1.10 in /opt/iobroker/node_modules/iobroker.hyperion_ng, node: v14.15.1, js-controller: 3.1.6 host.Raspi4T 2021-01-29 16:03:21.461 info instance system.adapter.hyperion_ng.0 started with pid 12464 host.Raspi4T 2021-01-29 16:02:51.441 info Restart adapter system.adapter.hyperion_ng.0 because enabled host.Raspi4T 2021-01-29 16:02:51.441 info instance system.adapter.hyperion_ng.0 terminated with code 0 (NO_ERROR) hyperion_ng.0 2021-01-29 16:02:50.845 info (12337) Terminated (NO_ERROR): Without reason hyperion_ng.0 2021-01-29 16:02:50.842 info (12337) terminating hyperion_ng.0 2021-01-29 16:02:50.833 error at processImmediate (internal/timers.js:461:21) hyperion_ng.0 2021-01-29 16:02:50.833 error at Immediate. (/opt/iobroker/node_modules/iobroker.js-controller/lib/adapter.js:5388:34) hyperion_ng.0 2021-01-29 16:02:50.833 error at HyperionNg.emit (events.js:315:20) hyperion_ng.0 2021-01-29 16:02:50.833 error at HyperionNg.onStateChange (/opt/iobroker/node_modules/iobroker.hyperion_ng/main.js:614:34) hyperion_ng.0 2021-01-29 16:02:50.833 error at Hyperion_API.setAdjustment (/opt/iobroker/node_modules/iobroker.hyperion_ng/hyperion_API.js:216:20) hyperion_ng.0 2021-01-29 16:02:50.833 error at require (internal/modules/cjs/helpers.js:88:18) hyperion_ng.0 2021-01-29 16:02:50.833 error at Module.require (internal/modules/cjs/loader.js:952:19) hyperion_ng.0 2021-01-29 16:02:50.833 error at Function.Module._load (internal/modules/cjs/loader.js:725:27) hyperion_ng.0 2021-01-29 16:02:50.833 error at Function.Module._resolveFilename (internal/modules/cjs/loader.js:880:15) hyperion_ng.0 2021-01-29 16:02:50.833 error - /opt/iobroker/node_modules/iobroker.hyperion_ng/main.js hyperion_ng.0 2021-01-29 16:02:50.833 error - /opt/iobroker/node_modules/iobroker.hyperion_ng/hyperion_API.js hyperion_ng.0 2021-01-29 16:02:50.833 error Require stack: hyperion_ng.0 2021-01-29 16:02:50.833 error (12337) Error: Cannot find module 'type-of-is' hyperion_ng.0 2021-01-29 16:02:50.826 error - /opt/iobroker/node_modules/iobroker.hyperion_ng/main.js hyperion_ng.0 2021-01-29 16:02:50.826 error - /opt/iobroker/node_modules/iobroker.hyperion_ng/hyperion_API.js hyperion_ng.0 2021-01-29 16:02:50.826 error Require stack: hyperion_ng.0 2021-01-29 16:02:50.826 error (12337) unhandled promise rejection: Cannot find module 'type-of-is' Unhandled 2021-01-29 16:02:50.825 error promise rejection. This error originated either by throwing inside of an async function without a catch block, or by rejecting a promise which was not handled with .catch(). hyperion_ng.0 2021-01-29 16:02:50.821 info (12337) set Adjustment brightness of instance 0 to 20 hyperion_ng.0 2021-01-29 16:02:46.533 info (12337) setup finished hyperion_ng.0 2021-01-29 16:02:46.403 info (12337) create effects hyperion_ng.0 2021-01-29 16:02:46.243 info (12337) read out priorities finished hyperion_ng.0 2021-01-29 16:02:46.239 info (12337) create priorities hyperion_ng.0 2021-01-29 16:02:45.953 info (12337) create priorities hyperion_ng.0 2021-01-29 16:02:45.668 warn (12337) This value will not be set in future versions. Please report this to the developer. hyperion_ng.0 2021-01-29 16:02:45.667 warn (12337) State value to set is invalid for hyperion_ng.0.0.priorities.0-COLOR.value: The state contains the forbidden properties HSL, RGB! hyperion_ng.0 2021-01-29 16:02:45.664 info (12337) create priorities hyperion_ng.0 2021-01-29 16:02:45.384 info (12337) read out Adjustments finished hyperion_ng.0 2021-01-29 16:02:44.874 info (12337) read out components finished hyperion_ng.0 2021-01-29 16:02:44.145 info (12337) socket is connected hyperion_ng.0 2021-01-29 16:02:43.988 info (12337) create Control Parameter hyperion_ng.0 2021-01-29 16:02:43.956 info (12337) starting. Version 0.1.10 in /opt/iobroker/node_modules/iobroker.hyperion_ng, node: v14.15.1, js-controller: 3.1.6

Cosmicbase commented 3 years ago

Wenn ich in der vorgegebenen Instanz 0 die Helligkeit unter Adjustments überschreiben will kommt es zum Crash. Ich versteh es einfach nicht. Ich kann alle Farben und Effekte auswählen. Aber ich finde das Verstellen der Helligkeit nur unter Adjustments, was aber glaube ich nicht die richtige ist. Das ist ja die fest eingestellte G Helligkeit der LEDs.

Muss aber auch sagen das ich insgesamt 3 Instanzen habe. Instanz 0 First Led Hardware Instance Instanz 1Lampe Instanz 2 Bilderrahmen

Instanz 1 und 2 werden über Esp8266 angesteuert.

Bitte um Hilfe. Wo finde ich den Datenpunkt für das stufenlose verstellen der Helligkeit? Wird die Helligkeit etwa über den RGB Wert gesteuert?

felixganzer commented 3 years ago

Also eigentlich ist der Wert unter Adjustments der richtige Wert. Für die einzelnen Effekte und Colors kann man diese bei hyperion nicht extra einstellen.

Kannst ja nochmal einen LOG posten. Bitte.

Ich habe den Bug behoben, welcher bei dem neusten js-Controller zu abstürzen führt.

Cosmicbase commented 3 years ago

Meine in Hyperion eingestellte Helligkeit im meiner First Led Hardware Instance ist 85%

Ich wollte jetzt z.B. ein Blau mit 10% Helligkeit simulieren und habe die 85 mit 10 überschrieben. Dabei stürzt der Adapter ab und startet anschließend neu. Und weil ich mir in der Vis Farb Buttons angelegt habe und einen Schieberegler für die Helligkeit wäre es super wenn ich die Buttons regeln kann.

hyperion_ng.0 2021-01-31 22:10:57.439 info (30050) Connection closed
hyperion_ng.0 2021-01-31 22:09:57.564 info (30050) setup finished
hyperion_ng.0 2021-01-31 22:09:57.432 info (30050) create effects
hyperion_ng.0 2021-01-31 22:09:57.272 info (30050) read out priorities finished
hyperion_ng.0 2021-01-31 22:09:57.271 info (30050) create priorities
hyperion_ng.0 2021-01-31 22:09:56.996 info (30050) create priorities
hyperion_ng.0 2021-01-31 22:09:56.719 info (30050) create priorities
hyperion_ng.0 2021-01-31 22:09:56.439 info (30050) read out Adjustments finished
hyperion_ng.0 2021-01-31 22:09:55.923 info (30050) read out components finished
hyperion_ng.0 2021-01-31 22:09:55.164 info (30050) socket is connected
hyperion_ng.0 2021-01-31 22:09:54.946 info (30050) create Control Parameter
hyperion_ng.0 2021-01-31 22:09:54.913 info (30050) starting. Version 0.1.10 in /opt/iobroker/node_modules/iobroker.hyperion_ng, node: v14.15.1, js-controller: 3.1.6
hyperion_ng.0 2021-01-31 22:09:22.741 info (29884) Terminated (NO_ERROR): Without reason
hyperion_ng.0 2021-01-31 22:09:22.739 info (29884) terminating
hyperion_ng.0 2021-01-31 22:09:22.709 error at processImmediate (internal/timers.js:461:21)
hyperion_ng.0 2021-01-31 22:09:22.709 error at Immediate. (/opt/iobroker/node_modules/iobroker.js-controller/lib/adapter.js:5388:34)
hyperion_ng.0 2021-01-31 22:09:22.709 error at HyperionNg.emit (events.js:315:20)
hyperion_ng.0 2021-01-31 22:09:22.709 error at HyperionNg.onStateChange (/opt/iobroker/node_modules/iobroker.hyperion_ng/main.js:614:34)
hyperion_ng.0 2021-01-31 22:09:22.709 error at Hyperion_API.setAdjustment (/opt/iobroker/node_modules/iobroker.hyperion_ng/hyperion_API.js:216:20)
hyperion_ng.0 2021-01-31 22:09:22.709 error at require (internal/modules/cjs/helpers.js:88:18)
hyperion_ng.0 2021-01-31 22:09:22.709 error at Module.require (internal/modules/cjs/loader.js:952:19)
hyperion_ng.0 2021-01-31 22:09:22.709 error at Function.Module._load (internal/modules/cjs/loader.js:725:27)
hyperion_ng.0 2021-01-31 22:09:22.709 error at Function.Module._resolveFilename (internal/modules/cjs/loader.js:880:15)
hyperion_ng.0 2021-01-31 22:09:22.709 error - /opt/iobroker/node_modules/iobroker.hyperion_ng/main.js
hyperion_ng.0 2021-01-31 22:09:22.709 error - /opt/iobroker/node_modules/iobroker.hyperion_ng/hyperion_API.js
hyperion_ng.0 2021-01-31 22:09:22.709 error Require stack:
hyperion_ng.0 2021-01-31 22:09:22.709 error (29884) Error: Cannot find module 'type-of-is'
hyperion_ng.0 2021-01-31 22:09:22.702 error - /opt/iobroker/node_modules/iobroker.hyperion_ng/main.js
hyperion_ng.0 2021-01-31 22:09:22.702 error - /opt/iobroker/node_modules/iobroker.hyperion_ng/hyperion_API.js
hyperion_ng.0 2021-01-31 22:09:22.702 error Require stack:
hyperion_ng.0 2021-01-31 22:09:22.702 error (29884) unhandled promise rejection: Cannot find module 'type
felixganzer commented 3 years ago

Der stürzt ab, weil er eine zusätzliche Biblothek nicht findet, welche ich nutze um zu bestimmen, welches Adjustment geändert wurde. Ich schaue heute abend mal, ob ich die Abhängigkeiten in meinem Adapter richtig definiert habe.

Cosmicbase commented 3 years ago

Das sind ja super Neuigkeiten. Also mein Iobroker läuft sauber und auch Hyperion läuft super. Habe in diesem Bezug mehrere Hyperion 9 PRs probiert, sowie die Hauptversion. Bei allesamt stürzt der Hyperion Adapter ab. Aber eben nur wenn ich die Helligkeit verstellen will. Und eben diese Helligkeit wo im Adapter hinterlegt ist, ist die Grundhelligkeit meiner Instanz. Ich dachte mir das es noch einen anderen Datenpunkt geben muss. Die Grundhelligkeit will ich ja nicht dauerhaft ändern. Wenn ich ein Blau an Hyperion sende möchte ich wie es auch in der Hyperion App möglich ist stufenlos die Helligkeit der jeweiligen Farbe ändern. Vielleicht müssen noch Abhängigkeiten mit dem Adapter zusammen installiert werden...

felixganzer commented 3 years ago

Habe jetzt die Abhängigkeiten hoffentlich richtig gemacht. Mir ist das nicht aufgefallen, weil ich einen Adapter laufen habe, welcher diese installiert hat. Bei npm steht die Bibliothek jetzt als Abhängigkeit drin.

Im schlimmsten Fall Adapter ganz löschen und neu installieren.

Cosmicbase commented 3 years ago

So weit klappt es mit dem verstellen der Helligkeit sehr gut. Nur leider überschreibt er die Helligkeit der Instanz dauerhaft. Wenn ich jetzt im Adapter eine statische Farbe in der Helligkeit von 85 auf 20 % verstelle und anschließend ausschalte und meinet wegen den USB Grabber zum Grabben des Fire TV 4 Sticks aktiviere, hat mein TV Bild auch 20%. Dies ist natürlich nicht beabsichtigt, denn meine TV Wiedergabe habe ich eigentlich im Hyperion Web Interface auf 85% gestellt siehe Bild. Wenn ich im Adapter von 85 auf 20% ändere werden LEDs dunkler, aber der Wert 85% ändert sich im WebIf nicht und bleibt gleich. Muss der Adapter nach dem clear von einer Farbe dem Hyperion eine default Helligkeit von 85% wieder zurückgeben oder bzw. die 85% gar nicht überschreiben? Das dann wie wenn ich nur was ausführe aber nicht überschreibe.

Oder wird die Helligkeit einer statischen Farbe nur über einen RGB Wert geschickt. Zum Beispiel ein Dunkelblau (dunklere LEDs) wie Hellblau (hellere LEDs). Damit hätte ja das Adjustment der Instanz nichts mehr viel zu tun.

Wie in dem Screenshot zu sehen ist unten ein Helligkeitsregler in der Hyperion App. Mit dem kann ich die Helligkeit einer Farbe ändern. Diese Helligkeit überschreibt nicht meine 85% der Instanz. Vielleicht weißt du was ich meine. Wenn du willst können wir auch über WhatsApp eine Conversation führen. Vielleicht macht es das ein wenig leichter...

Screenshot_20210202_112818_nl hyperion hyperionfree Screenshot_20210202_113153_com android chrome Screenshot_20210202_113613_com android chrome

felixganzer commented 3 years ago

Ja ich glaube du hast recht.

Ich habe für die Programmierung des Adapters mir darüber keine Gedanken gemacht, und erstmal stumpf die API von Hyperion abgearbeitet.

Für mich sieht es auch so aus, als würde die APP über die Helligkeit die RGB Werte ändern. Wenn man das kurz bei einem Farbrad testet, dann ergibt sich der Farbton aus dem Verhältnis von RGB und die Helligkeit ist der absolut value zwischen 0 und 255.

Dann sollte das obere Symbol die Sättigung sein, welche nach kurzer Recherche ein bissle anders berechnet wird.

Wenn das Prinzip so funktioniert, sollte es im Prinzip nicht die "reale" Helligkeit beeinflussen, sondern nur die gefühlte.

Das könnte man im Prinzip in den Adapter implementieren. Das dauert nur, weil ich aktuell wenig Zeit habe.

Ich habe das alles nicht ausprobiert, weil den adapter nur dafür verwende das Ambilight an und auszuschalten. Es scheinen aber sehr viele Leute Hyperion zur allgemeinen Ansteuerung von Lampen zu verwenden.

Cosmicbase commented 3 years ago

Gut das du weißt was ich meine. Zumindest hast du den Adapter schon mal up to Date was Abstürze anbelangt. Diese Helligkeit über den RGB Wert wäre eine Tolle Sache. So kann ich über einen Schieberegler oder Farbrad die Farben je nach Geschmack Smooth machen. Wäre toll wenn das kurzfristig möglich wäre. Gerne würde ich den Adapter im Hyperion Forum publizieren. Ich bin doch schon einige Jahre aktives Mitglied und einer der wenigen die Hyperion und WLed aktiv in ioBroker nutze.

Und wenn man die Helligkeit via Schieberegler in der App bedient wird kein Effekt geändert und auch keine Instanz-Helligkeit, sondern nur die Farbhelligkeit.

Ich frag mal kurz einer der Devs im Forum ob das Zitat: Wenn man das kurz bei einem Farbrad testet, dann ergibt sich der Farbton aus dem Verhältnis von RGB und die Helligkeit ist der absolut value zwischen 0 und 255.

so stimmt.

Cosmicbase commented 3 years ago

Hier die Antwort von @Paulchen-Panther vom Hyperion Forum.

Antwort: Wie die App das berechnet kann ich dir nicht sagen. Die ist closed source. Es wird ein color command an Hyperion gesendet. Also RGB Werte. Korrekt: Der Schieberegler darüber ist Sättigung.

felixganzer commented 3 years ago

Du kannst den Adapter gerne publizieren.

Die Frage an sich ist, wie man diese Funktionalität in dem Adapter umsetzt, zwecks Datenpunkte.

Folgender Vorschlag:

Unter Control gibt es zwei zusätzliche Datenpunkte. Einmal Farbe Helligkeit und Sättigung. Wenn eine Farbe über RGB gesetzt wird, werden diese Werte berechnet und aktualisiert.

Der Wert bei setColorRGB wird zukünftig nicht mehr resettet, sondern bleibt stehen.

Wenn die Helligkeit oder die Sättigung geändert wird, werden die RGB Werte aktualisiert, aber erstmal nicht nach Hyperion geschickt, um das ganze zu entprellen. Sondern, durch auslesen und neu setzen der RGB Werte die Übertragung an Hyperion ausgelöst.

Dabei wird noch nicht berücksichtigt, wenn die Instanz, welche Farbe da eingestellt ist. Dies kann man aber nachpflegen.

Das wäre in Summe recht schnell umzusetzen. Die Frage ist, ob das für den Nutzer brauchbar ist. Kann das nicht sagen, weil ich es nicht nutze.

felixganzer commented 3 years ago

Ich glaube in der App wird der HSL Farbraum verwendet. Die Variante kann man auch fahren.

Farbwert H, Sättigung S, Lightness L

Cosmicbase commented 3 years ago

OK und wie kann ich die HSL Variante nutzen? Musst du hierfür die Datenpunkte von RGB nach HSL ändern? 2 zusätzliche Datenpunkte würden auch helfen. Je nach dem was du für sinnvoll hältst.

felixganzer commented 3 years ago

Bin gleich fertig. Funktioniert schon, muss noch die Doku schreiben.

Die HSL Datenpunkte kommen hinzu. Wenn diese geändert werden, wird setColorRGB überschrieben und dann es an Hyperion geschickt. War recht simple.

felixganzer commented 3 years ago

Online

Cosmicbase commented 3 years ago

Werde es nachher testen. Danke für die schnelle Entwicklung.

Cosmicbase commented 3 years ago

Also meine ersten Tests per Direkteingabe im Adapter waren positiv. 👍

Cosmicbase commented 3 years ago

Weitere Infos erhaltet ihr hier https://www.hyperion-project.org/threads/hyperion-ng-in-iobroker-einbinden-und-steuern.10498/.