NEWS
Hyperion Adapter
-
Moin. Ich bin gerade über deinen Adapter gestolpert und hatte gehofft damit etwas basteln zu können, was man z.B. mit dem originalen Ambilight und Philips Hue - Lampen machen kann.
Nämlich beides miteinander koppeln.
Nun habe ich aber ein selbstgebasteltes Ambilight mit einem Raspberri Pi und einem WS2801 LED-Streifen und Xiaomi Yeelight LED Wifi Leuchtmittel.
Wäre es möglich mit dem Adapter anstelle des Schreiben-Befehls auch einen relativ oft aktualisierenden Lese-Befehl auszuführen?
Damit könnte ich dann die aktuellen Farben des Ambilights auslesen und diese auf meine anderen Leuchten übertragen.
-
Nee. Sowas geht nicht. (AFAIK) Evt. später mit hyperion.ng. (https://hyperion-project.org/threads/hy … werk.1095/) Ich glaube ich habe ein ähnliches Setup. (ca. 1500 ws2812b + 6 rgb hues.) Die hues laufen bei mir in einem eigenem hyperiond zu dem weitergeleitet wird. (https://hyperion-project.org/wiki/Contr ... le-Devices)
Ist aber bisher keine zufriedenstellende Lösung, da man alle hyperiond ausbremsen muss, um die lahmen hues nicht zu überfahren.
Obwohl... Du hast mich auf eine Idee gebracht. Das wäre zwar ein neuer Adapter, aber wie wäre es mit einem "hyperion-client" adapter. Der nimmt dann die hyperion daten über "rawudp" und steuert anhand von "Regeln" bestimmte iobroker States. Sowas wie hyperion rückwärts. Das geht dann nur mit einer total geringen wiederhohlfrequenz, die man allerdings über eine art "dubble-buffering" asynchron zu der tatsächlichen hyperion wiederhohlfrequenz laufen lassen könngte. Dann könnte man so "fancy" dinge bauen wie komplementäre Beleuchtung. (Wenn Hyperion alle leds "schwarz" macht, leuchten bestimmte LEDs "weiß" oder sowas.) Der Film geht aus, der Abspann läuft, alles wird Dunkel aber dafür gehen dann die hues an, oder sowas...
Wenn daran Interesse besteht, dann bitte ich darum mal eine "Wunschliste" zu erstellen.
-
Ich habe mal ein wenig rumgespielt:
Folgende "Device" Section der hyperion conf veranlasst hyperiond seine daten (hier 144 leds) via udp auszugeben.
// DEVICE CONFIGURATION "device" : { "name" : "MyHyperionConfig", "type" : "udpraw", "output" : "127.0.0.1:33333", "rate" : 1000000, "maxpacket" : 3600, "protocol" : 0, "colorOrder" : "rgb" },
Hier mal ein mini Test. Die daten kommen als sequenziell als buffer. Jeweils R,G,B per LED. Folgender Code zum probieren:
var PORT = 33333; var HOST = '127.0.0.1'; var dgram = require('dgram'); var server = dgram.createSocket('udp4'); server.on('listening', function () { var address = server.address(); console.log('RAWUDP HyperionData von: ' + address.address + ":" + address.port); }); server.on('message', function (message, remote) { console.log("Erhalte Nachrichten von :" + message.length/3 + " RGB Leds"); }); server.bind(PORT, HOST);
Ergibt dann folgende Ausgabe:
... Erhalte Nachrichten von :144 RGB Leds Erhalte Nachrichten von :144 RGB Leds Erhalte Nachrichten von :144 RGB Leds Erhalte Nachrichten von :144 RGB Leds Erhalte Nachrichten von :144 RGB Leds Erhalte Nachrichten von :144 RGB Leds Erhalte Nachrichten von :144 RGB Leds Erhalte Nachrichten von :144 RGB Leds Erhalte Nachrichten von :144 RGB Leds Erhalte Nachrichten von :144 RGB Leds Erhalte Nachrichten von :144 RGB Leds Erhalte Nachrichten von :144 RGB Leds Erhalte Nachrichten von :144 RGB Leds Erhalte Nachrichten von :144 RGB Leds Erhalte Nachrichten von :144 RGB Leds Erhalte Nachrichten von :144 RGB Leds ...
Am einfachsten, ich lege für jede LED einen State an, der den jeweiligen RGB Wert aufnimmt. Die Regeln kann man dann über den javascript Adapter bauen. Da ich allerdings, wie in meinem vorherigen Post schon beschrieben, nicht davon ausgehe das iobroker 144 (oder gar 1500) States 20 mal pro Sekunde updaten kann muss man sich da ein paar Gedanken machen, wie man verhindert iobroker zu "überfahren".
-
Sorry dass ich mich jetzt erst wieder melde. Ich musste erstmal meinen ioBroker neu aufsetzten. Irgendwie hab ich den wohl mit einer zweiten Installation oder ähnlichem zerschossen und jetzt musste ich erst wieder bei 0 anfangen da gar nichts mehr ging.
Ich hab mir das jetzt mal angeschaut.
Das Problem mit dem output-typ "udpraw" ist, dass der den Output dann nicht mehr auf typ "ws2801" hat und somit das Ambilight am TV nicht mehr funktioniert.
Also muss irgendwie eine andere Variante her um das ganze auszulesen.
Es würde theoretisch ja eine einzelne LED reichen die ausgelesen wird, da der output auf einzelne RGB-Led Leuchtmittel ( E27 ) ja sowieso auf eine Farbe beschränkt ist.
Im "Control" - Ordner unter Objects im ioBroker sind die Werte ja eigentlich schon hinterlegt. Das Problem ist nur, dass es nur Felder sind um Werte zu schreiben. Also müsste man hyperion irgendwie dazu bewegen können, gleichzeitig zum WS2801 - LED Streifen, die Werte auch über einen gewählten Port an eine bestimmte Adresse zu übertragen.
-
Wieso geht das nicht? Einfach eine 2. Hyprioninstanz starten und zu dieser forwarden.
In meiner aktuellen Konfiguration laufen aktuell 3 Hyperioninstanzen bei denen die ws2812b via Arduino und usb laufen. (jeweils [12x12]144 leds) eine Hyperioninstanz die über einen esp8266 seine Daten bekommt (meine iolykta, gibts n thread hier im forum zu) mit [12x12]144 leds. Eine Instanz mit 508 leds, die über einen teensy gefüttert wird, eine instanz die 6 rgb hues antreibt. Testweise hab ich auch mal einen Sphero als Leuchtmittel eingebunden. (da ist dann aber beim Probieren der Akku gestorben) ausserdem habe ich noch ca. 250 leds an meinem Fernseher /htpc hängen, dessen hyperiond dann ausserdem zu den anderen instanzen forwarded. Läuft weitestgehend ruckelfrei und synchron über alle instanzen. (bis auf die hues) bunt gemischt. 4x arduino via rs232 @500kps, teensy via rs232 @20mps, iolykta (esp8266) via wifi udp, hues über wifi tcp->bridge.
Also für deinen "usecase":
Du legst 2 Konfgurations Files an.
Der 1. File beinhaltet deine ws280x Konfiguration. (Mit LED Layout)
Die Ports sind dann (default): 19444 und 19445 für json bzw. proto
Der 2. File beinhaltet deine "udpraw" Konfiguration. Dort legst du im Layout für jede deiner Yeelight LEDs eine LED an.
Die Ports sind hier dann (z.B.): 19446 und 19447
Nun trägst du in File 1 die Ports aus File 2 als forwards ein:
"forwarder" : { "proto": [ "127.0.0.1:19447" ], "json" : [ "127.0.0.1:19446" ] },
Nun startest du die beiden Instanzen jeweils mit hyperiond /pfad/zum/configfile.conf
Autostart: mal den passenden systemd service file suchen -> kopieren -> anpassen
Was noch fehlt, währe der Code um die Hyperion UDP Nachrichten in ioBroker States zu verwandeln. Aber denn könnte ich ja bauen…
Performanter und imho einfacher umzusetzen, dann aber jedoch weniger flexibel wäre die Variante, die Hyperion UDP Nachrichten direkt an die Yeelights zu senden. Aber das hat dann nix mehr mit iobroker zu tun...
Ich habe das mal für 1762 leds (ws2812b) auf nem raspi gemacht, der dann udp daten direkt über den stripe ausgegeben hat. Hier mal meine (noch fehlerhafter) "proof-of-concept" python code:
`#!/usr/bin/env python3 """ Hyperion Proxy """ import itertools import socket import time from neopixel import * # LED strip configuration: LED_COUNT = 1762 # Number of LED pixels. LED_PIN = 18 # GPIO pin connected to the pixels (18 uses PWM!). #LED_PIN = 10 # GPIO pin connected to the pixels (10 uses SPI /dev/spidev0.0). LED_FREQ_HZ = 800000 # LED signal frequency in hertz (usually 800khz) LED_DMA = 10 # DMA channel to use for generating signal (try 10) LED_BRIGHTNESS = 255 # Set to 0 for darkest and 255 for brightest LED_INVERT = False # True to invert the signal (when using NPN transistor level shift) LED_CHANNEL = 0 # set to '1' for GPIOs 13, 19, 41, 45 or 53 # the buffer for receiving incoming messages BUFFER_SIZE = 4096 def receive_next(sock): "Repeatedly tries receiving on the given socket until some data comes in." print("Waiting to receive data...") while True: try: return sock.recvfrom(BUFFER_SIZE) except socket.timeout: print("No data received yet: retrying.") pass def receive_and_send_one(sock): input_data, addr = receive_next(sock) message = input_data for i in xrange(0,len(message),3): red = ord(message[i]) green = ord(message[i+1]) blue = ord(message[i+2]) print("(" + str(red) + "," + str(green) + "," + str(blue) + ")" ) strip.setPixelColor(i,Color(red,green,blue)) strip.show() def start(): "Runs the server." sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) sock.settimeout(5) # seconds sock.bind(("0.0.0.0",33333)) print("Listening...") try: for i in itertools.count(1): receive_and_send_one(sock) finally: print("Shutting down.") sock.close() if __name__ == "__main__": strip = Adafruit_NeoPixel(LED_COUNT, LED_PIN, LED_FREQ_HZ, LED_DMA, LED_INVERT, LED_BRIGHTNESS, LED_CHANNEL) strip.begin() start()` Gruß[/i]
-
Hallo,
ich bekomme den Adapter nicht zum laufen, habe ich alles richtig gemacht? Anbei die Screenshots
ioBroker 3.4.7
Hyperion Adapter 0.0.9
Cloud connection 2.6.2
Der Cloud Adapter funtioniert mit anderen Geräten einwandfrei.
Ich habe im Cloudadapter ein Smart Gerät angelegt und dafür das Hyperion Object LightSwitch benutzt und als Fernseher benannt, Alexa findet dieses auch, aber sie sagt, Fernseher unterstützt das nicht.
Wenn ich als Object ein Effect wähle, funtioniert es, daher dachte ich, ich muss als role ein Button definieren, doch da kommt das gleiche heraus, bis auf, dass wenn ich den Button im ioBroker anklicke, meine LEDs weiß leuchten und mit clear ( nicht clear all !!!) gehen diese wieder aus.
Kann mir jemand bitte weiterhelfen, danke.
2493_instanzen.png
2493_instanzen2.png
2493_unbenannt1.png -
Hallo maisbier,
was ist denn dein Ziel? Was möchtest du mit dem Sprachbefehl aktivieren/erreichen?
Ich bin zwar frischer Anfänger hier auf dem Board und irgendwie auch in dem Thema, habe mich aber die letzten Tage mit dem Adapter ein bisschen näher beschäftigt…nutzerseitig.
Herzliche Grüße
Cutter
-
Hey, sorry für die späte Antwort, habe schon aufgegeben.
Ich habe momentan noch die HAbridge laufen, diese simuliert eine HUE bridge, dort wird auf den Sprachbefehl
"Alexa, schalte TV Grün an" das ein Script ausgelöst, das hyperion sagt, mach die LEDs grün, nur brauch man so für jede Farbe ein eigenes Script.
Der Hyperion Adapter soll das gleiche machen, nur einfacher und auch dimmbar, Effekte wären auch schön.
Läuft es bei dir?
Ich habe auch die neueste Version des Adapters ausprobiert, ohne Erfolg.
-
Wenn daran Interesse besteht, dann bitte ich darum mal eine "Wunschliste" zu erstellen. `
Hi,
ist das noch aktuell? Danke erst einmal für deinen Adapter zum Schreiben auf den hyperion. Ich hätte riesiges Interesse auch Werte zu lesen, bzw ab zugreifen. Um Lampen mit einen bestehenden hyperion Ambilight zu steuern.
Wunschvorstellung. Definition von welcher LED bis zu welcher LED rechts/links/oben/unten läuft, eventuell auch abgestufter. Aber für den Anfang reicht sicher die 4er Unterteilung. Hier einen Mischwert erzeugen und im iobroker Adapter Hexadezimal (#FF0000) zu schreiben. Danach kann man per Script Hues/Yeelights/whatever mit dem Wert betanken. Wichtig wäre hier sicher auch ne Timing-Einstellung um die Lampen nicht zu überfordern.
edit:
Was mir noch einfällt. Ich habe immer wieder bei keinem Eingangssignal, den bekannten "Farbverlauf", hier würde mich interessieren ob ich irgendwie automatisieren kann, das bei diesem Bild/Signallosigkeit alle LED's ausgehen?
Grüße Marco
-
Hallo,
bin noch neu, aber ich habe den adapter installiert, läuft einwandfrei!
Nun leuchtet 10sek lang Knight Rider Effekt wenn jemand anruft ^^
Vielen Dank dafür!
-
Wow. Das hier hab ich voll verpasst. Sry. Danke für die PN moeff. Wie kann ich helfen?
-
ok. Hatte den Ansatz bisher mangels Interesse aufgegeben. Ich hab den hyperion-client Adapter hier im Rohbau. Was noch fehlt ist der Part: welches hyperion hyperion light steuert welches iobroker teil. Und wie soll es das tun. Eine config Page oder halt ein config file muss her, wo man dies definiert. Da kann man dann auch ein wenig logik reinpacken. Dies nochmal durch event zu jagen und über js adapter die Umrechnung zu erledigen würde so auch gehen. Förderlich für die Latenz ist das nicht. Erste tests mit 2 hues haben so ca. 2fps mit starkem "jitter" bis zu 1 sek gegeben. (Direkt client Adapter -> setforeignstate im hue adapter, ohne virtuellen state und js adapter) War mir zu langsam…
Hab dann mal die hues direkt an hyperion rangeschraubt. War ähnlich lahm. Für mich unbrauchbar. Zigbee scheint hier der limitierende Faktor zu sein.
Könnt ihr sowas trotzdem brauchen?
@moeff: Der Farbverlauf ist der startup effekt den du in der hyperion config einstellen kannst. Kann das sein, das bei "kein signal" der hyperiond abbügelt? Was meinst du mit: "kein signal"? Oder: Du hast via hyperion adapter einen effekt gesetzt und dein tv (oder was auch immer hyperiond füttert) hat eine höhrere priorität. Sobald dein tv aufhört daten zu liefern, läuft wieder der Effekt. Ein clear all sollte dann dein Problem lösen.
@moeff: zu deinem Ansatz die led`s runterzumischen: das gehört in die hyperiond config. Hyperion macht ja genau das. Es bildet dein hochauflösendes Bild auf eine beliebig definierte kleinere Zielauflösung ab. Ein nachträgliches aggregieren der pixel in iobroker ist unnötig.
-
Sry, dass ich das verpasst habe. Klar läuft das. Bis auf die tatsache, das immer die Helligkeit auf 100% geht. Dazu ist mir bisher nix kluges eingefallen. Hier mal n Video.: https://youtu.be/SlkrtXXg3Ac
-
@moeff: Der Farbverlauf ist der startup effekt den du in der hyperion config einstellen kannst. Kann das sein, das bei "kein signal" der hyperiond abbügelt? Was meinst du mit: "kein signal"? Oder: Du hast via hyperion adapter einen effekt gesetzt und dein tv (oder was auch immer hyperiond füttert) hat eine höhrere priorität. Sobald dein tv aufhört daten zu liefern, läuft wieder der Effekt. Ein clear all sollte dann dein Problem lösen.
@moeff: zu deinem Ansatz die led
s runterzumischen: das gehört in die hyperiond config. Hyperion macht ja genau das. Es bildet dein hochauflösendes Bild auf eine beliebig definierte kleinere Zielauflösung ab. Ein nachträgliches aggregieren der pixel in iobroker ist unnötig.
Hi,
danke für die ausführliche Antwort. Mein HDMI Splitter sendet dieses Signal, wenn kein Eingangsignal anliegt. Wenn man irgendwo definieren könnte, wenn "dieses Bild" gesendet wird = LED's aus. Der Starteffekt ist bekannt, aber nicht gemeint
Was ich mir für einen hyperion Adpater wünschen würde ist folgendes, Bilder sagen mehr als 1000 Worte:
https://www.youtube.com/watch?v=BCIRJhc-JHE
bzw hier https://www.youtube.com/watch?v=4bpcFC7AJX0
eventuell ist iobroker auch am ende unnötig als "handler". Man könnte sicher auch direkt vom raspi (mit hyperion) die werte an Hue oder Yeelight übergeben. Aber da geht dann wieder zigbee Problematik los, dafür würde ich den iobroker eigentlich guten "handler" für alles nutzen.
Grüße Marco
-
Ja, so ähnlich habe ich das auch hinbekommen. Aber sieht auf den Videos fetter aus als in real weil: Es wurden Videos mit langsamen farb und kontrast änderungen gewählt. Das input lag ist somit weniger sichtbar. Aber schau mal genau hin. Sowohl lag, als auch jitter sind vorhanden. Bei starken helligkeits und kontraständerungen (quasi alles was geschnitten wurde), fällt dies aber total auf und nervt. Ausserdem wurde hier hyperion direkt als quelle benuzt. Also ohne iobroker als proxy. Da kommt dann noch der iobroker lag hinzu. Ausserdem können die hues einen command, der ihnen sagt zwischen 2 farben zu faden. Hyperion nutzt das. Der hue adapter auch? Also: Deine Videos stellen ein optimales setup unter optimalen Bedingungen dar. Wir können nur langsamer sein.
Edit: Kann man super sehen, wenn man die hues mit den ws2812 vergleicht. Hues hängen teilweise mehr als 1 sek.
-
Sry, dass ich das verpasst habe. Klar läuft das. Bis auf die tatsache, das immer die Helligkeit auf 100% geht. Dazu ist mir bisher nix kluges eingefallen. Hier mal n Video.: https://youtu.be/SlkrtXXg3Ac `
Hey, danke für die Rückmeldung, meine Frage ist, habe ich im iobroker alles richtig konfiguriert, da es ja leider nicht funktioniert. Siehe Screenshots.
Danke
-
Jo. Da stimmt was nicht mit deiner Zuordnung der Funktionen und Räume.
Deinem State fehlen die Datenpunkte. So muss es aussehen:
Bitte drann denken, dass da noch der Bug / die Eigenart vorhanden ist, dass die Helligkeit immer auf 100% umgerechnet wird. Du musst also mit 2 Kommandos erstmal Farbe einstellen und dann Helligkeit runter regeln. (Wie im Video.) Also der Farbwinkel (hue) stimmt aber level.dimmer nicht. Ich habe den Fehler noch nicht gefunden. Eigentlich erwarte ich, das die Farben,wenn sie vom cloud adapter kommt die werte für: sat > 0 und lum < 100 erhält. Denn beides, entwerder sat = 0 oder lum = 100 bedeuten für mein Verständniss Weiss. (FFFFF)
Ich habe mir extra n Set hues zugelegt um zu lernen wie genau die das machen und warum das bei dem Hue Adapter funktioniert. Bin aber noch nicht dazu gekommen.
Gruß
-
> Nun leuchtet 10sek lang Knight Rider Effekt wenn jemand anruft ^^
Hatte ich auch mal. Über den Fritzbox Adapter. Hatte da noch n Fehler drinn, dass er den Effekt nicht 10 Sekunden sondern genau so lange wie das Telefonat gedauert hat lief. Das hat dann, da diese Installation meine Küchenarbeitsplatte beleuchtet, so derart für Verstimmung zuhause gesorgt, das ich es ganz sein lassen musste. :?
-
Ok. Some news. Ich habe mal den client-adapter wie weiter oben beschrieben mal sowiet weiterentwickelt, dass ich erste Tests fahren konnte.
Zum testen habe ich eine Bestehende Hyperion Konfiguration mit 144 leds ausprobiert. Und siehe da: ioBroker hat ein limit von 200 state changes pro 3 sekunden. Wenn man dieses limit reißt, verhällt sich ioBroker recht eigenartig. (Unsubscribe from all states, except system's, because over 3 seconds the number of events is over 200 (in last second 0))
Aber 144 Leds ist ja auch ein Overkill. Eher realistisch sind da 2 - 3.
Problematischer ist da eher der "jitter" also die variabilität der Latenz.
Leider bin ich heute erst spät zuhause, um diese Spielerei mal in action zu sehen.
Aber ich befürchte, das dies langsam sein wird. Ich werde berichten…
-
Hi,
das geht ja schneller als gedacht!
Ich würde mich zum Testen bereitstellen! Wenn du den Adapter per git frei gibst. Wichtig wäre eben noch eine Mischung zu Scripten, LED1-20 = Mischfarbe, LED 21-50, Mischfarbe etc., dass kann man sicher auch selber scripten.
Zum Test kann man ja erstmal mit einer LED arbeiten. Wichtig wäre wirklich zwecks Jitter und Latenz klar zu kommen und vor allem auch natürlich den iobroker nicht zu überlasten.
Grüße Marco