Метеообеспечение аэродрома (площадки)

надо воткнуть таймер-розетку. вот для примера ссылка, но их куча щас продается:
http://www.timers.ru/catalogue/05355/4

таймер 1-2 раза в сутки вырубает систему (хоть 10). но надо настроить так, чтобы при перезагрузке все само включилось. 

Мозгов компьютера типа не хватает по расписанию перезагружаться нежно и аккуратно в строго определенное системное время, давайте купим розетку, которая его грубо посреди свопа на диск зарежет по питанию, а потом будем удивляться что это система вообще перестала фунциклировать и даже лампочками не мигает  :~~).

Учите матчасть  :IMHO, в компьютере всё это бесплатно уже есть.
 
Потому, что у нас второй день выходной и не кому передернуть этот гребанный GPRS. зайвтра утром будет работать.
Вообще то сервис GPRS предоставляется на вторичной основе. Если на станции, обслуживающей СИМ-ку, имеются свободные тайм-слоты, они могут заполняться GPRS-трафиком. Но как только в сеть просится голосовой абонент, а свободных тайм-слотов нет, то GPRS просят "с пляжа" и освободившийся тайм-слот отдаётся под голос. Поэтому проблемку "передёргиванием" не решить. Трафик от метеостанции небольшой. Для его передачи МЛМ проще использовать режим GSM CSD (9.6 Кбит/сек) или HCSD (14 Кбит/сек), имеющиеся в любом GPRS-модеме. В этом режиме для передачи данных предоставляется канал как для голосового абонента и отсутствует канальный протокол транспортного уровня. Это означает, что оплата будет потенциально поболе чем при GPRS и с ошибками в канале придётся бороться самому. Но поскольку трафик от метео небольшой и транзакции происходят раз в полчаса, ни оплата не будет обременительной, ни борьба с ошибками сложной. А проблема при этом решится раз и навсегда, поскольку CSD есть даже там где нет GPRS.
 
Но поскольку трафик от метео небольшой и транзакции происходят раз в полчаса, ни оплата не будет обременительной, ни борьба с ошибками сложной. А проблема при этом решится раз и навсегда, поскольку CSD есть даже там где нет GPRS. 

Траффик около 1 мегабайта в час при обновлении 2 раза в час и 2 мега при обновлении 4 раза в час. Обновляются графические изображения графиков, а это занимает сравнительно большой объем.

Набросал скриптик на Perl отображающий погоду на главной странице сайта UUWK.RU

Код:
#!/usr/bin/perl --
###############################################################################
# weather.cgi                                                                 #
###############################################################################
# Register: DAVIS Vantage Pro2 Plus                                           #
# Open-Source Community Software for General Aviation Airshows & Fly Ins      #
# Version:        Weather  1.0                                                #
# Released:       December 10, 2010                                           #
# Distributed by: http://www.reaa.ru                                          #
# =========================================================================== #
# Copyright (c) 2006-2010 REAA (www.reaa.ru) - All Rights Reserved.           #
# Software by: The REAA Development Team                                      #
#              with assistance from the REAA community.                       #
# Sponsored by:                                                               #
###############################################################################




##############################################################
#           Начало программы (выбор действия)                #
##############################################################



print "Content-type: text/html\n\n";

$FilePath="../weather/downld02.txt";

open(PRICE,$FilePath) || &send_error_ReadFile;
while($named=<PRICE>){
&GetSplitData;
}
close(PRICE);

# Перевод направления ветра на русские символы
#$Wind_Dir =~ s/S/Ю/g; 
#$Wind_Dir =~ s/N/С/g; 
#$Wind_Dir =~ s/W/З/g; 
#$Wind_Dir =~ s/E/В/g; 

# Перевод направления ветра в градусы

if ($Wind_Dir eq "N") {$Wind_Dir="0";}
if ($Wind_Dir eq "NNE") {$Wind_Dir="30";}
if ($Wind_Dir eq "NE") {$Wind_Dir="45";}
if ($Wind_Dir eq "ENE") {$Wind_Dir="60";}
if ($Wind_Dir eq "E") {$Wind_Dir="90";}
if ($Wind_Dir eq "ESE") {$Wind_Dir="120";}
if ($Wind_Dir eq "SE") {$Wind_Dir="135";}
if ($Wind_Dir eq "SSE") {$Wind_Dir="150";}
if ($Wind_Dir eq "S") {$Wind_Dir="180";}
if ($Wind_Dir eq "SSW") {$Wind_Dir="210";}
if ($Wind_Dir eq "SW") {$Wind_Dir="225";}
if ($Wind_Dir eq "WSW") {$Wind_Dir="240";}
if ($Wind_Dir eq "W") {$Wind_Dir="270";}
if ($Wind_Dir eq "WNW") {$Wind_Dir="300";}
if ($Wind_Dir eq "NW") {$Wind_Dir="315";}
if ($Wind_Dir eq "NNW") {$Wind_Dir="330";}


$Bar=$Bar+0.0; # Поправка на высоту 0 метров от уровня земли, на которой установлен барометр. 11м = 1 мм.рт.ст

$Dew_Point_Def=$Temp_Out-$Dew_Point;
#$mBar=$Bar / 0.75006;
$mBar=$Bar * 1.3332;
$mBar = sprintf("%.1f",$mBar);

$Sky=$Dew_Point_Def/ 0.8 * 100; # Расчер высоты нижней кромки

$Dew_Point_Def = sprintf("%.1f",$Dew_Point_Def);
$Sky = sprintf("%.1f",$Sky);


# Существует несколько вариантов прогноза нижней границы облаков
# Прогноз высоты нижней границы облаков по полуэмпирическим формулам
# Прогноз высоты нижней границы облачности по методу Е. И. Гоголевой
# Прогноз высоты нижней границы облачности по методу ГАМЦ
# Прогноз высоты нижней границы облаков по методу В. М. Ярковой


# Прогноз высоты нижней границы облачности с заблаговременностью 8-10 ч по уточненному методу Е.И. Гоголевой
# Прогноз высоты нижней границы облачности с заблаговременностью 3-6 ч по диаграммам рассеяния М.В. Рубинштейна
# Прогноз высоты нижней границы облачности с заблаговременностью 3-6 ч по номограммам М.В. Рубинштейна
# Прогноз высоты нижней границы облачности с заблаговременностью 12 ч по методу К.Г. Абрамович
# http://www.symplex.ru/item.php?id=3022


#######################################################################################################################3
# Определение, свежие ли данные на метеостанции
#######################################################################################################################3

# дата в формате гг.мм.дд.чч.мм.сс

my ($c_sec, $c_min, $c_hour, $c_day, $c_month, $c_year, $c_day_name) = ( gmtime(time) )[0,1,2,3,4,5,6];
if ( $c_sec < 10 ) { $c_sec = 0 . $c_sec; } 
if ( $c_min < 10 ) { $c_min = 0 . $c_min; } 
if ( $c_hour < 10 ) { $c_hour = 0 . $c_hour; } 
if ( $c_hour > 24 ) { $c_hour -= 12; }
if ( $c_day < 10 ) { $c_day = 0 . $c_day; } 
$c_month++;
if ( $c_month < 10 ) { $c_month = 0 . $c_month; } 
$c_year += 1900;

($w_day,$w_month,$w_year) =split(/\./,$date);
$w_year+=2000;
($w_hour,$w_min) =split(/\:/,$time);
$w_sec = '00';
if ( $w_hour < 10 ) { $w_hour = 0 . $w_hour; } 
if ( $w_day < 10 ) { $w_day = 0 . $w_day; } 


use Date::Manip;
#$W_date = '2008-09-24 09:21:29';
#$C_date = '2008-09-25 09:21:29';

$W_date = $w_year . '-' . $w_month . '-' . $w_day . ' ' . $w_hour . ':' . $w_min . ':' . $w_sec;
$C_date = $c_year . '-' . $c_month . '-' . $c_day . ' ' . $c_hour . ':' . $c_min . ':' . $c_sec;
$diff = UnixDate($C_date,'%s') - UnixDate($W_date,'%s');
$diff_min = int($diff / 60);

print "<br>";
#print $diff . '  '. $diff_min;
#print "<br>";
print "Время UTC &nbsp;&nbsp;&nbsp;$C_date<br>";
print "Время Метео $W_date<br>";
print "Актуальность данных $diff_min минут";
$diff_last = substr($diff_min, -1); # крайний символ
$diff_lasttwo = substr($diff_min, -2); # крайние 2 символа
if ($diff_last eq '1' && $diff_lasttwo ne '11') {print "а";}
if (($diff_last eq '2' || $diff_last eq '3' || $diff_last eq '4') &&  $diff_lasttwo ne '12' && $diff_lasttwo ne '13' && $diff_lasttwo ne '14' ) {print "ы";}
print "<br>";

if ($diff > 7200) {&send_error_OldData;} # Если данные устарели более чем на 2 часа, ошибка!
&send_actual_Data;

#####################################################################################################################



#######################################################################################################################3

sub send_actual_Data {
print <<"OUT_HTML";

<table border=0 cellSpacing=5 cellPadding=0 width="100%">
<tr><td><font size=-1><B>
Давление
</td><td><font size=-1><B>
$Bar <font size=-2>мм.рт.ст
</td></tr>

<tr><td><font size=-1><B>
Давление
</td><td><font size=-1><B>
$mBar <font size=-2>гПа
</td></tr>

<tr><td><font size=-1><B>
Температура
</td><td><font size=-1><B>
$Temp_Out <sup>o</sup>С
</td></tr>

<tr><td><font size=-1><B>
Точка росы
</td><td><font size=-1><B>
$Dew_Point <sup>o</sup>С
</td></tr>

<tr><td><font size=-1><B>
Дефицит точки росы
</td><td><font size=-1><B>
$Dew_Point_Def <sup>o</sup>С
</td></tr>

<tr><td><font size=-1><B>
Нижняя граница<br>облачн.<font size=-2 color=#A00000>(расчетная)
</td><td><font size=-1><B>
$Sky м
</td></tr>

<tr><td><font size=-1><B>
Влажность
</td><td><font size=-1><B>
$Out_Hum %
</td></tr>

<tr><td><font size=-1><B>
Скорость ветра
</td><td><font size=-1><B>
$Wind_Speed м/с
</td></tr>

<tr><td><font size=-1><B>
Порывы ветра
</td><td><font size=-1><B>
$Hi_Speed м/с
</td></tr>

<tr><td><font size=-1><B>
Направление<br>ветра <font size=-2 color=#A00000>(откуда)
</td><td><font size=-1><B>
$Wind_Dir <sup>o</sup>
</td></tr>

<tr><td><font size=-1><B>
Осадки
</td><td><font size=-1><B>
$Rain мм
</td></tr>

<tr><td><font size=-1><B>
Осадки
</td><td><font size=-1><B>
$Rain_Rate <font size=-2>мм/час
</td></tr>

</table>
OUT_HTML

exit;
}


##############################################################
#           Разделение данных, полученных из файла           #
##############################################################
sub GetSplitData {
for ($named) { s/^\s+//; }  # Убрать все пробелы из начала строки (дата может содержать или не содержать пробелы перед знаком даты, что приводило к сбоям)
 ($date,$time,$Temp_Out,$Hi_Temp,$Low_Temp,$Out_Hum,$Dew_Point,$Wind_Speed,$Wind_Dir,$Wind_Run,$Hi_Speed,$Hi_Dir,$Wind_Chill,$Heat_Index,$THW_Index,$$THSW_Index,$Bar,$Rain,$Rain_Rate,$Solar_Radiation,$Solar_Energy,$Hi_Solar_Radiation,$UV_Index,$UV_Dose,$Hi_UV,$Heat_DD,$Cool_DD,$In_Temp,$In_Humidity,$In_Dew_Point,$In_Heat,$In_EMC,$In_Air_Density,$ET,$Wind_Samp,$Wind_TX,$ISS_Recept,$Arc_Int)=split(/\s+/,$named);
}


##############################################################
#           Печать сообщения об ошибке                       #
##############################################################
sub send_error_ReadFile {
 print "Данные не доступны!";

}


##############################################################
#           Печать сообщения об ошибке                       #
##############################################################
sub send_error_OldData {
print <<"OUT_HTML";
<BR>
<BR>
<B><FONT COLOR=#A00000>Данные не актуальны!</FONT></B>
<BR>
<BR>
OUT_HTML
exit;
}

Пример shtml файла, который отображает данные о погоде

Код:
<HTML><HEAD><TITLE>Аэродром UUWK</TITLE>
<META http-equiv=Content-Type content="text/html; charset=windows-1251">
<META http-equiv=expires content="Mon, 01 Jan 1990 00:00:00 GMT">
<META http-equiv=content-language content=ru>
<META http-equiv=Cache-Control content=no-cache>
<BODY text=#0000FF bgColor=#ffffff leftMargin=0 topMargin=0 marginwidth="0" marginheight="0">
<DIV id=idBody style="LEFT: 10px; VISIBILITY: visible; WIDTH: 95%; POSITION: absolute; TOP: 2px; BACKGROUND-COLOR: #ffffff">
<font face="Arial, Helvetica, sans-serif" color="#1F15E8">

 <center>
 <B>ПОГОДА<br>МЕТЕОСТАНЦИИ UUWK<br></B> 

<!--#exec cgi="cgi-bin/weather.cgi"-->
</body></html>

Вставка этой строки на любом сайте приведет к отображению погоды Кудиново на этой странице:

Код:
<!--#exec cgi="cgi-bin/weather.cgi"-->
 
Нафиг обрубать во время свопа? Комп передает данные каждую 00-ую и 30-ую минуту. Ну дак поставь перезагруз на 11-ой минуте по времени. Я просто предложил простое и временное решение.

Поначалу я тоже мудохался с виндой и прочими там настройками. Потом поставил NSLU2 и малюсенькие приложения под Линухом все делают шустро, данные апдэйтятся раз в 15 минут и трафика в десять раз меньше. Уже 2 года никаких проблем с зависаниями и перезагрузками.

Я кстати говорил Данилу об этом и давал все готовые решения, но он не стал слушать. Сказал что все сделает сам и заново изобретает велосипед. Ну ниче, когда нить всетаки поставит NSLU2 и проблемы прекратятся.

Мат часть давно выучил!


Мозгов компьютера типа не хватает по расписанию перезагружаться нежно и аккуратно в строго определенное системное время, давайте купим розетку, которая его грубо посреди свопа на диск зарежет по питанию, а потом будем удивляться что это система вообще перестала фунциклировать и даже лампочками не мигае
 
А насчет тайм слотов и канальных протоколов это все фигня. Проблема решается намного проще: взять 3 симки и посмотреть кто стабильнее работает. Если за неделю не было зависаний, то и месяц не будет. У прова все настроено значит четко!

Сначала сидел на билайне, всё перепробовал, но более 3-4 дней не работало стабильно. На МТС вообще не работало. Зато Мегафон заработал и продолжает.

Конечно это зависит от города, региона и края. Но экспериментальным путем определить намного легче!
 
Набросал скриптик на Perl отображающий погоду для PDA устройств.

Код:
#!/usr/bin/perl --
###############################################################################
# weather_pda.cgi                                                             #
###############################################################################
# Register: DAVIS Vantage Pro2 Plus                                           #
# Open-Source Community Software for General Aviation Airshows & Fly Ins      #
# Version:        Weather  1.0                                                #
# Released:       December 10, 2010                                           #
# Distributed by: http://www.reaa.ru                                          #
# =========================================================================== #
# Copyright (c) 2006-2010 REAA (www.reaa.ru) - All Rights Reserved.           #
# Software by: The REAA Development Team                                      #
#              with assistance from the REAA community.                       #
# Sponsored by:                                                               #
###############################################################################

$FilePath="../weather/downld02.txt"; # путь от скрипта к файлу downld02.txt содержащему данные по погоде
$site="http://www.uuwk.ru"; # Адрес сайта
$path_to_images="http://www.uuwk.ru/weather"; # путь к каталогу изображений графиков
$map_addr='<a href="http://maps.google.ru/?ie=UTF8&amp;t=h&amp;ll=55.023004,36.245527&amp;spn=0.00861,0.018239&amp;z=15&amp;source=embed" style="color:#0000FF;text-align:left" target=_blank>'; # Адрес на Google map
$Altitude_correction = 0.0; # Поправка на высоту 0 метров от уровня земли, на которой установлен барометр. 11м = 1 мм.рт.ст

# Пример текста для вывода на дисплей

# Кудиново UUWK
# "Кудиново старт" - 123,8 мГц
# WGS 84 - N55°01.406 E36°14.653
# превышение + 192 м
# посадочные курсы 20/02
# телефон РП +7(926)991-5550
#
# Время UTC    2013-05-23 04:15:51
# Время Метео 2013-05-23 04:00:00
# Актуальность данных 15 минут
#
# ветер 210° 0.4 м/с порывы до 1.3 м/с
# температура 11.9°C точка росы 11.6°C
# влажность 98 %
# давление 739.6 мм.рт.ст. 986.0 гПа
# осадки 0.0 мм/ч 


##############################################################
#           Начало программы (выбор действия)                #
##############################################################

print "Content-type: text/html\n\n";

# Получить из погодного файла самые свежие погодные данные
open(PRICE,$FilePath) || &send_error_ReadFile;
while($named=<PRICE>){
&GetSplitData;
}
close(PRICE);

# Перевод направления ветра на русские символы

#$Wind_Dir =~ s/S/Ю/g; 
#$Wind_Dir =~ s/N/С/g; 
#$Wind_Dir =~ s/W/З/g; 
#$Wind_Dir =~ s/E/В/g; 

# Перевод направления ветра в градусы

if ($Wind_Dir eq "N") {$Wind_Dir="0";}
if ($Wind_Dir eq "NNE") {$Wind_Dir="30";}
if ($Wind_Dir eq "NE") {$Wind_Dir="45";}
if ($Wind_Dir eq "ENE") {$Wind_Dir="60";}
if ($Wind_Dir eq "E") {$Wind_Dir="90";}
if ($Wind_Dir eq "ESE") {$Wind_Dir="120";}
if ($Wind_Dir eq "SE") {$Wind_Dir="135";}
if ($Wind_Dir eq "SSE") {$Wind_Dir="150";}
if ($Wind_Dir eq "S") {$Wind_Dir="180";}
if ($Wind_Dir eq "SSW") {$Wind_Dir="210";}
if ($Wind_Dir eq "SW") {$Wind_Dir="225";}
if ($Wind_Dir eq "WSW") {$Wind_Dir="240";}
if ($Wind_Dir eq "W") {$Wind_Dir="270";}
if ($Wind_Dir eq "WNW") {$Wind_Dir="300";}
if ($Wind_Dir eq "NW") {$Wind_Dir="315";}
if ($Wind_Dir eq "NNW") {$Wind_Dir="330";}


$Bar=$Bar+$Altitude_correction;

$Dew_Point_Def=$Temp_Out-$Dew_Point;
#$mBar=$Bar / 0.75006;
$mBar=$Bar * 1.3332;
$mBar = sprintf("%.1f",$mBar);
$Sky=$Dew_Point_Def/ 0.8 * 100; # Расчер высоты нижней кромки


print <<"OUT_HTML";
<html>
<head>
<title></title>
<meta content="text/html; charset=windows-1251" http-equiv=Content-Type>
<meta http-equiv="expires" content="Mon, 01 Jan 1990 00:00:00 GMT">
<meta http-equiv="content-language" content ="ru">
<meta http-equiv="Cache-Control" content="no-cache">
<meta name="description" content=" ">
<meta name="robоts" content="noindex,follow">
<meta name="keywords" content="">
</head>
<body bgcolor=#FFFFFF leftmargin=5 text=#1F15E8 topmargin=5 marginheight=0 marginwidth=0 link="#1F15A8" vlink="#1F1568">
<A HREF="$site">Кудиново UUWK</A><br>
"Кудиново старт" - 123,8 мГц<br>
WGS 84 -$map_addr N55°01.406 E36°14.653</A><br>
превышение + 192 м<br>
посадочные курсы 20/02<br>
телефон РП +7(926)991-5550<br>
OUT_HTML



#######################################################################################################################3
# Определение, свежие ли данные на метеостанции
#######################################################################################################################3

# дата в формате гг.мм.дд.чч.мм.сс

my ($c_sec, $c_min, $c_hour, $c_day, $c_month, $c_year, $c_day_name) = ( gmtime(time) )[0,1,2,3,4,5,6];
if ( $c_sec < 10 ) { $c_sec = 0 . $c_sec; } 
if ( $c_min < 10 ) { $c_min = 0 . $c_min; } 
if ( $c_hour < 10 ) { $c_hour = 0 . $c_hour; } 
if ( $c_hour > 24 ) { $c_hour -= 12; }
if ( $c_day < 10 ) { $c_day = 0 . $c_day; } 
$c_month++;
if ( $c_month < 10 ) { $c_month = 0 . $c_month; } 
$c_year += 1900;

($w_day,$w_month,$w_year) =split(/\./,$date);
$w_year+=2000;
($w_hour,$w_min) =split(/\:/,$time);
$w_sec = '00';
if ( $w_hour < 10 ) { $w_hour = 0 . $w_hour; } 
if ( $w_day < 10 ) { $w_day = 0 . $w_day; } 


use Date::Manip;
#$W_date = '2008-09-24 09:21:29';
#$C_date = '2008-09-25 09:21:29';

$W_date = $w_year . '-' . $w_month . '-' . $w_day . ' ' . $w_hour . ':' . $w_min . ':' . $w_sec;
$C_date = $c_year . '-' . $c_month . '-' . $c_day . ' ' . $c_hour . ':' . $c_min . ':' . $c_sec;
$diff = UnixDate($C_date,'%s') - UnixDate($W_date,'%s');
$diff_min = int($diff / 60);

print "<br>";
#print $diff . '  '. $diff_min;
#print "<br>";
print "Время UTC &nbsp;&nbsp;&nbsp;$C_date<br>";
print "Время Метео $W_date<br>";
print "Актуальность данных $diff_min минут";
$diff_last = substr($diff_min, -1); # крайний символ
$diff_lasttwo = substr($diff_min, -2); # крайние 2 символа
if ($diff_last eq '1' && $diff_lasttwo ne '11') {print "а";}
if (($diff_last eq '2' || $diff_last eq '3' || $diff_last eq '4') &&  $diff_lasttwo ne '12' && $diff_lasttwo ne '13' && $diff_lasttwo ne '14' ) {print "ы";}
print "<br>";

if ($diff > 7200) {&send_error_OldData;} # Если данные устарели более чем на 2 часа, ошибка!
&send_actual_Data;

#####################################################################################################################

exit;

##############################################################
#           Печать сообщения об ошибке                       #
##############################################################
sub send_error_OldData {
print <<"OUT_HTML";
<BR>
<BR>
<B><FONT COLOR=#A00000>Данные не актуальны!</FONT></B>
<BR>
<BR>
OUT_HTML
exit;
}


sub send_actual_Data {
print <<"OUT_HTML";
<br>
ветер <a href="$path_to_images/WindDirectionHistory.gif">$Wind_Dir°</a> <a href="$path_to_images/WindSpeedHistory.gif">$Wind_Speed</a> м/с порывы до $Hi_Speed м/с<br>
температура <a href="$path_to_images/OutsideTempHistory.gif">$Temp_Out</a>°C точка росы <a href="$path_to_images/DewPointHistory.gif">$Dew_Point</a>°C<br>
влажность <a href="$path_to_images/OutsideHumidityHistory.gif">$Out_Hum</a> %<br>
давление <a href="$path_to_images/BarometerHistory.gif">$Bar</a> мм.рт.ст. <a href="$path_to_images/BarometerHistory.gif">$mBar</a> гПа<br>
осадки <a href="$path_to_images/RainRateHistory.gif">$Rain_Rate</a> мм/ч <br>
</body></html>
OUT_HTML
exit;
}

##############################################################
#           Разделение данных, полученных из файла           #
##############################################################
sub GetSplitData {
for ($named) { s/^\s+//; }  # Убрать все пробелы из начала строки (дата может содержать или не содержать пробелы перед знаком даты, что приводило к сбоям)
 ($date,$time,$Temp_Out,$Hi_Temp,$Low_Temp,$Out_Hum,$Dew_Point,$Wind_Speed,$Wind_Dir,$Wind_Run,$Hi_Speed,$Hi_Dir,$Wind_Chill,$Heat_Index,$THW_Index,$$THSW_Index,$Bar,$Rain,$Rain_Rate,$Solar_Radiation,$Solar_Energy,$Hi_Solar_Radiation,$UV_Index,$UV_Dose,$Hi_UV,$Heat_DD,$Cool_DD,$In_Temp,$In_Humidity,$In_Dew_Point,$In_Heat,$In_EMC,$In_Air_Density,$ET,$Wind_Samp,$Wind_TX,$ISS_Recept,$Arc_Int)=split(/\s+/,$named);
}


##############################################################
#           Печать сообщения об ошибке                       #
##############################################################
sub send_error_ReadFile {
 print "Данные не доступны!";

}

Пример shtml файла, который отображает данные

Код:
<HTML><HEAD><TITLE>Погода UUWK (PDA)</TITLE>
<META http-equiv=Content-Type content="text/html; charset=windows-1251">
<META http-equiv=expires content="Mon, 01 Jan 1990 00:00:00 GMT">
<META http-equiv=content-language content=ru>
<META http-equiv=Cache-Control content=no-cache>
<BODY text=#0000FF bgColor=#ffffff leftMargin=0 topMargin=0 marginwidth="0" marginheight="0">
<DIV id=idBody style="LEFT: 10px; VISIBILITY: visible; WIDTH: 95%; POSITION: absolute; TOP: 2px; BACKGROUND-COLOR: #ffffff">
<font face="Arial, Helvetica, sans-serif" color="#1F15E8">
<!--#exec cgi="http://www.uuwk.ru/cgi-bin/weather_pda.cgi"-->
</body></html>

Вставка этой строки на любом сайте приведет к отображению погоды Кудиново на этой странице:

Код:
<!--#exec cgi="http://www.uuwk.ru/cgi-bin/weather_pda.cgi"-->
 
Сделал, пока только для Ватулино, формирователь METAR, который перерабатывает жуткие файлы от вантажа в нормальный метеокод и постит его в twitter @metar_uumw.

UUMW 190430Z VBR02MPS OVC004 M11/M12 Q975 NOSIG RMK QFE749/999

На сегодня работает немного кривовато, пока только набросал скриптик, нужно его будет понастраивать, но это в самое ближайшее время сделаю, нужно набрать статистику. Так что фолловьте и пользуйтесь. О замеченных багах пишите пожалуйста в личку, будем лечить.

Ну а как отладим, сделаю такой же для Кудиново и всем желающим, у кого вантаж стоит. А потом и ATIS с тёткой заведем... Гы  :~)
 
У нас  в Воскресенске тоже вантаж стои. Таким способом можно и независимую метео сеть создать 🙂
 
@ Velocity там несколько, cron + bash + php. Но вот уже сейчас глянул - нашел несколько принципиальных багов по взаимодействию роботов, буду фиксить сейчас. В twitter посты идут через его API.

@ DeDan69 облачность я вычисляю, насколько это возможно, комплексным методом: во-первых, вероятность оной рассчитывается математически (уж не знаю, насколько это всё верно, поэтому пристально буду наблюдать за результатами) на основании имеющихся данных. Метод для нижнего слоя облачности, до 1800 м. Затем я беру данные с метеосайтов для регионов и сравниваю, угадал или нет. Криво, конечно, так делать, но на первое время сойдёт. Думаю, нужно делать и возможность уточнения данных непосредственно оператором с точки. В общем, там ещё работать и работать над этим предстоит. Но самому интересно до безобразия уже.  ;D
 
У насв Воскресенске тоже вантаж стои. Таким способом можно и независимую метео сеть создать

Ну и где она в интернете видна???

@ Evgeniy Savelyev насчет Твиттера не уверен что это нужно. Можно размещать на своем сайте. Вантажей похоже закупили не мало. Нужно сделать скрипт доступным для авиаторов. Можно здесь разместить или на сайтах аэродромов.
 
@ Velocity Twitter как возможный вариант вывода, это не принципиально, могу сделать xml-feeds для сайтов, можно сделать смс, это уже дело десятое, как будет удобно, так и сделаем.

Сейчас для меня главное на этом этапе сделать так, чтобы METAR формировался правильно относительно облачности и осадочных метеоявлений.

А вот на втором этапе есть в планах сделать открытую систему, чтобы в ней регистрировали свои вантажи, кому нужно, и получали METAR своих площадок. Но это вопрос более простой, чем первый этап.

Буду рад любой информации по мат.моделям метео, ссылкам и т.п. А пока пойду баги выловленные дальше фиксить.
 
METAR для Кудиново запустил на @METAR_UUMK, но сию там железка зависла, крайний репорт от 201530Z.

В принципе, уже могу добавлять в систему другие старнции, пока ручками, потому что занят пока настройкой модели для облаков и т.п. Да, xml-feed тоже сделаю скоро, будет по запросу выдавать крайнюю сводку.
 
Дневник разработки  :~)

Удачный эксперимент использования Google Speech Engine для автоматического формирования ATIS-сообщений: http://soundcloud.com/evgeniy-savelyev/atis-metar-google-voice (пример).

Таким образом, можно будет просто подключать радиостанцию к выходу звуковой карты компьютера и иметь ATIS на точках. Вопрос наличия частот под это в данной концепции не рассматриваю - у кого есть (частота или возможность), можно будет пользоваться.
 
@ 502 Всё онлайн, спич энджин лежит на серверах Гугла. Она формирует звуковые файлики, которые сервер уже мой склеивает в подобный трек и через, скажем, HTML5 или, на худой конец, FLASH, можно играть в звуковую карту -> в эфир.

На самом деле я когда начинал, ха, неделю назад, этот проект, мне казалось, что всё достаточно просто и тривиально (ну, технически сложностей как раз нет), но вдумываясь в то, как оно должно работать и взаимодействовать, стали придумываться вот такие полезные фичи. Поэтому, в дальнейшем, можно будет сделать приложение для айфона или андроида, которое бы забирало и играло ATIS-сообщения, что сильно упросит с мобильной точки зрения всю систему, так как интернет-соединение есть у всех смартфонов/планшетов в наши дни. Но это пока в относительно далёком ToDo.

На данный момент мы написали несколько парсеров метеоданных и занимаемся настройкой правильного формирования METAR, параллельно проектируем интерфейс для самостоятельной регистрации станций в системе. Предполагается, что человек регистрирует свою станцию или точку для формирования сводок и начинает получать информацию удобным для него способом.

Ныне реализовано два способа: a native source (Vantage) (не указывается) или a foreign source (должно указываться в RMK как FSRC) по данным метеоинформации станций из сети в районе заявленной точки; понятное дело, это будет усреднённая информация, но всё же лучше, чем никакой вовсе.

Ну вот так, в кратце. Как закончим интерфейс, можно будет начинать добавлять всех желающих. Я планирую так: для членов AOPA система будет работать бесплатно (в смысле регистрации станций/точек), для всех остальных за небольшую копеечку, направленную на самоподдерживаемость проекта в целом.

Ну а на сегодня новостей пока больше нет.

P.S. И таки да, мне нужен доступ к базе аэродромов, лучше всего сразу к серверу SQL-базы.  :🙂
 
Я пока с трудом понимаю, зачем это нужно. Более-менее понятно "что" ты сделал, но "зачем", какой сценарий использования - не понятно.
Зачем нужна говорилка погоды в айфоне, если я метар и так прочитать могу? В эфире - это понятно. Но требовать постоянного соединения с интернетом, чтоб проговорить текущую погоду - выглядит сомнительным решением.

Зачем нужны данные из maps.aopa.ru - я тоже не понимаю.
Но если надо - забирай например в GPX формате - http://maps.ao pa.ru/export/pointsGpx/airport/airports.gpx (убрать пробел)

upd: Да и метары на основе этой метеостанции - не ясно, больше пользы от них или вреда. Главное, что нужно от метара - это ветер, QNH, видимость и нижняя кромка.
С QNH и ветром тут всё в порядке, но вот давать OVC008 когда погода миллион на миллион (как сегодня) - сомнительная "помощь". Потом никому не объяснишь что нижняя граница облачности рассчитана по слабенькой формуле и на неё нужно с долей скепсиса смотреть. Уж лучше облачность вовсе не давать - а те, кто соображает, сами прикинут её по дефициту точки росы, но сделают они это сами, под собственную отвественность.
 
Похоже надежно победили проблему с отказами GPRS модема  😀

В планировщике задач организовали задачу, которая ежедневно каждый час (00:27, 01:27, 02:27...) запускает файл shut.bat содержащий текстовую строку: c:\windows\system32\shutdown.exe /r /f

Это приводит к "нежной" перезагрузке с предварительным закрытием всех программ. Напрямую запускать shutdown не получается. Неделю уже работает без ручного вмешательства  😀

Минута перезагрузки важна. Нам хватает менее 2-х минут для полной перезагрузки компьютера. Таким образом, к моменту активизации следующей передачи данных на сервер, компьютер будет перезагружен и готов к ней. На каждом конкретном компьютере нужно измерить время полной перезагрузки и добавив дополнительно 1 минуту использовать в настройках планировщика задач.

Как только поставили метеостанцию в нормальное помещение со столом все проблемы были решены.
 
Назад
Вверх