Node-RED cvičení
Node-RED
Node-RED je programovací nástroj určený k propojení hardwarových zařízení, API a online služeb dle individuálních potřeb.
Node-RED je blokový programovací nástroj, který je založen na runtime prostředí Node.js, tudíž Node-RED běží jako serverový nástroj (lokální či s vzdáleným přístupem). Pro přístup k vývojovému prostředí se používá webový prohlížeč. Vývojové prostředí – respektive editor programu – se skládá z palety nodů a pracovního prostoru nazývaného „flow“ (tok, proud). Do pracovního prostředí přetahujeme jednotlivé nody a spojujeme je. Tím vzniká náš program, který se může dokonce skládat z více jednotlivých „flow“ – toků. Nody představují jednotlivé akce, které se odehrávají ve vašem programu. Ať už se jedná o zpracování dat, připojení k serveru, odeslání zprávy na mobil, zobrazení grafů a mnohé další. Mezi jednotlivými nody tečou jednotlivé zprávy, které nesou obsaženou samotnou informaci. Základním programovacím jazykem, který se používá pro vývoj programů, je JavaScript. Před možným spuštěním našeho programu je vždy nutné změny provedené v editoru nahrát na server pomocí tlačítka „Deploy“
Cvičení 1. Covid-19 data
Úkoly:
1. Vypište do debugu kompletně první položku pole data
2. Vypište do debugu věk první osoby v poli data
3. Vypište do debugu věk poslední osoby v poli data
4. Vypište do debugu průměrný věk všech osob
5. Vypište do debugu, kolik je žen a kolik mužů
6. Vytvořte webovou stránku pod jménem localhost:1880/covid a vypište do nadpisu h1 aktuální počet osob s prokázanou nákazou dle hlášení KH, (včetně html) (odkaz 2.)
7. Nainstalujte si paletu dashboard a do nodu text (ikona abc) zapište počet všech 16letých nakažených včetně popisku
8. Vypište do debugu věk prvních 20 osob s prokázanou nákazou jako samostatný msg.payload, využijte node split
9. Zapište do souboru věk posledních 20 osob s prokázanou nákazou na samostatný řádek, s každým novým zápisem se stávající zápis přepíše. + výpis do debugu ze souboru
10. Zapište do souboru věk posledních 20 osob s prokázanou nákazou bez odřádkování, tzn za sebe. Do souboru se s každým zápisem pouze připíše. + výpis do debugu ze souboru
12. Rozdělte flow pomocí nodů link in a link out + výpis do debugu ze souboru
13. Využijte node delay a do grafu s názvem gauge vypište každou sekundu věk jedné osoby s prokázanou nemocí. Celkem vypište prvních 50 osob.
14. Okomentujte každé vlákno pomocí nodu comment
15. Nastavte zapisování do souboru roků posledních 10 osob s prokázanou nemocí automaticky každých 5 sekund. Soubor se tedy každých 5 sekund automaticky přepíše.
16. Nastavte odesílání hlášení o počtu nakažených za včerejší den jednou denně v 6:00 na váš školní email ve formátu: "Počet nakažených za včerejší den je: 5394 + nový řádek + odesláno: 9.10.2020"
Nápověda pro 16. - server: mail.ssps.cz, port: 465
Zdroje
Zdroj dat: https://onemocneni-aktualne.mzcr.cz/api/v2/covid-19
Odkaz data 1. https://onemocneni-aktualne.mzcr.cz/api/v2/covid-19/osoby.json - Pro všechny úkoly kromě 6.
Odkaz data 2. : https://onemocneni-aktualne.mzcr.cz/api/v2/covid-19/zakladni-prehled.json Základní přehled pro 6. úkol
Návody:
JSON, Javascript:
https://www.w3schools.com/js/js_json_objects.asp
https://www.w3schools.com/js/js_arrays.asp
https://cookbook.nodered.org/#http-requests
Také po kliknutí na ikonu knihy v Node-redu->
Ukázka možného zapojení
Příklad výpisů
Cvičení 2. DPP real-time data
Úkoly
1. Vytvořit funkční flow které do debugu vypíše kompletní data o aktuálních polohách všech autobusů na libovolné, vámi zvolené autobusové lince.
2. Vytvořit funkci, která zvládne vypsat podrobnosti o příští a minulé zastávce se zpožděním a konečnou zastávkou prvního autobusu v poli.
3. Vytvořit nějaký výstup kromě debugu. Ať už webovou stránku, nebo nějaký výstup pomocí nodů v sekci dashboard. Jeho obsah je na vás, ať hlavně dává smysl a je užitečný.
Pro přístup k API si vygenerujte API klíč
(x-access-token) zde: https://api.golemio.cz/api-keys/auth/sign-in
API jsou k dispozici: https://golemioapi.docs.apiary.io
Návod na vytvoření request header:https://cookbook.nodered.org/http/set-request-header
Jízdní řády jsou na IDOSu.
Odkazy
JSON, Javascript:
https://www.w3schools.com/js/js_json_objects.asp
https://www.w3schools.com/js/js_arrays.asp
Příloha - soubor ID zastávek, autobusů atd.
Ukázka zapojení
Před samotným nodem http request je nutné vytvořit funkci, která msg. obohatí o váš vygenerovaný token. Tento přístupový údaj (token) je vždy v headeru requestu.
Výstup
Surová podoba dat z API
Formátovaná podoba dat v debugu Node-REDu
Výstup funkce
Cvičení 3. - Trasování autobusu
Na základě získaných znalostí z předchozího cvičení budeme pokračovat s vyhodnocováním a zobrazením real-time opendat o MHD.
Cílem je vytvořit funkční dashboard dle vzoru v přílohách. Ten musí obsahovat mapu a graf na stejné úrovni.
- Mapa bude zobrazovat aktuální polohu prvního autobusu na lince a trackování jeho jízdy. (Čáru, která se bude vykreslovat dle získávaných koordinátů od aktuální polohy)
- Graf bude vypisovat zpoždění v sekundách za posledních několik minut jízdy prvního autobusu na lince, např. posledních 15-20minut.
Dále bude dashoboard obsahovat pod mapou a grafem také textbox s číslem a popiskem aktuálního průměrného rozdílu oproti jízdnímu řádu všech autobusů na trase zvolené linky. Například pokud budou na trase 2 autobusy linky 190, 1. autobus bude mít aktuální zpoždění 10s a 2. autobus přijel naposledy o 20s dříve oproti jízdnímu řádu, bude celkový průměrný rozdíl 15s. (30/2)
Pzn. na přiloženém obrázku chybí textbox.
Odkazy
https://www.npmjs.com/package/node-red-contrib-web-worldmap
Ukázka flow
Není to vzor, vaše zapojení se může výrazně lišit, je mnoho způsobů jak dosáhnout funkčního řešení
Dashboard (bez textboxu)












