Na starém Pentiu III mi běží skladiště fotek, které se mi již nevejdou do notebooku, na diskovém poli. Druhá hlavní služba, kterou poskytuje je stream televizních kanálů do domácí sítě. V minulosti jsem používal vlastní řešení v podobě getstream, ale obsluha byla zbytečně složitá a nahrávání pomocí gnome-dvb-daemon stálo za houby. Pak jsem objevil XBMC a TVheadend. Vše funguje, jen bych rád, aby se počítač sám zapínal před nahráváním nočních pořadů. Bohužel suspend na něm nefunguje korektně, zato má v BIOS Wake on Alarm. S tím už jsem jednou koketoval a nefungovalo to, protože bylo třeba zaškrtnou i Wake on PME, pak se rozběhlo i WoL. Teď skriptování.
Tady máme pěkný návod, který se ale věnuje uspávání, to se mě nehodí, zkoušel jsem různé nejapné nápady a nakonec se poučil na odkazu k MythTV z výše zmíněné stránky a utvořil hybrid mezi oběma. Nuže:
nano /etc/init.d/wakeup pojmenujte libovolně nekonfliktně, já jsem to ponechal, abych nemusel měnit celý skript.
Vložte řádky:
#!/bin/sh
### BEGIN INIT INFO
# Provides: wakeup
# Required-Start:
# Required-Stop:
# Default-Start:
# Default-Stop: 0 1 6
# Short-Description: Start NTP daemon
### END INIT INFO
PATH=/sbin:/bin:/usr/sbin:/usr/bin
. /lib/lsb/init-functions
NAME=wakeup
case $1 in
stop)
# Make it wakeup from ethernet
ethtool -s eth0 wol g
echo PCI0 >/proc/acpi/wakeup
echo 1 > /timer
# bootup system 60 sec. before timer
safe_margin=240
# modyfy if different location for tvheadend dvr/log path
cd ~hts/.hts/tvheadend/dvr/log
######################
start_date=0
stop_date=0
current_date=`date +%s`
for i in $( ls ); do
tmp_start=`cat $i | grep '"start":' | cut -f 2 -d " " | cut -f 1 -d ","`
tmp_stop=`cat $i | grep '"stop":' | cut -f 2 -d " " | cut -f 1 -d ","`
# check for outdated timer
if [ $((tmp_stop)) -gt $((current_date)) -a $((tmp_start)) -gt $((current_date)) ]; then
# take lower value (tmp_start or start_date)
if [ $((start_date)) -eq 0 -o $((tmp_start)) -lt $((start_date)) ]; then
start_date=$tmp_start
stop_date=$tmp_stop
fi
fi
done
wake_date=$((start_date-safe_margin))
echo $start_date >> /timer
echo $wake_date >> /timer
# set up waleup alarm
if [ $((start_date)) -ne 0 ]; then
echo 2 >> /timer
echo 0 > /sys/class/rtc/rtc0/wakealarm
echo $wake_date > /sys/class/rtc/rtc0/wakealarm
fi
exit 0
;;
*)
echo "Usage: $0 {stop}"
exit 2
;;
esac
Spusťte: chmod 755 /etc/init.d/wakeup a update-rc.d wakeup defaults
Nyní se před každým vypnutím a restartem (a přihlášení jediného uživatele, když jsem tam dal i jedničku) zapíše do nvram čas probuzení počítače.
Po každé nahrávce má počítač nařízeno vypnout, ale to někdy jistě nebude rozumné, pojistíme se:
nano ~hts/shutdown.sh
Obsahuje znovu ten ověřovací kód, lehce pozměněný konec:
#!/bin/sh
# Here you can invoke your script for recording's post-processing
#exec <your_script.sh>
sleep 20
safe_margin=240
cd ~hts/.hts/tvheadend/dvr/log
######################
start_date=0
stop_date=0
current_date=`date +%s`
for i in $( ls ); do
tmp_start=`cat $i | grep '"start":' | cut -f 2 -d " " | cut -f 1 -d ","`
tmp_stop=`cat $i | grep '"stop":' | cut -f 2 -d " " | cut -f 1 -d ","`
# check for recording now
if [ $((tmp_stop)) -gt $((current_date)) -a $((tmp_start)) -lt $((current_date)) ]; then
exit 0
fi
# check for outdated timer
if [ $((tmp_stop)) -gt $((current_date)) -a $((tmp_start)) -gt $((current_date)) ]; then
# take lower value (tmp_start or start_date)
if [ $((start_date)) -eq 0 -o $((tmp_start)) -lt $((start_date)) ]; then
start_date=$tmp_start
stop_date=$tmp_stop
fi
fi
done
wake_date=$((start_date-safe_margin))
idle=$((current_date+1200))
# >0 is when no recording is planned, wake_date is sub zero value
if [ $((wake_date)) -lt $((idle)) - $((wake_date)) -gt 0]; then
exit 0
fi
#sudo /usr/sbin/pm-suspend &
sudo /sbin/shutdown -h now &
Tento soubor musí být spustitelný uživatelem hts, resp. tím, který spouští tvheadend a zařadíte jej ve webovém rozhraní do postprocessingu. Zajistí, že se počítač nevypne, pokud se právě nahrává, či další nahrávka bude začínat do dvaceti minut.