Van itten egy set-top-box-nak csúfolt eszköz, amit az AH adott, hogy nézhessük a mindigTV-t.
Nem úszta meg a fogyasztásmérést, mert 95% stand-by van.
Döbbenet: fogyasztása 3.3W készenlétben, bekapcsolt állapotban 3.7W.
De most jól kitoltam vele.
Van nekem egy Raspberry 3B+ elrejtve a TV mögött, főbb funkciói, hogy Kodi van rajta, ezzel tudunk mozizni is,
hálózati hangkártya, jellemzően Spotify-t szólaltat meg a hifin (most éppen Hifiberry HAT van benne), illetve rá van kötve egy Lide60 szkenner, ezzel tudnak szkennelni a családtagok, amolyan "SANE over network" módon 🙂
Na most, a Kodi úgy volt összerakva, hogy inaktív állapotában 15 perc után kilép (észrevehető CPU terhelést jelent ugyanis, amit fogyasztást is fölöslegesen). Mikor a TV-t a HDMI-1 bemenetre állítom, az alkalmasan megbarkácsolt szkriptek miatt elindul a Kodi, lehet vele szórakozni, aztán ha kell, elmegy pihenni...
Raspberry 0.8W-ot fogyaszt, ha épp semmi dolga.
Vettem egy ilyen relémodult: https://hobbielektronikabolt.hu/spd/AA025/Rele-modul-2-reles-5V
Kifigyeltem, hogy a Hifiberry milyen jeleket használ a GPIO-n, és úgy találtam, a a GPIO22 és GPIO23 jó lesz nekem a relék vezérlésére.
Sajnos a Hifiberry-n nem meg tovább a GPIO, így vettem a bátorságot és 2 pici tüskesort beforrasztottam, egy duplát a GPIO22-23-ra, és egy másikat, ahol az 5V és GND egymás mellett van.
https://webofthings.org/wp-content/uploads/2016/10/pi-gpio.png

Így csináltam két "kapcsolt" konnektort, amit ezután szoftveresen tudok idomítani. Most elég lett volna egy is, de ha már két relé van.... 🙂
Dobozom nincs, amibe beszereljem, így a modulnak azt a részét, ahol hálózati feszültség jelen van, alaposan betekertem szigetelőszalaggal. Nem akarok sem tüzet, sem bírkózást.
Nem nagyon csinos a szerkezet, de szerencsére rejtve van, nem látszik, így nekem elég, ha jól működik.
És akkor innen indul a kaland. Be kell állítani, hogy a GPIO 22, 23 az van, és méghozzá kimenet.
Ezt egy "setupgpio" nevű szkriptbe tettem:
#!/bin/sh
echo "22" > /sys/class/gpio/export
echo "23" > /sys/class/gpio/export
sleep 1
echo "out" > /sys/class/gpio/gpio22/direction
echo "out" > /sys/class/gpio/gpio23/direction
echo "1" > /sys/class/gpio/gpio22/value
echo "1" > /sys/class/gpio/gpio23/value
Ez beállítja, hogy a 22 és 23 kimenetek, és biztosítja, hogy a relék kikapcsolt állapotban legyenek.
A settopboxot a 23-as vezérelte konnektorba sikerült dugni, így a ki- és bekapcsolását végző darabkák rendre:
root@butyok:/opt# cat boxkikapcs
#!/bin/sh
echo "1" > /sys/class/gpio/gpio23/value
root@butyok:/opt# cat boxbekapcs
#!/bin/sh
echo "0" > /sys/class/gpio/gpio23/value
Terminálból már gyönyörűen lehet kapcsolgatni a settopboxot.
A többi dolog arra épül, ahogy a TV üzenget a HDMI-n keresztül, innen lehet tudni, hogy kikapcsoltam a TV-t, mozizni akarunk, vagy TV-t nézni.
Volt már egy kodi.service beállítva automatikus indításra, ebben az execstart-ot átírtam (majd persze a systemctl daemon-reload is megtörtént):
root@butyok:/opt# cat /etc/systemd/system/multi-user.target.wants/kodi.service
[Unit]
Description = Kodi Media Center and cecmonitor
After = remote-fs.target network-online.target
Wants = network-online.target
[Service]
User = pi
Group = pi
Type = simple
#ExecStart = /usr/bin/kodi
ExecStart=/opt/cecmonitorloop
Restart = on-abort
RestartSec = 5
[Install]
WantedBy = multi-user.target
A cecmonitorloop egy " külső" ciklus, ami a cec-client kimenetét beküldi egy másik szkript bemenetére.
root@butyok:/opt# cat cecmonitorloop
#!/bin/sh
/opt/setupgpio
while true
do
/usr/bin/cec-client |/opt/cecmonitor
echo Restarted in monitor loop >>/home/pi/cec.log
sleep 1
done
A "belső" rész pedig, amelyik dolgozik:
root@butyok:/opt# cat cecmonitor
#!/bin/sh
kodi="TV (0) sets stream path to physical address 1000"
box="TV (0) sets stream path to physical address 2000"
kikapcs="TV (0): power status changed from 'on' to 'standby'"
waiting=true;
while $waiting; do
read cecinput
echo $cecinput >>/home/pi/cec.log
case $cecinput in
*$kodi*) /opt/boxkikapcs
/opt/startkodi
;;
*$kikapcs*) /opt/boxkikapcs
/opt/stopkodi
waiting=false
killall cec-client
;;
*$box*) /opt/boxbekapcs
/opt/stopkodi
waiting=false
killall cec-client
;;
esac
done
Amikor a Kodi elindul, szintén monitorozni kezdi a CEC üzeneteket (hiszen csak így tudom irányítani a TV távirányítójával, nincs rajta billentyűzet/egér), ezzel még nincs baj. Viszont amikor kilép, röviddel utána megbolondul a cec-client, így gondoskodnom kell róla, hogy újrainduljon a cec-client, és ezzel a "belső" rész is.
Ezért a killall, meg a kilépés a ciklusból.
A kodi leállítása:
root@butyok:/opt# cat stopkodi
#!/bin/bash
INSTANCE=$(pidof -x "kodi.bin_v7")
if [ ! -z "$INSTANCE" ]; then
echo stopping Kodi... >>/home/pi/cec.log
kill $INSTANCE
sleep 3
else
echo Kodi not running... >>/home/pi/cec.log
A kodi indítása:
root@butyok:/opt# cat startkodi
#!/bin/bash
INSTANCE=$(pidof -x "kodi.bin_v7")
if [ -z "$INSTANCE" ]; then
echo starting Kodi... >>/home/pi/cec.log
/usr/bin/kodi &
else
echo Kodi already running... >>/home/pi/cec.log
Itt fontos megjegyezni, hogy a usr/bin/kodi után ott a '&' jel, így a szkript fut tovább, nem áll meg a végrehajtás a Kodi bezárásáig.
Egyelőre úgy néz ki, ez így jól működik, ha bekapcsolom a TV-t, HDMI2-re váltok, megkapja a tápot a vevőegység.
Ha HDMI1-re váltok, lekapcsolja, és elindul a Kodi. Ha kikapcsolom a TV-t, akkor Kodi is ki lesz lőve, és a vevőegység is lekapcsolódik. Teljesen, nem 3.3W-os készenléti módba.
Juhéjj... 😃