Інтеграція зовнішніх веб-сервісів в Node-RED¶
Мета: Ознайомлення з процесом інтеграції зовнішніх веб-сервісів в середовище Node-RED. Здобуття навичок підключення та використовувати різноманітні веб-сервісів для обміну даними та автоматизації різноманітних завдань.
Виконавець:
студент групи КН-41
Кривобоков Микита Олександрович
Завдання¶
- Сконструюйте Endpoint URL які повертатимуть необхідні дані (зазначені в попередньому розділі), сконфігуруюйте
HTTP Requestвузли під них, додайте JSON парсери в ланцюжок обробки. - За допомогою вузлів
Changeвиділіть необхідні поля для кожного елементу інтерфейсу (приклад UI наведено в додатку). Для побудовиChartвикористайте вузолFunctionщоб забезпечити дотримання формату даних який вузолChartочікує на вході. З контрактом цього вузла можна ознайомитись в документації. - Оброблені показники зберігайте в контексті потоку, який використовуватиметься в якості кешу між запитами на оновлення. Після чого використовуючи вузли
HTTP InтаHTTP Responseналаштуйте власний API Endpoint який повертатиме дані, що містяться в контексті (кеш) за адресою/api/weather/current. Додайте фрагмент документації для цього API Endpoint. - Протестуйте роботу потоку, виправте потенційні помилки. Додайте елементи інтерфейсу для керування даними.
- Складіть звіт про виконану роботу, в якому необхідно описати по-кроково реалізований функціонал.
Хід роботи¶
Формування URL для отримання даних¶
Використовуючи офіційну документацію Open-Meteo було сформовано два URL згідно завдання:
Поточна погода
Current weather URL
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"
]
}
}
Погода погодинна
Hourly weather URL
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) є простими у використанні, та не потребують додаткових матеріалів для уточнення:
UI
Міні документація
Приклад відповіді за /api/weather/current
Висновок¶
Ознайомившись з документацію сервісу Open-Meteo, було визначено два основні URL необхідних для взаємодії із цим сервісом. В процесі інтеграції зовнішнього веб-сервісу в середовище Node-RED не складало труднощів. Отриманий досвід розширив розуміння візуального програмування, включаючи поточне завдання із обміном даними для автоматизації.




