HTPC. Re-worked.

autor - Úno.14, 2017 - Hardware, Linux

Po mnoha letech s MythTV přišla chvíle na mírný upgrade: frontendem se stalo Kodi a TVHeadend nahradilo MythTV v roli backendu pro nahrávání z DVB-T. Výhodou oproti dřívější instalaci je jednodušší konfigurace tuneru DVB-T v TVHeadendu a mnohem jednodušší nastavení automatického vypínání. Navíc Kodi vypadá poněkud lépe než MythTV.


Aktuální sestava zůstává shodná (ceny cca z roku 2009):

  • MB: Zotac ION ITX-A-E (Intel Atom N330 dual core, nVidia ION, ext. zdroj) (Kč 4 040).
  • RAM: 2 GB DDR2 DIMM Kingston 800 MHz (Kč 935).
  • HDD: 2 TB HDD Caviar Green WD20EADS SATA (Kč 4 375) + systém na SSD A-Data SP310 mSATA – 32GB (Kč 800).
  • ODD: žádná.
  • Skříň: Lian Li PC-Q07 (Kč 1 800).
  • Větrák: Noctua NF-P12-1300 12×12 cm + regulátor otáček Zalman Fan Mate 2 (Kč 550).
  • DVB-T: AVerMedia Volar (cca Kč 1 000).
  • Klávesnice a myš: něco ze starých zásob s USB RF (cca Kč 800).

Systém je Lubuntu 16.40 LTS – tedy s pětiletou podporou pro bezpečnostní aktualizace.

Instalace a konfigurace

Instalace je poměrně bezproblémová, stačí pročíst příslušné Wiki stránky k Lubuntu, Kodi a TVHeadendu.

Mírné problémy nastaly s laděním DVB-T kanálů (zvaných „služeb“) v TVHeadendu, nakonec jsem frekvence příslušného vysílače nastavil ručně, viz sekce „Muxes“. (Možná stačilo nastavit Bandwidth na 8 MHz a Guard Interval na 1/4 a spustit automatické hledání, kdo ví.)

Automatické vypínání / zapínání

Kodi podporuje automatické vypnutí (power off, suspend, atd.), včetně kontroly zda neprobíhá nahrávání, a včetně spuštění uživatelského skriptu pro uložení ‚Wake on RTC alarm‘ již v základu bez dalších doplňků – viz menu:

  • System // Settings // System // Power saving // Shutdown function – nastavení ‚suspend‘ aktivuje výchozí způsob ukončení Kodi, což v případě Lubuntu 16.04 je totéž jako ‚sudo systemctl suspend‘, tedy uspání do RAM.
  • System // Settings // TV // Power saving – nastavit ‚enabled‘, cestu k vlastnímu skriptu pro uložení RTC alarmu do BIOSu a je hotovo.

Mému záměru to bohužel nevyhovuje, neb HTPC má vícero použití: DVR (tj. Kodi + TVHeadend), NAS (sdílení nahrávek po síti) a jako běžné PC (převážně pro prohlížení webu). Výše uvedené řešení vypne HTCP i v případě, že je aktivní sdílení nahrávek po síti.

Namísto výše uvedeného jsem využil následujících doplňků Kodi:

  • doplněk Kodi Callbacks umožňuje nastavit ‚událost‘ a ‚úkol‘ – v mém případě je událostí aktivace šetřiče obrazovky v Kodi a úkolem spuštění doplňku TVHeadend Power and Recording Management.
  • doplněk TVHeadend Power and Recording Management pak zkontroluje, zda neprobíhá (či se neblíží) nahrávání z DVB-T a zda není aktivní síťová komunikace, zobrazí upozornění o blížícím se vypnutí a nakonec uloží ‚RTC alarm‘ do BIOSu a dá pokyn Kodi k vypnutí.

Snímky obrazovek napoví, co je třeba nastavit:

Uspání do RAM

Mé HTPC se bohužel při pokusu uspání do RAM ‚kousne‘. Důvodem je DVB-T tuner AverMedia. Řešení je jednoduché, před uspáním stačí z kernelu odebrat ovladač (modul) a po probuzení jej zase načíst.

Systemd po spuštění příkazu ‚systemctl suspend‘ volá sleep.target. Stačí tedy přidat service unit:

$ cat /etc/systemd/system/pm-suspend-resume.service
# Based on Arch Wiki, Sleep Hooks for systemd 

[Unit] 
Description=Local system suspend and resume actions 
Before=sleep.target 
# After resume, it "stops" the service 
StopWhenUnneeded=yes 

[Service] 
# Oneshot is important - systemd then waits for ExecStart to finish the process 
Type=oneshot 
RemainAfterExit=yes 
ExecStart=/usr/local/bin/mk_dvb-suspend.sh suspend 
# "-": failed execution is ignored 
ExecStop=-/usr/local/bin/mk_dvb-suspend.sh resume 

[Install] 
WantedBy=sleep.target

A aktivovat tuto service unit:

$ sudo systemctl reload-daemons
$ sudo systemctl enable pm-suspend-resume.service

Service unit při uspávání spustí skript v parametru ExecStart, při probuzení se spustí skript v parametru ExecStop.

$ cat /usr/local/bin/mk_dvb-suspend.sh
#!/bin/sh 
# This script is run from systemd service unit 
# dvb-suspend-resume.service 
 
PRFX="MK-DVB" 
 
log() { 
 echo "$PRFX: $@" 
} 
 
log "Running $0 as `whoami`. \$1 is : $1" 
 
if [ "$1" = "suspend" ]; then 
 
 # Stop TVHeadEnd so that DVB Aver Media may be suspended by kernel 
 /bin/systemctl stop tvheadend.service \ 
 && log "TVHeadEnd stopped." \ 
 || log "TVHeadEnd cannot be stopped." 
 
 # Unload module 
 /sbin/rmmod dvb_usb_dib0700 \ 
 && log "DVB module dvb_usb_dib0700 removed." \ 
 || log "DVB module dvb_usb_dib0700 cannot be removed." 
 
 # Keep ethernet alive for WakeOnLAN 
 /sbin/ethtool -s enp0s10 wol g 
 
 # Log some debug info 
 log "ACPI wakeup status, cat /proc/acpi/wakeup:" 
 /bin/cat /proc/acpi/wakeup 
 log "RTC Alarm status, cat /proc/driver/rtc:" 
 /bin/cat /proc/driver/rtc 
 log "Now is `date --rfc-3339=seconds`. Finished." 
 
fi 
 
 
if [ "$1" = "resume" ]; then 
 
 log "Now is `date --rfc-3339=seconds`. Resuming..." 
 
 # Insert module 
 /sbin/modprobe dvb_usb_dib0700 \ 
 && log "DVB module dvb_usb_dib0700 inserted." \ 
 || log "DVB module dvb_usb_dib0700 cannot be loaded." 
 
 # Start TVHeadEnd again 
 /bin/systemctl start tvheadend.service 
 log "TVHeadEnd service started." 
 
fi

Zbývá dodělat…

  • Automatické označkování reklam v nahrávce z DVB-T.
  • Konverze nahraného streamu MPEG-TS do něčeho úspornějšího, např. H-264.
  • Publikovat zde v článku nastavení ukončení/spuštění Kodi skrze klávesové zkratky (přiřazení kláves v OpenBoxu, skript pro komunikaci s Kodi).
  • Nastavení Kodi, aby umělo zobrazovat i nahrávky uložené v podadresáři standardního úložiště.
:, ,

Zanechte komentář

Archiv