Quantcast
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 Status als RSS Feed, Bookmark, Lesezeichen

michaels110

Ist oft hier
Registriert
3. Juli 2009
Beiträge
123
Reaktionspunkte
75
Punkte
48
Ort
19,2° Ost
Hallo Leute,

Da es öfters mal vorgekommen ist dass bei den Card Readern/Entitlements was nicht stimmt, hab ich ein kleines Script erstellt um den Status der Reader als dynamischen RSS Feed anzuzeigen. Mit Firefox zB. sieht das ganze dann so aus:

Du musst angemeldet sein, um Bilder zu sehen.


Normalerweise müssten alle Oscam Webinterfaces vom Quelltext gleich aufgebaut sein (getestet mit 2 verschiedenen Versionen). Daher ist eine Änderung des preg_match wohl nicht notwendig und das Script ist direkt einsatzfähig. Webserver, PHP5 und curl sind am Rechner notwendig wo das Script liegt.

Wenn die RSS Feed Funktion nicht gebraucht wird, kann der Status der Reader auch als einfacher Text im Browser angezeigt werden.
Zum Beispiel um den Inhalt woanders einzubinden. Dazu einfach den Teil im Script entfernen/auskommentieren.


Viel Spass bei der Überwachung von Oscam :)

PHP:
<?php
//
    $username = 'username';
    $password = 'password';
    $oscam_url = 'http://127.0.0.1:16002/status.html';
 
    //curl
    $curl = curl_init();
    $headers = array(
    'POST HTTP/1.0',
    'Content-type: text/xml;charset="utf-8"',
    'Accept: text/xml',
    'Cache-Control: no-cache'
    );
    curl_setopt_array($curl, array(
    CURLOPT_RETURNTRANSFER => 1,
    CURLOPT_URL => $oscam_url,
    CURLOPT_USERPWD => $username . ":" . $password,
    CURLOPT_HTTPAUTH => CURLAUTH_DIGEST,
    CURLOPT_HTTPHEADER => $headers
    ));
 
    $response = curl_exec($curl);
 
    curl_close($curl);

    //count readers
    $sum = preg_match_all("#<tbody id=\"tbodyr\"><TR ID=\"Readerheadline\">(.*?)</tbody>#si", $response, $match_sum2);
    $count = preg_match_all("#<TR ID=\"(.*?)\" CLASS=\"r\" data-ecmhistory=\"\">(.*?)</TR>#si", $match_sum2[0][0]);
 
    $timestamp = time();
    $time = date('H:i:s',$timestamp);
    $pubdate = date('r', $timestamp);
 
    ### RSS FEED
 
    header('Content-type: text/xml');
    echo '<?xml version="1.0" encoding="UTF-8" ?>
    <rss version="2.0">';
 
    echo '
    <channel>
    <language>en</language>
    <title>Oscam Status</title>
    <link>'.$oscam_url.'</link>
    <pubDate>'.$pubdate.'</pubDate>
    <ttl>60</ttl>';
 
for ($i = 0; $i <= $count; $i++){

    //reader name
    $find = preg_match_all('#<tbody id="tbodyr"><TR id="Readerheadline">(.*?)</tbody>#si', $response, $match_readername);
    $find = preg_match_all('#<TD Class="statuscol5">(.*?)</TD>#si', $match_readername[0][0], $match_readername2);
    $find = preg_match_all('#<SPAN>(.*?)</SPAN>#si', $match_readername2[0][$i], $match_readername3);
    //remove html stuff from reader name
    $match_readername3[0][0] = str_replace('<SPAN>', '', $match_readername3[0][0]);
    $match_readername3[0][0] = str_replace('</SPAN>', '', $match_readername3[0][0]);

    //reader status
    $find = preg_match_all('#<tbody id="tbodyr"><TR ID="Readerheadline">(.*?)</tbody>#si', $response, $match_status);
    $find = preg_match_all('#<TD CLASS="statuscol16">(.*?)<BR>#si', $match_status[0][0], $match_status2);
    //remove html stuff from reader status
    $match_status2[0][$i] = str_replace('<TD CLASS="statuscol16">', '', $match_status2[0][$i]);
    $match_status2[0][$i] = str_replace('<BR>', '', $match_status2[0][$i]);
    
    //emm summary
    $find = preg_match_all('#<tbody id="tbodyr"><TR ID="Readerheadline">(.*?)</tbody>#si', $response, $match_emm);
    $find = preg_match_all('#<TD CLASS="statuscol16">(.*?)</TD>#si', $match_emm[0][0], $match_emm2);
    $find = preg_match_all('#CLASS="tooltip[^>]*">(.*?)<SPAN>#si', $match_emm2[0][$i], $match_emm3);
    // remove html stuff from emm summary
    $match_emm3[1][0] = str_replace('<SPAN>', '', $match_emm3[1][0]);
    $match_emm3[1][0] = str_replace('(', '', $match_emm3[1][0]);
    $match_emm3[1][0] = str_replace(')', '', $match_emm3[1][0]);

    if(!isset($match_readername3[0][0]) or $match_readername3[0][0] == ""){
 
    $rss_output = '';
 
    } else {
 
    $reader_name = strtoupper($match_readername3[0][0]);
    $status = strtoupper($match_status2[0][$i]);
    $emm = strtoupper($match_emm3[1][0]);
 
    $rss_output = '<item>
    <title>'.$reader_name.' - '.$status.' - '.$emm.' ('.$time.')</title>
    <reader>'.$reader_name.'</reader>
    <status>'.$status.'</status>
    <emm>'.$emm.'</emm>
    </item>';
 
    }
 
    echo $rss_output;
 
    }
 
    # RSS Feed End
    echo '</channel>
</rss>';
?>

Wer das Script noch bearbeiten möchte hier der Quelltext vom Oscam Interface, welcher per preg_match_all eingelesen wurde.
HTML:
<tbody id="tbodyr"><TR ID="Readerheadline">
    <TD CLASS="subheadline" COLSPAN="12">
        <P id="rhead">Readers <span id="rcc">2</span>/<span id="rca">2</span> </P>
<DIV><input type="button" onclick="window.location.href = 'status.html?hideidle=3';" value="Show Hidden" title="Show Hidden Reader"></DIV>
    </TD>
</TR>        <TR ID="id_0x13ec238" CLASS="r" data-ecmhistory="139,136,136,136,136,137,137,138,137,137,139,138,137,136,137,137">
            <TD CLASS="statuscol0"><A HREF="status.html?hide=0x13ec238" TITLE="Hide Reader: ice/irdeto"><IMG CLASS="icon" SRC="image?i=ICHID" ALT="Hide"></A></TD>
            <TD CLASS="statuscol1"><A HREF="status.html?action=restart&amp;label=ice%2firdeto" TITLE="Restart Reader: ice/irdeto"><IMG CLASS="icon" SRC="image?i=ICRES" ALT="Restart"></A>
</TD>
            <TD CLASS="statuscol4" TITLE="ice/irdeto"><A CLASS="statususericon" HREF="readerconfig.html?label=ice%2firdeto" TITLE="Edit Reader: ice/irdeto">ice/irdeto</A></TD>
            <TD CLASS="statuscol5"><A HREF="#" CLASS="tooltip">ON<SPAN>ice/irdeto</SPAN></A></TD>
            <TD CLASS="statuscol7">127.0.0.1</TD>
            <TD CLASS="statuscol8">0</TD>
            <TD CLASS="statuscol9" TITLE="">smartreader</TD>
            <TD CLASS="statuscol12">132F:0648@000000</TD>
            <TD CLASS="statuscol13"><A CLASS="statususericon" HREF="files.html?file=oscam.srvid" TITLE="ORF1 HD [ORF ICE]">ORF1 HD [ORF ICE]</A></TD>
            <TD CLASS="statuscol14"><A HREF="readerstats.html?label=ice%2firdeto&amp;show=0" TITLE="Show statistics for: ice/irdeto">no data</A></TD>
            <TD CLASS="statuscol15" TITLE="Online: 14d 13:19:08&#013;IDLE: 00:00:02">19.12.17<BR>22:45:48</TD>
            <TD CLASS="statuscol16">CARDOK<BR><A HREF="entitlements.html?label=ice%2firdeto&amp;hideexpired=1" CLASS="tooltip">(9 entitlements)<SPAN>0648@E6D4FF<BR>exp:2018/08/25<BR><BR>0648@E6D4FF<BR>exp:2018/08/25<BR><BR>0648@E6D4FF<BR>exp:2018/08/25<BR><BR>0648@E6D4FF<BR>exp:2018/07/27<BR><BR>0648@E6D4FF<BR>exp:2018/07/27<BR><BR>0648@E6D4FF<BR>exp:2018/01/18<BR><BR>0648@E6D4FF<BR>exp:2018/01/18<BR><BR>0648@E6D4FF<BR>exp:2018/01/18<BR><BR>0648@E6D4FF<BR>exp:2018/01/18</SPAN></A></TD>
        </TR>
        <TR ID="id_0x14310b8" CLASS="r" data-ecmhistory="">
            <TD CLASS="statuscol0"><A HREF="status.html?hide=0x14310b8" TITLE="Hide Reader: hdplus"><IMG CLASS="icon" SRC="image?i=ICHID" ALT="Hide"></A></TD>
            <TD CLASS="statuscol1"><A HREF="status.html?action=restart&amp;label=hdplus" TITLE="Restart Reader: hdplus"><IMG CLASS="icon" SRC="image?i=ICRES" ALT="Restart"></A>
</TD>
            <TD CLASS="statuscol4" TITLE="hdplus"><A CLASS="statususericon" HREF="readerconfig.html?label=hdplus" TITLE="Edit Reader: hdplus">hdplus</A></TD>
            <TD CLASS="statuscol5"><A HREF="#" CLASS="tooltip">ON<SPAN>hdplus</SPAN></A></TD>
            <TD CLASS="statuscol7">127.0.0.1</TD>
            <TD CLASS="statuscol8">0</TD>
            <TD CLASS="statuscol9" TITLE="">mouse</TD>
            <TD CLASS="statuscol12">0000:0000@000000</TD>
            <TD CLASS="statuscol13"></TD>
            <TD CLASS="statuscol14"><A HREF="readerstats.html?label=hdplus&amp;show=0" TITLE="Show statistics for: hdplus">no data</A></TD>
            <TD CLASS="statuscol15" TITLE="Online: 00:10:27&#013;IDLE: 00:10:27">03.01.18<BR>11:54:29</TD>
            <TD CLASS="statuscol16">CARDOK<BR><A HREF="entitlements.html?label=hdplus&amp;hideexpired=1" CLASS="tooltip">(1 entitlement)<SPAN>1830@008011<BR>exp:2019/12/30</SPAN></A></TD>
        </TR>
</tbody>

Edit: Das Skript wurde inzwischen etwas erweitert, da obwohl die EMM ok waren, es zu Fehlern kam (zB. USB Bulk Write Error)

Voraussetzung ist dass bei Oscam die Logging Funktion aktiviert ist. Im Skript ist bei Zeile 34 der Pfad zum Logfile einzutragen.

Du musst angemeldet sein, um Bilder zu sehen.


PHP:
<?php 
//
    $username = 'username';
    $password = 'password';
    $oscam_url = 'http://127.0.0.1:16002/status.html';
   
    //curl
    $curl = curl_init();
    $headers = array(
    'POST HTTP/1.0',
    'Content-type: text/xml;charset="utf-8"',
    'Accept: text/xml',
    'Cache-Control: no-cache'
    );
    curl_setopt_array($curl, array(
    CURLOPT_RETURNTRANSFER => 1,
    CURLOPT_URL => $oscam_url,
    CURLOPT_USERPWD => $username . ":" . $password,
    CURLOPT_HTTPAUTH => CURLAUTH_DIGEST,
    CURLOPT_HTTPHEADER => $headers
    ));
   
    $response = curl_exec($curl);

    //count readers
    $sum = preg_match_all("#<tbody id=\"tbodyr\"><TR ID=\"Readerheadline\">(.*?)</tbody>#si", $response, $match_sum2);
    $count = preg_match_all("#<TR ID=\"(.*?)\" CLASS=\"r\" data-ecmhistory=\"\">(.*?)</TR>#si", $match_sum2[0][0]);
   
    $timestamp = time();
    $time = date('H:i:s',$timestamp);
    $pubdate = date('r', $timestamp);

    // bulk status
    $file = new SplFileObject("/usr/local/etc/oscam.log");
    $file->seek(PHP_INT_MAX);
    $total_lines = $file->key();
   
    $bulk_status = 'OK';
   
    if($total_lines < 50){
   
    $reader = new LimitIterator($file, $total_lines);
   
    } else {
   
    $reader = new LimitIterator($file, $total_lines - 50); 
   
    }
   
    foreach ($reader as $line){
   
    if(preg_match("/\busb bulk write failed\b/i", $line)){ $bulk_status = 'Error'; }
   
    } // bulk status
   
    ### RSS FEED
    header('Content-type: text/xml');
    echo '<?xml version="1.0" encoding="UTF-8" ?>
    <rss version="2.0">';
   
    echo '
    <channel>
    <language>en</language>
    <title>Oscam Status</title>
    <link>'.$oscam_url.'</link>
    <pubDate>'.$pubdate.'</pubDate>
    <ttl>60</ttl>';
     
for ($i = 0; $i <= $count; $i++){ 

    //reader name
    $find = preg_match_all('#<tbody id="tbodyr"><TR id="Readerheadline">(.*?)</tbody>#si', $response, $match_readername);
    $find = preg_match_all('#<TD Class="statuscol5">(.*?)</TD>#si', $match_readername[0][0], $match_readername2);
    $find = preg_match_all('#<SPAN>(.*?)</SPAN>#si', $match_readername2[0][$i], $match_readername3);
    //remove html stuff from reader name
    $match_readername3[0][0] = str_replace('<SPAN>', '', $match_readername3[0][0]);
    $match_readername3[0][0] = str_replace('</SPAN>', '', $match_readername3[0][0]);

    //reader status
    $find = preg_match_all('#<tbody id="tbodyr"><TR ID="Readerheadline">(.*?)</tbody>#si', $response, $match_status);
    $find = preg_match_all('#<TD CLASS="statuscol16">(.*?)<BR>#si', $match_status[0][0], $match_status2);
    //remove html stuff from reader status
    $match_status2[0][$i] = str_replace('<TD CLASS="statuscol16">', '', $match_status2[0][$i]);
    $match_status2[0][$i] = str_replace('<BR>', '', $match_status2[0][$i]);
       
    //emm summary
    $find = preg_match_all('#<tbody id="tbodyr"><TR ID="Readerheadline">(.*?)</tbody>#si', $response, $match_emm);
    $find = preg_match_all('#<TD CLASS="statuscol16">(.*?)</TD>#si', $match_emm[0][0], $match_emm2);
    $find = preg_match_all('#CLASS="tooltip[^>]*">(.*?)<SPAN>#si', $match_emm2[0][$i], $match_emm3);
    // remove html stuff from emm summary
    $match_emm3[1][0] = str_replace('<SPAN>', '', $match_emm3[1][0]);
    $match_emm3[1][0] = str_replace('(', '', $match_emm3[1][0]);
    $match_emm3[1][0] = str_replace(')', '', $match_emm3[1][0]);

    if(!isset($match_readername3[0][0]) or $match_readername3[0][0] == ""){
   
    $rss_output = '';
   
    } else {
   
    $reader_name = strtoupper($match_readername3[0][0]);
    $status = strtoupper($match_status2[0][$i]);
    $emm = strtoupper($match_emm3[1][0]);
   
    $rss_output = '<item>
    <title>'.$reader_name.' - '.$status.' - '.$emm.' ('.$time.')</title>
    <reader>'.$reader_name.'</reader>
    <status>'.$status.'</status>
    <emm>'.$emm.'</emm>
    </item>
    <item>
    <title>'.$reader_name.' Bulk Status: '.$bulk_status.'</title>
    </item>';
   
    }
   
    echo $rss_output;
   
    }
   
    # RSS Feed End
    echo '</channel>
</rss>';
?>
 
Zuletzt bearbeitet:
Zurück
Oben