blogy logo
login PRIHLÁS SA
BLOG deadawp
ČLÁNKY
DISKUSIE
2
SLEDOVAŤ BLOG
Programátor
deadawp



OpenWeather API - použitie s mikrokontrolérmi
pridal deadawp 5.1. 2021 o 11:43 (naposledy upravené 6.1. 2021 o 16:26)



OpenWeather je projekt fungujúci od roku 2014, ktorý zgrupuje IT expertov a dátových analytikov, ktorý sa zaujímajú o skúmanie počasia a jeho predpoveď. Služby OpenWeather sú využívané po celom svete a je to jeden z popredných projektov. Projekt poskytuje API, prostredníctvom ktorého je možné získavať aktuálne, ale i historické dáta. Univerzálne API tak umožňujú pripojiť akékoľvek zariadenie k API a získať tak výstup s dátami, ktoré je možné rozparsovať.

Volanie na API sa realizuje prostredníctvom HTTP, alebo HTTPS GET requestu (HTTP variant sa využíva predovšetkým pri zariadeniach, ktoré majú malý výpočtový výkon, napríklad mikrokontroléry, ktoré nie sú schopné vytvoriť šifrované spojenie - typický príklad Arduino + Ethernet, mikrokontroléry ESP8266 a ESP32 je možné pripojiť po HTTPS protokole, nakoľko takýto typ spojenia podporujú). Mikrokontróler / používateľ je autentizovaný do systému na základe prideleného API kľúča. Bez kľúča nie je autentizovaný a API mu neposkytne údaje, ktoré z API chce získať.

Na základe zakúpeného balíka je možné využívať rôzne druhy služieb. Verzia zdarma umožňuje pohľad do histórie maximálne 5 dní a predpoveď na maximálne 7 dní.Najviac nás však bude zaujímať aktuálne počasie, ktoré môžeme využiť v rôznych projektoch s využitím mikrokontrolérov. Používateľská verzia OpenWeather zdarma je obmedzená na maximálne 60 volaní API za minútu, respektíve 1 milión volaní za mesiac, pričom má garantovaný 95% uptime služieb.

Niektoré zo služieb nie sú v balíku zdarma dostupné, napríklad predpoveď na konkrétny dátum, i historický, taktiež služby Road Risk, ktoré dokážu predpovedať riziko búrok a zrážok kdekoľvek na svete. API poskytuje vo verzii zdarma aj Widgety, ktoré je možné využiť pre vizualizáciu, napríklad vo webovom rozhraní. API má rôzne metódy vstupu pre lokalitu, ktorej počasie chceme získať. Lokalitu môžeme zadať ako jeho ID v systéme OpenWeather (takto sú odpíšené napríklad aj duplicitné mestá, napríklad Košice na Slovensku a Košice v Česku), alebo jeho jednoznačnou geografickú polohu.

Príklad API requestu:

  • Request pre id mesta Poprad
  • Druhý parameter GET requestu je API kľúč

Dáta sme získali v JSON formáte. Pri bližšom preskúmaní výsledku je zrejmé, že teplotu nám API vrátilo v Kelvinoch. Kelviny môžme prepočítať na stupne Celzia na strane mikrokontroléru, avšak nemusíme ho výpočtovo namáhať. Doplnením units=metric do requestu necháme prepočet jednotiek na server a dokážeme si tak stiahnuť aktuálne dáta pre mesto Poprad už s prepočítanou teplotou na stupne Celzia. 

Jednoduchým requestom sme získali aktuálne dáta pre mesto Poprad v JSON formáte.

Získané dáta v JSON formáte sú:

  • Geografické súradnice
  • Aktuálne počasie s popisom (Napríklad sneženie - husté, jasno / hmlisto)
  • Teplota (aktuálna, pocitová, maximálna a minimálna)
  • Tlak a vlhkosť vzduchu
  • Viditeľnosť (dohľad) v metroch
  • Oblačnosť
  • Vietor (rýchlosť, smer)
  • Východ a západ slnka (UNIX-ový čas od 1.1.1970 v sekundách)
  • Krajina, skratka, id krajiny
  • Časové pásmo (rozdiel v sekundách oproti UTC)
  • ID a názov mesta
  • HTTP návratový kód

Dáta musia byť na strane mikrokontroléru spracované a vytiahnuté na základe kľúča, ktorému ich hodnota prislúcha. Pre mikrokontroléry programované v prostredí Arduino IDE je možné využiť knižnicu ArduinoJson, ktorá ponúka možnosť deserializácie, teda organizácie dát, ktoré môžu byť následne spracované.

Výsledný JSON output (vizualizovaný aj na screenshotoch), ktorý mikrokontrolér načítava z webservera má veľkosť cez 500B, teda štandardný buffer, ktorý sa v knižnici ArduinoJson používa s veľkosťou 512B nemusí byť dostatočný a je ho potrebné pri inicializácii navýšiť.  Paradigma pre programovanie je jednoduchá. Nakoľko sú tu aj viacnásobné kľúče, napríklad id, je štruktúra dát vhodne navrhnutá a každá skupina má svoj kľúč. Teda napríklad kľúč id je obsiahnutý pod hlavným kľúčom weather, sys a samostatne (bez predradeného kľúča).

Dáta môžu byť vypísané na UART, na LCD znakový / OLED displej. Môžu byť odosielané na lokálny / internetový MQTT Broker, ktorý ich môže distribuovať ďalším klientom, ktorý daný topic odoberajú, môže slúžiť aj na domácu automatizáciu, napríklad otvorenie a zatvorenie kúrnika na základe východu a západu slnka, teploty atď...

Príklad získania hodnôt z kľúčov z JSON objektu - ArduinoJson pseudo kód:

  • JSON_Object["id"] ---> Poprad
  • JSON_Object["weather"]["id"] ---> 600
  • JSON_Object["sys"]["id"] ---> 7053
  • odbodbne pre ďalšie hodnoty a "hĺbku" umiestnenia obsahu pod kľúč, ktorý ich umožňuje rozlišovať

Nakoľko je API a integrácia veľmi jednoduchá do akéhokoľvek systému a je hlavne zdarma s funkciami, ktoré sú pre nás dostačujúce, je služba OpenWeather veľmi obľúbenou. Dáta z OpenWeahter čerpajú amatérske meteostanice, ktoré chcú rozšíriť svoje merania o ďalšie zaujímavé údaje, úrady a organizácie, ktoré chcú používateľom vizualizovať aj tieto údaje na svojich stránkach, ktoré môžu byť client-side viazané napríklad na oblasť, kde býva používateľ, ktorý stránku navšítvil.

S konkrétnym requestom na API je možné sa vyhrať a zobraziť si aktuálne dáta, alebo aj spomínanú históriu, či predpoveď na niekoľko dní dopredu, ale aj dáta na mieru bez ďalších zbytočných informácii, ktoré sa nevyužijú. Zaujímavou integráciou projektu by bolo aj využiťie E-paper / E-ink displeja, ktorý môže cez SPI zbernicu komunikovať s Arduinom, alebo WiFi platformou ESP8266, ESP32. Práve pri ESP32 sa daný displej môže využiť pre projekt domácej meteostanice s ultranízkou spotrebou.

Napríklad Josef Zvolánek pre projekt meteostanice na webe TMEP.cz vytvoril zariadenie, ktoré dokáže vizualizovať jeho namerané dáta na displeji, ktorý sa prekresľuje každých 30 minút. Spotreba zariadenia je minimálna, v spánku na úrovni 0.09 mA, čo umožňuje jeho prevádzku na batériu niekoľko mesiacov, alebo s rozšírením o solárny panel môže systém bežať non-stop.

Výhodou E-paper displeja je, že potrebuje elektrickú energiu na prepis pixelov. Následne nemusí byť napájaný a údaje na ňom ostávajú až do ďalšieho prekreslenia. Projekt môže byť rozšírený o záznam dát o vetre, lokalite a ďalších údajov načítaných zo služby OpenWeather.

Projekt Josefa Zvolánka so zdrojovým kódom a popisom hardvéru môžete nájsť na odkazoch:
https://wiki.tmep.cz/doku.php?id=ruzne:barometr_wifi_epaper_5.83
https://wiki.tmep.cz/doku.php?id=ruzne:barometr_wifi_epaper_2.9

 

 



Prístupov 7217
Kvalita článku
hlasov 0

PRÍSPEVKY
SLEDOVAŤ
Prosím prihláste sa pre možnosť pridania komentáru.
Prihláste sa, alebo použite facebook login facebook login
ĎALŠIE ČLÁNKY V BLOGU
Ako nainštalovať Watmonitor?
[ 21.11.2024] (príspevkov 0)
Update grafov, ukážkových kódov - Watmon...
[ 16.11.2024] (príspevkov 0)
XIAO ESP32-C6 od Seeed Studio
[ 10.11.2024] (príspevkov 0)
ESP-IDF v4.4.2 prechod na v5.2
[ 5.11.2024] (príspevkov 0)
Krabička pre RFID DOMINATOR 2.0
[ 18.10.2024] (príspevkov 0)
Známe neduhy - Ecotec 1.6E Opel/GM Chevr...
[ 8.10.2024] (príspevkov 0)
Cold-start BQ25570 vs BQ25504 od Texas I...
[ 2.8.2024] (príspevkov 0)
EG21-G - MQTT pripojenie na Thingsboard
[ 5.6.2024] (príspevkov 0)
Quectel EG21-G - HTTP request
[ 17.5.2024] (príspevkov 0)