Skip to content

Інтеграція зовнішніх веб-сервісів в Node-RED

Мета: Ознайомлення з процесом інтеграції зовнішніх веб-сервісів в середовище Node-RED. Здобуття навичок підключення та використовувати різноманітні веб-сервісів для обміну даними та автоматизації різноманітних завдань.

Виконавець:
студент групи КН-41
Кривобоков Микита Олександрович


Завдання

  1. Сконструюйте Endpoint URL які повертатимуть необхідні дані (зазначені в попередньому розділі), сконфігуруюйте HTTP Request вузли під них, додайте JSON парсери в ланцюжок обробки.
  2. За допомогою вузлів Change виділіть необхідні поля для кожного елементу інтерфейсу (приклад UI наведено в додатку). Для побудови Chart використайте вузол Function щоб забезпечити дотримання формату даних який вузол Chart очікує на вході. З контрактом цього вузла можна ознайомитись в документації.
  3. Оброблені показники зберігайте в контексті потоку, який використовуватиметься в якості кешу між запитами на оновлення. Після чого використовуючи вузли HTTP In та HTTP Response налаштуйте власний API Endpoint який повертатиме дані, що містяться в контексті (кеш) за адресою /api/weather/current. Додайте фрагмент документації для цього API Endpoint.
  4. Протестуйте роботу потоку, виправте потенційні помилки. Додайте елементи інтерфейсу для керування даними.
  5. Складіть звіт про виконану роботу, в якому необхідно описати по-кроково реалізований функціонал.

Хід роботи

Формування URL для отримання даних

Використовуючи офіційну документацію Open-Meteo було сформовано два URL згідно завдання:

Поточна погода

alt text

Current weather URL
https://api.open-meteo.com/v1/forecast?latitude=48.6242&longitude=22.2947&daily=sunset,sunrise&current=is_day,temperature_2m,relative_humidity_2m&timezone=auto&forecast_days=1
Current weather Response
{
    "latitude": 48.62845,
    "longitude": 22.308777,
    "generationtime_ms": 0.0776052474975586,
    "utc_offset_seconds": 7200,
    "timezone": "Europe/Kiev",
    "timezone_abbreviation": "GMT+2",
    "elevation": 122.0,
    "current_units": {
        "time": "iso8601",
        "interval": "seconds",
        "is_day": "",
        "temperature_2m": "°C",
        "relative_humidity_2m": "%"
    },
    "current": {
        "time": "2026-02-27T10:30",
        "interval": 900,
        "is_day": 1,
        "temperature_2m": 4.6,
        "relative_humidity_2m": 46
    },
    "daily_units": {
        "time": "iso8601",
        "sunset": "iso8601",
        "sunrise": "iso8601"
    },
    "daily": {
        "time": [
        "2026-02-27"
        ],
        "sunset": [
        "2026-02-27T18:10"
        ],
        "sunrise": [
        "2026-02-27T07:16"
        ]
    }
}

Погода погодинна

alt text

Hourly weather URL
https://api.open-meteo.com/v1/forecast?latitude=48.6242&longitude=22.2947&hourly=,temperature_2m,apparent_temperature&timezone=auto&forecast_days=1
Hourly weather response
{
    "latitude": 48.62845,
    "longitude": 22.308777,
    "generationtime_ms": 0.05602836608886719,
    "utc_offset_seconds": 7200,
    "timezone": "Europe/Kiev",
    "timezone_abbreviation": "GMT+2",
    "elevation": 122.0,
    "hourly_units": {
        "time": "iso8601",
        "temperature_2m": "°C",
        "apparent_temperature": "°C"
    },
    "hourly": {
        "time": [
        "2026-02-27T00:00",
        "2026-02-27T01:00",
        "2026-02-27T02:00",
        "2026-02-27T03:00",
        "2026-02-27T04:00",
        "2026-02-27T05:00",
        "2026-02-27T06:00",
        "2026-02-27T07:00",
        "2026-02-27T08:00",
        "2026-02-27T09:00",
        "2026-02-27T10:00",
        "2026-02-27T11:00",
        "2026-02-27T12:00",
        "2026-02-27T13:00",
        "2026-02-27T14:00",
        "2026-02-27T15:00",
        "2026-02-27T16:00",
        "2026-02-27T17:00",
        "2026-02-27T18:00",
        "2026-02-27T19:00",
        "2026-02-27T20:00",
        "2026-02-27T21:00",
        "2026-02-27T22:00",
        "2026-02-27T23:00"
        ],
        "temperature_2m": [
        0.0,
        0.1,
        -0.5,
        -0.8,
        -0.6,
        -1.1,
        -1.3,
        -1.3,
        -1.0,
        1.6,
        3.8,
        5.1,
        6.1,
        6.8,
        7.4,
        7.8,
        7.9,
        7.6,
        6.2,
        4.0,
        1.6,
        0.9,
        0.6,
        0.4
        ],
        "apparent_temperature": [
        -3.6,
        -3.7,
        -4.2,
        -4.6,
        -4.4,
        -5.0,
        -5.2,
        -5.1,
        -4.9,
        -1.9,
        0.4,
        1.5,
        2.4,
        3.3,
        3.9,
        4.5,
        4.8,
        4.6,
        3.4,
        1.5,
        -1.4,
        -2.4,
        -2.8,
        -3.3
        ]
    }
    }

Приклад використання URL згідно завдання

Застовані нові вузли (request, response) є простими у використанні, та не потребують додаткових матеріалів для уточнення:

example

UI

alt text

Міні документація

mini docs

Приклад відповіді за /api/weather/current
{
    "temp": 4.6,
    "humidity": 46,
    "isDay": true,
    "sunrise": "2026-02-27T07:16",
    "sunset": "2026-02-27T18:10"
}

Висновок

Ознайомившись з документацію сервісу Open-Meteo, було визначено два основні URL необхідних для взаємодії із цим сервісом. В процесі інтеграції зовнішнього веб-сервісу в середовище Node-RED не складало труднощів. Отриманий досвід розширив розуміння візуального програмування, включаючи поточне завдання із обміном даними для автоматизації.