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ě.