Перейти к содержанию

Шаблоны преобразования CSV в BUFR

Учебные результаты

К концу этого практического занятия вы сможете:

  • создать новый шаблон преобразования BUFR для ваших данных CSV
  • редактировать и отлаживать ваш пользовательский шаблон преобразования BUFR из командной строки
  • настроить плагин данных CSV в BUFR для использования пользовательского шаблона преобразования BUFR
  • использовать встроенные шаблоны AWS и DAYCLI для преобразования данных CSV в BUFR

Введение

Файлы данных с разделителями-запятыми (CSV) часто используются для записи наблюдений и других данных в табличном формате. Большинство регистраторов данных, используемых для записи выходных данных датчиков, могут экспортировать наблюдения в файлах с разделителями, включая CSV. Аналогично, когда данные загружаются в базу данных, легко экспортировать необходимые данные в файлах, отформатированных CSV.

Модуль wis2box csv2bufr предоставляет инструмент командной строки для преобразования данных CSV в формат BUFR. При использовании csv2bufr вам необходимо предоставить шаблон преобразования BUFR, который отображает столбцы CSV на соответствующие элементы BUFR. Если вы не хотите создавать свой собственный шаблон преобразования, вы можете использовать встроенные шаблоны AWS и DAYCLI для преобразования данных CSV в BUFR, но вам нужно будет убедиться, что данные CSV, которые вы используете, находятся в правильном формате для этих шаблонов. Если вы хотите декодировать параметры, которые не включены в шаблоны AWS и DAYCLI, вам нужно будет создать свой собственный шаблон преобразования.

На этом занятии вы научитесь создавать свой собственный шаблон преобразования для преобразования данных CSV в BUFR. Вы также узнаете, как использовать встроенные шаблоны AWS и DAYCLI для преобразования данных CSV в BUFR.

Подготовка

Убедитесь, что стек wis2box был запущен с python3 wis2box.py start

Убедитесь, что у вас открыт веб-браузер с пользовательским интерфейсом MinIO для вашего экземпляра, перейдя по адресу http://YOUR-HOST:9000 Если вы не помните свои учетные данные MinIO, вы можете найти их в файле wis2box.env в директории wis2box на вашей учебной виртуальной машине.

Убедитесь, что у вас открыт и подключен MQTT Explorer к вашему брокеру с использованием учетных данных everyone/everyone.

Создание шаблона преобразования

Модуль csv2bufr поставляется с инструментом командной строки для создания вашего собственного шаблона преобразования с использованием набора последовательностей BUFR и/или элемента BUFR в качестве входных данных.

Для поиска конкретных последовательностей и элементов BUFR вы можете обратиться к таблицам BUFR на https://confluence.ecmwf.int/display/ECC/BUFR+tables.

Инструмент командной строки csv2bufr mappings

Для доступа к инструменту командной строки csv2bufr вам нужно войти в контейнер wis2box-api:

cd ~/wis2box
python3 wis2box-ctl.py login wis2box-api

Чтобы вывести страницу справки для команды csv2bufr mapping:

csv2bufr mappings --help

На странице справки показаны 2 подкоманды:

  • csv2bufr mappings create : Создать новый шаблон преобразования
  • csv2bufr mappings list : Перечислить шаблоны преобразования, доступные в системе

список csv2bufr mapping

Команда csv2bufr mapping list покажет вам шаблоны преобразования, доступные в системе. Шаблоны по умолчанию хранятся в директории /opt/wis2box/csv2bufr/templates в контейнере.

Чтобы поделиться пользовательскими шаблонами преобразования с системой, вы можете хранить их в директории, определенной переменной $CSV2BUFR_TEMPLATES, которая по умолчанию установлена в /data/wis2box/mappings в контейнере. Поскольку директория /data/wis2box/mappings в контейнере смонтирована в директорию $WIS2BOX_HOST_DATADIR/mappings на хосте, вы найдете свои пользовательские шаблоны преобразования в директории $WIS2BOX_HOST_DATADIR/mappings на хосте.

Давайте попробуем создать новый пользовательский шаблон преобразования с помощью команды csv2bufr mapping create, используя в качестве входных данных последовательность BUFR 301150 плюс элемент BUFR 012101.

csv2bufr mappings create 301150 012101 --output /data/wis2box/mappings/my_custom_template.json

Вы можете проверить содержимое созданного шаблона преобразования с помощью команды cat:

cat /data/wis2box/mappings/my_custom_template.json

Осмотр шаблона преобразования

Сколько столбцов CSV сопоставлено с элементами BUFR? Какой заголовок CSV для каждого сопоставленного элемента BUFR?

Нажмите, чтобы увидеть ответ

Созданный вами шаблон преобразования сопоставляет 5 столбцов CSV с элементами BUFR, а именно 4 элемента BUFR в последовательности 301150 плюс элемент BUFR 012101.

Следующие столбцы CSV сопоставлены с элементами BUFR:

  • wigosIdentifierSeries сопоставляется с "eccodes_key": "#1#wigosIdentifierSeries" (элемент BUFR 001125)
  • wigosIssuerOfIdentifier сопоставляется с "eccodes_key": "#1#wigosIssuerOfIdentifier" (элемент BUFR 001126)
  • wigosIssueNumber сопоставляется с "eccodes_key": "#1#wigosIssueNumber" (элемент BUFR 001127)
  • wigosLocalIdentifierCharacter сопоставляется с "eccodes_key": "#1#wigosLocalIdentifierCharacter" (элемент BUFR 001128)
  • airTemperature сопоставляется с "eccodes_key": "#1#airTemperature" (элемент BUFR 012101)

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

Далее мы обновим шаблон преобразования и добавим следующие последовательности:

  • 301011 для даты (год, месяц, день)
  • 301012 для времени (час, минута)
  • 301023 для местоположения (широта/долгота (грубая точность))

И следующие элементы:

  • 010004 для давления
  • 007031 для высоты барометра над уровнем моря

Выполните следующую команду, чтобы обновить шаблон преобразования:

csv2bufr mappings create 301150 301011 301012 301023 007031 012101 010004  --output /data/wis2box/mappings/my_custom_template.json

И снова проверьте содержимое шаблона преобразования:

cat /data/wis2box/mappings/my_custom_template.json

Осмотр обновленного шаблона преобразования

Сколько столбцов CSV теперь сопоставлено с элементами BUFR? Какой заголовок CSV для каждого сопоставленного элемента BUFR?

Нажмите, чтобы увидеть ответ

Созданный вами шаблон преобразования теперь сопоставляет 18 столбцов CSV с элементами BUFR: - 4 элемента BUFR из последовательности BUFR 301150 - 3 элемента BUFR из последовательности BUFR 301011 - 2 элемента BUFR из последовательности BUFR 301012 - 2 элемента BUFR из последовательности BUFR 301023 - элемент BUFR 007031 - элемент BUFR 012101

Следующие столбцы CSV сопоставлены с элементами BUFR:

  • wigosIdentifierSeries сопоставляется с "eccodes_key": "#1#wigosIdentifierSeries" (элемент BUFR 001125)
  • wigosIssuerOfIdentifier сопоставляется с "eccodes_key": "#1#wigosIssuerOfIdentifier" (элемент BUFR 001126)
  • wigosIssueNumber сопоставляется с "eccodes_key": "#1#wigosIssueNumber" (элемент BUFR 001127)
  • wigosLocalIdentifierCharacter сопоставляется с "eccodes_key": "#1#wigosLocalIdentifierCharacter" (элемент BUFR 001128)
  • year сопоставляется с "eccodes_key": "#1#year" (элемент BUFR 004001)
  • month сопоставляется с "eccodes_key": "#1#month" (элемент BUFR 004002)
  • day сопоставляется с "eccodes_key": "#1#day" (элемент BUFR 004003)
  • hour сопоставляется с "eccodes_key": "#1#hour" (элемент BUFR 004004)
  • minute сопоставляется с "eccodes_key": "#1#minute" (элемент BUFR 004005)
  • latitude сопоставляется с "eccodes_key": "#1#latitude" (элемент BUFR 005002)
  • longitude сопоставляется с "eccodes_key": "#1#longitude" (элемент BUFR 006002)
  • heightOfBarometerAboveMeanSeaLevel" сопоставляется с "eccodes_key": "#1#heightOfBarometerAboveMeanSeaLevel" (элемент BUFR 007031)
  • airTemperature сопоставляется с "eccodes_key": "#1#airTemperature" (элемент BUFR 012101)
  • nonCoordinatePressure сопоставляется с "eccodes_key": "#1#nonCoordinatePressure" (элемент BUFR 010004)

Проверьте содержимое файла custom_template_data.csv в директории /root/data-conversion-exercises:

cat /root/data-conversion-exercises/custom_template_data.csv

Обратите внимание, что заголовки этого файла CSV такие же, как заголовки CSV в созданном вами шаблоне преобразования.

Для тестирования преобразования данных мы можем использовать инструмент командной строки csv2bufr для преобразования файла CSV в BUFR с использованием созданного нами шаблона преобразования:

csv2bufr data transform --bufr-template my_custom_template /root/data-conversion-exercises/custom_template_data.csv

Вы должны увидеть следующий вывод:

CLI:    ... Transforming /root/data-conversion-exercises/custom_template_data.csv to BUFR ...
CLI:    ... Processing subsets:
CLI:    ..... 94 bytes written to ./WIGOS_0-20000-0-15015_20250412T210000.bufr4
CLI:    End of processing, exiting.

Проверка содержимого файла BUFR

Как вы можете проверить содержимое созданного вами файла BUFR и убедиться, что данные закодированы правильно?

Нажмите, чтобы увидеть ответ

Вы можете использовать команду bufr_dump -p для проверки содержимого созданного вами файла BUFR. Команда покажет вам содержимое файла BUFR в удобочитаемом формате.

bufr_dump -p ./WIGOS_0-20000-0-15015_20250412T210000.bufr4

В выводе вы увидите значения для элементов BUFR, которые вы сопоставили в шаблоне, например "airTemperature" будет показано:

airTemperature=298.15

Теперь вы можете выйти из контейнера:

exit

Использование шаблона преобразования в wis2box

Чтобы убедиться, что новый шаблон преобразования распознается контейнером wis2box-api, вам нужно перезапустить контейнер:

docker restart wis2box-api

Теперь вы можете настроить свой набор данных в wis2box-webapp для использования пользовательского шаблона преобразования для плагина преобразования CSV в BUFR.

wis2box-webapp автоматически обнаружит созданный вами шаблон преобразования и сделает его доступным в списке шаблонов для плагина преобразования CSV в BUFR.

Нажмите на набор данных, который вы создали на предыдущем практическом занятии, и нажмите "ОБНОВИТЬ" рядом с плагином с именем "Преобразованные в BUFR данные CSV":

Изображение редактора набора данных в wis2box-webapp

Вы должны увидеть новый шаблон, который вы создали, в списке доступных шаблонов:

Изображение шаблонов csv2bufr в wis2box-webapp

Hint

Обратите внимание, что если вы не видите новый шаблон, который вы создали, попробуйте обновить страницу или открыть ее в новом окне инкогнито.

Пока оставьте выбор шаблона AWS по умолчанию (нажмите в правом верхнем углу, чтобы закрыть конфигурацию плагина).

Использование шаблона '

Отсутствующие данные

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

Обновите пример файла

Обновите пример файла, который вы скачали, используя сегодняшнюю дату и время, и измените идентификаторы станций WIGOS на станции, которые вы зарегистрировали в wis2box-webapp.

Загрузите данные в MinIO и проверьте результат

Перейдите в пользовательский интерфейс MinIO и войдите, используя учетные данные из файла wis2box.env.

Перейдите в wis2box-incoming и нажмите кнопку "Создать новый путь":

Изображение пользовательского интерфейса MinIO с выделенной кнопкой создания папки

Создайте новую папку в корзине MinIO, которая соответствует идентификатору набора данных для набора данных, который вы создали с шаблоном='weather/surface-weather-observations/synop':

Изображение пользовательского интерфейса MinIO с выделенной кнопкой создания папки

Загрузите пример файла, который вы скачали, в созданную вами папку в корзине MinIO:

Изображение пользовательского интерфейса MinIO с загруженным примером aws

Проверьте панель управления Grafana по адресу http://YOUR-HOST:3000, чтобы увидеть, есть ли предупреждения или ошибки. Если они есть, попробуйте их исправить и повторите упражнение.

Проверьте MQTT Explorer, чтобы увидеть, получаете ли вы уведомления о данных WIS2.

Если вы успешно загрузили данные, вы должны увидеть 3 уведомления в MQTT Explorer по теме origin/a/wis2/<centre-id>/data/weather/surface-weather-observations/synop для 3 станций, данные которых вы сообщили:

Изображение MQTT Explorer после загрузки AWS

Использование шаблона 'DayCLI'

Шаблон DayCLI предоставляет шаблон преобразования для конвертации ежедневных климатических данных CSV в последовательность BUFR 307075, в поддержку отчетности о ежедневных климатических данных.

Описание шаблона DAYCLI можно найти здесь daycli-template.

Чтобы поделиться этими данными в WIS2, вам нужно создать новый набор данных в wis2box-webapp, который имеет правильную иерархию тем WIS2 и использует шаблон DAYCLI для преобразования данных CSV в BUFR.

Создание набора данных wis2box для публикации сообщений DAYCLI

Перейдите в редактор наборов данных в wis2box-webapp и создайте новый набор данных. Используйте тот же centre-id, что и в предыдущих практических занятиях, и выберите Data Type='climate/surface-based-observations/daily':

Создайте новый набор данных в wis2box-webapp для DAYCLI

Нажмите "CONTINUE TO FORM" и добавьте описание для вашего набора данных, установите ограничивающий прямоугольник и предоставьте контактную информацию для набора данных. Как только вы заполните все разделы, нажмите 'VALIDATE FORM' и проверьте форму.

Просмотрите плагины данных для наборов данных. Нажмите "UPDATE" рядом с плагином с именем "CSV data converted to BUFR", и вы увидите, что шаблон установлен на DayCLI:

Обновите плагин данных для набора данных, чтобы использовать шаблон DAYCLI

Закройте конфигурацию плагина и отправьте форму, используя токен аутентификации, который вы создали в предыдущем практическом занятии.

Теперь у вас должен быть второй набор данных в wis2box-webapp, настроенный для использования шаблона DAYCLI для преобразования данных CSV в BUFR.

Просмотрите входные данные daycli-example

Скачайте пример для этого упражнения по ссылке ниже:

daycli-example.csv

Откройте скачанный файл в редакторе и изучите содержимое:

Question

Какие дополнительные переменные включены в шаблон daycli?

Нажмите, чтобы увидеть ответ

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

Обновите пример файла

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

Загрузите данные в MinIO и проверьте результат

Как и раньше, вам нужно будет загрузить данные в корзину 'wis2box-incoming' в MinIO для обработки конвертером csv2bufr. На этот раз вам нужно будет создать новую папку в корзине MinIO, которая соответствует идентификатору набора данных для набора данных, который вы создали с шаблоном='climate/surface-based-observations/daily', который будет отличаться от идентификатора набора данных, который вы использовали в предыдущем упражнении:

Изображение пользовательского интерфейса MinIO с загруженным примером DAYCLI

После загрузки данных проверьте, нет ли предупреждений или ошибок на панели управления Grafana, и проверьте MQTT Explorer, чтобы увидеть, получаете ли вы уведомления о данных WIS2.

Если вы успешно загрузили данные, вы должны увидеть 30 уведомлений в MQTT Explorer по теме origin/a/wis2/<centre-id>/data/climate/surface-based-observations/daily за 30 дней в месяце, данные которых вы сообщили:

Изображение MQTT Explorer после загрузки DAYCLI

Заключение

Поздравляем

В этом практическом занятии вы научились:

  • создавать пользовательский шаблон преобразования для конвертации данных CSV в BUFR
  • использовать встроенные шаблоны AWS и DAYCLI для конвертации данных CSV в BUFR