Aktuelles
Digital Eliteboard - Das Digitale Technik Forum

Registriere dich noch heute kostenlos, um Mitglied zu werden! Sobald du angemeldet bist, kannst du auf unserer Seite aktiv teilnehmen, indem du deine eigenen Themen und Beiträge erstellst und dich über deinen eigenen Posteingang mit anderen Mitgliedern unterhalten kannst! Zudem bekommst du Zutritt zu Bereichen, welche für Gäste verwehrt bleiben

Registriere dich noch heute kostenlos, um Mitglied zu werden! Sobald du angemeldet bist, kannst du auf unserer Seite aktiv teilnehmen, indem du deine eigenen Themen und Beiträge erstellst und dich über deinen eigenen Posteingang mit anderen Mitgliedern unterhalten kannst! Zudem bekommst du Zutritt zu Bereichen, welche für Gäste verwehrt bleiben

OScam Reader "überwachen"

    Nobody is reading this thread right now.
AW: OScam Reader "überwachen"

Der disconnect des Readers drückt sich in /var/log/messages so aus:

Code:
Nov 21 17:19:29  kernel: [47949.219394] usb 4-1: USB disconnect, device number 2
Nov 21 17:19:29  kernel: [47949.228090] ftdi_sio ttyUSB0: FTDI USB Serial Device converter now disconnected from ttyUSB0
Nov 21 17:19:29  kernel: [47949.232349] ftdi_sio 4-1:1.0: device disconnected
Nov 21 17:19:29  kernel: [47949.538152] usb 4-1: new full-speed USB device number 3 using sw-ohci
Nov 21 17:19:29  kernel: [47949.747049] ftdi_sio 4-1:1.0: FTDI USB Serial Device converter detected
Nov 21 17:19:29  kernel: [47949.750400] usb 4-1: Detected FT232RL
Nov 21 17:19:29  kernel: [47949.753474] usb 4-1: Number of endpoints 2
Nov 21 17:19:29  kernel: [47949.757366] usb 4-1: Endpoint 1 MaxPacketSize 64
Nov 21 17:19:29  kernel: [47949.760959] usb 4-1: Endpoint 2 MaxPacketSize 64
Nov 21 17:19:29  kernel: [47949.764286] usb 4-1: Setting MaxPacketSize 64
Nov 21 17:19:29  kernel: [47949.773615] usb 4-1: FTDI USB Serial Device converter now attached to ttyUSB1

Dann hatte ich nach ein paar udev beispielen gesucht. Diese hatten alle noch den Filter ACTION=="add" drin.
In dem Fall wurde die Regel nicht ausgeführt, schätzungsweise, weil das Gerät nicht physisch "geadded" wird.
Nachdem ich den Action Filter weggelassen habe wird die udev Regel auch bei dem Event, wie im obigen log beschrieben, getriggert.

Oder meinst du noch was anderes?

Die Regel wird auch getriggered, wenn der Reader zufällig auch dem gleichen ttyUSBx wieder zugewiesen wird. Aber Oscam kann ihn auch dann nicht mehr auslesen ohne Neustart.
 
AW: OScam Reader "überwachen"

Hallo Leute,

ich bin auf dieses Thema gestoßen und würde ebenfalls meine Reader überwachen, da alle miteinander komplett ausfallen und nur ein Oscam Restart hilft.
Wie baue ich das Script ein? Hab das noch nie gemacht.
Vielen Dank für Eure Hilfe.
 
OScam Reader "überwachen"

Was passiert denn mit deinen Readern?
Hast du mal einen passenden Logauszug von OScam bzw. auch /var/log/messages?

Edit:
Was für Reader nutzt du?
 
AW: OScam Reader "überwachen"

Hi,
als Reader kommen 2 Easymouse zum Einsatz. Die sind sporadisch auf einmal "OFF". Nur ein Restart von Oscam hilft. Hab schon den USB Hub getauscht. Immer wieder dasselbe Phänomen. Ich würde nun gerne eines der ersten zwei Scripte einbauen. Nur hab ich sowas noch nie gemacht. Keine Anhnung wie und wo ich da anfangen muss, sprich was und wo muss in dem Script angepasst werden, wie muss die Scriptdatei heißen und wo muss diese abgelegt werden.
 
AW: OScam Reader "überwachen"

Also die beiden Scripte hier sind so nicht gebaut um OScam selbst neu zu starten.
Es wären noch ein paar Hintergrund Infos ganz nett:
- Welches OScam Version
- Wodrauf läuft OScam?
- Log Auszüge
- Easymouse Einstellungen und OScam.server
 
AW: OScam Reader "überwachen"

Ah okay. Hier nun die Infos:
- Oscam Version 1.20-unstable_svn build r8999
- auf debian
- oscam.server
# oscam.server generated automatically by Streamboard OSCAM 1.20-unstable_svn SVN r8999
# Read more:

[reader]
label = sat4
protocol = mouse
device = /dev/sat4
caid = 1702,1833
boxkey = 1122334455667788
ecmwhitelist = 1702:93;1833:89
detect = cd
mhz = 1000
cardmhz = 600
group = 1
emmcache = 1,3,2
lb_weight = 300

[reader]
label = hdplus1
protocol = mouse
device = /dev/hdplus1
caid = 1830
boxkey =
rsakey = BF358B5461863130686FC933FB541FFCED682F3680F09DBC1A23829FB3B2F766B9DD1BF3B3ECC9AD6661B753DCC3A9624156F9EB64E8168EF09E4D9C5CCA4DD5
ecmwhitelist = 1830:92
detect = cd
mhz = 600
cardmhz = 368
group = 2
emmcache = 1,3,2
 
AW: OScam Reader "überwachen"

Was kommt denn in den Logs wenn der Fehler auftritt?
Evtl kann man ja den Fehler selbst beheben ohne mit der Holzhammer Methode immer OScam neu zu starten.

Aber mit einem entsprechendem Überwachungsscript kann ich dir evtl die nächsten Tage behilflich sein. Schreibe da selbst gerade an einem, dass alle meine Reader überwacht und im Fehlerfall entsprechende Maßnahmen einleitet. (Reader Neustart, Betriebssystemseitiger Hardwarereset des Readers, OScam Neustart)... Leidet leider gerade noch an ein paar Kinderkrankheiten...
 
AW: OScam Reader "überwachen"

Hey super,
das hört sich doch gut an. Leider hab ich grad kein Log vorliegen. Aber wenn dein Script ready ist, würde ich es auch gerne mal testen.
 
OScam Reader "überwachen"

Falls es noch interesse gibt, hier mal mein Aktuelles Überwachungsscript.
Alle interessante steht direkt im Script drinnen.
Dieses Script besteht aus zwei Teilen:
1. Dem Script selbst
2. Einer C Datei zum zurücksetzen des USB-Ports (wird im Hardware reset benötigt)

Die zweite Datei muss selbst Kompiliert werden! (für Debian x64 kann ich diese auf Anfrage per PM liefern)

Script
Code:
#!/bin/bash
###########################################
####  Ein Universeller OScam Watchdog  ####
####     von Sagobal für das DEB       ####
####          Verson 0.1 WIP           ####
###########################################


#### Benötigte Progamme ####
# curl
# usbreset (falls Hardwarereset aktiv ist)
# bash
# grep
# cut
# oscam
# Ein init-Script für OScam (falls OScam (Re)start aktiv ist)
#  dieses init-script muss den Befehl "restart" beherschen!
# pidof
# sudo (falls der Watchdog nicht als root läuft) (angepasste sudoers erforderlich, siehe unten!)


#### INFO ###
# Bitte beachtet, dass dieses Script zwar von mir schon seit einiger Zeit eingesetzt wird, es aber immernoch Fehler enthalten kann.
# Für Eventuelle Schäden, Ausfälle o.ä. übernehme ich keine Haftung!
# Damit dieses Script reibungslos funktionieren kann müssen ein paar vorausetzungen Erfüllt sein:
# - Die oben genannten Programme müssen vorhanden sein
# - Eigene udev Regeln (sollte der Hardware-Reset aktiv sein, da ansonsten Probleme mit der Readerzuordnung auftreten können!)
# - Grundlegende Linux Kenntnisse
# - Wissen wie man Kompiliert (für USBreset)
#
# Dieses Script sollte in der Lage sein belibig viele Reader zu überwachen.
# Bei meinem System braucht es zum Prüfen aller 5 Reader ca. 200ms also erzeugt es kaum CPU Last.
# Bei einem Fehler braucht dieses Script zwar deutlich mehr Zeit, jedoch wird diese Hauptsächlich beim "warten" erzeugt.
# Getestet ist das Script von einem bis zu 5 Readern, da mir einfach die Passenden Reader fehlen mehr zu testen ;)


#### Funktionen dieses Scriptes ####
# Dieses Script prüft im Webinterface des OScam ob alle Reader korrekt funktionieren.
# Dieses Script sollte als root oder als der oscam Benutzer ausgeführt werden.
# Sollte ein Reader auserhalb der Parameter liegen, wird je nach Konfiguration unterschiedlich vorgegangen.
# Es können global und pro Reader folgende Aktionen ausgeführt werden. Es wird außerdem nach dieser Reihenfolge vorgegangen.
# Nach jeder der Aktionen wird geprüft ob der Reader wieder OK ist. Sollte er OK sein, wird nichts weiter unternommen.
# Sollte der Reader nach wie vor nicht OK sein wird die Liste weiter abgearbeitet.
# Außerdem ist dieses Script so gebaut, dass es mit Nagios o.ä. zusammen arbeiten kann.
# Es hat folgende Exit Codes:
# Code 0 = Kein Fehler vorhanden / Fehler konnte behoben werden
# Code 1 = Fehler vorhanden, es wurde jedoch nicht versucht diesen zu beheben, da die passenden Optionen deaktiviert sind.
# Code 2 = Fehler vorhanden, er konnte jedoch nicht behoben werden.
# Code 3 = Konnte keine Verbindung zum OScam aufbauen.
# Bei jedem Code wird im Fehlerfall auch ausgegeben wo der Fehler liegt!


#### Erkennbare Fehler ####
# - OScam Erreichbarkeit
#   Es wird geprüft ob OScam erreichbar ist! Aktuell kann unterschieden werden zwischen:
#     a) Generell nicht erreichbar
#       - bei einer lokalen OScam installation wird unterschieden zwischen OScam ist beendet und Falscher IP/Port Kombination
#       - bei einem Remote OScam kann nur festgestellt werden, dass OScam nicht erreichbar ist.
#     b) Benutzername/Passwort falsch
#     c) Genereller Fehler beim Abruf des Webinterface
#   Sollte OScam dann nicht laufen wird OScam auf wunsch selbstständig gestartet.
#   !ACHTUNG! Dazu wird jedoch vorrausgesetzt, dass OScam auf dem gleichen Server läuft wie der Watchdog und
#   der Watchdog entweder unter dem Benutzer "root" angelegt wurde oder aber entsprechende Einträge in der
#   sudoers Datei gesetzt worden sind. (Siehe weiter unten)
#
# - Reader ist nicht vorhanden / nicht gestartet
#   Es wird geprüft ob der Reader im Webinterface aktiv und somit in der Statusseite ist.
#   Auf Wunsch werden nicht gestartete Reader dann gestartet.
#
# - ReaderStatus überprüfung
#   Es wird geprüft ob der Status des Readers "CardOK" ist.
#
# - Entitlement Prüfung
#   Es wird geprpüft ob der Reader die richtige Anzahl Entitlements hat.
#   Es kann (global) ausgewählt werden ob Reader bei zu wenigen Entitlements neu gestartet werden sollen
#   Es kann (global) ausgewählt werden ob Reader bei zu vielen Entitlements neu gestartet werden sollen




#### Ausführbare Aktionen ####
# - Reader Softreset
#   Der Reader wird im OScam Webinterface neu gestartet.
#   Dieser Vorgang betrifft nur den Reader direkt. Alle anderen Reader werden nicht beinflusst!
#
# - Reader Hardreset
#   Es wird ermittelt, welche USB-Verbindung für diesen Reader zuständig ist. Dies geht jedoch NUR, wenn
#   die Korrekte Seriennummer des Readers hinterlegt ist.
#   Sobald dies erledigt wurde, wird der Reader im Webinterface angehalten und die USB-Verbindung
#   dann mit dem Programm "usbreset" vom Betriebssystem komplett neu initialisiert.
#   Im Anschluss wird der Reader wieder gestartet und geprüft ob der Fehler weiterhin vorhanden ist.
#   Dieser Vorgang betrifft nur den Reader direkt. Alle anderen Reader werden nicht beinflusst!
#   !ACHTUNG! Dazu wird jedoch wieder vorrausgesetzt, dass OScam auf dem gleichen Server läuft wie der Watchdog und
#   der Watchdog entweder unter dem Benutzer "root" angelegt wurde oder aber entsprechende Einträge in der
#   sudoers Datei gesetzt worden sind. (Siehe weiter unten)
#
# - OScam reset
#   Sollte nach den vorherigen Aktionen KEIN Erfolg sein, wird über das init Script oscam komplett neu gestartet.
#   !ACHTUNG! Dieser Vorgang betrifft alle Reader/User/etc, da das OScam selbst komplett beendet wird!
#   !ACHTUNG! Auch hier wird wieder vorrausgesetzt, dass OScam auf dem gleichen Server läuft wie der Watchdog und
#   der Watchdog entweder unter dem Benutzer "root" angelegt wurde oder aber entsprechende Einträge in der
#   sudoers Datei gesetzt worden sind. (Siehe weiter unten)




#### Geplantes ####
# - Überprüfung auch von ProxyReadern
# - Überprüfung ob zur Zeit nutzer Aktiv sind und Sperren des OScam reset bei Aktiven Benutzen auf Wunsch


#### Allgemeine Konfiguration ####
# Serverdaten
strHostname="127.0.0.1"
strPort="17001"
strUser="admin"
strPass="*******"
strSSL="0"


#Readerdaten
# Erklärung:
#       strReader[01]="G09"
#       Name des Readers (exakt so wie im Webinterface!!)
#
#
#       strReaderSerial[01]="A9WVNLXP"
#       Serial der Mouse, leerlassen falls keine Mouse (also strReaderSerial[01]="") da die Zeile vorhanden sein muss!
#
#       strReaderRestart[01]="3"
#       Restartverhalten des Readers
#       0 = Kein Restart, 1 = Nur Software, 2 = Nur Hardware,
#       3 = Soft und Hardware, 4 = Nur OScam, 5 = Oscam und Software,
#       6 = OScam und Hardware, 7 = Oscam, Hardware und Software
#
#       strReaderEnt[01]="7"
#       Anzahl der Entitlements des Readers




# Reader 01
strReader[01]="G09"
strReaderSerial[01]="A9WVNLXP"
strReaderRestart[01]="3"
strReaderEnt[01]="7"


# Reader 02
strReader[02]="ORF_ICE"
strReaderSerial[02]="A94JVDTL"
strReaderRestart[02]="3"
strReaderEnt[02]="3"


# Reader 03
strReader[03]="HDPlus_HD02"
strReaderSerial[03]="A9CVZ1PX"
strReaderRestart[03]="3"
strReaderEnt[03]="1"


# Reader 04
strReader[04]="SkyV14"
strReaderSerial[04]="A9SRNHLT"
strReaderRestart[04]="3"
strReaderEnt[04]="12"


# Reader 05
strReader[05]="HuDo"
strReaderSerial[05]="A9UHDBFR"
strReaderRestart[05]="3"
strReaderEnt[05]="1"




# Konfiguration
temp="/root/test/"       # Wichtig mit abschließendem "/"
WatchLocalCards="1"      # Sollen Lokale Karten überwacht werden?
HighEntReset="1"         # Sollen die Reader bei mehr als den Angegebenen Entitilements neu gestartet werden?
LowEntReset="1"          # Sollen die Reader bei weniger als den Angegebenen Entitlements neu gestartet werden?
WatchProxy="0"           # Sollen Proxys überwacht werden?
LowLocalCardReset="0"    # Sollen die Proxys bei zu wenigen Hop1 Karten neu verbunden werden?
LowRemoteCardReset="0"   # Sollen die Proxys bei zu wenigen HopX Karten neu verbunden werden?
HighLocalCardReset="0"   # Sollen die Proxys bei zu vielen Hop1 Karten neu verbunden werden?
HighRemoteCardReset="0"  # Sollen die Proxys bei zu vielen HopX Karten neu verbunden werden?
anzRestart="1"           # Anzahl der Restarts die ausgeführt werden sollen (Wirkt sich auf alle Restarts aus!)
debug="0"                # Sollen Alle Statusmeldungen ausgegeben werden?
startOScam="0"           # Soll versucht werden OScam zu starten, wenn es nicht läuft?
startReader="1"          # Soll versucht werden einen Reader/Proxy zu starten, falls dieser nicht Aktiviert ist?
localOScam="1"           # Läuft der Watchdog auf dem selben Server wie OScam?


# ACHTUNG!!
# Für den HardRestart und den OScamrestart muss entweder dieses Script als "root" gestartet werden, oder aber ein entsprechender eintrag in der sudoers Datei vorhanden sein!
#  z.b. "oscam   ALL=NOPASSWD:/root/bin/usbreset,NOPASSWD:/etc/init.d/oscasm"
# Wenn ihr das Script nicht als root laufen lassen wollt und euch nicht mit den sudoers auskennt fragt bitte im Forum oder lasst den Wert "sudoers" auf "0"!!!
# Bei fehlern in den Sudoers kann man die kontrolle über das System verlieren oder sich dieses Script komplett aufhängen!
# Es wird NICHT von dem Script geprüft ob die Sudoers korrekt ist oder die Dateien am richtig Ort sind!
# Es darf auch nur eingesetzt werden, wenn das OScam auf dem gleichen Server läuft wie der Watchdog!
sudoers="0"


# Files
usbreset="/root/bin/usbreset"   # Pfad zum USB Restart script
oscaminit="/etc/init.d/oscam"   # Pfad zum Init Script von OScam
oscambinary="/bin/oscam"        # Pfad zur OScam Binary




####################################
### Programmteil - NICHTS ÄNDERN ###
####################################




# Benötige Variablen
exitcode=0
if  [ $strSSL -eq 1 ]; then
        URL="https://$strHostname:$strPort"
else
        URL="http://$strHostname:$strPort"
fi


if [ $localOScam -eq 0 ]; then
        for i in "${!strReader[@]}"; do
                if [ ${strReaderRestart[$i]} -gt 3 ]; then
                        strReaderRestart[$i]=$(( ${strReaderRestart[$i]} - 4 ))
                fi
                if [ ${strReaderRestart[$i]} -gt 1 ];then
                        strReaderRestart[$i]=$(( ${strReaderRestart[$i]} - 2 ))
                fi
        done
        startOScam="0"
        if [ $debug -eq 1 ]; then
                echo "Keine Lokale OScam installation!"
                echo "Deaktiviere Hardwarerestart und OScamrestart!"
        fi
fi
if [ `whoami` != "root" ] && [ $sodoers -ne "1" ] ; then
        for i in "${!strReader[@]}"; do
                if [ ${strReaderRestart[$i]} -gt 3 ]; then
                        strReaderRestart[$i]=$(( ${strReaderRestart[$i]} - 4 ))
                fi
                if [ ${strReaderRestart[$i]} -gt 1 ];then
                        strReaderRestart[$i]=$(( ${strReaderRestart[$i]} - 2 ))
                fi
        done
        startOScam="0"
        if [ $debug -eq 1 ]; then
                echo "sudoers wurde deaktiviert und ich laufe nicht als root!"
                echo "Deaktiviere daher Hardwarerestart, OScamrestart und das starten von OScam!"
        fi
fi


# Prüfen ob Schreibrechte für die Temp Dateien vorhanden sind.
touch "$temp/status.html" 1>/dev/null 2>/dev/null
touch "$temp/readers.html" 1>/dev/null 2>/dev/null
if [ ! -w "$temp/status.html" ] || [ ! -w "$temp/readers.html" ]; then
    echo "Kann nicht in die temporären Dateien schreiben. Bitte Rechte überprüfen!" 1>&2
        exit 3
fi
rm $temp/status.html 1>/dev/null 2>/dev/null
rm $temp/readers.html 1>/dev/null 2>/dev/null


# Zu OScam Verbinden
if [ $debug -eq 1 ]; then
        echo -n "Verbinde zu URL: $URL...  ";
fi
curl --connect-timeout 2 -vu ""$strUser":"$strPass"" --anyauth  -o "$temp/status.html" "$URL/status.html" 1>> /dev/null 2>>/dev/null


# Prüfen ob Verbindung erfolgreich
if [ ! -f $temp/status.html ]; then
        echo "Verbindung zu OScam nicht möglich!" 1>&2
        if [ $localOScam -eq 1 ]; then
                if [ "$(pidof $oscambinary)" == "" ]; then
                        echo "OScam läuft scheinbar nicht!" 1>&2
                        if [ $startOScam -eq 1 ]; then
                                restarts=0
                                while [ ! -f $temp/status.html ] && [ $restarts -lt $anzRestart ]; do
                                        restarts=$(( $restarts + 1 ))
                                        echo "Versuche OScam zu starten!" 1>&2
                                        echo -n "Versuch $restarts von $anzRestart";
                                        $oscaminit restart 1>> /dev/null 2>> /dev/null
                                        curl --connect-timeout 2 -vu ""$strUser":"$strPass"" --anyauth  -o "$temp/status.html" "$URL/status.html" 1>> /dev/null 2>> /dev/null
                                        sleep 1; echo -n "." 1>&2; sleep 1; echo -n "." 1>&2; sleep 1; echo -n "." 1>&2; sleep 1; echo -n "." 1>&2; sleep 1; echo -n "." 1>&2;
                                done
                                if [ ! -f $temp/status.html ]; then
                                        echo " Fehler!" 1>&2
                                        echo "Konnte weiterhin keine Verbindung aufbauen!"
                                        exit 3
                                else
                                        echo " OK!"
                                fi
                        else
                                echo "OScam start ist deaktiviert!" 1>&2
                                exit 3
                        fi
                else
                        echo "OScam IP/Port scheinbar fehlerhaft!" 1>&2
                fi
        else
                echo "Bitte prüfen ob IP & Port stimmen!" 1>&2
                echo "Eventuell läuft OScam auch nicht," 1>&2
                echo "oder eine Firewall verhindert die Verbindung!" 1>&2
                exit 3
        fi
fi


# Prüfen ob es Probleme mit dem Passwort gab oder andere Übertragungsprobleme


if [ $(cat $temp/status.html | wc -l) -lt 2 ]; then
        echo "ERROR!" 1>&2
        if [ "$(cat $temp/status.html | grep "Access denied.")" != "" ]; then
                echo "Benutzername oder Passwort falsch!" 1>&2
        else
                echo "Die Statusdatei hat weniger als 2 Zeilen." 1>&2
                echo "Dies deutet auf einen Fehler im Verbindungsaufbau hin!" 1>&2
                echo "Fehlermeldung: " 1>&2
                echo "$(cat $temp/status.html)" 1>&2
        fi
        exit 3
fi


# Verbindung erfolgreich hergestellt!
if [ $debug -eq 1 ]; then
        echo "OK"
fi






# Lokale Reader Prüfen
if [ $WatchLocalCards -eq 1 ]; then
        if [ $debug -eq 1 ]; then
            echo "Überprüfe lokale Reader..."
        fi
        for i in "${!strReader[@]}"; do
                a=$(grep '<BR><A HREF="entitlements.html?label='${strReader[$i]} "$temp"/status.html)
                dorestart="0"
                readerstart="1"
                restarts="0"
                while [ $restarts -lt $anzRestart ] && [ "$a" == "" ] && [ $startReader -eq 1 ]; do
                        if [ $restarts -lt 1 ]; then
                                echo "" 1>&2
                                echo "Reader ${strReader[$i]} wurde nicht gefunden!" 1>&2
                        fi
                        restarts=$(( $restarts + 1 ))
                        echo -n "Versuch $restarts von $anzRestart den Reader zu starten" 1>&2
                        curl --connect-timeout 2 -vu ""$strUser":"$strPass"" --anyauth  -o "$temp/readers.html" "$URL/readers.html?label=${strReader[$i]}&action=enable" 1>> /dev/null 2>> /dev/null
                        sleep 1; echo -n "." 1>&2; sleep 1; echo -n "." 1>&2; sleep 1; echo -n "." 1>&2; sleep 1; echo -n "." 1>&2; sleep 1; echo -n "." 1>&2; sleep 1; echo -n "." 1>&2; sleep 1; echo -n "." 1>&2; sleep 1; echo -n "." 1>&2; sleep 1; echo -n "." 1>&2; sleep 1; echo "." 1>&2;
                        curl --connect-timeout 2 -vu ""$strUser":"$strPass"" --anyauth  -o "$temp/status.html" "$URL/status.html" 1>> /dev/null 2>> /dev/null
                        a=$(grep '<BR><A HREF="entitlements.html?label='${strReader[$i]} "$temp"/status.html)
                        if [ "$a" != "" ]; then
                                echo "Reader wurde erfolgreich gestartet!" 1>&2
                        fi
                done
                if [ "$a" == "" ] && [ $startReader -eq 1 ]; then
                        echo "" 1>&2
                        echo "Reader ${strReader[$i]} konnte nicht gestartet werden!" 1>&2
                        if [ $exitcode -lt 2 ]; then
                                exitcode="2"
                        fi
                elif [ "$a" == "" ] && [ $startReader -ne 1 ]; then
                        echo "" 1>&2
                        echo "Reader ${strReader[$i]} wurde nicht gestartet, StartReader ist deaktiviert!" 1>&2
                        if [ $exitcode -lt 2 ]; then
                                exitcode="1"
                        fi
                else
                        # Reader ist schonmal vorhanden...
                        if [ $debug -eq 1 ]; then
                                echo ""
                                echo "Reader ${strReader[$i]} wurde gefunden!"
                        fi
                        status=$(echo $a | cut -d ">" -f 2 | cut -d "<" -f 1)
                        ent=$(echo $a | cut -d "(" -f 2 | cut -d " " -f 1)
                        if [ "$ent" == "" ] || [ "$ent" == "no" ] ; then
                                ent="0"
                                statusEnt="0"
                        elif [ $ent -eq "${strReaderEnt[$i]}" ]; then
                                statusEnt="1";
                        elif [ $ent -gt "${strReaderEnt[$i]}" ]; then
                                statusEnt="2"
                        else
                                statusEnt="0"
                        fi
                        if [ $debug -eq 1 ]; then
                                echo "Status: $status"
                                echo "Entitlements: $ent von ${strReaderEnt[$i]}"
                                echo -n "Status Entitlements: "
                                if [ $statusEnt -eq 1 ]; then
                                        echo "OK"
                                elif [ $statusEnt -eq 0 ]; then
                                        echo "LOW!"
                                else
                                        echo "HIGH!"
                                fi
                        fi
                        # Es wurden Fehler gefunden...
                        if [ $statusEnt -ne 1 ] || [ $status != "CARDOK" ]; then
                                echo "In dem Reader ${strReader[$i]} wurden Fehler gefunden!" 1>&2
                                if [ $status != "CARDOK" ]; then
                                        echo "Der Kartenstatus ist $status!" 1>&2
                                        dorestart=1
                                fi
                                if [ $statusEnt -eq 0 ]; then
                                        echo "Es gibt zu wenige Entitlements ($ent statt ${strReaderEnt[$i]})" 1>&2
                                        if [ $LowEntReset -eq 1 ]; then
                                                dorestart=1
                                        else
                                                echo "Neustart für diesen Grund deaktiviert!" 1>&2
                                                if [ $exitcode -lt 1 ]; then
                                                      exitcode="1"
                                                fi
                                        fi
                                elif [ $statusEnt -eq 2 ]; then
                                        echo "Es gibt zu viele Entitlements!" 1>&2
                                        if [ $HighEntReset -eq 1 ]; then
                                                dorestart=1
                                        else
                                                echo "Neustart für diesen Grund deaktiviert!" 1>&2
                                                if [ $exitcode -lt 1 ]; then
                                                      exitcode="1"
                                                fi
                                        fi
                                fi
                        fi
                        # Es wird versucht die Fehler zu beheben
                        # Restart ist genrell deaktiviert!
                        if [ ${strReaderRestart[$i]} -eq 0 ] && [ $dorestart -eq 1 ] ; then
                                 echo "Restart ist für diesen Reader genrell deaktiviert!" 1>&2
                                 if [ $exitcode -lt 1 ]; then
                                        exitcode="1"
                                fi
                                dorestart="0"
                        fi


                        # Ansonsten Erst mit Software Restart
                        restarts=0
                        if [ ${strReaderRestart[$i]} -ne 0 ] && [ ${strReaderRestart[$i]} -ne 2 ] && [ ${strReaderRestart[$i]} -ne 4 ] && [ ${strReaderRestart[$i]} -ne 6 ] && [ $dorestart -eq 1 ] ; then
                                while [ $dorestart -eq 1 ] && [ $restarts -lt $anzRestart ]; do
                                        restarts=$(( $restarts + 1 ))
                                        echo -n "Versuch $restarts von $anzRestart den Reader in Software neu zu Starten" 1>&2
                                        curl --connect-timeout 2 -vu ""$strUser":"$strPass"" --anyauth -o "$temp/status.html" "$URL/status.html?action=restart&label=${strReader[$i]}" 1>> /dev/null 2>> /dev/null
                                        sleep 1; echo -n "." 1>&2; sleep 1; echo -n "." 1>&2; sleep 1; echo -n "." 1>&2; sleep 1; echo -n "." 1>&2; sleep 1; echo -n "." 1>&2; sleep 1; echo -n "." 1>&2; sleep 1; echo -n "." 1>&2; sleep 1; echo -n "." 1>&2; sleep 1; echo -n "." 1>&2; sleep 1; echo "." 1>&2;
                                        curl --connect-timeout 2 -vu ""$strUser":"$strPass"" --anyauth -o "$temp/status.html" "$URL/status.html" 1>> /dev/null 2>> /dev/null
                                        a=$(grep '<BR><A HREF="entitlements.html?label='${strReader[$i]}  "$temp"/status.html)
                                        status=$(echo $a | cut -d ">" -f 2 | cut -d "<" -f 1)
                                        ent=$(echo $a | cut -d "(" -f 2 | cut -d " " -f 1)
                                        if [ "$ent" == "" ] || [ "$ent" == "no" ] ; then
                                                ent="0"
                                                statusEnt="0"
                                        elif [ $ent -eq "${strReaderEnt[$i]}" ]; then
                                                statusEnt="1";
                                        elif [ $ent -gt "${strReaderEnt[$i]}" ]; then
                                                statusEnt="2"
                                        else
                                                statusEnt="0"
                                        fi
                                        if [ $status != "CARDOK" ]; then
                                                dorestart="1"
                                                echo "ERROR!" 1>&2
                                        elif [ $statusEnt -eq 0 ] && [ $LowEntReset -eq 1 ]; then
                                                dorestart="1"
                                                echo "ERROR!" 1>&2
                                        elif [ $statusEnt -eq 2 ] && [ $HighEntReset -eq 1 ]; then
                                                dorestart="1"
                                                echo "ERROR!" 1>&2
                                        else
                                                dorestart="0"
                                                echo "OK!" 1>&2
                                        fi
                                done
                                if [ $dorestart -eq 1 ]; then
                                        echo "Fehler konnte nicht behoben werden!" 1>&2
                                fi
                        # Softwareneustart ist für diesen Reader deaktiviert!
                        elif [ ${strReaderRestart[$i]} -ne 0 ] && [ $dorestart -eq 1 ]; then
                                echo "Softwarerestart ist für diesen Reader deaktiviert!" 1>&2
                                if [ $exitcode -lt 1 ]; then
                                        exitcode="1"
                                fi
                        fi


                        # Dann in Hardware...
                        restarts=0
                        device=""
                        if [ "${strReaderSerial[$i]}" == "" ]; then
                            if [ $debug -eq 1 ]; then
                                echo "Keine Seriennummer vorhanden!" 1>&2
                                echo "Hardwarereset wird deaktiviert!" 1>&2
                            fi
                            strReaderRestart[$i]=$(( ${strReaderRestart[$i]} - 2 ))
                        fi
                        if [ ${strReaderRestart[$i]} -ne 0 ] && [ ${strReaderRestart[$i]} -ne 1 ] && [ ${strReaderRestart[$i]} -ne 4 ] && [ ${strReaderRestart[$i]} -ne 5 ] && [ $dorestart -eq 1 ] ; then
                                while [ $dorestart -eq 1 ] && [ $restarts -lt $anzRestart ]; do
                                        restarts=$(( $restarts + 1 ))
                                        echo -n "Versuch $restarts von $anzRestart den Reader in Hardware neu zu starten" 1>&2
                                        if [ "$device" == "" ]; then
                                                if [ $debug -eq 1 ]; then
                                                        echo "" 1>&2
                                                        echo "Suche Reader..." 1>&2
                                                fi
                                                for bus in $(lsusb -d 0403:6001 | cut -d ":" -f 1 | cut -d " " -f 2,4 | tr ' ' '/'); do
                                                        bus="/dev/bus/usb/$bus"
                                                        serial=`udevadm info -a -p $(udevadm info -q path -n $bus) | grep ATTR{serial} | cut -d "\"" -f 2`
                                                        if [ "$serial" == "${strReaderSerial[$i]}" ]; then
                                                                device=$bus;
                                                        fi
                                                done
                                                if [ $debug -eq 1 ] && [ $device != "" ]; then
                                                        echo -n "USB-Device Gefunden ($device)" 1>&2
                                                elif [ $reader == "" ]; then
                                                        echo "USB-Device konnte nicht gefunden werden!" 1>&2
                                                fi


                                        fi
                                        if [ $device != "" ]; then
                                                if [ $debug -eq 1 ]; then
                                                    echo "..." 1>&2
                                                    echo -n "Reader wird angehalten" 1>&2
                                                fi
                                                curl --connect-timeout 2 -vu ""$strUser":"$strPass"" --anyauth -o "$temp/readers.html" "$URL/readers.html?label=${strReader[$i]}&action=disable" 1>> /dev/null 2>> /dev/null
                                                sleep 2; echo -n "." 1>&2; sleep 2; echo -n "." 1>&2; sleep 2; echo -n "." 1>&2; sleep 2; echo -n "." 1>&2; sleep 2; echo -n "." 1>&2;
                                                if [ `whoami` == "root" ]; then
                                                        if [ $debug -eq 1 ]; then
                                                                echo "" 1>&2
                                                                echo "USB-Reset wird durchgefüht (bin root)" 1>&2
                                                                $usbreset $device
                                                        else
                                                                $usbreset $device 1>> /dev/null 2>> /dev/null
                                                        fi
                                                else
                                                        if [ $debug -eq 1 ]; then
                                                                echo "" 1>&2
                                                                echo "USB-Reset wird durchgeführt (sudo)" 1>&2
                                                                sudo $usbreset $device
                                                        else
                                                                sudo $usbreset $device 1>> /dev/null 2>> /dev/null
                                                        fi
                                                fi
                                                if [ $debug -eq 1 ]; then
                                                        echo -n "Starte den Reader wieder und prüfe ob der Fehler behoben wurde" 1>&2
                                                fi
                                                curl --connect-timeout 2 -vu ""$strUser":"$strPass"" --anyauth -o "$temp/readers.html" "$URL/readers.html?label=${strReader[$i]}&action=enable" 1>> /dev/null 2>> /dev/null
                                                sleep 2; echo -n "." 1>&2; sleep 2; echo -n "." 1>&2; sleep 2; echo -n "." 1>&2; sleep 2; echo -n "." 1>&2; sleep 2; echo -n "." 1>&2;
                                                curl --connect-timeout 2 -vu ""$strUser":"$strPass"" --anyauth -o "$temp/status.html" "$URL/status.html" 1>> /dev/null 2>> /dev/null
                                                a=$(grep '<BR><A HREF="entitlements.html?label='${strReader[$i]} "$temp"/status.html)
                                                status=$(echo $a | cut -d ">" -f 2 | cut -d "<" -f 1)
                                                ent=$(echo $a | cut -d "(" -f 2 | cut -d " " -f 1)
                                                if [ "$ent" == "" ] || [ "$ent" == "no" ] ; then
                                                        statusEnt="0"
                                                        ent="0"
                                                elif [ $ent -gt "${strReaderEnt[$i]}" ]; then
                                                        statusEnt="2"
                                                elif [ $ent -eq "${strReaderEnt[$i]}" ]; then
                                                        statusEnt="1"
                                                else
                                                        statusEnt="0"
                                                fi
                                                if [ $status != "CARDOK" ]; then
                                                        dorestart="1"
                                                        echo "ERROR!" 1>&2
                                                elif [ $statusEnt -eq 0 ] && [ $LowEntReset -eq 1 ]; then
                                                        dorestart="1"
                                                        echo "ERROR!" 1>&2
                                                elif [ $statusEnt -eq 2 ] && [ $HighEntReset -eq 1 ]; then
                                                        dorestart="1"
                                                        echo "ERROR!" 1>&2
                                                else
                                                        dorestart="0"
                                                        echo "OK!" 1>&2
                                                fi
                                        fi
                                done
                                if [ $dorestart -eq 1 ]; then
                                        echo "Fehler konnte nicht behoben werden!" 1>&2
                                fi
                        elif [ ${strReaderRestart[$i]} -ne 0 ] && [ $dorestart -eq 1 ]; then
                                echo "Hardwarerestart ist für diesen Reader deaktiviert!" 1>&2
                                 if [ $exitcode -lt 1 ]; then
                                        exitcode="1"
                                fi
                        fi


                        # Und in letzter Instanz mit einem Neustart des Kompletten OScam
                        if [ ${strReaderRestart[$i]} -ne 0 ] && [ ${strReaderRestart[$i]} -ne 1 ] && [ ${strReaderRestart[$i]} -ne 2 ] && [ ${strReaderRestart[$i]} -ne 3 ] && [ $dorestart -eq 1 ] ; then
                                while [ $dorestart -eq 1 ] && [ $restarts -lt $anzRestart ]; do
                                        restarts=$(( $restarts + 1 ))
                                        echo -n "Versuch $restarts von $anzRestart OScam komplett neu zu starten" 1>&2
                                        if [ `whoami` == "root" ]; then
                                                if [ $debug -eq 1 ]; then
                                                        echo "" 1>&2
                                                        echo "OScam restart wird durchgeführt (root)" 1>&2
                                                        $oscaminit restart
                                                else
                                                        $oscaminit restart 1>> /dev/null 2>> /dev/null
                                                fi
                                        else
                                                if [ $debug -eq 1 ]; then
                                                        echo "" 1>&2
                                                        echo "OScam restart wird durchgeführt (sudo)" 1>&2
                                                        $oscaminit restart
                                                else
                                                        sudo $oscaminit restart 1>> /dev/null 2>> /dev/null
                                                fi
                                        fi
                                        if [ $debug -eq 1 ]; then
                                                echo "Prüfe ob der Fehler behoben ist" 1>&2
                                        fi
                                        sleep 1; echo -n "." 1>&2; sleep 1; echo -n "." 1>&2; sleep 1; echo -n "." 1>&2; sleep 1; echo -n "." 1>&2; sleep 1; echo -n "." 1>&2; sleep 1; echo -n "." 1>&2; sleep 1; echo -n "." 1>&2; sleep 1; echo -n "." 1>&2; sleep 1; echo -n "." 1>&2; sleep 1; echo "." 1>&2;
                                        curl --connect-timeout 2 -vu ""$strUser":"$strPass"" --anyauth -o "$temp/status.html" "$URL/status.html" 1>> /dev/null 2>> /dev/null
                                        a=$(grep '<BR><A HREF="entitlements.html?label='${strReader[$i]} "$temp"/status.html)
                                        status=$(echo $a | cut -d ">" -f 2 | cut -d "<" -f 1)
                                        ent=$(echo $a | cut -d "(" -f 2 | cut -d " " -f 1)
                                        if [ "$ent" == "" ] || [ "$ent" == "no" ] ; then
                                                statusEnt="0"
                                                ent="0"
                                        elif [ $ent -gt "${strReaderEnt[$i]}" ]; then
                                                statusEnt="2"
                                        elif [ $ent -eq "${strReaderEnt[$i]}" ]; then
                                                statusEnt="1"
                                        else
                                                statusEnt="0"
                                        fi
                                        if [ $status != "CARDOK" ]; then
                                                dorestart="1"
                                                echo "ERROR!" 1>&2
                                        elif [ $statusEnt -eq 0 ] && [ $LowEntReset -eq 1 ]; then
                                                dorestart="1"
                                                echo "ERROR!" 1>&2
                                        elif [ $statusEnt -eq 2 ] && [ $HighEntReset -eq 1 ]; then
                                                dorestart="1"
                                                echo "ERROR!" 1>&2
                                        else
                                                dorestart="0"
                                                echo "OK!" 1>&2
                                        fi
                                done
                                if [ $dorestart -eq 1 ]; then
                                        echo "Fehler konnte nicht behoben werden!" 1>&2
                                fi
                        elif [ ${strReaderRestart[$i]} -ne 0 ] && [ $dorestart -eq 1 ]; then
                                 echo "OScamrestart ist für diesen Reader deaktiviert!" 1>&2
                                 if [ $exitcode -lt 1 ]; then
                                        exitcode="1"
                                 fi
                        fi


                fi
        if [ $dorestart -eq 1 ] && [ $exitcode -lt 2 ] && [ ${strReaderRestart[$i]} -ne 0 ]; then
                exitcode="2"
        fi
        done
else
        if [ $debug -eq 1 ]; then
            echo "Überprüfung lokaler Reader deaktiviert!"
        fi
fi


exit $exitcode

usbreset.c
Code:
/* usbreset -- send a USB port reset to a USB device */
/* compile: cc usbreset.c -o usbreset */
#include <stdio.h>
#include <unistd.h>
#include <fcntl.h>
#include <errno.h>
#include <sys/ioctl.h>


#include <linux/usbdevice_fs.h>




int main(int argc, char **argv)
{
    const char *filename;
    int fd;
    int rc;


    if (argc != 2) {
        fprintf(stderr, "Usage: usbreset device-filename\n");
        return 1;
    }
    filename = argv[1];


    fd = open(filename, O_WRONLY);
    if (fd < 0) {
        perror("Error opening output file");
        return 1;
    }


    printf("Resetting USB device %s\n", filename);
    rc = ioctl(fd, USBDEVFS_RESET, 0);
    if (rc < 0) {
        perror("Error in ioctl");
        return 1;
    }
    printf("Reset successful\n");


    close(fd);
    return 0;
}

Edit:
Aus irgendeinem Grund war das Script abgeschnitten.
Habe dies nun Korregiert!
 
Zuletzt bearbeitet:
AW: OScam Reader &quot;überwachen&quot;

Hey ich habe dein Überwachungsscript auf meinem Pi im Einsatz. Funtz tadellos. Ich möchte das ganze aber über Watchdog überprüfen lassen kannst du mir sagen wie? Muss ich dein Script einfach in die /etc/init.d/watchdog eintragen
oder wie? Habe es aktuell jede Minute über Crontab am durchlaufen....Oder was macht sinn?Weil meine Reader sehr oft ausfallen..

Danke nochmals vorab
 
AW: OScam Reader "überwachen"

Hallo zusammen,

da ich mich mit Skripten nicht wirklich auskenne, dachte ich, ich schliesse mich mal hier mit folgendem Problem an :

Man kennt es, wird ja in vielen Foren berichtet, dass eine Tivusat Karte in OSCAM irgendwann Ihren Dienst quittiert und dann muss man den
Reader neu starten.
Das kann nach ein paar Minuten passieren, oder erst Tage später.
Wichtig dabei: Status ist weiterhin CARDOK.
Man erkennt es nur, dass die Tivusat Sender schlichtweg dunkel sind, im Logfile also solche Einträge zu sehen sind :
015/10/12 19:15:49 57CE8AB8 c (ecm) Tivusat (183D@000000/0000/0002/91:1234567890ABCDEFGHIJKLMNOP): not found (4836 ms) by CAID_183D_TivuSat - Canale5

Könnte man denn ein Skript in OSCAM einbauen, dass dieses Problem überwacht, und den Reader bei Bedarf neu startet ?
Idee: Ein "not found" im Logfile zum Anlass für einen Reader Neustart nehmen.

Hat hierzu jemand eine Idee ??

Danke euch schonmal.
 
Zuletzt bearbeitet:
AW: OScam Reader "überwachen"

Darüber bin ich schon gestolpert, ich habe die zwei 4-Zeiler copy & paste verwendet, aber da tut sich nichts.
Zumal ja, so meine Logik, nirgends hinterlegt ist, dass im Logfile nach "not found" für einen Speziellen Reader gesucht wird.
Die anderen Reader dürfen bei Not Found nicht gestartet werden.
Beispiel: Bei meiner Sky Karte darf nicht dauernd ein Restart erfolgen, nur weil immer wieder eine Anfrage auf Big Brother oder so kommt.

Gibt es exakte Erklärungen zu deinen beiden Skripten ?
Vor allem ,was ist diese oscam.armel ?
Hab ich nicht^^

Danke und LG
 
AW: OScam Reader "überwachen"

Oscam.armel ist die Bezeichnung für Oscam auf einem Server mit Arm5/ / Architektur.
Es steht auch dabei, daß Einiges angepaßt werden muß. z.B. der Name von oscam.
Auf der Dream heißt die mal oscam_1.20, mal oscam, mal auch oscam1.0.
Ebenso gibt es unterschiedliche Bezeichnungen auf Servern, wie RPi oder Pogo.
Richtet sich halt nach der CPU.

Also die blauen und roten Teile müssen angepaßt werden.
 
AW: OScam Reader "überwachen"

Ja okay das leuchtet mir ein.
Was ich vermisse, ist die Prüfung des Readers.
Ich habe das Skript hier von Dir übernommen, und die Pfade angepasst :

if grep -w -n getting /var/log/ipc/OScam.log then wget --password= 'xyz123' --post-data 'action=restart&label=TIVUSAT'
wait 50
date >> /var/log/errors.txt
# /var/emu/oscam/oscam.x86 -b
fi

Was ich dabei nicht verstehe, woher weiss das Skript, dass die Karte nicht mehr entschlüsselt ?
Denn der Status bleibt ja weiterhin CARDOK.
Das Skript muss also exakt im Logfile nach "not found" in Verbindung mit Tivusat suchen und dann den einzelnen Reader neustarten.
Und meiner Ansicht nach gibt das Skript das nicht her.
Und Die Zeile
# /var/emu/oscam/oscam.x86 -b
verstehe ich leider gar nicht. Eine Raute heisst doch "ausgeblendet".
Also kann man die rauslöschen ?
Bei mir läuft das Skript jedenfalls nicht.
Und....was bedeutet denn
date >> /var/log/errors.txt
Diese errors.txt habe ich nicht.

Mal ganz abgesehen davon, ich möchte keinen Reader abfragen, denn der läuft ja.
Es muss geprüft werden, ob valid ECMs kommen, oder ob not found für exakt einen Reader im Log zu finden sind.
Nur dann funktioniert es.
Im Moment habe ich 3 Tivusat Karten (183D) die ich nach der Reihe jede Minute starte.
So dass jeder Reader alle 3min neu gestartet wird.
Derzeit die einzige Variante, damit Tivusat in OSCAM läuft.

Danke für Erklärungen.
Bin wie gesagt nicht vom Fach und kann hier nur "Copy & Paste" machen.

LG
 
Zurück
Oben