Как пользоваться Небосводом
Небосвод — это погодный сервис, который отдаёт данные в формате JSON. Формат этот читают и люди, и программы: скрипты, автоматизации, умный дом. Ниже — простой разбор, без технического жаргона.
Как получить погоду
Откройте адрес погоды — и получите ответ. Например, погода в Екатеринбурге:
{{BASE}}/api/weather?city=ekb
В ответе будет три блока: current — погода сейчас (температура, влажность, ветер, облачность, осадки), daily — на день (максимум/минимум, рассвет, закат, вероятность осадков), nightly — на ночь. Рядом лежат единицы измерения — что чем меряется.
Город можно указать коротким именем (alias) — например
ekb, tyumen, is — или
числовым city_id.
Готовая ссылка на город. Откройте карточку города (кликните по ней), и там будет строка «ID города» — сам ID является ссылкой. Кликните по нему, и полная ссылка API на этот город скопируется в буфер обмена. Останется только вставить её в браузер, скрипт или умный дом.
Список городов
Все города, которые умеет сервис, отдаёт этот адрес:
{{BASE}}/api/all-cities
В списке у каждого города: имя, короткое имя (alias), широта, долгота и часовой пояс.
Умный дом и автоматизации
Сервис не требует пароля для чтения погоды — можно просто запрашивать адрес из любой системы. Вот как это делается в самых популярных местах.
Home Assistant
Добавьте в configuration.yaml «датчик по REST» —
Home Assistant сам будет опрашивать сервис и покажет температуру
как обычный сенсор:
sensor:
- platform: rest
name: "Небосвод Екатеринбург"
resource: "{{BASE}}/api/weather?city=ekb"
value_template: "{{ value_json.current.temperature }}"
unit_of_measurement: "°C"
scan_interval: 900
Так же можно вытащить влажность
(value_json.current.humidity), ветер
(value_json.current.wind_speed) или давление
(value_json.current.pressure_mmhg).
Node-RED
Узел HTTP Request на адрес погоды — и дальше парсите
ответ как обычный JSON. Температура будет в
msg.payload.current.temperature.
Любой скрипт
Например, на bash:
curl -s "{{BASE}}/api/weather?city=ekb" \
| python3 -c "import sys,json; d=json.load(sys.stdin); \
print(d['current']['temperature'], '°C')"
Или на Python:
import json, urllib.request
with urllib.request.urlopen(
"{{BASE}}/api/weather?city=ekb") as r:
d = json.load(r)
print(d["current"]["temperature"], "°C")
Важные мелочи
- Адрес сервиса подставляется в примеры автоматически — он совпадает с адресом этой страницы. Если сервис переедет на доменное имя, примеры обновятся сами.
- Данные кэшируются — сервис не дёргает внешний источник каждую секунду. Обновление происходит примерно раз в 20 минут.
- Если очень нужно свежее — добавьте
&refresh=1в конец адреса. - Код погоды — международный код WMO. Что он значит, легко найти по запросу «коды погоды WMO».
- Сервис домашний и бесплатный. Если он лежит — скорее всего, просто отключили электричество или сеть.