Skip to content

Instantly share code, notes, and snippets.

@czenzel
Last active January 2, 2017 03:19
Show Gist options
  • Save czenzel/408305d20c272697b1f7eac02258c8f2 to your computer and use it in GitHub Desktop.
Save czenzel/408305d20c272697b1f7eac02258c8f2 to your computer and use it in GitHub Desktop.
Ingesting Radar Data to NOAAPORT NBSP from the National Weather Service using TGFTP/HTTP
<?php
/*
* teamWeather - Weather Center
* NOAAPORT FINFO Ingest Script for Radar Data
*
* Updated: 2016/11/12
*
* Copyright 2016 Christopher Zenzel
* All Rights Reserved
*/
// Set a time limit of 5 minutes
set_time_limit(60 * 5);
// Set the timezone and global variables
date_default_timezone_set('UTC');
$temporary_directory = dirname(__FILE__) . '/temp';
$download_keys = dirname(__FILE__) . '/keys';
$product_id = $argv[1];
$radar_sites = file_get_contents(dirname(__FILE__) . '/data/radar-sites.txt');
// Main Script Function
if (isset($product_id) && count($argv) > 0) {
$download_keys .= '/' . $product_id . '.txt';
Main();
} else {
echo "Please specify product.\n";
}
// Functions
function Main() {
global $radar_sites, $product_id;
// Find all the Radars from the NWS Directory
if (preg_match_all('/\"SI.([a-z]{4})\/\"/', $radar_sites, $matches, PREG_SET_ORDER)) {
foreach ($matches as $match) {
$radar_icao = $match[1];
// Download each product
DownloadRadar($radar_icao, $product_id);
}
}
}
function DownloadRadar ($icao, $product) {
global $download_keys, $temporary_directory;
// Get the JSON of current download modified times
$download_data = array();
// Check if file exists of keys. If not create one.
if (file_exists($download_keys)) {
$download_data = json_decode(file_get_contents($download_keys), true);
}
// Create the URL to Check or Download
$url = 'http://tgftp.nws.noaa.gov/SL.us008001/DF.of/DC.radar/DS.' . $product . '/SI.' . strtolower($icao) . '/sn.last';
// Send a Header Request
$head_content = CurlHeaderRequest($url);
// Generate the file key unique to this file
$file_key = md5($url);
// Find the last modified and compare to our database
if (!empty($head_content) && preg_match('/last-modified:\s?(?<date>.+)\n/i', $head_content, $match)) {
if (isset($download_data[$file_key]) && (strtotime($download_data[$file_key]) >= strtotime($match['date']))) {
// The downloaded version is current (oops!)
// We should not do anything just yet
} else {
// Download the file, update the NOAAPORT server
$data = CurlDownloadRequest($url);
// Check empty status
if (!empty($data)) {
// Receive the WMO and AWIPS Header
$wmo_insert = WMOHeaderForInsert($data);
// Store a temporary file
$temp_key_id = md5(microtime() . rand());
$temp_file = $temporary_directory . '/' . $temp_key_id;
// Fix some character issues since we are not on a NP channel
$data = "000000000000000000000000" . $data;
// Now send the file
file_put_contents($temp_file, $data);
// Create the ingest command
$nbsp_cmd = 'nbspinsert -i 0 0 0 0 0 ' . $wmo_insert[0] . ' /var/noaaport/nbsp/spool/' . $wmo_insert[2] . '/' . $wmo_insert[0] . ' < "' . $temp_file . '"';
// Execute the command. We must wait also for it to complete.
exec($nbsp_cmd);
// Update the keys
$download_data[$file_key] = $match['date'];
// Process the file
echo $nbsp_cmd . "\n";
// Delete the temporary file
unlink($temp_file);
}
}
}
// Store download keys in flat file key database
file_put_contents($download_keys, json_encode($download_data));
}
function WMOHeaderForInsert ($data) {
// Get the top two lines
$header_data = explode("\n", $data);
$header_l1 = $header_data[0];
$header_l2 = $header_data[1];
// Matching
$wmo_id = strtolower(substr($header_l1, 0, 6));
$office = strtolower(substr($header_l1, 7, 4));
$wmo_stamp = strtolower(substr($header_l1, 11, 6));
$icao = strtolower(substr($header_l2, 3, 3));
$product = strtolower(substr($header_l2, 0, 3));
// Return the data
return array($office . '_' . $wmo_id . '-' . $product . $icao,
$office . '_' . $icao . '_' . $product,
$office);
}
function CurlDownloadRequest ($url) {
// Send a GET Request
$ch = curl_init($url);
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_TIMEOUT, 10);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$ch_get = curl_exec($ch);
curl_close($ch);
// Return the data
return $ch_get;
}
function CurlHeaderRequest ($url) {
// Send a HEAD Request via HTTP
$ch = curl_init($url);
curl_setopt($ch, CURLOPT_NOBODY, true);
curl_setopt($ch, CURLOPT_HEADER, true);
curl_setopt($ch, CURLOPT_TIMEOUT, 10);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_1_1);
$ch_head = curl_exec($ch);
curl_close($ch);
// Return the result
return $ch_head;
}
?>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
<html>
<head>
<title>Index of /SL.us008001/DF.of/DC.radar/DS.p19r0</title>
</head>
<body>
<h1>Index of /SL.us008001/DF.of/DC.radar/DS.p19r0</h1>
<table><tr><th><a href="?C=N;O=D">Name</a></th><th><a href="?C=M;O=A">Last modified</a></th><th><a href="?C=S;O=A">Size</a></th></tr><tr><th colspan="3"><hr></th></tr>
<tr><td><a href="/SL.us008001/DF.of/DC.radar/">Parent Directory</a></td><td>&nbsp;</td><td align="right"> - </td></tr>
<tr><td><a href="SI.kabr/">SI.kabr/</a></td><td align="right">12-Nov-2016 06:56 </td><td align="right"> - </td></tr>
<tr><td><a href="SI.kabx/">SI.kabx/</a></td><td align="right">12-Nov-2016 06:50 </td><td align="right"> - </td></tr>
<tr><td><a href="SI.kakq/">SI.kakq/</a></td><td align="right">12-Nov-2016 06:57 </td><td align="right"> - </td></tr>
<tr><td><a href="SI.kama/">SI.kama/</a></td><td align="right">12-Nov-2016 06:49 </td><td align="right"> - </td></tr>
<tr><td><a href="SI.kamx/">SI.kamx/</a></td><td align="right">12-Nov-2016 06:55 </td><td align="right"> - </td></tr>
<tr><td><a href="SI.kapx/">SI.kapx/</a></td><td align="right">12-Nov-2016 06:54 </td><td align="right"> - </td></tr>
<tr><td><a href="SI.karx/">SI.karx/</a></td><td align="right">12-Nov-2016 06:58 </td><td align="right"> - </td></tr>
<tr><td><a href="SI.katx/">SI.katx/</a></td><td align="right">12-Nov-2016 06:55 </td><td align="right"> - </td></tr>
<tr><td><a href="SI.kbbx/">SI.kbbx/</a></td><td align="right">12-Nov-2016 06:57 </td><td align="right"> - </td></tr>
<tr><td><a href="SI.kbgm/">SI.kbgm/</a></td><td align="right">12-Nov-2016 06:54 </td><td align="right"> - </td></tr>
<tr><td><a href="SI.kbhx/">SI.kbhx/</a></td><td align="right">12-Nov-2016 06:57 </td><td align="right"> - </td></tr>
<tr><td><a href="SI.kbis/">SI.kbis/</a></td><td align="right">12-Nov-2016 06:54 </td><td align="right"> - </td></tr>
<tr><td><a href="SI.kblx/">SI.kblx/</a></td><td align="right">12-Nov-2016 06:56 </td><td align="right"> - </td></tr>
<tr><td><a href="SI.kbmx/">SI.kbmx/</a></td><td align="right">12-Nov-2016 06:55 </td><td align="right"> - </td></tr>
<tr><td><a href="SI.kbox/">SI.kbox/</a></td><td align="right">12-Nov-2016 06:49 </td><td align="right"> - </td></tr>
<tr><td><a href="SI.kbro/">SI.kbro/</a></td><td align="right">12-Nov-2016 06:56 </td><td align="right"> - </td></tr>
<tr><td><a href="SI.kbuf/">SI.kbuf/</a></td><td align="right">12-Nov-2016 06:53 </td><td align="right"> - </td></tr>
<tr><td><a href="SI.kbyx/">SI.kbyx/</a></td><td align="right">12-Nov-2016 06:53 </td><td align="right"> - </td></tr>
<tr><td><a href="SI.kcae/">SI.kcae/</a></td><td align="right">12-Nov-2016 06:55 </td><td align="right"> - </td></tr>
<tr><td><a href="SI.kcbw/">SI.kcbw/</a></td><td align="right">12-Nov-2016 06:52 </td><td align="right"> - </td></tr>
<tr><td><a href="SI.kcbx/">SI.kcbx/</a></td><td align="right">12-Nov-2016 06:55 </td><td align="right"> - </td></tr>
<tr><td><a href="SI.kccx/">SI.kccx/</a></td><td align="right">12-Nov-2016 06:56 </td><td align="right"> - </td></tr>
<tr><td><a href="SI.kcle/">SI.kcle/</a></td><td align="right">12-Nov-2016 06:54 </td><td align="right"> - </td></tr>
<tr><td><a href="SI.kclx/">SI.kclx/</a></td><td align="right">12-Nov-2016 06:57 </td><td align="right"> - </td></tr>
<tr><td><a href="SI.kcrp/">SI.kcrp/</a></td><td align="right">12-Nov-2016 06:51 </td><td align="right"> - </td></tr>
<tr><td><a href="SI.kcxx/">SI.kcxx/</a></td><td align="right">12-Nov-2016 06:50 </td><td align="right"> - </td></tr>
<tr><td><a href="SI.kcys/">SI.kcys/</a></td><td align="right">12-Nov-2016 06:51 </td><td align="right"> - </td></tr>
<tr><td><a href="SI.kdax/">SI.kdax/</a></td><td align="right">12-Nov-2016 06:55 </td><td align="right"> - </td></tr>
<tr><td><a href="SI.kddc/">SI.kddc/</a></td><td align="right">12-Nov-2016 06:54 </td><td align="right"> - </td></tr>
<tr><td><a href="SI.kdfx/">SI.kdfx/</a></td><td align="right">12-Nov-2016 06:57 </td><td align="right"> - </td></tr>
<tr><td><a href="SI.kdgx/">SI.kdgx/</a></td><td align="right">12-Nov-2016 06:51 </td><td align="right"> - </td></tr>
<tr><td><a href="SI.kdix/">SI.kdix/</a></td><td align="right">12-Nov-2016 06:56 </td><td align="right"> - </td></tr>
<tr><td><a href="SI.kdlh/">SI.kdlh/</a></td><td align="right">12-Nov-2016 06:55 </td><td align="right"> - </td></tr>
<tr><td><a href="SI.kdmx/">SI.kdmx/</a></td><td align="right">12-Nov-2016 06:49 </td><td align="right"> - </td></tr>
<tr><td><a href="SI.kdox/">SI.kdox/</a></td><td align="right">12-Nov-2016 06:56 </td><td align="right"> - </td></tr>
<tr><td><a href="SI.kdtx/">SI.kdtx/</a></td><td align="right">12-Nov-2016 06:51 </td><td align="right"> - </td></tr>
<tr><td><a href="SI.kdvn/">SI.kdvn/</a></td><td align="right">12-Nov-2016 06:51 </td><td align="right"> - </td></tr>
<tr><td><a href="SI.kdyx/">SI.kdyx/</a></td><td align="right">12-Nov-2016 06:54 </td><td align="right"> - </td></tr>
<tr><td><a href="SI.keax/">SI.keax/</a></td><td align="right">12-Nov-2016 06:50 </td><td align="right"> - </td></tr>
<tr><td><a href="SI.kemx/">SI.kemx/</a></td><td align="right">12-Nov-2016 06:56 </td><td align="right"> - </td></tr>
<tr><td><a href="SI.kenx/">SI.kenx/</a></td><td align="right">12-Nov-2016 06:49 </td><td align="right"> - </td></tr>
<tr><td><a href="SI.keox/">SI.keox/</a></td><td align="right">12-Nov-2016 06:56 </td><td align="right"> - </td></tr>
<tr><td><a href="SI.kepz/">SI.kepz/</a></td><td align="right">12-Nov-2016 06:56 </td><td align="right"> - </td></tr>
<tr><td><a href="SI.kesx/">SI.kesx/</a></td><td align="right">12-Nov-2016 06:56 </td><td align="right"> - </td></tr>
<tr><td><a href="SI.kevx/">SI.kevx/</a></td><td align="right">12-Nov-2016 06:50 </td><td align="right"> - </td></tr>
<tr><td><a href="SI.kewx/">SI.kewx/</a></td><td align="right">12-Nov-2016 06:57 </td><td align="right"> - </td></tr>
<tr><td><a href="SI.keyx/">SI.keyx/</a></td><td align="right">12-Nov-2016 06:53 </td><td align="right"> - </td></tr>
<tr><td><a href="SI.kfcx/">SI.kfcx/</a></td><td align="right">12-Nov-2016 06:55 </td><td align="right"> - </td></tr>
<tr><td><a href="SI.kfdr/">SI.kfdr/</a></td><td align="right">12-Nov-2016 06:55 </td><td align="right"> - </td></tr>
<tr><td><a href="SI.kfdx/">SI.kfdx/</a></td><td align="right">12-Nov-2016 06:52 </td><td align="right"> - </td></tr>
<tr><td><a href="SI.kffc/">SI.kffc/</a></td><td align="right">12-Nov-2016 06:56 </td><td align="right"> - </td></tr>
<tr><td><a href="SI.kfsd/">SI.kfsd/</a></td><td align="right">12-Nov-2016 06:54 </td><td align="right"> - </td></tr>
<tr><td><a href="SI.kfsx/">SI.kfsx/</a></td><td align="right">12-Nov-2016 06:56 </td><td align="right"> - </td></tr>
<tr><td><a href="SI.kftg/">SI.kftg/</a></td><td align="right">12-Nov-2016 06:52 </td><td align="right"> - </td></tr>
<tr><td><a href="SI.kfws/">SI.kfws/</a></td><td align="right">12-Nov-2016 06:57 </td><td align="right"> - </td></tr>
<tr><td><a href="SI.kggw/">SI.kggw/</a></td><td align="right">12-Nov-2016 06:52 </td><td align="right"> - </td></tr>
<tr><td><a href="SI.kgjx/">SI.kgjx/</a></td><td align="right">12-Nov-2016 06:52 </td><td align="right"> - </td></tr>
<tr><td><a href="SI.kgld/">SI.kgld/</a></td><td align="right">12-Nov-2016 06:50 </td><td align="right"> - </td></tr>
<tr><td><a href="SI.kgrb/">SI.kgrb/</a></td><td align="right">12-Nov-2016 06:56 </td><td align="right"> - </td></tr>
<tr><td><a href="SI.kgrk/">SI.kgrk/</a></td><td align="right">12-Nov-2016 06:48 </td><td align="right"> - </td></tr>
<tr><td><a href="SI.kgrr/">SI.kgrr/</a></td><td align="right">09-Nov-2016 20:48 </td><td align="right"> - </td></tr>
<tr><td><a href="SI.kgsp/">SI.kgsp/</a></td><td align="right">12-Nov-2016 06:53 </td><td align="right"> - </td></tr>
<tr><td><a href="SI.kgwx/">SI.kgwx/</a></td><td align="right">12-Nov-2016 06:50 </td><td align="right"> - </td></tr>
<tr><td><a href="SI.kgyx/">SI.kgyx/</a></td><td align="right">12-Nov-2016 06:54 </td><td align="right"> - </td></tr>
<tr><td><a href="SI.khdx/">SI.khdx/</a></td><td align="right">12-Nov-2016 06:54 </td><td align="right"> - </td></tr>
<tr><td><a href="SI.khgx/">SI.khgx/</a></td><td align="right">12-Nov-2016 06:54 </td><td align="right"> - </td></tr>
<tr><td><a href="SI.khnx/">SI.khnx/</a></td><td align="right">12-Nov-2016 06:56 </td><td align="right"> - </td></tr>
<tr><td><a href="SI.khpx/">SI.khpx/</a></td><td align="right">12-Nov-2016 06:53 </td><td align="right"> - </td></tr>
<tr><td><a href="SI.khtx/">SI.khtx/</a></td><td align="right">12-Nov-2016 06:50 </td><td align="right"> - </td></tr>
<tr><td><a href="SI.kict/">SI.kict/</a></td><td align="right">12-Nov-2016 06:52 </td><td align="right"> - </td></tr>
<tr><td><a href="SI.kicx/">SI.kicx/</a></td><td align="right">12-Nov-2016 06:55 </td><td align="right"> - </td></tr>
<tr><td><a href="SI.kiln/">SI.kiln/</a></td><td align="right">12-Nov-2016 06:56 </td><td align="right"> - </td></tr>
<tr><td><a href="SI.kilx/">SI.kilx/</a></td><td align="right">12-Nov-2016 06:52 </td><td align="right"> - </td></tr>
<tr><td><a href="SI.kind/">SI.kind/</a></td><td align="right">12-Nov-2016 06:57 </td><td align="right"> - </td></tr>
<tr><td><a href="SI.kinx/">SI.kinx/</a></td><td align="right">12-Nov-2016 06:50 </td><td align="right"> - </td></tr>
<tr><td><a href="SI.kiwa/">SI.kiwa/</a></td><td align="right">12-Nov-2016 06:50 </td><td align="right"> - </td></tr>
<tr><td><a href="SI.kiwx/">SI.kiwx/</a></td><td align="right">12-Nov-2016 06:50 </td><td align="right"> - </td></tr>
<tr><td><a href="SI.kjax/">SI.kjax/</a></td><td align="right">12-Nov-2016 06:54 </td><td align="right"> - </td></tr>
<tr><td><a href="SI.kjgx/">SI.kjgx/</a></td><td align="right">12-Nov-2016 06:51 </td><td align="right"> - </td></tr>
<tr><td><a href="SI.kjkl/">SI.kjkl/</a></td><td align="right">12-Nov-2016 06:54 </td><td align="right"> - </td></tr>
<tr><td><a href="SI.klbb/">SI.klbb/</a></td><td align="right">12-Nov-2016 06:54 </td><td align="right"> - </td></tr>
<tr><td><a href="SI.klch/">SI.klch/</a></td><td align="right">12-Nov-2016 06:55 </td><td align="right"> - </td></tr>
<tr><td><a href="SI.klgx/">SI.klgx/</a></td><td align="right">12-Nov-2016 06:57 </td><td align="right"> - </td></tr>
<tr><td><a href="SI.klix/">SI.klix/</a></td><td align="right">12-Nov-2016 06:57 </td><td align="right"> - </td></tr>
<tr><td><a href="SI.klnx/">SI.klnx/</a></td><td align="right">12-Nov-2016 06:52 </td><td align="right"> - </td></tr>
<tr><td><a href="SI.klot/">SI.klot/</a></td><td align="right">12-Nov-2016 06:54 </td><td align="right"> - </td></tr>
<tr><td><a href="SI.klrx/">SI.klrx/</a></td><td align="right">12-Nov-2016 06:56 </td><td align="right"> - </td></tr>
<tr><td><a href="SI.klsx/">SI.klsx/</a></td><td align="right">12-Nov-2016 06:49 </td><td align="right"> - </td></tr>
<tr><td><a href="SI.kltx/">SI.kltx/</a></td><td align="right">12-Nov-2016 06:49 </td><td align="right"> - </td></tr>
<tr><td><a href="SI.klvx/">SI.klvx/</a></td><td align="right">12-Nov-2016 06:57 </td><td align="right"> - </td></tr>
<tr><td><a href="SI.klwx/">SI.klwx/</a></td><td align="right">12-Nov-2016 06:57 </td><td align="right"> - </td></tr>
<tr><td><a href="SI.klzk/">SI.klzk/</a></td><td align="right">12-Nov-2016 06:50 </td><td align="right"> - </td></tr>
<tr><td><a href="SI.kmaf/">SI.kmaf/</a></td><td align="right">12-Nov-2016 06:55 </td><td align="right"> - </td></tr>
<tr><td><a href="SI.kmax/">SI.kmax/</a></td><td align="right">12-Nov-2016 06:56 </td><td align="right"> - </td></tr>
<tr><td><a href="SI.kmbx/">SI.kmbx/</a></td><td align="right">12-Nov-2016 06:52 </td><td align="right"> - </td></tr>
<tr><td><a href="SI.kmhx/">SI.kmhx/</a></td><td align="right">12-Nov-2016 06:54 </td><td align="right"> - </td></tr>
<tr><td><a href="SI.kmkx/">SI.kmkx/</a></td><td align="right">12-Nov-2016 06:55 </td><td align="right"> - </td></tr>
<tr><td><a href="SI.kmlb/">SI.kmlb/</a></td><td align="right">12-Nov-2016 06:52 </td><td align="right"> - </td></tr>
<tr><td><a href="SI.kmob/">SI.kmob/</a></td><td align="right">12-Nov-2016 06:53 </td><td align="right"> - </td></tr>
<tr><td><a href="SI.kmpx/">SI.kmpx/</a></td><td align="right">12-Nov-2016 06:55 </td><td align="right"> - </td></tr>
<tr><td><a href="SI.kmqt/">SI.kmqt/</a></td><td align="right">12-Nov-2016 06:58 </td><td align="right"> - </td></tr>
<tr><td><a href="SI.kmrx/">SI.kmrx/</a></td><td align="right">12-Nov-2016 06:53 </td><td align="right"> - </td></tr>
<tr><td><a href="SI.kmsx/">SI.kmsx/</a></td><td align="right">12-Nov-2016 06:49 </td><td align="right"> - </td></tr>
<tr><td><a href="SI.kmtx/">SI.kmtx/</a></td><td align="right">12-Nov-2016 06:56 </td><td align="right"> - </td></tr>
<tr><td><a href="SI.kmux/">SI.kmux/</a></td><td align="right">12-Nov-2016 06:57 </td><td align="right"> - </td></tr>
<tr><td><a href="SI.kmvx/">SI.kmvx/</a></td><td align="right">12-Nov-2016 06:54 </td><td align="right"> - </td></tr>
<tr><td><a href="SI.kmxx/">SI.kmxx/</a></td><td align="right">12-Nov-2016 06:53 </td><td align="right"> - </td></tr>
<tr><td><a href="SI.knkx/">SI.knkx/</a></td><td align="right">12-Nov-2016 06:57 </td><td align="right"> - </td></tr>
<tr><td><a href="SI.knqa/">SI.knqa/</a></td><td align="right">12-Nov-2016 06:57 </td><td align="right"> - </td></tr>
<tr><td><a href="SI.koax/">SI.koax/</a></td><td align="right">12-Nov-2016 06:51 </td><td align="right"> - </td></tr>
<tr><td><a href="SI.kohx/">SI.kohx/</a></td><td align="right">12-Nov-2016 06:49 </td><td align="right"> - </td></tr>
<tr><td><a href="SI.kokx/">SI.kokx/</a></td><td align="right">12-Nov-2016 06:57 </td><td align="right"> - </td></tr>
<tr><td><a href="SI.kotx/">SI.kotx/</a></td><td align="right">12-Nov-2016 06:56 </td><td align="right"> - </td></tr>
<tr><td><a href="SI.kpah/">SI.kpah/</a></td><td align="right">12-Nov-2016 06:56 </td><td align="right"> - </td></tr>
<tr><td><a href="SI.kpbz/">SI.kpbz/</a></td><td align="right">12-Nov-2016 06:56 </td><td align="right"> - </td></tr>
<tr><td><a href="SI.kpdt/">SI.kpdt/</a></td><td align="right">12-Nov-2016 06:57 </td><td align="right"> - </td></tr>
<tr><td><a href="SI.kpoe/">SI.kpoe/</a></td><td align="right">12-Nov-2016 06:51 </td><td align="right"> - </td></tr>
<tr><td><a href="SI.kpux/">SI.kpux/</a></td><td align="right">12-Nov-2016 06:52 </td><td align="right"> - </td></tr>
<tr><td><a href="SI.krax/">SI.krax/</a></td><td align="right">12-Nov-2016 06:52 </td><td align="right"> - </td></tr>
<tr><td><a href="SI.krgx/">SI.krgx/</a></td><td align="right">12-Nov-2016 06:52 </td><td align="right"> - </td></tr>
<tr><td><a href="SI.kriw/">SI.kriw/</a></td><td align="right">12-Nov-2016 06:56 </td><td align="right"> - </td></tr>
<tr><td><a href="SI.krlx/">SI.krlx/</a></td><td align="right">12-Nov-2016 06:51 </td><td align="right"> - </td></tr>
<tr><td><a href="SI.krtx/">SI.krtx/</a></td><td align="right">29-Oct-2016 23:30 </td><td align="right"> - </td></tr>
<tr><td><a href="SI.ksfx/">SI.ksfx/</a></td><td align="right">12-Nov-2016 06:55 </td><td align="right"> - </td></tr>
<tr><td><a href="SI.ksgf/">SI.ksgf/</a></td><td align="right">12-Nov-2016 06:52 </td><td align="right"> - </td></tr>
<tr><td><a href="SI.kshv/">SI.kshv/</a></td><td align="right">12-Nov-2016 06:54 </td><td align="right"> - </td></tr>
<tr><td><a href="SI.ksjt/">SI.ksjt/</a></td><td align="right">12-Nov-2016 06:57 </td><td align="right"> - </td></tr>
<tr><td><a href="SI.ksox/">SI.ksox/</a></td><td align="right">12-Nov-2016 06:53 </td><td align="right"> - </td></tr>
<tr><td><a href="SI.ksrx/">SI.ksrx/</a></td><td align="right">12-Nov-2016 06:50 </td><td align="right"> - </td></tr>
<tr><td><a href="SI.ktbw/">SI.ktbw/</a></td><td align="right">12-Nov-2016 06:55 </td><td align="right"> - </td></tr>
<tr><td><a href="SI.ktfx/">SI.ktfx/</a></td><td align="right">12-Nov-2016 06:57 </td><td align="right"> - </td></tr>
<tr><td><a href="SI.ktlh/">SI.ktlh/</a></td><td align="right">12-Nov-2016 06:50 </td><td align="right"> - </td></tr>
<tr><td><a href="SI.ktlx/">SI.ktlx/</a></td><td align="right">12-Nov-2016 06:51 </td><td align="right"> - </td></tr>
<tr><td><a href="SI.ktwx/">SI.ktwx/</a></td><td align="right">12-Nov-2016 06:55 </td><td align="right"> - </td></tr>
<tr><td><a href="SI.ktyx/">SI.ktyx/</a></td><td align="right">12-Nov-2016 06:50 </td><td align="right"> - </td></tr>
<tr><td><a href="SI.kudx/">SI.kudx/</a></td><td align="right">12-Nov-2016 06:48 </td><td align="right"> - </td></tr>
<tr><td><a href="SI.kuex/">SI.kuex/</a></td><td align="right">12-Nov-2016 06:51 </td><td align="right"> - </td></tr>
<tr><td><a href="SI.kvax/">SI.kvax/</a></td><td align="right">12-Nov-2016 06:54 </td><td align="right"> - </td></tr>
<tr><td><a href="SI.kvbx/">SI.kvbx/</a></td><td align="right">12-Nov-2016 06:54 </td><td align="right"> - </td></tr>
<tr><td><a href="SI.kvnx/">SI.kvnx/</a></td><td align="right">12-Nov-2016 06:55 </td><td align="right"> - </td></tr>
<tr><td><a href="SI.kvtx/">SI.kvtx/</a></td><td align="right">12-Nov-2016 06:54 </td><td align="right"> - </td></tr>
<tr><td><a href="SI.kvwx/">SI.kvwx/</a></td><td align="right">12-Nov-2016 06:52 </td><td align="right"> - </td></tr>
<tr><td><a href="SI.kyux/">SI.kyux/</a></td><td align="right">12-Nov-2016 06:57 </td><td align="right"> - </td></tr>
<tr><td><a href="SI.pabc/">SI.pabc/</a></td><td align="right">12-Nov-2016 06:55 </td><td align="right"> - </td></tr>
<tr><td><a href="SI.pacg/">SI.pacg/</a></td><td align="right">12-Nov-2016 06:55 </td><td align="right"> - </td></tr>
<tr><td><a href="SI.paec/">SI.paec/</a></td><td align="right">12-Nov-2016 06:54 </td><td align="right"> - </td></tr>
<tr><td><a href="SI.pahg/">SI.pahg/</a></td><td align="right">12-Nov-2016 06:53 </td><td align="right"> - </td></tr>
<tr><td><a href="SI.paih/">SI.paih/</a></td><td align="right">12-Nov-2016 06:54 </td><td align="right"> - </td></tr>
<tr><td><a href="SI.pakc/">SI.pakc/</a></td><td align="right">12-Nov-2016 06:57 </td><td align="right"> - </td></tr>
<tr><td><a href="SI.papd/">SI.papd/</a></td><td align="right">12-Nov-2016 06:56 </td><td align="right"> - </td></tr>
<tr><td><a href="SI.pgua/">SI.pgua/</a></td><td align="right">12-Nov-2016 06:54 </td><td align="right"> - </td></tr>
<tr><td><a href="SI.phki/">SI.phki/</a></td><td align="right">12-Nov-2016 06:53 </td><td align="right"> - </td></tr>
<tr><td><a href="SI.phkm/">SI.phkm/</a></td><td align="right">12-Nov-2016 06:57 </td><td align="right"> - </td></tr>
<tr><td><a href="SI.phmo/">SI.phmo/</a></td><td align="right">09-Nov-2016 23:19 </td><td align="right"> - </td></tr>
<tr><td><a href="SI.phwa/">SI.phwa/</a></td><td align="right">12-Nov-2016 06:56 </td><td align="right"> - </td></tr>
<tr><td><a href="SI.tjua/">SI.tjua/</a></td><td align="right">12-Nov-2016 06:55 </td><td align="right"> - </td></tr>
<tr><th colspan="3"><hr></th></tr>
</table>
</body></html>
@czenzel
Copy link
Author

czenzel commented Jan 2, 2017

Tonight contains a major bug fix to allow for the header size to be recognized on a non-NOAAPORT import of radar data. NOAAPORT Channels add additional data on import that this script was not. The 24 characters of "000" were added to null the NOAAPORT channel to simulate a satellite signal for proper processing. Video update coming soon at chriszenzel.com

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment