Hyperion

Wat?

Hyperion, een DYI-implementatie van Philips Ambilight, maar dan opgepompt tot iets veel toffers! Je kunt op dit filmpje zien wat ik bedoel. Ok mooi, nu je overtuigd bent, ga ik uitleggen hoe ik dit heb gebouwd en waar ik tegen aan liep! Ik ga geen implementatiebeschrijving geven, volg dat filmpje op Youtube van DrZzs maar :)

Doelen

Ik had een aantal doelen:

  • 'ver-hyperionnen' van alles wat door m'n versterker gaat
  • Toekomstvastheid, dus behoud van een eventueel 4k60fps input
  • Integratie met domoticz
Nare bijkomstigheid: ik gebruik CI+ voor m'n tv, omdat ik Ziggo heb en geen fan ben van de software op die Ziggo box. Dat betekent echter dat mijn tv-signaal nooit door de versterker gaat (SPDIF-uit naar versterker, dat dan weer wel), maar tv-signaal kan ik dus niet onderscheppen. Evenmin het signaal van smart-apps op m'n tv, om evidente redenen. Mocht je een set-top box hebben, die via HDMI aan een versterker hangt, dan heb je dat probleem niet (los van eventuele native smart tv apps, daar nog wel). Ik heb overwogen een Amazon 4k Fire stick aan te schaffen voor de apps, maar dat ging wat ver (zou het probleem van de native tv apps wel verhelpen overigens).

Benodigdheden

Dit heeft geleid tot volgende boodschappenlijstje (slechts voorbeelden, je kan 100% zeker goedkoper vinden) :

  • Raspberry Pi 3b+ (had ik nog, maar elke RPI werkt wel). Liefst in een zwarte case, als hij achterop een zwarte tv komt
  • USB Capture stick (link)
  • HDMI splitter active/active (link)
  • WS2812B-ECO led strip (link)
  • Female Barrel connector (link)
  • 5V 10A DC adapter (link)
  • DC verlengkabel (link)
  • LED strip hoekstukjes (link)
  • Jumper wires - male-to-male (link)
  • Dubbelzijdige klittenbandjes (link, zoiets zou moeten werken)
  • Plakband (geen link, gewoon smalle, transparante huis-tuin-en-keuken plakband
  • Een opgeofferde micro-USB laadkabel van een RPI (of iets anders)
  • Zwarte marker stift

Enkele opmerkingen

Last but not least: nog enkele opmerkingen:

  • Hoekstukjes: die moet je als setje kopen. Je kunt enkel de printplaatjes kopen, zonder bevestigingsmateriaal, maar dan moet je solderen en zonder flux (had ik niet) kun je dit echt vergeten!
  • Stroomvoorziening berekenen: je stroomvoorziening moet je berekenen - 0,06A per led. Ik heb 114 leds, dus 6,8A (piek belasting). Ik power echter ook de RPI van deze adapter, dat is 2,5A. Samen kom je op 9,3A (op 5V). Mijn adapter is 5V/10A, dus dit leidde ertoe dat ik 30Leds/meter wilde, ipv mijn originele 60Leds/meter. Met die laatste was ik met mijn huidige voeding niet uitgekomen
  • Kabeloffer: ja, je gaat een micro-USB laadkabel moeten opofferen. Het liefst één die charge-only doet, dus geen data wire heeft. Als je die niet hebt, maar alleen 1 met data, dan kun je die ader afknippen, waar je hem stript
  • Waarom geen capture-loopback: ik wilde 4k60fps behouden, mocht ik ooit de TV en versterker daarvoor hebben. De meeste capture-loopbacks zijn beperkt tot 1080/60fps, of 4k30fps. Hyperion heeft geen 4k input nodig, dus ik heb een 4k60fps HDMI active-active splitter gekocht, die ik op 1 kant aansluit naar m'n tv en de andere naar een 720p capture stick (via usb op de RPI). Dit werkt perfect! Let wel op active-active, sommige splitters kunnen maar 1 output tegelijkertijd aan

Raspberry Pi voorbereiden

Ik hoop dat je een RPI klaar hebt voor gebruik, waar je via SSH op kunt aanloggen, anders moet je daar maar even op Googlen. Daarna moet je nog een paar stappen doorlopen ter voorbereiding:

  1. GPIO staat standaard uitgeschakeld. Voer sudo raspi-config uit en ga naar interfaces > I2C en enable die. Reboot de RPI en GPIO zou actief moeten zijn
  2. Download op je RPI de laatste versie van: https://github.com/hyperion-project/hyperion.ng/releases/download/2.0.0-alpha.10/Hyperion-2.0.0-alpha.10-Linux-armv7l.deb. Check dus even die git op de laatste release
  3. Installeer prerequisite package: libcec-dev (sudo apt install libcec-dev). Je krijgt 2 versies, 4 en 6 (of 2 en 4?) anyway, die moet je allebei installeren, anders start Hyperion niet
  4. Installeer Hyperion met: sudo dpkg -i Hyperion-2.0.0-alpha.10-Linux-armv7l.deb
  5. Na installatie moet hyperion root-rechten krijgen om GPIO uit te mogen lezen: sudo systemctl disable --now hyperiond@pi && sudo systemctl enable --now hyperiond@root
  6. Herstart de RPI
  7. Ga nu met een browser naar http://:8090. Als het goed is krijg je de interface

Stappenplan van aansluiten

Als je alles in huis hebt, en tot zover hebt gelezen kun je aan de gang. Ik zal een kort overzicht maken van de stappen van aansluiting:

  1. Disconnect je tv en leg hem face-first op een beschermde tafel
  2. Meet de led-strip uit op de tv (BEGIN LINKSBOVENIN EN GA NAAR RECHTSBOVEN, dat is de volgorde waarin Hyperion de LED-strip verwacht). Let dus op de pijltjes op de LED-strip. Haal de plakbeschermingsstrip niet weg bij het uiteinde, het is makkelijker als die er nog in zit voor het hoekstukje. Schuif het hoekstukje erin en knijp hem dicht. Ga nu rond de tv totdat je bij je beginpunt komt, hier hoef je hem niet op aan te sluiten, gewoon een open eindje dus. Zorg voor het mooiste effect ervoor dat de LED-strip recht zit en overal even ver van de randen van de tv zit.
  3. Linksboven hangt je LED-strip input connector, daar zal ook je RPI moeten plaatsen. Plak deze op een handige plek, niet te ver uit de hoek als je tv iets bol loopt en monteer hem met dubbelzijdige klittenband
  4. Monteer de capture USB stick in één van de USB poorten op de RPI en plaats daarin de HDMI out van de HDMI splitter. Nu weet je waar de HDMI splitter kan komen, zoek een plekje en monteer die ook met dubbelzijdige klittenband
  5. Een extra dingetje wat me opviel is dat bijna alle active-active HDMI splitters voeding nodig hebben. Gelukkig beschikt de Raspberry PI 3 over genoeg USB poorten, dus ik voed die HDMI splitter vanuit de RPI
  6. Je hebt nu een HDMI splitter, capture stick en RPI gemonteerd op je tv. De HDMI-in komt later, als de tv weer hangt. Zorg dus dat je hem makkelijk toegankelijk houdt (ingang richting de rand van de tv, bijvoorbeeld)
  7. De stroomadapter eindigt op een male barrel. Daar gaat een verlengkabel op (female dus) die ook weer eindigt op een male. Ik pak een female barrel connector en sluit ik nog niet aan, maar ik doe daar de rode en witte ader van de led-strip op, de groene laat ik even voor wat het is. Ik gebruik hiervoor jumper wires in de connector van de LED-strip en het andere uiteinde van de jumper wires gaan regelrecht in de + en - van de barrel connector (let wel op de polariteit, het is immer gelijkstroom)
  8. De tweede set aan rode en witte draden, haal ik uit de opgeofferde micro-USB kabel, die USB-connector + 10cm aan kabel knip ik af en strip ik (2cm) en daarvan gaan de rode en witte in dezelfde barrel connector (rood bij rood, wit bij.. juist)
  9. Vervolgens plaats ik een klein stukje dubbelzijdige klittenband op de tv waar die (aangesloten) barrel connector moet komen en plaats ik de connector
  10. Het aansluiten van de barrel connector doe ik wederom als de tv hangt, dus dit komt later
  11. Sluit 1 groene (of welke kleur je leuk vind) middels een jumper wire aan tussen de groene adres van de LED-strip en GPIO 18 van de RPI. Dekseltje moet dus wel open zijn hiervoor
  12. (Optioneel) Pak nu de zwarte marker stift, en kleur de hoekstukjes zwart die in het zicht liggen, dat scheelt annoyance :)

Configuratie Hyperion

Als Hyperion aangesloten is, kun je aan de gang met de configuratie via http://:8090.

  1. Als eerst moet je het standaard wachtwoord aanpassen, doe dit
  2. Bij 'LED Hardware' moet je een LED-instance aanmaken. Geef hiervoor het aantal LED's op dat je aan alle kanten van de tv hebt geplakt, alsmede het type wat je hebt gebruikt (ws281x)
  3. Je kunt Hyperion ook inzetten als LED-wall, maar wij willen hem als TV-achtergrond hebben, dus kies bij LED-layout voor "LED-raam", of iets soortgelijks. Dit moet uiteraard matchen met wat je bij LED besturing hebt ingevuld
  4. Bij 'Sources' activeer je USB-opname, als het goed is, herkent hij de USB-stick al
  5. Het tabblad 'Effecten' gebruik je in essentie niet, skip die
  6. Het tabblad 'Beeldverwerking' gebruik je wel, zet daar 'gekleurd achtergrondlicht' uit, anders bij een zwarte scene, worden je LED's wit... vond ik raar... Daarnaast pas ik hier de gamma's aan van 1.0 naar 2.5, zodoende is zwart beeld echt zwart, niet donkerblauw bijvoorbeeld.
  7. Eventueel verder naar beneden scrollende kom je bij 'verzachten', hier kun je timings nog wat aanpassen als je dat wilt
  8. Bij het tabblad 'Capturing hardware' kun je de refresh rate van de USB-stick overeen laten komen met de output. Dit haalt eventuele vertragingen van LED's op het beeld weg. Ik kreeg het beste resultaat als ik de input van 25 naar 30Hz veranderde
Als het goed is werkt nu alles. Zo niet? Kijk even bij Logs (zet hem even op debug, klik Save). Je kan ook bovenin op het tv-icoontje klikken en live video aanzetten. In dit overzicht reageren de LED's niet, maar je kan wel valideren dat je capture device goed werkt. Nu kun je eventuele uitstekende kabeltjes die voor schaduwen zorgen wegwerken met plakbandjes of iets dergelijks en daarna is het genieten!

Domoticz

Ik hoor je denken: je zei iets over domoticz toch? Ja dat klopt, maar is niet heel veel of fancy. Ik wilde Hyperion aan en uit kunnen zetten via domoticz. Dat kan door middel van het aan en uitschakelen van de LED-instance. Je zou natuurlijk ook alles spanningsloos kunnen maken, maar de door mij gebruikte RPI doet ook inkomend VPN, die moet dus aan blijven, daarom kies ik voor controle van de instance. Dus aan en uit is voor mij genoeg.

  1. Uiteindelijk kwam ik niet uit de syntax voor het JSON-commando in python, dus ik heb mijn heil gevonden in shell scripts (ach het werkt). Maak 2 files aan op de domoticz-box, genaamd: 'hyperion-on.sh' en 'hyperion-off.sh'
  2. In het on-script, zet je: curl -sS -X POST -H 'Content-Type:application/json' -H 'Accept:application/json' -d '{"command": "componentstate", "componentstate":{"component":"ALL","state":true}}' http://(HyperionIP):8090/json-rpc
  3. In het off-script, zet je: curl -sS -X POST -H 'Content-Type:application/json' -H 'Accept:application/json' -d '{"command": "componentstate", "componentstate":{"component":"ALL","state":false}}' http://(HyperionIP):8090/json-rpc
  4. Ga nu naar domoticz, maak een dummy device aan van het type 'schakelaar'
  5. Zet in de aan-actie van de switch: script:///home/pi/scripts/hyperion-on.sh
  6. Zet in de uit-actie van de switch: script:///home/pi/scripts/hyperion-off.sh
  7. Save en klaar
De schakelaar schakelt hyperion in en uit, afhankelijk van de switch. Top! Enige nadeel is dat de switch op deze manier asynchroon schakelt, Als je Hyperion via de Hyperion website uit zet, weet domoticz hier niets van en loopt domoticz achter. Dat geeft echter niets, van uit naar uit = NoOp, de 2e actie is wel een Op. Aan is idem. Dus hooguit moet je een extra toggle van de switch doen en dan werkt het weer!

Al met al, supertof project, erg leuk en de resultaten zijn stunning!