Wrapper-Skript für w_scan

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.conf Dateien 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 die channels.conf des 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.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.