Aplikace Node-RED - základní seznámení Co je to Node-RED? Je to aplikace, v které můžu programovat toky dat z IoT zařízení. Node-RED je vizua lní na stroj (aplikace), který na m umožní rychle a jednoduše propojit: hardwarova zařízení - jako např. Arduino aplikac ní rozhraní (API) online služby Propojuje uda losti a data: fyzických zařízení (senzorů) socia lních sítí a služeb (email, sms, twitter,...) dalších aplikací Je to open-source na stroj z dílny IBM, běží na Windows, Linuxu a Mac OS X. Můžete si dovyvinout vlastní c a sti (tzv. "nodes" aplikace), stac í k tomu znalost JavaScriptu. Kód aplikace je volně přístupný na: https://github.com/node-red/node-red Využíva runtime (běhové prostředí) Node.js.
Kde můžete Node-RED spustit? Loka lně, pokud ma te na poc ítac i nainstalova n runtime Node.js Na zařízení Raspberry-Pi, kde je souc a stí za kladní image (Raspbian) V IBM Cloudu - dostupný jako předpřipravena aplikace Jak Node-RED vypadá? Je to aplikace dostupna přes webový prohlížec. 1. Na levé straně je knihovna uzlů (tzv. "nodes"). Každý uzel reprezentuje odlišnou funkcionalitu. Další palety uzlů můžeme dle potřeby doinstalovat. 2. Uprostřed je Flow Editor, kde z "nodes" skla da te "flows". Dvojklikem na umístěný node otevřete jeho specifickou konfiguraci.
3. Na pravé straně jsou za ložky INFO popisující daný uzel a DEBUG - výstupní konzole pro debuggova ní. Node je elementa rní prvek, kterým tvoříme aplikaci. Urc itě musí mít na zev a může mít i vstup, funkcionalitu a výstup. Paralela: Na zev je "Trouba", vstup je "Syrové kuře", funkcionalita je "Pec ení" a výstup je "Pec ené kuře". Node bez vstupu a výstupu. Nejprimitivnější node, který nema ža dnou funkcionalitu: Node s výstupem. Slouží jako vstup - napojení dat do našeho flow: Node se vstupem. Slouží jako výstup - napojení uda lostí a dat z našeho flow ven: Node se vstupem a výstupem, tzv. průtokový uzel, který většinou prova dí transformaci vstupních dat, rozhodova ní, nac íta ní dat apod. : Některé nody mohou mít i více výstupů:
Flow (tok) vznika složením libovolného množství nodů (uzlů). Ty se propojují pomocí wires (dra tů), které vzniknou přetažením šedého výstupu jednoho nodu na šedý vstup druhého nodu. Předa va ní dat mezi uzly: Mezi propojenými uzly se přeposíla objekt msg, který můžeme upravovat, c i ho plnit vlastními daty. Pozn.: Na výše uvedeném obrázku jsou dva průtokové nody (funkce Přečti čas a funkce Vytvoř informační zprávu) spojeny do jednoho "subflow" (Server time).
Mimo objekt msg lze da le data ukla dat do kontextových objektů. Rozlišujeme tyto: Node context - perzistentní pouze do znovu-nasazení flow, c i restartu Node- REDu. V ra mci definova ní funkce v okně nodu (function node) pracujeme s proměnnou context. Viditelnost objektu je pouze v ra mci daného uzlu var nodecount = context.get('nodecount') 0; context.set('nodecount', ++nodecount Flow context - perzistentní pouze do restartu Node-REDu. V ra mci definova ní funkce v okně nodu (function node) pracujeme s proměnnou flow. Viditelnost objektu je ve všech uzlech v ra mci daného flow (jedné za ložky Flow!!!). var flowcount = flow.get('flowcount') 0; flow.set('flowcount', ++flowcount); V ra mci definova ní funkce v okně noduvar globalcount = global.get('globalcount') 0; global.set('globalcount', ++globalcount);
Aplikace Node-RED - jdeme to konečně použít Nyní si zkusíme zprovoznit jedno konkretní flow, které bude nava zané na naše zařízení (zařízení bychom měli již mít připojené do služby Internet of Things Platform). Využijeme zařízení Arduina s Ethernet shieldem a nahraným programem "registred_publish.ino", který jsme používali v minulé lekci. Budeme tedy pracovat v Node-REDu s hodnotami, které na m tento program generuje a posíla do IoT Platformy (jméno zařízení, teplotu, c as od spuštění). Abychom nemuseli celé flow skla dat od zac a tku, využijeme funkci Import z burgermenu vpravo nahoře. Import json souboru se děla přes clipboard. Z textoveho souboru iot_lab04-nodered_example.txt si zkopírujeme jeho obsah (který je v notaci JSON forma tu) do clipboardu a naimportujeme do flow editoru.
V importovaném flow je třeba spra vně nakonfigurovat jednotlivé nodes, aby do něj mohla téct data pra vě z našeho zařízení. Pokud ma te službu "IoT Platform" a aplikaci "Node-RED" na jednom cloudovém úc tu a ma te je propojené (tj. pokud jste šli cestou boilerplatu Internet of Things Platform Starter, anebo jste šli cestou boilerplatu Node- RED Starter + spuštění služby Internet of Things Platform + vytvoření propojení (nastavení Connections v konfiguraci aplikace)), tak Node-RED využije existujícího propojení aplikace se službou - stac í tedy jako "Authentication" vybrat "Bluemix Service": 4.10. Nastavení vstupního nodu
Pokud nema te Node-RED aplikaci propojenou se službou IoT Platform nebo se chcete připojit k cizímu zařízení (např. IoT Platformě někoho jiného), musíte mít tzv. API Key a API Token. Pokud naopak někomu cizímu chcete da t přístup k svému zařízení, musíte mu vygenerovat API Key a API Token vy. Vytvoříte ho v rozhraní služby v za ložce "Applications", viz obra zek níže: 4.11. Generova ní API Key pro propojení aplikace a IoT služby V nastavení node "ibmiot" si v pak jako metodu autentikace vyberte "API Key" a vložte potřebné údaje (API Key a API Token):
Na sledna pra ce s flow probíha na sledovně: Po změně c ehokoliv ve flow editoru (parametrů, funkcí atd.) je nutné u aplikace provést DEPLOY (vpravo nahoře). V debugovacím okně vidíte výpisy zpra v ty můžete vypínat a zapínat u příslušného nodu debug (klikněte na "ouško" u nodu). Input node IBM IoT by měl být ve stavu connected (stav se zobrazuje pod nodem).
Posílání dat do zařízení (subscribe) Minule jsme si uka zali, jak dostat data ze zařízení do Cloudu. Využili jsme tedy funkci "publish". V této lekci jsme si s daty hra li v Node-REDu. Někdy ale potřebujeme i poslat data (příkaz) do zařízení, abychom ho mohli i ovla dat (nejen z něj získa vat pasivně data). Podíva me se jak tedy využít i funkci "subscribe" - pomocí této zařízení c eka (posloucha ) co mu IoT platforma pošle. Sta hněte si Node-RED flow "subscribe_test" a importujte jej do svého Node-REDu. V Node-RED byste měli mít doinstalovanou paletu "Dashboard" (Menu > Manage Palette > Install > search for node-red-dashboard > install). Samotné importované flow je velmi jednoduché - ma jen dva nodes. První node je přepínac do Dashboardu, ktera při přepnutí odešle text do flow. Druhý node je výstupní node do ibmiot (IoT Platforma). Tam je třeba mít nakonfigurované své zařízení (propojení buď jako Bluemix Service nebo přes API Key).
Na straně zařízení je potřeba vložit kód a připojit servo. Servo připojte c erveným dra tkem na 5V, hnědým dra tkem na GND a oranžový dra tek na pin 3 (pokud ma te jiné barvy dra tků, zkonzultujte datasheet k servu, které ma te a servo spra vně zapojte). Sta hněte si soubor "subscribe_example.ino". Spolec ně si projdeme důležité c a sti programu. Program c eka na vstup z IoT Platformy a na za kladě vstupu (příkazu) otoc í servem. Budeme tedy vzda leně ovla dat servo. V kódu je potřeba nastavit parametry připojení k IoT Platformě. Je potřeba definovat topic pro "subscribe", na kterém bude zařízení poslouchat a c ekat příkaz. Topic je nazva n "listen" a je vyplněn i v node uvedeném výše. Stejně tak forma t je nastaven na TXT: const char cmdtopic[] = "iot-2/cmd/listen/fmt/txt"; Funkce CALLBACKu na m zpracova va přijata data. Parsuje přijatou textovou zpra vu a podle toho vola příslušnou funkci otoc ení serva. Tzn. SO otoc í servo do polohy "otevřeno", SC otoc í servo do polohy "zavřeno".
Další c a sti kódu by měly být snadno pochopitelné, kopírují to, co zna te z předchozích zapojení (inicializace proměnných, připojení na IoT Platformu atd.). V sekci void_loop () kód využíva pro c asovou prodlevu if cyklus, nikoliv funkci delay(). Důvodem je, že potřebujeme, aby kód probíhal v loopu neusta le (tj. i mezi jednotlivým odeslíla ním dat na IoT Platformu - zařízení zasíla teplotu a c as). Funkce delay() by Arduino stopla a zařízení by tak v tuto dobu neposlouchalo příchozí příkazy. V našem případě pokud uplynulý c as je menší než definovaný (v proměnné publishinterval), tak se celý if blok neprova dí a provede se jen kontrola loopu pubsubclienta. V opac ném případě se předtím pošle i JSON message s teplotou a c asem. Externí materiály: https://console.ng.bluemix.net/docs/services/iot/nodereddevice_sample.html https://developer.ibm.com/recipes/tutorials/creating-a-nodered-application-onbluemix/ https://developer.ibm.com/recipes/tutorials/getting-started-with-watson-iot-platformusing-node-red/