w_scan ist ein praktisches Kommandozeilen-Programm, welches einen Sendersuchlauf für TV- und Radioprogramme auf DVB-T/-S/-B Receivern durchführt und anschließend aus den Suchergebnissen eine channels.conf für VDR erstellt. Anschließend kann basierend auf den erstellten Dateien eine eigene channels.conf erstellt werden.
Das Skript erledigt folgende Aufgaben:
- Sendersuchlauf über Satellit (Astra 19.2°E).
- Überführung der Ergebnisse in eine für VDR 2.0 lesbare
channels.conf. - Erstellen eines Diffs zwischen (eventuell vorhandenen, von w_scan erstellen)
channels.confDateien und der neu erstellten. - Erstellen einer vollständigen
channels.conf, die alle bisher über w_scan gefunden Sender beinhaltet.
#!/bin/bash
#
# Copyright (C) 2012 Manuel Grob
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.
# Adjust the following two variables to your needs!
WSCAN=/usr/local/bin/w_scan
PREFIX=/usr/local/share/w_scan
# Other vars
DATE=$(date +%Y%m%d%H%M)
LOGFILE=$(mktemp -p /tmp w_scan.XXXXXX)
CHANNELSTMP=$(mktemp -p /tmp channels.XXXXXX)
if [ "$(pidof vdr)" ]
then
echo "Stop vdr first!"
exit 1
fi
cd ${PREFIX}
# Scan entire satelite transponder for available channels and sort them
$WSCAN -fs -s S19E2 -o2 -C UTF-8 -O1 >>$CHANNELSTMP 2>$LOGFILE
sort -u $CHANNELSTMP > channels${DATE}.conf
# Test if channels-latest.conf is readable and create a diff between new and previous scan
[ -r channels-latest.conf ] && diff -u channels${DATE}.conf channels-latest.conf >channels${DATE}.diff
# Test if channels.conf.full is readable and merge old one with new channels.conf or create one
if [ -r channels.conf.full ]; then
cp -a channels.conf.full channels.conf.full.old
sort -u channels${DATE}.conf channels.conf.full.old >channels.conf.full
rm -f channels.conf.full.old
else
sort -u channels${DATE}.conf >channels.conf.full
fi
# Delete old symlink to previous scan and create a new one to the latest
rm -f channels-latest.conf
ln -sf channels${DATE}.conf channels-latest.conf
rm -f $CHANNELSTMP
Die Variablen WSCAN in Zeile 19 sowie PREFIX in Zeile 20 sollten nach den eigenen Bedürfnissen angepasst werden.
Das Skript erstellt einen neuen Ordner unter /usr/local/share namens w_scan und benutzt diesen fortan als Arbeitsverzeichnis. Alle erstellten channels.conf Dateien können in diesem Ordner gefunden werden:
channels-latest.conf: Symlink auf diechannels.confdes letzten Aufrufs von w_scan.channels-datum.conf: Enthält gefundene Sender bei Aufruf von w_scan zum angegebenen Datum.channels-datum.diff: Zeigt Unterschiede zwischen den Sendern des letzten und vorletzen Aufrufs von w_scan.channels.conf.full: Beinhaltet alle mit w_scan gefunden Sender.
Das Skript erstellt außerdem in /tmp eine Logdatei (w_scan.xxxxxx), welche zu Debugzwecken zu Rate gezogen werden kann.