|
История: Примеры скриптов > HTTP запросы Чтение погоды с погодных серверов |
Пред. Вверх След. Еще |
В Simple-Scada можно выполнять HTTP POST/GET/PUT запросы к сторонним серверам для чтения данных с них. Ниже рассмотрены примеры получения данных с некоторых популярных погодных серверов.
Примеры скриптов
Сайт weatherstack.com имеет удобный API для чтения погодных данных. После регистрации на сайте вы получите уникальный ключ доступа (API Access Key), который нужно использовать в GET-запросах для получения данных о погоде. В документации weatherstack смотрим примеры запросов и составляем запрос, например для Москвы он должен быть таким: http://api.weatherstack.com/current?access_key=API_ACCESS_KEY&query=Moscow , вместо API_ACCESS_KEY нужно вставить полученный при регистрации ключ доступа. Обратите внимание, если требуется передать параметр содержащий пробел, например "New York", то пробел нужно заменить на "%20", т.е. "New%20York". Убедиться в правильности составленного запроса можно вставив его в адресную строку браузера: ![]()
Браузер отобразил ответ с корректными данными, значит запрос составлен правильно. Как видно, ответ передается в формате JSON, позже мы извлечем из него нужные нам свойства. Теперь можно приступить к решению задачи в Simple-Scada. Сначала создадим интерфейс в проекте. Температуру и местное время будем выводить в компоненты Текст. А дополнительные параметры "ветер", "давление" и "влажность" выведем в компонент Таблица. На изображении ниже показан созданный интерфейс и имена, которые мы дали компонентам: ![]()
Интерфейс готов. Сделаем так, чтобы погода обновлялась сразу после запуска проекта, а затем через каждые 10 минут. Для этого создадим новый скрипт с типом события "Таймер" - в параметре скрипта "Интервал" укажем значение 600 секунд и активируем опцию "Выполнить сразу после запуска проекта". Напишем код скрипта: var
Данный скрипт будет выполнять HTTP GET запрос через каждые 10 минут. Мы отметили запрос тегом равным 77, чтобы не перепутать его с другими запросами при обработке ответа. Теперь создадим новый скрипт с типом события "Выполнен HTTP запрос". Такой скрипт будет вызываться при выполнении любого HTTP запроса, а параметр Response будет содержать ответ сервера. Известно, что сервер возвращает ответ в формате JSON. Текущая температура вложена в объект "current" и имеет имя "temperature". Чтобы получить ее значение, в коде скрипта нужно написать: Response['current']['temperature']. Simple-Scada автоматически извлечет значение свойства из JSON-строки. Аналогично извлекаем другие интересующие нас параметры и выводим их в компоненты Текст и Таблица. В результате код скрипта будет таким: begin Запускаем проект и смотрим результат. Значения считались сразу после запуска, а затем обновляются через каждые 10 минут: ![]() |
2. Погода с openweathermap.org 
Принцип тот же, что и в первом примере. Регистрируемся на сайте openweathermap.org, получаем ключ доступа и выполняем запросы погоды. Отличие только в форме запроса. Вот пример запроса для чтения текущей погоды: // формируем текст HTTP запроса |
Принцип тот же, что и в первом примере. Регистрируемся на сайте. Добавляем новое приложение и получаем API Key. Текст запроса для получения текущей погоды с accuweather.com выглядит так: aQuery := 'http://dataservice.accuweather.com/currentconditions/v1/294021?apikey=' + |
Для примера рассмотрим использование тарифа "Погода на вашем сайте". Сначала необходимо зарегистрироваться на сайте "API Яндекс Погоды" и получить ключ API. Запросы для "Яндекс Погоды" должны содержать заголовок "X-Yandex-Weather-Key" со значением ключа API. Запросы осуществляются через HTTPS, поэтому нужно добавить в запрос заголовок и включить SSL. Cогласно документации "API Яндекс Погоды" формируем GET-запрос и проверяем его в браузере, например через сервис REQBIN: ![]()
Ошибок при выполнении запроса не возникло, мы получили корректные данные в ответ, значит запрос составлен правильно. Теперь можно приступить к решению задачи в Simple-Scada. Сначала создадим интерфейс для отображения нужной нам информации. Температуры и описание погоды будем выводить на мнемосхему при помощи компонента "Текст". Ветер, давление и влажность отобразим через компонент "Таблица". На изображении ниже показан созданный интерфейс и имена, которые были назначены объектам: ![]()
Интерфейс готов. Реализуем обновление погоды при запуске проекта, а затем раз в час. Для этого создадим новый скрипт с типом события "Начало часа" и активируем опцию "Выполнить сразу после запуска проекта". Напишем код скрипта: var Данный скрипт будет выполнять HTTP GET запрос раз в час. Мы отметили запрос тегом равным 77, чтобы не перепутать его с другими запросами при обработке ответа. Теперь создадим новый скрипт с типом события "Выполнен HTTP запрос". Такой скрипт будет вызываться при выполнении любого HTTP запроса, а параметр Response будет содержать ответ сервера. Нам известно, что сервер возвращает ответ в формате JSON. Вся интересующая нас информация о текущей погоде хранится в объекте "fact". Поэтому сначала извлекаем массив "fact" и далее получаем нужные нам параметры. В результате код скрипта будет таким: var Теперь можно создать скрипт для расшифровки погодного описания, который сохраняется в переменную "vrCondition". Для этого связываем переменную "vrCondition" с компонентом "Текст" с именем "txtCondition" и на событие "OnDataChange" пишем следующий код: procedure TextCondition(Kode, WeathDesc: string); Проект готов, можно его запустить и посмотреть результат: ![]() |