TVheadend na starém počítači

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.

Napsat komentář

Vaše e-mailová adresa nebude zveřejněna. Vyžadované informace jsou označeny *