michaels110
Ist oft hier
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:
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
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.
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&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&show=0" TITLE="Show statistics for: ice/irdeto">no data</A></TD>
<TD CLASS="statuscol15" TITLE="Online: 14d 13:19:08
IDLE: 00:00:02">19.12.17<BR>22:45:48</TD>
<TD CLASS="statuscol16">CARDOK<BR><A HREF="entitlements.html?label=ice%2firdeto&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&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&show=0" TITLE="Show statistics for: hdplus">no data</A></TD>
<TD CLASS="statuscol15" TITLE="Online: 00:10:27
IDLE: 00:10:27">03.01.18<BR>11:54:29</TD>
<TD CLASS="statuscol16">CARDOK<BR><A HREF="entitlements.html?label=hdplus&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: