Для получения прогноза погоды с сервиса Apixu.com Вам нужно:
- Зарегистрировать бесплатный аккаунт на сайте https://www.apixu.com/ . По завершении регистрации вы получите API key, который будет использован далее.
- Создать групповые адреса для значений прогноза погоды.
Запустите следующий код один раз из любого скрипта, например, из скрипта по расписанию.
Зайдите во вкладку Scripting, нажмите кнопку Scheduled, в левом нижнем углу экрана нажмите Add new script.
Заполнение полей для данного скрипта не имеет особой важности, необходимо лишь поставить галочку Active. Затем зайти в редактор скрипта, скопировать ниже следующий код, нажать кнопку Save, нажать кнопку Run script. По завершении выполнения скрипт выключится и больше не будет запускаться.
-- при необходимости скорректируйте тип данных base_adr = '33/0/' weather_obj = { { name = 'current.temp_c', datatype = 'temperature', units = '°C'}, { name = 'current.feelslike_c', datatype = 'temperature', units = '°C'}, { name = 'current.humidity', datatype = 'scale', units = '%'}, { name = 'current.wind_kph', datatype = 'float16', units = ' км/ч'}, { name = 'current.uv', datatype = 'uint16'}, { name = 'current.condition.text', datatype = 'text'}, { name = 'current.pressure_mb', datatype = 'float16', units = ' мБар'}, { name = 'current.precip_mm', datatype = 'uint16', units = ' мм'}, { name = 'today.mintemp_c', datatype = 'temperature', units = '°C'}, { name = 'today.maxtemp_c', datatype = 'temperature', units = '°C'}, { name = 'today.avgtemp_c', datatype = 'temperature', units = '°C'}, { name = 'today.avghumidity', datatype = 'scale', units = '%'}, { name = 'today.maxwind_kph', datatype = 'float16', units = ' км/ч'}, { name = 'today.uv', datatype = 'uint16'}, { name = 'today.condition.text', datatype = 'text'}, { name = 'today.totalprecip_mm', datatype = 'uint16', units = ' мм'}, { name = 'tomorrow.mintemp_c', datatype = 'temperature', units = '°C'}, { name = 'tomorrow.maxtemp_c', datatype = 'temperature', units = '°C'}, { name = 'tomorrow.avgtemp_c', datatype = 'temperature', units = '°C'}, { name = 'tomorrow.avghumidity', datatype = 'scale', units = '%'}, { name = 'tomorrow.maxwind_kph', datatype = 'float16', units = ' км/ч'}, { name = 'tomorrow.uv', datatype = 'uint16'}, { name = 'tomorrow.condition.text', datatype = 'text'}, { name = 'tomorrow.totalprecip_mm', datatype = 'uint16', units = ' мм'},}for i = 1, #weather_obj, 1 do obj = weather_obj[i] if obj.units then units = obj.units else units = '' end grp.create( { datatype = obj.datatype, address = base_adr..i, name = obj.name, units = units } ) end script.disable(_SCRIPTNAME)
В переменной base_adr вы можете поменять «основу» адреса.
Результатом работы скрипта будет следующее:
- Создать скрипт по расписанию, например, с такими параметрами:
В данном примере скрипт будет запрашивать прогноз раз в 10 минут. Убедитесь, что скрипт не выполняется слишком часто (не более 1 раза в 5 минут).
- Вставить следующий код в редактор скрипта.
Переменной key присвоить значение вашего API key, а также поменять значение переменной location на название необходимой локации в виде строкового значения.
Например, город Королёв Московской области можно найти на сайте так:
location будет иметь значение ‘korolev-moskva-russia’.
При необходимости поменяйте групповые адреса, в которые будет осуществляться запись значений прогноза. Со всей информацией прогноза можно ознакомиться в документации по ссылке: https://www.apixu.com/doc/forecast.aspx
require('json') https = require('ssl.https') escape = require('socket.url').escape key = 'my_api_key' location = 'my location name' url = 'https://api.apixu.com/v1/forecast.json?key=%s&q=%s&days=2&lang=ru' url = string.format(url, key, escape(location)) res = https.request(url)data = json.pdecode(res) if type(data) ~= 'table' then alert('failed to load weather data') return end if data.error then log('error', data.error) return end current = data.current today = data.forecast.forecastday[ 1 ].day tomorrow = data.forecast.forecastday[ 2 ].day -- log(current, today, tomorrow)-- temperature in C grp.write('current.temp_c', current.temp_c) -- "feels like" temperature in C grp.write('current.feelslike_c', current.feelslike_c) -- humidity as percentage grp.write('current.humidity', current.humidity) -- wind speed in kilometers per hour grp.write('current.wind_kph', current.wind_kph) -- uv index grp.write('current.uv', current.uv) -- weather condition text grp.write('current.condition.text', current.condition.text) -- pressure in millibars grp.write('current.pressure_mb', current.pressure_mb) -- precipitation amount in millimeters grp.write('current.precip_mm', current.precip_mm) -- minimum temperature in celsius for the day grp.write('today.mintemp_c', today.mintemp_c) -- maximum temperature in celsius for the day grp.write('today.maxtemp_c', today.maxtemp_c) -- average temperature in celsius for the day grp.write('today.avgtemp_c', today.avgtemp_c) -- average humidity as percentage grp.write('today.avghumidity', today.avghumidity) -- maximum wind speed in kilometers per hour grp.write('today.maxwind_kph', today.maxwind_kph) -- uv index grp.write('today.uv', today.uv) -- weather condition text grp.write('today.condition.text', today.condition.text) -- total precipitation in millimeters grp.write('today.totalprecip_mm', today.totalprecip_mm) -- minimum temperature in celsius for the day grp.write('tomorrow.mintemp_c', tomorrow.mintemp_c) -- maximum temperature in celsius for the day grp.write('tomorrow.maxtemp_c', tomorrow.maxtemp_c) -- average temperature in celsius for the day grp.write('tomorrow.avgtemp_c', tomorrow.avgtemp_c) -- average humidity as percentage grp.write('tomorrow.avghumidity', tomorrow.avghumidity) -- maximum wind speed in kilometers per hour grp.write('tomorrow.maxwind_kph', tomorrow.maxwind_kph) -- uv index grp.write('tomorrow.uv', tomorrow.uv) -- weather condition text grp.write('tomorrow.condition.text', tomorrow.condition.text) -- total precipitation in millimeters grp.write('tomorrow.totalprecip_mm', tomorrow.totalprecip_mm)
Готово!
Данные прогноза погоды находятся в групповых адресах.
Рассмотрим примеры использования этих данных.
По текущей скорости ветра можно активировать «защиту от ветра». Для этого поможет событийный скрипт, запускающийся по объекту текущей скорости ветра.
- Зайдите во вкладку Scripting.
- Нажмите кнопку Event-based.
- В левом нижнем углу экрана нажмите Add new script.
- В поле Group address / tag укажите групповой адрес текущей скорости ветра.
В нашем случае это адрес 33/0/4. - Установите галочку Active:
- В редакторе скрипта вставьте следующий код:
-- скорость ветра указывается в км/ч -- критическая скорость при превышении которой нужно включать защиту от ветра critical_speed = 40 -- поправьте значение на необходимое Вам --безопасная скорость, при которой можно отключить защиту safe_speed = 10 -- получаем текущую скорость из прогноза, cur_speed = event.getvalue() -- сравниваем if cur_speed > critical_speed then -- активируем защиту grp.write('объект защиты от ветра', true) elseif cur_speed < safe_speed then -- отключаем защиту grp.write('объект защиты от ветра', false) end
Конечно, Вам потребуется еще групповой адрес «защиты от ветра» и, возможно, скрипт, совершающий определенные действия, при необходимости.
По текущей температуре, минимальной температуре в течении дня и количеству осадков в течении дня можно включать системы антиобледенения. Для решения этой задачи нам также потребуется событийный скрипт. В этот раз создайте его для группового адреса текущей температуры. В нашем примере это адрес 33/0/1
current_temp_c = grp.getvalue('current.temp_c')
today_mintemp_c = grp.getvalue('today.mintemp_c')
today_totalprecip_mm = grp.getvalue('today.totalprecip_mm')
if current_temp_c < 2 and today_mintemp_c < 0 and today_totalprecip_mm > 0 then
grp.write('антиобледенитель', true)
end
Также вы можете отобразить данный прогноза на экране визуализации.
По ссылке вы можете скачать бэкап виджета визуализации.
Выглядеть он будет следующим образом:
Для импорта данного виджета в Вашу визуализацию Вам нужно сделать следующее:
- Выбрать вкладку Vis. structure.
- Выбрать подвкладку Layouts / Widjets.
- В строке папки Widjets нажать на зеленый «+».
- В появившемся окне нажать Import.
- Указать путь к скачанному файлу.
- Добавить на необходимую страницу иконку, по которой будет открываться виджет.
- В параметрах иконки в поле Widjet выбрать импортированный виджет Apixu.