[an error occurred while processing this directive] Море, морошка и моряки

Sms прогноз на спутниковый

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

Мы предпочитаем пользоваться телефонами, у голосовой связи есть свои преимущества, а аренда пока обходится дешевле коммуникаторов. На Белом море, от Кольского полуострова и южнее, стабильно работает спутниковый оператор Thuraya. В более удаленных районах берем с собой Iridium, у которого глобальное покрытие, но дороже и аренда и тарифы.

Спутниковые телефоны мы используем только для связи голосом и sms-сообщениями. Тарифы на спутниковый интернет очень недешевые, а телефон нужно подключать к ноутбуку, который сложно уберечь в походных условиях. Таким образом, задача сводится к трем частям - получению прогноза, формированию sms-сообщений, и отправке их на спутниковый. В качестве источника прогнозов мы использовали и сообщения NAVTEX и Grib-файлы от NOAA

Сообщения Navtex

Сообщения Navtex содержат информацию для мореплавателей, в том числе прогнозы погоды, представлюят собой текст на английском языке, с формальной структурой, но человеко-читаемый. Подробнее о формате сообщений можно почитать в википедии. Сообщения составляют профессиональные метеорологи, и они содержат всю необходимую для судов информацию, включая высоту волны, видимость, различные опасные явления и т.п. Эти возможности отсутствуют при использовании, например, grib файлов. Сообщения Navtex передаются сетью станций по всему миру в закодированном виде по КВ каналу, принимаются на кораблях специальными автоматическими терминалами. Существует аналогичный глобальный сервис на подобных принципах, передающий погодные факсы с изображениями синоптических карт.

Сообщения Navtex и Meteo Fax можно получать, имея бюджетный КВ приемник с режимом SSB (например Degen 1103) или используя USB-донгл для цифрового ТВ со специальной КВ приставкой. Полученный от них звуковой сигнал можно расшифровать на ноутбуке или на смартфоне с программой-декодером. Мы пытались наладить прием этих сообщений на "коленках", и задачу в принципе решили, но для "тепличных" условий. Добиться стабильной устойчивой работы в походных условиях не удалось. В том числе из-за необходимости четко соблюдать расписание трансляций и тишину на время приема в течение 10-15 минут. Обеспечить это на ходу на открытой палубе небольшого судна оказалось слишком сложно.

Несколько лет назад на сайте администрации СевМорПути стали публиковать сообщения Navtex по Арктическому региону (METAREA XXI). Мы воспользовались этим источником для обеспечения прогнозами во время нашего похода на Вайгач. По расписанию запускалась программа, скачивала текст свежего сообщения Navtex, формировала sms и отправляла на наш Iridium. Из исходного сообщения извлекались данные только по интересующим районам, и сокращались до минимального размера текста. Эта система отработала в течение всего похода без сбоев, регулярно обеспечивая нас актуальными прогнозами.

GRIB файлы NOAA

В походе 2019 года на Белое море вновь встала проблема получения прогноза по sms на спутниковый. Выяснилось, что в Navtex по Арктическому региону прогнозы на район Белого моря отсутствуют. Получение прогноза было переделано на обработку grib файлов от NOAA. Программа по расписанию скачивала новые файлы очередного прогноза, извлекала данные для интересующих точек, формировала и отправляла sms на спутниковый Thuraya.

Для всего запланированного маршрута был подготовлен набор точек вдоль него с плановыми датами датами достижения этих точек. Прогноз отправлялся по запланированной точке, а также предыдущей и следующей - на случай опережения или отставания от графика. Внятного описания процедуры загрузки grib найти в интернет не удалось, ниже мы приводим пример с пояснениями.

Как скачать GRIB

Данные доступны на сервере https://nomads.ncep.noaa.gov/. Будем скачивать прогнозы GFS с разрешением 0.25 Degree (0.25°). Эти прогнозы публикуются 4 раза в сутки: в 00, 06, 12, 18 часов (по UTC!). Чтобы не качать гигантские grib-ы на всю планету, пользуемся Апи "grib filter", это просто get-запрос, который возвращает отфильтрованный по нужному региону и переменным grib-файл.

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

https://nomads.ncep.noaa.gov/cgi-bin/filter_gfs_0p25.pl
здесь список доступных дат прогноза (UTC!), выбираем gfs.20190807
https://nomads.ncep.noaa.gov/cgi-bin/filter_gfs_0p25.pl?dir=%2Fgfs.20190807
доступные времена прогноза для 7 августа 2019, выбираем 06 утра (UTC!)
https://nomads.ncep.noaa.gov/cgi-bin/filter_gfs_0p25.pl?dir=%2Fgfs.20190807%2F06
форма для генерации ссылки или скачивания grib данного прогноза

Выбрав в форме нужные параметры, получим длинную ссылку вида:

https://nomads.ncep.noaa.gov/cgi-bin/filter_gfs_0p25.pl?file=gfs.t06z.pgrb2.0p25.f000&dir=%2Fgfs.20190807%2F06&lev_10_m_above_ground=on&lev_surface=on&lev_2_m_above_ground=on&var_UGRD=on&var_TMP=on&var_PRES=on&var_GUST=on&var_VGRD=on&subregion=&leftlon=33.99583&rightlon=35.92335&bottomlat=64.92323&toplat=66.79073

Что содержится в этой ссылке:

https://nomads.ncep.noaa.gov/cgi-bin/filter_gfs_0p25.pl
gfs
здесь и далее означает модель gfs
0p25
здесь и далее означает разрешение 0.25°
file=gfs.t06z.pgrb2.0p25.f000
t06z
время прогноза 06 утра
pgrb2
формат Grib2
0p25
разрешение 0.25°
f000
срок в часах от времени прогноза, f003 означает +3 часа, f006 +6 часов и т.д.
dir=%2Fgfs.20190807%2F06
Это url-кодированная строка "/gfs.20190807/06", где
20190807
дата в формате YYYYMMDD, здесь 7 августа 2019
06
время прогноза (совпадает с тем что выше)

Далее интересующие метеопараметры:

var_UGRD=on
u-компонента ветра, м/c
var_VGRD=on
v-компонента ветра, м/c
var_GUST=on
порывы ветра, м/c
var_PRES=on
давление, паскали
var_TMP=on
температура, кельвины

Далее выбираем уровни высоты над поверхностью (в Grib содержатся трехмерные данные!)

lev_surface=on
для давления
lev_2_m_above_ground=on
для температуры
lev_10_m_above_ground=on
для ветра
Все доступные параметры и уровни перечислены в описании модели "inventory", оно есть на сайте nomads

Далее выбираем регион - прямоугольную область координат:

subregion=
Выбрать регион
leftlon=33.99583
мин долгота
rightlon=35.92335
макс долгота
bottomlat=64.92323
мин широта
toplat=66.79073
макс широта
Числа в этом примере указывают область в районе Белого Моря Чем меньше указан размер области, тем меньше объем данных и быстрее скачивается. Если интересует одна точка, строим регион вокруг нее. Указанные границы будут округлены до разрешения модели 0.25° Поэтому регион надо брать с небольшим запасом, чтобы интересующая точка не "вывалилась"" за край региона.

Таким образом, мы получили один grib файл для определенного времени прогноза с определенным сроком. Чтобы скачать прогнозы с разными сроками, необходимо повторить этот же запрос с разными значениями параметра f000, f003, f006, f009, f012 и т.д.

Обработка GRIB

Для извлечения данных из скачанных файлов мы использовали библиотеку NetCDF-Java Library, т.к. код нашего приложения написан на java. На этом же сайте есть варианты библиотеки для С, С++, и Fortran; можно найти и другие библиотеки, работающие с grib файлами на других языках, а также command-line утилиты. Мы не будем приводить свой исходный код (он слишком неаккуратный, и слишком зависит от языка и библиотеки). Отметим важные моменты, на которые нужно обратить внимание.

При извлечении переменных нужно убедиться, что они берутся для нужного уровня (level), и учесть единицы измерения. Например, температуру в кельвинах полезно перевести в градусы (вычесть 273.15). Направление и силу ветра можно вычислить по его uv-компонентам (u направлена на север, v - на восток). Получаем силу ветра (в м/с) = sqrt(u*u+v*v), а направление вектора ветра (в радианах) = Math.atan2(u, v). При определении румба важно не забыть, что "ветер дует в компас", то есть северный ветер - который дует С севера, а не НА север.

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

Отправка SMS на спутниковый

В случае Iridium для отправки sms можно отправить email на специальный адрес 8816NNNNNNNN@msg.iridium.com или 7954NNNNNNNN@msg.iridium.com, где NNNNNNNN - номер телефона. Текст сообщения размещается в теле письма, формат обязательно plain/text. К тексту в начало будет добавлен адрес отправителя письма. Упоминается ограничение на текст в 160 символов латиницы (включая адрес отправителя). Тем не менее, мы получали и более длинные тексты (отдельными смс), и телефон иногда склеивал их правильно в одно сообщение. Некоторые знаки препинания и спецсимволы не отображаются на телефоне.
Для Thuraya sms автоматически можно отправлять, если в телефон установлена международная симкарта Thuraya. С сим-картам gtnt и других операторов (мтс, билайн и т.д.) такой возможности нет. Сообщение email отправляется на специальный адрес sms@smsr.thuraya.com. В теме письма указывается полный номер телефона с двум дополнительными нулями в начале. Напртимер, номер 8821611111111 передается как 008821611111111 Текст сообщения размещается в теле письма, формат обязательно plain/text. К тексту в начало будет добавлен адрес отправителя письма. Если текст превышает 1ё60 символов(латиницы), он будет передан частями, и телефон может правильно склеить их в одно sms сообщение.
Не рекомендуем использовать русские буквы, и стоит убедиться, что все символы и знаки препинания, которые планируется использовать в sms, доходят на телефон правильно. Обязательно нужно до похода провести тесты с той моделью телефона, которую Вы планируете использовать.