EUMETCast Ku-band Europe - SNR, Quality & Bit Error Rate

Hydra DVB SNR Graph

Test PC
Hydra
(V2.6D card)

SNR dB x 10

Signal Quality %

Stamsund DVB SNR Graph

Backup PC
Stamsund
(V2.6D card)

SNR dB x 10

Signal Quality %

Stamsund DVB BER Graph

Backup PC
Stamsund
(V2.6D card)

Bit Error Rate

BER snapshots
parts per million

Click on a graph for weekly, monthly and yearly data

 
This data is taken from my Test and Backup PCs, which have SkyStar2 V2.6D PCI cards.  They are fed via two splitters from the main feed from the LNB.  The plot shows snapshots of the Bit Error Rate (BER) taken every five minutes, and snapshots of the Signal Quality (green) and SNR (blue) readings.  To use a common scale, the SNR plotted is ten times the true value, so that the SNR scale is 0..12.0dB.  Time is shown in UTC.  
Summary per PC

What do we observe?


EUMETCast Ku-band Europe - TelliCast Missed and Recovered packets

Hermes TelliCast Graph

Main PC
Hermes
(V2.6B card)

Missed packets

Recovered packets

Hydra TelliCast Graph

Test PC
Hydra
(V2.6D card)

Missed packets

Recovered packets

Stamsund TelliCast Graph

Backup PC
Stamsund
(V2.6D card)

Missed packets

Recovered packets

Click on a graph for weekly, monthly and yearly data

 This data is snapshots of the TelliCast statistics display.  The numbers are rather small, and packets per day would be the best display scaling, but MRTG only offers packets per hour at best.  Therefore, it's possible that for the backup PC, at least (which just takes MSG-1 and EARS-AVHRR), the recovered packets may stay at zero for the display, rather than their actual non-zero value.  This will be reviewed once a few days data is gathered.


EUMETCast Ku-band Europe - Daily Download Throughput

DVB Main Traffic Graph

Main PC
V2.6B SkyStar2 PCI
Receiving:
MSG-2, free DWDSAT
EARS-AVHRR
& Metop-AVHRR

DVB Test Traffic Graph

Test PC
V2.6D SkyStar2 PCI
Receiving:
MSG-2,
EARS-AVHRR & 
all Metop-A data

DVB Vista Traffic Graph

Vista PC
Dexatek USB box
Receiving:
MSG-2, Metop-AVHRR
& EARS-AVHRR

DVB Backup Traffic Graph

Backup PC
V2.6D SkyStar2 PCI
Receiving:
MSG-2 (+ tests)
& EARS-AVHRR

Click on a graph for weekly, monthly and yearly data


  

Other sites with EUMETCast monitoring - north to south order - map quick-look

How can I set up similar monitoring on my own system?  Read this page!


TelliCast and the network throughput.

The way the DVB and TelliCast system works - in a nutshell - is this.  The data from the satellite is tagged with a packet identifier called the PID, and using the setup for your DVB card you can choose which PIDs the card should handle.  As there are only a limited number of PIDs which some DVB cards can handle, the PID is used as a rather coarse-level control to break the data stream down into reasonable-bandwidth chunks.  The data is sent from the DVB card to the TelliCast receiving program as an IP multicast stream, delivered over UDP (meaning that delivery isn't guaranteed, hence the susceptibility of the system to interruptions by high CPU, disk and network loading.  

The data is further divided into streams by using "channel names".  Here are the channel names for EUMETCast.  A single PID may contain a number of different streams, but each stream will have a different multicast address.  The multicast address of the "Announcement channel" stream is fixed, and that channel talks to the TelliCast program saying what data is available.  If you have configured the TelliCast program to accept a particular data channel (e.g. EUMETSAT Data Channel 2 - for the HRIT data), and you are allowed access by your eToken, when new data is available for that channel the TelliCast program will "join" the multicast being sent out via the DVB software, and when the DVB software finds a "joined" channel (i.e. one with some listeners), it will send out the data packets for that stream to the appropriate multicast address.

In computer networking terms, the packets originate from a multicast network 224.0.0.0 with a netmask 240.0.0.0.  For example, for [Metop AVHRR] data, the source address is 224.223.222.239:2390.  The TelliCast software has the address of an "announcement channel" set by its recv.ini file, which also contains the address of the network interface (typically 192.168.238.238).  So the TelliCast software should be able to join a multicast group on the specified interface.  One thing which some DVB software appears to omit is the command to tell Windows that any request for the multicast network (224.0.0.0) must be routed via the DVB virtual network interface (192.168.238.238), and you may need to add that route with a manual command.  However, as the TelliCast software already knows exactly which interface to use, why you even need the route command is not yet clear.....  More about multicast programming.  The recv-channels.ini file will determine whether or not TelliCast accepts a particular set of data announced by the DVB network.  If that data isn't accepted, the network interface doesn't send it, and it won't appear on the flow reported by the DVB pseudo-network (although this behaviour appears to differ between the SkyStar PCI and Dexatek USB software).  Perhaps this is handled by having more than one multicast group associated with the TelliCast software.  Perhaps there is one group per data channel?  Multicast Mechanics.

It is the sum total of data sent to active multicast channels which is plotted above as "throughput".  Note that as some of the data is compressed internally to the TelliCast software, the network throughput between the DVB interface and the TelliCast software may be less than the data throughput reported by the TelliCast software.  To reduce the load on your PC, you can either disable individual PIDs in the DVB software (right-click the green satellite icon , Setup4PC, Data Services), or you can select the channels you want by editing the recv-channels.ini file in the TelliCast software.


Significant events and changes


How were these results plotted?

I use MRTG to monitor my networks.  I suggest that you first set up MRTG to show the network throughput on your system, using the instructions on the MRTG Web pages.  Define a directory for the output HTML and PNG files from MRTG, and use the command "perl cfgmaker public@<pc-name>" to establish your basic MRTG configuration file.  Note also that you will need to create the LogDir, HtmlDir and ImageDir folders yourself - MRTG doesn't do it for you.  These directories are where the summary log files, the HTML output, and the PNG image output are stored.  The HTML and PNG output make up the graph pages you have seen above.

To show throughput, SNMP (Simple Network Management Protocol) also needs to installed on the PC as part of the Windows Networking components (it's on the Windows CD).  To install SNMP, Control Panel, Add/Remove Programs, Add/Remove Windows Components, check that Management and Monitoring Tools are selected.

You can also use MRTG to plot a variable which can be obtained from the command-line by running a program which writes it results to "standard output", i.e. a normal command-line output.  I used the B2status.exe program from the B2C2 SDK which can return a snapshot of the status of the DVB card.  Please be aware that the version of B2status.exe in the current SDK does not work, so there is an earlier copy here in B2satus.zip.  You will need to copy this program to somewhere on the "path", such as C:\Windows\System32\, so that the command can be executed from any location.  If you aren't sure what your "path" is, enter PATH at the command prompt, and the current path will be shown.  The B2status.exe program can take command-line parameters to limit the displayed data, so I run this with the -TI parameter.  The first line of the Perl script below invokes the command, and processes the output from the program into a four-line response as required by MRTG.  There are two separate scripts - one to get the Quality and SNR, the other to get the BER.  To make the values sensible integers for MRTG to plot, the SNR is scaled by 10 so that both it and Quality become values in the range 0..120 (at least on my system), and the BER is scaled by 1E6 so that it becomes an integer "parts per million" value.  

Note: it appears that using such small integers with MRTG may lead to slight errors in the yearly and monthly plots, with the values being less than the true values, so be careful not to interpret the results too critically.  It would perhaps be better to multiply the results by (say) 1000 before giving them to MRTG, but you would then need to rescale the graphs and display text.

Allan Gibbs comments: When using b2status I had to add the card's name - I just used "skystar" and it worked whereas I kept getting an error otherwise.  So my entry in the .pl files is:

    b2status -a skystar -ti

Note for SkyStar V4.4.1 drivers: The first line would be:

	$ntp_str = `"C:\\Program Files\\TechniSat DVB\\bin\\b2status.exe" -ti`;

if you needed to run the b2status command from its installed folder, for example if you have the SkyStar V4.4.1 drivers.

 

File: SkyStarQualSNR.pl

$ntp_str = `b2status -ti`;
$qual = (split(/\n/,$ntp_str))[4];
$qual = (split(/ +/,$qual))[4];
$snr = (split(/\n/,$ntp_str))[5];
$snr = 10 * (split(/ +/,$snr))[3];
$snr = int ($snr);
print "$qual\n";
print "$snr\n";
print "0\n";
print "0\n";

File: SkyStarBER.pl

$ntp_str = `b2status -ti`;
$ber = (split(/\n/,$ntp_str))[6];
$ber = (split(/ +/,$ber))[3];
$ber = int (1000000 * $ber);
print "0\n";
print "$ber\n";
print "0\n";
print "0\n";

Once the values are available as integers, they can be plotted with MRTG.  Plotting the Quality and SNR requires a fixed 0..120 scale (allowing for up to 12dB).  Plotting the BER is best done on a log scale.  I did add the Timezone option, to make sure the plots are in UTC (which is called GMT by MRTG) so that plots from different countries may be more easily compared, and I added an XSize setting so that the graphs cover a slightly wide time range.  These are entered as "default" values, i.e. using just the underscore as the target name.  I'm no expert in MRTG, so if you have any suggestions for improvements of the following I would welcome them!

Extra lines for MRTG.cfg

# These are default values

XSize[_]: 500
Timezone[_]: GMT

#---------------------------------------------------------------
#	PC Stamsund - EUMETCast BER (bit error rate)
#---------------------------------------------------------------

Target[SkyStar_Stamsund_BER]: `perl SkyStarBER.pl`
MaxBytes[SkyStar_Stamsund_BER]: 1000000
Title[SkyStar_Stamsund_BER]: SkyStar V2.6D DVB PCI card on Stamsund
Options[SkyStar_Stamsund_BER]: gauge, nopercent, growright, logscale, withzeroes, unknaszero
YLegend[SkyStar_Stamsund_BER]: BER ppm
ShortLegend[SkyStar_Stamsund_BER]: ppm
LegendI[SkyStar_Stamsund_BER]:
LegendO[SkyStar_Stamsund_BER]: BER:&nbsp;
Legend1[SkyStar_Stamsund_BER]: 
Legend2[SkyStar_Stamsund_BER]: Bit Error Rate (BER) in parts per million
PageTop[SkyStar_Stamsund_BER]: <H1>SkyStar2 Bit Error Rate (BER) snapshots - Stamsund</H1>

#---------------------------------------------------------------
#	PC Stamsund - EUMETCast quality and SNR
#---------------------------------------------------------------

Target[SkyStar_Stamsund_SNR]: `perl SkyStarQualSNR.pl`
MaxBytes[SkyStar_Stamsund_SNR]: 120
MaxBytes2[SkyStar_Stamsund_SNR]: 120
Unscaled[SkyStar_Stamsund_SNR]: dwmy
Title[SkyStar_Stamsund_SNR]: SkyStar V2.6D DVB PCI card on Stamsund
Options[SkyStar_Stamsund_SNR]: integer, gauge, nopercent, growright, unknaszero
YLegend[SkyStar_Stamsund_SNR]: Quality, SNR x10
ShortLegend[SkyStar_Stamsund_SNR]: .
LegendI[SkyStar_Stamsund_SNR]: Quality %:&nbsp;
LegendO[SkyStar_Stamsund_SNR]: 10 * SNR dB:&nbsp;
Legend1[SkyStar_Stamsund_SNR]: Signal Quality (0..120%)
Legend2[SkyStar_Stamsund_SNR]: SNR * 10 (0..12.0dB)
PageTop[SkyStar_Stamsund_SNR]: <H1>SkyStar2 Quality & SNR snapshots - Stamsund</H1>

#---------------------------------------------------------------

Once you have MRTG creating the HTML and PNG files, you will need to create a routine job to upload those files to your Web server, and schedule that job with the Windows scheduler.  I update every 30 minutes, the choice of update frequency is yours.  Use the Advanced settings in the Windows Scheduler to repeat the upload task every 30 minutes for a duration of 24 hours, and schedule the overall task to run every day.  Notes on using the Windows scheduler.

Scheduled command file - e.g. C:\Tools\UploadMRTG.cmd

----------------------------------------------------------------------
REM Go to where the MRTG HTML output is:
PUSHD  C:\Web\LocalCopy\

REM Call FTP with redirected input:
FTP -n -i -s:C:\Tools\UploadMRTG.ftp

POPD
EXIT
----------------------------------------------------------------------

FTP commands - e.g. C:\Tools\UploadMRTG.ftp

----------------------------------------------------------------------
open ftp.<my.web.space>
user <user-name> <password>

cd /mrtg/
lcd \Web\LocalCopy\
prompt			N.B. only required for MOVEit Freely.
type ascii
mput *.html
type binary
mput *.png

quit
----------------------------------------------------------------------

Well, I expect you get the idea.....  I found that the Windows-supplied command-line FTP program tended to hang with my ISP's Web provision, so I now use MOVEit Freely from Standard Networks instead.  Almost identical command syntax, but you need to turn off per-file prompting with the "prompt" command, as shown above.  If you are new to command-line FTP, there are some hints and tips here.
  

Monitoring FSY file size

Fred van den Bosch posted the following information in the MSG-1 Yahoo group for those who wish to monitor the size of the TelliCast FSY database file(s).  You can see Fred's results here.

Fred writes: With some trial and error I found something (don't dare to call it a solution yet).  At least it works for 0.fsy.  I can only test it when a 1.fsy file is generated, so I hope I can never test this :-)  For those who already have a 1.fsy and want to test it this is the whole content of fsysize.pl.  Crazy language, that Perl.  Why crazy? Well during testing I noticed that fields I set within the "if" has no value outside the "if". ??????  I agree, I know nothing about Perl (and after the above experiences I like to keep it that way), so there's a good chance I do something completely wrong. But it works and that's all that matters.  Later: Nice language, that Perl.  Thanks to hint from Rob Alblas I understand now what was wrong.  My means to declare a variable and this I did a couple of times.  So the revised (and hopefully final) version is now: 

use File::stat;
chdir("z:");
chdir("/receiving");
my $fsysiz0 = 0;
my $fsysiz1 = 0;
$fsysiz0 = stat("0.fsy")->size;
$sb=$fsysiz0 * 0.000001;
$dev = stat("1.fsy");
if ($dev > 0) {
	$fsysiz1 = stat("1.fsy")->size;
}
$sb=($fsysiz0 + $fsysiz1) * 0.000001;
print "0\n";
print "$sb\n";
print "0\n";
print "0\n";

 

Monitoring TelliCast statistics

I wrote a small program which takes a PC node name as a parameter, reads the output from the TelliCast HTML Shell, Statistics screen, and returns the result to standard output.  Place TelliCastStats.exe in your MRTG\bin directory, and ensure that the run-time libraries are installed on the system.  If you have a software firewall installed, you may need to give the program permission to access the local network.  You can use that program together with MRTG like this, where hermes is the TCP/IP node name for the PC you wish to monitor:

#---------------------------------------------------------------

Target[Tellicast-Hermes]: `TelliCastStats hermes`
MaxBytes[Tellicast-Hermes]: 1000000
Options[Tellicast-Hermes]: unknaszero, growright, logscale, nopercent, withzeroes, perhour
YLegend[Tellicast-Hermes]: Packets / hour
ShortLegend[Tellicast-Hermes]: packets / hour
LegendI[Tellicast-Hermes]: Recovered packets
LegendO[Tellicast-Hermes]: Missed packets
Title[Tellicast-Hermes]: TelliCast Statistics - on main PC Hermes
Legend1[Tellicast-Hermes]: Recovered Data Packets
Legend2[Tellicast-Hermes]: Missed Data Packets before FEC
PageTop[Tellicast-Hermes]: <H1>TelliCast Statistics - on main PC Hermes</H1>
#---------------------------------------------------------------

 


Testing the scripts

To help you test an installation on your own system, I would first suggest getting Perl, MRTG and SNMP installed on your system, and getting the network throughput data from the DVB card correctly plotted.

Alan Banks comments: If you need to fault find the cfg file go to C:\mrtg-2.15.0\bin ( or wherever you put mrtg.cfg)

    perl mrtg mrtg.cfg

This will tell you what errors there are in the file if it wont start.  When you have it working, close the command window, re-open go to C:\mrtg-2.15.0\bin and type

    wperl mrtg mrtg.cfg

Check wperl is in processes in Task Manager and then close the cmd prompt.  [DJT note: I just use Perl and not WPerl]

Once you have the throughput correctly plotting and updating, progress to the scripts above.  Here are some debugging hints:

First question

Is the SkyStar card installed in the system where you are running MRTG?  OK, I thought it was!

Second question

When you run B2STATUS.exe, does it produce something like this?

C:\> b2status -ti
************* Current Tuner information: ****************
Tuner type : Satellite
Status In Lock : YES
Signal Strength : n/s
Signal Quality : 65 %
SNR : 8.651000
BER : 0.000000
Total Blocks : n/s
Corrected Blocks : n/s
Uncorrected Blocks : 0
Settings Frequency : 10853 MHz
Symbol Rate : 27500 kS/s
FEC : 3/4
Polarity : HORIZONTAL
Modulation : n/s
Diseqc : NONE
LNB Frequ. : 9750 MHz
LNB Select. : 0 kHz
Guard Interv. : n/s
Bandwidth : n/s
*********************************************************
C:\>

It is this output which the Perl Script parses.

Third Question

Finally, running the command from the Command prompt:

perl SkyStarQualSNR.pl

should produce 4 lines of output, something like:

65
86
0
0

Please note that we have also found that the BER is almost always zero on some cards, unless the signal is about to crash completely through the floor!


David Taylor
2007 Jan 24