Apixu: Получение прогноза погоды с Apixu.com — Logicmachine.net.ru | Автоматика для дома
Содержание
Получение прогноза погоды с Apixu.com — Logicmachine.net.ru | Автоматика для дома
Для получения прогноза погоды с сервиса 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.
 
барометр-Атмосферное давление — iOS App
Описание
 Где бы вы ни Барометр дает местное атмосферное давление непосредственно на вашем iPhone iPad или iPod. Благодаря интуитивно понятному и точной дизайна, барометр предлагает приятный опыт и надежность его использования.
 Убедитесь, что вы включаете служб определения местоположения устройства, и что вы подключены к Интернету. На данный момент приложение будет определять ваше географическое местоположение. Дисплей покажет название места и текущего барометрического давления, а также с указанием климатические условия.
 Данные предоставляются apixu.com
 Барометр дает вам возможность выбрать внутреннюю барометр вашего устройства или использовать сервис, предлагаемый apixu.com для определения давления в вашем городе.
 [ Особенности ]
 • В реальном масштабе времени измерение атмосферного давления (главная черная игла)
 • Поддержка внутреннего барометра
 • Возможность выбора внутренней или внешней Барометр
 • Единицы, поддерживаемые в гПа, мбар, мм рт.ст., тор, дюйм
 • Возможность отслеживать последние показания атмосферного давления (вторичная серая стрелка)
 • прогнозы атмосферного давления на сегодня и завтра (доступно через In-App Purchase)
 • Максимальная и минимальное атмосферное давление сегодня и завтра (доступно через In-App Purchase)
 • Обнаружение Место
 • Откровение погода
 • текущее положение на карте
 • Поиск Город
 • Сохранить любимые места (без ограничений)
 • Надежность в эксплуатации (данные apixu.com)
 • Интуитивно понятный Графика
 • Простота использования
 [ Units ]
 Вы можете легко выбрать, чтобы увидеть атмосферное давление, измеренное в гПа, мбар, мм рт.
 ст., тор, дюйм.
 [ Совместимость ]
 • Устройства: все iPhone, iPad и iPod.
 • iOS: 9.3 или более поздней.
 [ Поддерживаемые языки ]
 • Русский, Английский, Итальянский, Испанский, Французский, Немецкий, Португальский, Голландский, Китайский, Японский, Датский, Финский, Норвежский, Польский, Шведский.
 [ Поддержка ]
 Если вы хотите приложение, не забудьте оставить нам отзыв на App Store.
 Для предложений, пожалуйста, свяжитесь с нами по [email protected], или перейдите на наш сайт www.lionsapp.com
Скриншоты
Отзывы
Электросталь
2
От вларжадсчд
Живу в мск, коломенская. Показывает г.Электросталь. 🙈 и глючит неимоверно
РАБОТАЕТ!!!
5
От Палево
iPhone 6, единственное приложение, которое использует внутренний барометр для измерения давления. Точность радует.
Хотелось бы иметь возможность видеть историю изменений в виде графика
2 стрелка показывает результат, который был при предыдущем измеренииКлево
5
От Петя Котов
Iphone 6 plus, все работает.
 Объясните только зачем 2-е стрелочки? Они иногда сходятся иногда расходятсяНЕ РАБОТАЕТ
1
От Ksavolga
Приложение не работает iPhone 6, «деньги на ветер».
Не работает!
1
От Yanchenko69
Величина давления, как установилась при запуске, так и не меняется! Платная версия и не работает! Фуфел!
Работает
5
От Oleg_local9
Все нормально работает
Перестал работать
4
От Khufu54
Почините, please.
Программа падает
3
От Моэм
Программа падает при попытке изменить единицы измерения в настройках
Барометр
1
От Tresspass
Сравнил с домашним-на десять делений врет,верните деньги!!!
Страшно врет!
1
От ==Leshch==
Неправильно показывает давление!
Бесполезный арр! Кривой источник данных! Выброшенные деньги! Не качайте!!!
Apixu Погода | Информационная панель API
| Имя: | Погода Apixu | 
| Описание: |  Apixu предлагает бесплатный Weather API (JSON) и Geo API как простой, доступный и полностью управляемый канал для программистов, разработчиков, предприятий и частных лиц.![]()  | 
| URL компании: | http://www.apixu.com | 
API
 1
 
 API
| Apixu Free Weather | Apixu предлагает бесплатный Weather API (JSON) и Geo API как простой, доступный и полностью управляемый канал для программистов, разработчиков, предприятий и частных лиц. | 
Тяга
Приблизительный размер сообщества разработчиков
У нас недостаточно данных об этой компании, чтобы оценить размер сообщества разработчиков
Предполагаемый размер выделенных разработчиков
1
Звезды GitHub
Предполагаемый размер коммерческих разработчиков
Эта компания публично не раскрывает информацию о каких-либо интеграциях, клиентах или партнерствах, основанных на их API, поэтому мы не можем дать оценку.
| Поддержка адаптации | Удерживающая опора | Поддержка бизнеса | |||
|---|---|---|---|---|---|
| SDK | Н | Руководства по передовому опыту | Н | Описание вариантов использования | Н | 
| Обзор аутентификации | Н | Примеры приложений/код | Н | Очистить страницу цен | Н | 
| Электронная документация | Н | Условия обслуживания | Н | Витрина/торговая площадка для приложений, созданных | Н | 
| Самостоятельный доступ к ключу API | Н | Блог | Н | Список изменений | Н | 
| Песочница | Н | Форум поддержки | Н | Страница состояния | Н | 
| Общий балл /5 | 0 | Общий балл /5 | 0 | Общий балл /5 | 0 | 
| Общая средняя | 2 | Общая средняя | 3 | Общая средняя | 2 | 
 Погода в Апису
 API по регионам 
Библиотеки и SDK
 0
 
 Библиотеки
Последние обновления
Большинство звезд
Большинство загрузок
Каналы связи
 0
 
 канала
Все каналы
Видите что-то, что вы хотели бы добавить или обновить? Есть идеи или предложения? Дайте нам знать!
Свяжитесь с нами
apixu-api · Темы GitHub · GitHub
 Здесь
 20 публичных репозиториев
 соответствует этой теме.
 ..
 фарахат80
 /
 реагировать на открытую погоду
 
 Звезда
 96
 гравитон57
 /
 Погода
 
 Звезда
 47
 Эзике
 /
 МояПогода
 
 Звезда
 40
 андрейавраммсд
 /
 апиксу-го
 
 Звезда
 3
 кокиддп
 /
 APIXURestClient-Android
 
 Звезда
 2
 Йехия Арафа
 /
 сегодня
 
 Звезда
 1
 рустамж
 /
 простойПогодаБот
 
 Звезда
 1
 абхи82001
 /
 приложение погоды
 
 Звезда
 0
 пушпак1997
 /
 приложение погоды
 
 Звезда
 0
 система3
 /
 osbGeoПогода
 
 Звезда
 0
 Ивайрор
 /
 угловое приложение погоды
 
 Звезда
 1
 ашинасок
 /
 WeatherBuddy
 
 Звезда
 0
 LobeM
 /
 WeatherApp
 
 Звезда
 0
 шубх361096
 /
 WeatherApp
 
 Звезда
 0
 дерзкий
 /
brajenful.
 github.io
 Звезда
 0
 Стризель
 /
 сборщик информации о погоде
 
 Звезда
 0
 КарлосФТГ
 /
 приложение погоды
 
 Звезда
 0
 масфранжуо
 /
 WeatherApp
 
 Звезда
 0
 рокмелквушок
 /
 реагировать-погода-API
 
 Звезда
 0
 МайА14
 /
 метеобот
 
 Звезда
 0
 Улучшить эту страницу
 
 Добавьте описание, изображение и ссылки на
 апиксу-апи
 страницу темы, чтобы разработчикам было легче узнать о ней.
Курировать эту тему
 Добавьте эту тему в свой репозиторий
 
 Чтобы связать ваш репозиторий с
 апиксу-апи
 тему, перейдите на целевую страницу репозитория и выберите «управление темами».
 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)
 Убедитесь, что скрипт не выполняется слишком часто (не более 1 раза в 5 минут).
 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)
 Объясните только зачем 2-е стрелочки? Они иногда сходятся иногда расходятся