Горячая линия Embedded System Rus:8-800-775-06-34 (звонок по России бесплатный)

LM5_N
LM-Wall_N
DALI_N
Vita_N

Получение данных от погодных станций DAVIS в сеть KNX

Погодные станции DAVIS

Погодные станции DAVIS позволяют замерить множество погодных параметров в месте установки измерительного блока:

  • температуру
  • направление и скорость ветра
  • влажность
  • освещённость
  • и ещё более 30 параметров.

Обычно погодная станция разделяется на 2 отдельные части:

  • измерительную (датчики)
  • регистрирующую (например, панель показанная справа внизу на фото)

Есть модели с передачей данных между частями станции как проводным, так и беcпроводным способом.

Регистрирующая часть станции может запоминать и отображать замеренные параметры.

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

davis

Подробнее с продукцией DAVIS Instruments Corp. можно ознакомиться по ссылке:
http://www.davisnet.com/weather/products/professional-home-weather-stations.asp

Одним из ресселеров продукции DAVIS в России является компания i‑Home.

Получение информации от станции

После подключения регистрирующей части станции к Internet, становится возможным периодическая отправка файла-отчёта станции на LogicMachine по FTP протоколу.

LogicMachine извлекает данные последнего замера.

Извлечённые данные могут быть использованы:

  • для визуализации LogicMachine
  • переданы как KNX сообщения
  • для дальнейшей обработки в приложениях

Ниже описано решение задачи отправки температуры и направления ветра в сообщении KNX, например, для отображения на панелях-дисплеях системы KNX.

Для организации приема информации от станции DAVIS Вам потребуются:

  • Станция DAVIS, поддерживающая TCP/IP передачу данных,
    например, станции серии Vantage Pro2 1)
  • Интерфейсный блок-адаптер TCP/IP,
    например, типа 6555 1)
  • Программное обеспечение WeatherLink 1)
  • Компьютер для установки программы WeatherLink,
  • Internet канал передачи данных,
  • LogicMachine.

примечание
1) Подробности комплектации и реализации уточняйте у производителя или ресселера DAVIS.

Настройка FTP сервера LogicMachine

Для приема и хранения файлов-отчётов от станции необходимо активировать FTP server LogicMachine в меню:

System configuration -> Services -> FTP server.

davis_1

Server Status Enabled
включить сервер
Port 21
Номер порта, не менять
Username ftp
Имя пользователя, фиксировано, не меняется
Password строка
задайте строку пароля при необходимости

Остальные параметры обычно не используются (пустые), подробнее см. в «LogicMachine Руководство пользователя» раздел FlashSys\Services\FTP Server (Сервер FTP).

После изменения параметров FTP server необходима перезагрузка LogicMachine.

Настройка станции

Для настройки подключения станции, параметров сохранения и передачи отчётов используйте соответствующие инструкции провайдера связи, производителя или поставщика оборудования.

Настройка KNX объектов

Определяем KNX объекты, которые будут принимать сообщения с извлечёнными данными в меню LogicMachine –> Объекты (LogicMachine –> Objects).

davis_4

Определите объекты, которые будут принимать данные из файла отчёта в данном примере:

Название объекта
Групповой адрес
Тип данных
Комментарий
temperature 09.001 температура (09.001 temperature) В примере используется для передачи температуры
wind dir 16. 14 байт, ASCII-строка (16. 14 byte ASCII string) В примере используется для передачи направления ветра

Параметры объектов:

Название объекта Обязательный параметр.
Групповой адрес Подставьте соответствующие адреса объектов устройств, которые будут отображать данные.
Тип данных Тип данных сообщения KNX.

Остальные параметры обычно не используются (пустые), подробнее см. в «LogicMachine Руководство пользователя»

Создание программы LogicMachine

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

Для создания такого скрипта:

  • Перейдите к перечню скриптов по расписанию LogicMachine -> Скрипты -> По расаписанию (LogicMachine -> Scripting -> Scheduled).
  • На выпадающем диалоге выберете Добавить новый скрипт (Add new script).
    davis_5

Параметры нового скрипта определяются в появившемся диалоге:

davis_6

Название Имя скрипта
Обязательный параметр
Минута Расписание по минутам «‘*/5″‘ — означает запуск скрипта каждые 5 минут.
Активный Установленная галочка означает, что скрипту разрешено выполнение.
  • Установите остальные параметры как показано на иллюстрации.
  • Параметры Категория и Описание — необязательные.
  • Нажмите кнопку Сохранить.
    В перечне резидентных скриптов должен появится зарегистрированный Вами скрипт.

Для вызова редактора программы скрипта, нужно нажать на соответствующую иконку в столбце Редактор.

Подробнее о скриптах см. в «LogicMachine Руководство пользователя«.

Формат файла отчёта станции DAVIS

Файл отчёт является обычным текстовым файлом с простой структурой:

davis_8

  • Данные относящиеся к одному замеру расположены в 1 строке;
  • Количество строк — не фиксировано;
  • Строки имеют поля даты и времени замера с точностью до 1 секунды.
  • Строки отсортированы по времени замера: последние замеры в конце:
  • Поля данные расположены в фиксированных позициях;
  • Данные выровнены по правой границе и имеют фиксированный формат.
  • Данные полей гарантированно разделяются 1-м или большим количеством пробелов (левые позиции значения поля могут быть пробелами);
  • Первые 3 строки являются заголовком;
  • Перенос строки кодируется последовательностью 0D0A(hex);

Перечень и позиции полей файла отчёта:

Номер поля

Заголовок

Описание

Первая позиция1)

Последняя позиция

Длина поля

Формат текстовый

Формат KNX2)

03 Temp Out Температура воздуха 016 022 007 sDD.d 09.001
09 Wind Dir Направление ветра 056 061 006 SSSS 16,14

примечание
1) Первая позиция включает разделительные пробелы.
2) Подробнее о форматах см. в документации подключаемого KNX оборудования.

Полностью таблицу можно скачать здесь
Образец файла отчёта можно скачать здесь
Файл макета формата полей можно скачать здесь

Программирование функции

Для поддержки функции извлечения данных используется встроенный язык программирования высокого уровня LUA. Подробнее Вы можете ознакомиться в документе «Краткое описание языка LUA«.

Так как нас пока интересует только последний замер, нужно считать последнюю строку файла, и извлечь из неё данные между определёнными фиксированными позициями функцией string.sub.

Код скрипта по расписанию Update DAVIS datas:

-- задаём массив содержащий описание формата файла отчёта и отображения полей данных.
fields = {
{start = 16, finish = 22, var = 'temperature', comment = 'Температура воздуха'},
{start = 56, finish = 61, var = 'wind dir' , comment = 'Wind Dir' }
}
-- где
-- каждая строка {start ... }, содержит описание 1-го поля файла отчёта
-- start - первая позиция данных поля в строке замера
-- finish - последняя позиция данных поля в строке замера
-- var - Имя поля, совпадающее с именем объекта LogicMachine или его групповым адресом
-- см. перечень параметров в разделе "Настройка KNX объектов"
-- comment - Дополнительное описание поля, необязательное.
-- в структуру описания можно добавить и свои параметры
-- открываем файл отчёта.
file = io.open('/home/ftp/davis.txt')
-- Корневая директория ftp: '/home/ftp/'
-- путь загрузки файла в станции указывается относительно этой директории.
-- Считываем последнюю строку (последний замер) файла,
-- пользуясь неизменностью длины строки = 264
file:seek ("end" , -264) -- текуща позиция чтения установлена на
-- 264 символ от конца файла, те начало последней строки.
data = file:read() -- Считываем строку целиком в переменную data:
-- Перебираем все интересующие нас поля, записанные в массиве fields
for index, field in ipairs(fields) do -- функция ipairs() размещает в
-- переменной field последовательность
-- всех параметров для текущего поля
-- Копируем в value подстроку, содержащую значение поля:
value = string.sub(data, field.start, field.finish)
-- но подстрока может содержать слева разделительные пробелы, удаляем их:
value = string.trim(value)
-- полученное значение записываем в объект KNX.
grp.write(field.var, value) -- в качестве адреса объекта функция grp.write()
-- может принимать как имя объекта, так и его код.
end -- конец цикла перебора всех полей в массиве fields.

Файл отчёта может содержать информацию о множестве последних замеров (за продолжительный период). При необходимости можно создать более функциональные процедуры, позволяющие извлекать определённые данные конкретного замера.