#!/bin/bash
# oscam_readerstatus.sh
# Nutzt die XML-API von OSCam um Statuswerte auszulesen.
VERSION=171114
#---------------------
# Variablendeklaration
#---------------------
TMPDIR='/tmp' # Hier werden die Ausgaben gespeichert
#OSCAMUSERSTATUS="${TMPDIR}/oscamuserstatus" # Liste mit Usernamen und Kanal (Wenn gesetzt)
OSCAMSTATUS="${TMPDIR}/oscamstatus"
OSCAMREADER="${TMPDIR}/oscamreader" # Pro Reader eine Datei
OSCAM_LCD='/tmp/.oscam/oscam.lcd'
#Servereinstellungen (Daten des WebIF)
SERVER='127.0.0.1' ; PORT=8888
USER='xxx' ; PASSWORD=xxx
# Namen der Reader, die abgefragt werden sollen (Label aus oscam.server)
#+Die Namen werden in einem Array gespeichert. Die Variablen müssen fortlaufend
#+nummeriert werden (READER[0], READER[1], ...)
READER[0]='HD02' # HD+
# Debug
#DEBUG=1 # Aktiviert diverse Debug-Ausgaben auf der Konsole
#---------------------
# Start
#---------------------
if [[ -z "$SERVER" || -z "$PORT" || -z "$USER" || -z "$PASSWORD" || -z "$READER" ]] ; then
echo 'Konfiguration unvollständig!' >&2
exit 1
fi
# Status in eine Variable einlesen
XMLDATA="$(curl -s --digest -o - -u "${USER}:${PASSWORD}" "http://${SERVER}:${PORT}/oscamapi.html?part=status")"
# Readerdaten (Pro Reader wird eine Datei angelegt)
for reader in "${READER[@]}" ; do
LABEL="$reader"
RDRSTAT=($(echo "$XMLDATA" | xmlstarlet sel -T -t \
-v "//client[@name='$LABEL']/times/@idle" -o " " \
-v "//client[@name='$LABEL']/connection"))
{ echo "Reader $LABEL" # 1: Reader_HD02
echo "Label: $LABEL" # 2: Readername
echo "Idle (s): ${RDRSTAT[0]}" # 3: Idle (s)
#echo "$(LengthString "${RDRSTAT[0]}" short)" # 4: Idle (00:00)
echo "Connection: ${RDRSTAT[1]}" # 5: Connection
echo "EMM Stats: $EMMSTATS" # 6: EMM Stats (0/0/0/0)
echo "ECM Stats: $ECMSTATS" # 7: ECM Stats
} > "${OSCAMREADER}_${LABEL}"
[[ -n "$DEBUG" ]] && echo "\$RDRSTAT: (2 Werte) [${#RDRSTAT[@]}] ${RDRSTAT[*]}"
[[ "${RDRSTAT[1]}" != 'CARDOK' ]] && killall oscam
done
sleep 1
# Geht nicht, da die API readonly ist
# http://hp-t5730:8888/status.html?action=restart&label=HD02
#exit