Hallo zusammen,
Habt ihr schonmal versucht eigene Effekte für euer Ambilight zu programmieren? Ist das möglich? Oder zumindest bestehende zu ändern?
Ich hätte darauf Lust, weiß nur nicht, wo ich anfangen soll..
Hallo zusammen,
Habt ihr schonmal versucht eigene Effekte für euer Ambilight zu programmieren? Ist das möglich? Oder zumindest bestehende zu ändern?
Ich hätte darauf Lust, weiß nur nicht, wo ich anfangen soll..
Eigene Effekte Ambilight? Schau mal ob du hier fündig wirst!
Ja, es ist beides möglich.
Ich denke das einfachste für dich wäre dich mal in bestehende einzulesen um mal eine Idee zu kriegen, wie die auzusehen haben.
Wenn mir jemand einen Lagerfeuer effekt machen könnte wäre ich sehr glücklich
schliess ein zu kleines netzteil an und warte 30 sekunden
Ich denke das einfachste für dich wäre dich mal in bestehende einzulesen um mal eine Idee zu kriegen, wie die auzusehen haben.
Gibt es zu den Effekte entsprechende Sourcedateien? Wo sind die gespeichert?
Effekte sind in /opt/hyperion/effects/
Bzw. hier: https://github.com/tvdzwan/hyperion/tree/master/effects
Die Pyton files steuern den Effekt. Mit den Json Files werden Parameter übergeben. Ich hab vor einiger Zeit mal das Mood-Blobs Skript erweitert. Mit den Kommentaren die schon drinnen waren ging das auch relativ straight forward.
Im Prinzip hast du ein Array für die Farben jeder einzelnen LED
[Anzahl LEDs][3] (3 für Rot grün blau)
führst auf diesen irgendwelche Berechnungen durch
for i in range(hyperion.ledCount):
amplitude = max(0.0, math.sin(-amplitudePhase + 2*math.pi * blobs * i / hyperion.ledCount))
colors[3*i+0] = int(colorData[3*i+0] * amplitude)
colors[3*i+1] = int(colorData[3*i+1] * amplitude)
colors[3*i+2] = int(colorData[3*i+2] * amplitude)
und gibts das an hyperion weiter
Die Berechnungen befinden sich in einer Schleife die durch hyperion abgebrochen werden kann.
Ich grab mal den Thread aus
Ich habe ein paar Python Module geschrieben, mit welchen man seine Effekte testen kann. Damit kann man sich den Effekt durch eine Gui anzeigen lassen und auch die Daten direkt an den hyperion Server schicken um sich live anzusehen was der Effekt macht.
Schaut einfach mal hier: https://github.com/tvdzwan/hyperi…development-kit
Klingt recht Interessant :thumbs1:
Falls weitere Effekte geschrieben werden könnte man ja eine Sammlung starten!?
Ich grab mal den Thread ausIch habe ein paar Python Module geschrieben, mit welchen man seine Effekte testen kann. Damit kann man sich den Effekt durch eine Gui anzeigen lassen und auch die Daten direkt an den hyperion Server schicken um sich live anzusehen was der Effekt macht.
Schaut einfach mal hier: https://github.com/tvdzwan/hyperi…development-kit
Servus,
coole Sache mit den Modulen, danke fürs bereitstellen!
Ich wollte mir einen statischen Effekt schreiben der nur drei Farben anzeigt (linke Seite des TV rot, oben grün, rechts weiss und unten wieder grün). Das klappt auch einwandfrei in deinem Effect-Developement-Kit, wird wunderbar auf der GUI angezeigt und auch korrekt an Hyperion übertragen.
Nur: wenn ich dann die .py und .json Dateien auf den Raspberry übertrage und den Effekt laufen lasse bekomme ich folgende Meldung:
Traceback (most recent call last):
File "/storage/hyperion/effects/fca.py", line 27, in <module>
hyperion.setColor(led_data)
RuntimeError: Length of bytearray argument should be 3*ledCount
Ich hab es wie folgt umgesetzt:
led_data = bytearray()
led_data = bytearray(24 * (255,0,0))
led_data += bytearray(30 * (0,255,0))
led_data += bytearray(24 * (255,255,255))
led_data += bytearray(30 * (0,255,0))
""" send the data to hyperion """
hyperion.setColor(led_data)
Alles anzeigen
Hast du mir nen Tipp wie das bytearray aussehen muss, dass die ersten 24 LEDs rot, die nächsten 30 grün, die folgenden 24 weiss und die letzten 30 wieder grün leuchten? Ich komm leider nicht drauf. Die anderen Effekte übertragen soweit ich das verstehe immer led_data an über ein array an alle LEDs oder?
Vielen Dank und schöne Grüße
Daniel
Hi...
ja, dieses Effect-Developement sieht auf den ersten Blick leichter aus als es ist...
als ich mir das mal angeschaut habe, habe ich versucht Falggen darzustellen (abgeguckt vom BobDroid),
herausgekommen ist sowas:
import hyperion
import time
import colorsys
vertical = 35
horizontal = 60
flagtype = hyperion.args.get('flagtype', 1)
color1 = hyperion.args.get('color1', (0,0,0))
color2 = hyperion.args.get('color2', (255,0,0))
color3 = hyperion.args.get('color3', (255,255,0))
if flagtype == 1:
first_color = vertical + (horizontal/3)
second_color = first_color + horizontal/3
third_color = vertical+horizontal+vertical + (horizontal/3)
fourth_color = third_color + (horizontal/3)
if flagtype == 0:
first_color = vertical /3
second_color = vertical /1.5
third_color = second_color + first_color + horizontal + first_color
fourth_color = third_color + (vertical/3)
ledData = bytearray()
for i in range(hyperion.ledCount):
if i < first_color:
ledData += bytearray(( color3 ))
elif i >= first_color and i < second_color:
ledData += bytearray(( color2 ))
elif i >= second_color and i < third_color:
ledData += bytearray(( color1 ))
elif i >= third_color and i < fourth_color:
ledData += bytearray(( color2 ))
else:
ledData += bytearray(( color3 ))
# Start the write data loop
while not hyperion.abort():
hyperion.setColor(ledData)
time.sleep(100.0)
Alles anzeigen
Veröffentlicht habe ich das nie, weil es eigentlich nie fertig geworden ist, das mit:
muss auch irgendwie eleganter zu lösen sein, aber vllt. hilfts dir da...
//edit: wahrscheinlich ist da noch viel mehr, was man eleganter lösen kann *duck*und*weg*
Super, vielen Dank BooStar!
Hat mir in der Tat geholfen
Weiß zwar nicht genau was das Problem war an meiner Umsetzung aber mit deiner Inspiration hab ich es irgendwie umgeschrieben sodass es nun funktioniert
Natürlich auch quick and dirty und alles andere als elegant aber das ist mir egal solang es funktioniert.
Grüße
Du hast noch kein Benutzerkonto auf unserer Seite? Registriere dich kostenlos und nimm an unserer Community teil!