Небосвод

← На главную

Как пользоваться Небосводом

Небосвод — это погодный сервис, который отдаёт данные в формате 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")

Важные мелочи