You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
IoT-For-Beginners/translations/sk/1-getting-started/lessons/4-connect-internet/README.md

31 KiB

Pripojte svoje zariadenie k internetu

Prehľad lekcie v sketchnote

Sketchnote od Nitya Narasimhan. Kliknite na obrázok pre väčšiu verziu.

Táto lekcia bola súčasťou série Hello IoT z Microsoft Reactor. Lekcia bola prezentovaná vo forme dvoch videí - hodinovej lekcie a hodinového office hour, kde sa podrobnejšie rozoberali časti lekcie a odpovedali na otázky.

Lekcia 4: Pripojte svoje zariadenie k internetu

Lekcia 4: Pripojte svoje zariadenie k internetu - Office hours

🎥 Kliknite na obrázky vyššie, aby ste si pozreli videá

Kvíz pred lekciou

Kvíz pred lekciou

Úvod

I v IoT znamená Internet - cloudová konektivita a služby, ktoré umožňujú mnohé funkcie IoT zariadení, od zhromažďovania meraní zo senzorov pripojených k zariadeniu až po odosielanie správ na ovládanie akčných členov. IoT zariadenia sa zvyčajne pripájajú k jednej cloudovej IoT službe pomocou štandardného komunikačného protokolu, a táto služba je prepojená so zvyškom vašej IoT aplikácie, od AI služieb na inteligentné rozhodovanie na základe vašich údajov až po webové aplikácie na ovládanie alebo reportovanie.

🎓 Údaje zhromaždené zo senzorov a odoslané do cloudu sa nazývajú telemetria.

IoT zariadenia môžu prijímať správy z cloudu. Často tieto správy obsahujú príkazy - inštrukcie na vykonanie akcie buď interne (napríklad reštart alebo aktualizácia firmvéru), alebo pomocou akčného člena (napríklad zapnutie svetla).

Táto lekcia predstavuje niektoré komunikačné protokoly, ktoré IoT zariadenia môžu používať na pripojenie k cloudu, a typy údajov, ktoré môžu odosielať alebo prijímať. Získate tiež praktické skúsenosti s oboma, pridáte internetové ovládanie k svojmu nočnému svetlu a presuniete logiku ovládania LED do 'serverového' kódu, ktorý bude bežať lokálne.

V tejto lekcii sa budeme venovať:

Komunikačné protokoly

Existuje množstvo populárnych komunikačných protokolov, ktoré IoT zariadenia používajú na komunikáciu s internetom. Najpopulárnejšie sú založené na publikovaní/odoberaní správ prostredníctvom nejakého sprostredkovateľa. IoT zariadenia sa pripájajú k sprostredkovateľovi, publikujú telemetriu a odoberajú príkazy. Cloudové služby sa tiež pripájajú k sprostredkovateľovi, odoberajú všetky telemetrické správy a publikujú príkazy buď konkrétnym zariadeniam, alebo skupinám zariadení.

IoT zariadenia sa pripájajú k sprostredkovateľovi, publikujú telemetriu a odoberajú príkazy. Cloudové služby sa pripájajú k sprostredkovateľovi, odoberajú všetku telemetriu a posielajú príkazy konkrétnym zariadeniam.

MQTT je najpopulárnejší komunikačný protokol pre IoT zariadenia a je pokrytý v tejto lekcii. Medzi ďalšie protokoly patrí AMQP a HTTP/HTTPS.

Message Queueing Telemetry Transport (MQTT)

MQTT je ľahký, otvorený štandard pre zasielanie správ medzi zariadeniami. Bol navrhnutý v roku 1999 na monitorovanie ropovodov, a o 15 rokov neskôr bol uvoľnený ako otvorený štandard spoločnosťou IBM.

MQTT má jedného sprostredkovateľa a viacero klientov. Všetci klienti sa pripájajú k sprostredkovateľovi, a ten smeruje správy relevantným klientom. Správy sú smerované pomocou pomenovaných tém, namiesto priameho zasielania konkrétnemu klientovi. Klient môže publikovať do témy, a všetci klienti, ktorí odoberajú túto tému, dostanú správu.

IoT zariadenie publikujúce telemetriu na tému /telemetry, a cloudová služba odoberajúca túto tému

Urobte si prieskum. Ak máte veľa IoT zariadení, ako môžete zabezpečiť, že váš MQTT sprostredkovateľ zvládne všetky správy?

Pripojte svoje IoT zariadenie k MQTT

Prvým krokom pri pridávaní internetového ovládania k vášmu nočnému svetlu je pripojenie k MQTT sprostredkovateľovi.

Úloha

Pripojte svoje zariadenie k MQTT sprostredkovateľovi.

V tejto časti lekcie pripojíte svoje IoT nočné svetlo k internetu, aby mohlo byť ovládané na diaľku. Neskôr v tejto lekcii vaše IoT zariadenie odošle telemetrickú správu cez MQTT na verejný MQTT sprostredkovateľ s úrovňou svetla, kde ju zachytí serverový kód, ktorý napíšete. Tento kód skontroluje úroveň svetla a odošle príkazovú správu späť zariadeniu, ktorá mu povie, aby zaplo alebo vyplo LED.

Reálny prípad použitia takéhoto nastavenia by mohol byť zhromažďovanie údajov z viacerých svetelných senzorov pred rozhodnutím o zapnutí svetiel na mieste, kde je veľa svetiel, napríklad na štadióne. To by mohlo zabrániť zapnutiu svetiel, ak by iba jeden senzor bol zakrytý oblakmi alebo vtákom, ale ostatné senzory by detekovali dostatok svetla.

Aké iné situácie by vyžadovali vyhodnotenie údajov z viacerých senzorov pred odoslaním príkazov?

Namiesto riešenia zložitostí nastavenia MQTT sprostredkovateľa ako súčasť tejto úlohy môžete použiť verejný testovací server, ktorý beží na Eclipse Mosquitto, open-source MQTT sprostredkovateľ. Tento testovací sprostredkovateľ je verejne dostupný na test.mosquitto.org a nevyžaduje nastavenie účtu, čo z neho robí skvelý nástroj na testovanie MQTT klientov a serverov.

💁 Tento testovací sprostredkovateľ je verejný a nie je zabezpečený. Ktokoľvek môže počúvať, čo publikujete, takže by sa nemal používať na žiadne údaje, ktoré musia zostať súkromné.

Diagram úlohy zobrazujúci čítanie a kontrolu úrovní svetla a ovládanie LED

Postupujte podľa relevantného kroku nižšie, aby ste pripojili svoje zariadenie k MQTT sprostredkovateľovi:

Hlbší pohľad na MQTT

Témy môžu mať hierarchiu a klienti môžu odoberať rôzne úrovne hierarchie pomocou zástupných znakov. Napríklad môžete posielať telemetrické správy o teplote na tému /telemetry/temperature a správy o vlhkosti na tému /telemetry/humidity, a potom vo svojej cloudovej aplikácii odoberať tému /telemetry/*, aby ste dostali správy o teplote aj vlhkosti.

Správy môžu byť odosielané s kvalitou služby (QoS), ktorá určuje záruku prijatia správy.

  • Najviac raz - správa je odoslaná iba raz a klient a sprostredkovateľ nepodnikajú žiadne ďalšie kroky na potvrdenie doručenia (odoslať a zabudnúť).
  • Aspoň raz - správa je opakovane odosielaná odosielateľom, kým nie je prijaté potvrdenie (potvrdené doručenie).
  • Presne raz - odosielateľ a prijímateľ sa zapoja do dvojúrovňového handshake procesu, aby zabezpečili, že bude prijatá iba jedna kópia správy (zaručené doručenie).

Aké situácie by vyžadovali zaručené doručenie správy namiesto odoslania a zabudnutia?

Hoci názov je Message Queueing (MQTT), v skutočnosti nepodporuje fronty správ. To znamená, že ak sa klient odpojí a potom znova pripojí, nedostane správy odoslané počas odpojenia, okrem tých, ktoré už začal spracovávať pomocou QoS procesu. Správy môžu mať nastavenú vlajku "retained". Ak je táto vlajka nastavená, MQTT sprostredkovateľ uloží poslednú správu odoslanú na tému s touto vlajkou a pošle ju každému klientovi, ktorý sa neskôr prihlási na odber tejto témy. Týmto spôsobom klienti vždy dostanú najnovšiu správu.

MQTT tiež podporuje funkciu "keep alive", ktorá kontroluje, či je pripojenie stále aktívne počas dlhých medzier medzi správami.

🦟 Mosquitto od Eclipse Foundation má bezplatný MQTT sprostredkovateľ, ktorý si môžete sami spustiť na experimentovanie s MQTT, spolu s verejným MQTT sprostredkovateľom, ktorý môžete použiť na testovanie svojho kódu, hostovaným na test.mosquitto.org.

MQTT pripojenia môžu byť verejné a otvorené, alebo šifrované a zabezpečené pomocou používateľských mien a hesiel, alebo certifikátov.

💁 MQTT komunikuje cez TCP/IP, rovnaký základný sieťový protokol ako HTTP, ale na inom porte. Môžete tiež používať MQTT cez websockets na komunikáciu s webovými aplikáciami bežiacimi v prehliadači, alebo v situáciách, kde firewally alebo iné sieťové pravidlá blokujú štandardné MQTT pripojenia.

Telemetria

Slovo telemetria pochádza z gréckych koreňov a znamená merať na diaľku. Telemetria je akt zhromažďovania údajov zo senzorov a ich odosielania do cloudu.

💁 Jedno z prvých telemetrických zariadení bolo vynájdené vo Francúzsku v roku 1874 a posielalo aktuálne údaje o počasí a hĺbke snehu z Mont Blancu do Paríža. Používalo fyzické drôty, pretože bezdrôtové technológie v tom čase neboli dostupné.

Pozrime sa späť na príklad inteligentného termostatu z Lekcie 1.

Internetový termostat používajúci viaceré senzory v miestnostiach

Termostat má teplotné senzory na zhromažďovanie telemetrie. Pravdepodobne by mal jeden teplotný senzor zabudovaný, a mohol by sa pripojiť k viacerým externým teplotným senzorom cez bezdrôtový protokol, ako je Bluetooth Low Energy (BLE).

Príklad telemetrických údajov, ktoré by mohol odosielať, by mohol byť:

Názov Hodnota Popis
thermostat_temperature 18°C Teplota nameraná zabudovaným teplotným senzorom termostatu
livingroom_temperature 19°C Teplota nameraná vzdialeným teplotným senzorom, ktorý bol pomenovaný livingroom, aby identifikoval miestnosť, v ktorej sa nachádza
bedroom_temperature 21°C Teplota nameraná vzdialeným teplotným senzorom, ktorý bol pomenovaný bedroom, aby identifikoval miestnosť, v ktorej sa nachádza

Cloudová služba potom môže použiť tieto telemetrické údaje na rozhodovanie o tom, aké príkazy poslať na ovládanie kúrenia.

Odosielanie telemetrie z vášho IoT zariadenia

Ďalším krokom pri pridávaní internetového ovládania k vášmu nočnému svetlu je odosielanie telemetrie úrovne svetla na MQTT sprostredkovateľa na telemetrickú tému.

Úloha - odosielanie telemetrie z vášho IoT zariadenia

Odošlite telemetriu úrovne svetla na MQTT sprostredkovateľa.

Údaje sú odosielané zakódované ako JSON - skratka pre JavaScript Object Notation, štandard na kódovanie údajov v texte pomocou párov kľúč/hodnota.

Ak ste sa ešte nestretli s JSON, môžete sa o ňom dozvedieť viac v dokumentácii JSON.org.

Postupujte podľa relevantného kroku nižšie, aby ste odoslali telemetriu zo svojho zariadenia na MQTT sprostredkovateľa:

Prijímanie telemetrie od MQTT sprostredkovateľa

Nemá zmysel odosielať telemetriu, ak na druhej strane nie je nič, čo by ju počúvalo. Telemetria úrovne svetla potrebuje niečo, čo ju bude počúvať a spracovávať údaje. Tento 'serverový' kód je typ kódu, ktorý nasadíte na cloudovú službu ako súčasť väčšej IoT aplikácie, ale tu budete tento kód spúšťať lokálne na svojom počítači (alebo na svojom Pi, ak na ňom priamo kódujete). Serverový kód pozostáva z Python aplikácie, ktorá počúva telemetrické správy cez MQTT s úrovňami svetla. Neskôr v tejto lekcii ho nastavíte tak, aby odpovedal príkazovou správou s inštrukciami na zapnutie alebo vypnutie LED.

Urobte si prieskum: Čo sa stane s MQTT správami, ak nie je žiadny poslucháč?

Inštalácia Pythonu a VS Code

Ak nemáte Python a VS Code nainštalované lokálne, budete ich musieť nainštalovať, aby ste mohli kódovať server. Ak používate virtuálne IoT zariadenie alebo pracujete na svojom Raspberry Pi, môžete tento krok preskočiť, pretože by ste to už mali mať nainštalované a nakonfigurované.

Úloha - inštalácia Pythonu a VS Code

Nainštalujte Python a VS Code.

  1. Nainštalujte Python. Pozrite si stránku na stiahnutie Pythonu pre inštrukcie na inštaláciu najnovšej verzie Pythonu.

  2. Nainštalujte Visual Studio Code (VS Code). Toto je editor, ktorý budete používať na písanie kódu virtuálneho zariadenia v Pythone. Pozrite si dokumentáciu VS Code pre inštrukcie na inštaláciu VS Code. 💁 Môžete použiť akékoľvek IDE alebo editor pre Python, ak máte preferovaný nástroj, ale lekcie budú obsahovať pokyny založené na používaní VS Code.

  3. Nainštalujte rozšírenie Pylance pre VS Code. Toto je rozšírenie pre VS Code, ktoré poskytuje podporu pre jazyk Python. Pokyny na inštaláciu tohto rozšírenia vo VS Code nájdete v dokumentácii k rozšíreniu Pylance.

Nastavenie virtuálneho prostredia pre Python

Jednou z výhod Pythonu je možnosť inštalovať pip balíčky - ide o balíčky kódu napísané inými ľuďmi a zverejnené na internete. Pip balíček môžete nainštalovať na svoj počítač jediným príkazom a následne ho použiť vo svojom kóde. Pip budete používať na inštaláciu balíčka na komunikáciu cez MQTT.

Štandardne, keď nainštalujete balíček, je dostupný kdekoľvek na vašom počítači, čo môže viesť k problémom s verziami balíčkov - napríklad jedna aplikácia závisí od jednej verzie balíčka, ktorá prestane fungovať, keď nainštalujete novú verziu pre inú aplikáciu. Na vyriešenie tohto problému môžete použiť virtuálne prostredie pre Python, čo je v podstate kópia Pythonu v špeciálnom priečinku. Keď nainštalujete pip balíčky, budú dostupné iba v tomto priečinku.

Úloha - nastavenie virtuálneho prostredia pre Python

Nastavte virtuálne prostredie pre Python a nainštalujte pip balíčky pre MQTT.

  1. V termináli alebo príkazovom riadku spustite nasledujúce príkazy na vytvorenie a prechod do nového priečinka:

    mkdir nightlight-server
    cd nightlight-server
    
  2. Teraz spustite nasledujúci príkaz na vytvorenie virtuálneho prostredia v priečinku .venv:

    python3 -m venv .venv
    

    💁 Je potrebné explicitne zavolať python3 na vytvorenie virtuálneho prostredia, ak máte nainštalovaný aj Python 2. Ak zavoláte python, použije sa Python 2 namiesto Pythonu 3.

  3. Aktivujte virtuálne prostredie:

    • Na Windows:

      • Ak používate príkazový riadok alebo príkazový riadok cez Windows Terminal, spustite:

        .venv\Scripts\activate.bat
        
      • Ak používate PowerShell, spustite:

        .\.venv\Scripts\Activate.ps1
        
    • Na macOS alebo Linux spustite:

      source ./.venv/bin/activate
      

    💁 Tieto príkazy by sa mali spustiť z rovnakého miesta, kde ste vytvorili virtuálne prostredie. Nikdy nebudete musieť prechádzať do priečinka .venv, vždy by ste mali spustiť príkaz na aktiváciu a akékoľvek príkazy na inštaláciu balíčkov alebo spustenie kódu z priečinka, kde ste vytvorili virtuálne prostredie.

  4. Po aktivácii virtuálneho prostredia bude predvolený príkaz python spúšťať verziu Pythonu, ktorá bola použitá na vytvorenie virtuálneho prostredia. Spustite nasledujúci príkaz na zistenie verzie:

    python --version
    

    Výstup bude podobný nasledujúcemu:

    (.venv) ➜  nightlight-server python --version
    Python 3.9.1
    

    💁 Vaša verzia Pythonu môže byť iná - pokiaľ je to verzia 3.6 alebo vyššia, je to v poriadku. Ak nie, odstráňte tento priečinok, nainštalujte novšiu verziu Pythonu a skúste to znova.

  5. Spustite nasledujúce príkazy na inštaláciu pip balíčka Paho-MQTT, populárnej knižnice pre MQTT.

    pip install paho-mqtt
    

    Tento pip balíček bude nainštalovaný iba vo virtuálnom prostredí a nebude dostupný mimo neho.

Napíšte kód pre server

Teraz môžete napísať kód pre server v Pythone.

Úloha - napíšte kód pre server

Napíšte kód pre server.

  1. V termináli alebo príkazovom riadku spustite nasledujúci príkaz vo virtuálnom prostredí na vytvorenie Python súboru s názvom app.py:

    • Na Windows spustite:

      type nul > app.py
      
    • Na macOS alebo Linux spustite:

      touch app.py
      
  2. Otvorte aktuálny priečinok vo VS Code:

    code .
    
  3. Keď sa VS Code spustí, aktivuje virtuálne prostredie pre Python. Toto bude zobrazené v dolnom stavovom riadku:

    VS Code zobrazujúci vybrané virtuálne prostredie

  4. Ak je terminál vo VS Code už spustený pri štarte VS Code, virtuálne prostredie v ňom nebude aktivované. Najjednoduchšie je ukončiť terminál pomocou tlačidla Kill the active terminal instance:

    VS Code tlačidlo na ukončenie aktívneho terminálu

  5. Spustite nový terminál vo VS Code výberom Terminal -> New Terminal alebo stlačením CTRL+`. Nový terminál načíta virtuálne prostredie, pričom príkaz na jeho aktiváciu sa zobrazí v termináli. Názov virtuálneho prostredia (.venv) sa zobrazí aj v príkazovom riadku:

    ➜  nightlight-server source .venv/bin/activate
    (.venv) ➜  nightlight 
    
  6. Otvorte súbor app.py v prieskumníkovi VS Code a pridajte nasledujúci kód:

    import json
    import time
    
    import paho.mqtt.client as mqtt
    
    id = '<ID>'
    
    client_telemetry_topic = id + '/telemetry'
    client_name = id + 'nightlight_server'
    
    mqtt_client = mqtt.Client(client_name)
    mqtt_client.connect('test.mosquitto.org')
    
    mqtt_client.loop_start()
    
    def handle_telemetry(client, userdata, message):
        payload = json.loads(message.payload.decode())
        print("Message received:", payload)
    
    mqtt_client.subscribe(client_telemetry_topic)
    mqtt_client.on_message = handle_telemetry
    
    while True:
        time.sleep(2)
    

    Nahraďte <ID> na riadku 6 unikátnym ID, ktoré ste použili pri vytváraní kódu pre zariadenie.

    ⚠️ Toto musí byť rovnaké ID, aké ste použili na zariadení, inak sa kód servera neprihlási na odber alebo nepublikuje na správnu tému.

    Tento kód vytvára MQTT klienta s unikátnym názvom a pripája sa k brokerovi test.mosquitto.org. Následne spustí spracovateľskú slučku, ktorá beží na pozadí a počúva správy na všetkých prihlásených témach.

    Klient sa potom prihlási na odber správ na telemetrickej téme a definuje funkciu, ktorá sa zavolá, keď sa prijme správa. Keď sa prijme telemetrická správa, zavolá sa funkcia handle_telemetry, ktorá vypíše prijatú správu do konzoly.

    Nakoniec nekonečná slučka udržiava aplikáciu v chode. MQTT klient počúva správy na pozadí a beží po celý čas, kým hlavná aplikácia beží.

  7. V termináli VS Code spustite nasledujúci príkaz na spustenie Python aplikácie:

    python app.py
    

    Aplikácia začne počúvať správy zo zariadenia IoT.

  8. Uistite sa, že vaše zariadenie beží a odosiela telemetrické správy. Upravte úrovne svetla detekované vaším fyzickým alebo virtuálnym zariadením. Prijaté správy sa budú vypisovať do terminálu.

    (.venv) ➜  nightlight-server python app.py
    Message received: {'light': 0}
    Message received: {'light': 400}
    

    Súbor app.py vo virtuálnom prostredí nightlight musí byť spustený, aby súbor app.py vo virtuálnom prostredí nightlight-server mohol prijímať odosielané správy.

💁 Tento kód nájdete v priečinku code-server/server.

Ako často by sa mala telemetria odosielať?

Jednou z dôležitých otázok pri telemetrii je, ako často merať a odosielať údaje? Odpoveď je - záleží na situácii. Ak meriate často, môžete rýchlejšie reagovať na zmeny, ale spotrebujete viac energie, šírky pásma, generujete viac údajov a potrebujete viac cloudových zdrojov na ich spracovanie. Musíte merať dostatočne často, ale nie príliš často.

Pre termostat je meranie každých pár minút pravdepodobne viac než dosť, pretože teploty sa nemenia tak často. Ak by ste merali len raz denne, mohli by ste vykurovať dom pre nočné teploty uprostred slnečného dňa, zatiaľ čo ak by ste merali každú sekundu, mali by ste tisíce zbytočne duplikovaných meraní teploty, ktoré by spomalili internet používateľa a spotrebovali viac energie, čo môže byť problém pre zariadenia napájané batériami, ako sú vzdialené senzory, a zvýšili by náklady na cloudové zdroje poskytovateľa na ich spracovanie a ukladanie.

Ak monitorujete údaje o stroji vo fabrike, ktorého zlyhanie by mohlo spôsobiť katastrofálne škody a milióny dolárov strát, meranie viackrát za sekundu môže byť nevyhnutné. Je lepšie plytvať šírkou pásma, než prehliadnuť telemetriu, ktorá naznačuje, že stroj treba zastaviť a opraviť skôr, než sa pokazí.

💁 V takejto situácii by ste mohli zvážiť použitie edge zariadenia na spracovanie telemetrie, aby ste znížili závislosť od internetu.

Strata pripojenia

Internetové pripojenia môžu byť nespoľahlivé a výpadky sú bežné. Čo by malo zariadenie IoT robiť v takýchto prípadoch - malo by stratiť údaje, alebo ich uložiť, kým sa pripojenie neobnoví? Odpoveď opäť závisí od situácie.

Pre termostat môžu byť údaje stratené, akonáhle sa získa nové meranie teploty. Kúrenie nezaujíma, že pred 20 minútami bolo 20,5 °C, ak je teraz 19 °C - aktuálna teplota určuje, či má byť kúrenie zapnuté alebo vypnuté.

Pre stroje by ste možno chceli údaje uchovať, najmä ak sa používajú na sledovanie trendov. Existujú modely strojového učenia, ktoré dokážu detegovať anomálie v prúdoch údajov tým, že analyzujú údaje za definované časové obdobie (napríklad poslednú hodinu) a hľadajú anomálne údaje. To sa často používa na prediktívnu údržbu, ktorá hľadá náznaky, že niečo môže čoskoro zlyhať, aby ste to mohli opraviť alebo vymeniť skôr, než sa to stane. V takom prípade by ste mohli chcieť, aby zariadenie IoT odoslalo všetku telemetriu, ktorá bola generovaná počas výpadku internetu, hneď ako sa pripojenie obnoví.

Dizajnéri zariadení IoT by tiež mali zvážiť, či zariadenie môže byť použité počas výpadku internetu alebo straty signálu spôsobenej lokalitou. Inteligentný termostat by mal byť schopný robiť obmedzené rozhodnutia na ovládanie kúrenia, ak nemôže odosielať telemetriu do cloudu kvôli výpadku.

Toto Ferrari sa stalo nepoužiteľným, pretože niekto sa ho pokúsil aktualizovať pod zemou, kde nie je mobilný signál

Aby MQTT zvládlo stratu pripojenia, zariadenie a kód servera budú musieť byť zodpovedné za zabezpečenie doručenia správ, ak je to potrebné, napríklad vyžadovaním, aby všetky odoslané správy boli potvrdené ďalšími správami na odpovednej téme. Ak nie sú potvrdené, musia byť manuálne zaradené do frontu na opätovné odoslanie neskôr.

Príkazy

Príkazy sú správy odoslané z cloudu do zariadenia, ktoré ho inštruujú, aby niečo vykonalo. Väčšinou ide o poskytnutie nejakého výstupu cez akčný člen, ale môže to byť aj inštrukcia pre samotné zariadenie, napríklad na reštartovanie alebo zhromaždenie ďalšej telemetrie a jej vrátenie ako odpoveď na príkaz.

Internetom pripojený termostat prijímajúci príkaz na zapnutie kúrenia

Termostat by mohol prijať príkaz z cloudu na zapnutie kúrenia. Na základe telemetrických údajov zo všetkých senzorov cloudová služba rozhodla, že kúrenie by malo byť zapnuté, a preto posiela príslušný príkaz.

Odosielanie príkazov na MQTT broker

Ďalším krokom pre náš internetom ovládaný nočný svetelný zdroj je, aby kód servera odoslal príkaz späť do zariadenia IoT na ovládanie svetla na základe úrovní svetla, ktoré deteguje.

  1. Otvorte kód servera vo VS Code.

  2. Pridajte nasledujúci riadok po deklarácii client_telemetry_topic, aby ste definovali, na ktorú tému sa majú odosielať príkazy:

    server_command_topic = id + '/commands'
    
  3. Pridajte nasledujúci kód na koniec funkcie handle_telemetry:

    command = { 'led_on' : payload['light'] < 300 }
    print("Sending message:", command)
    
    client.publish(server_command_topic, json.dumps(command))
    

    Tento kód odosiela JSON správu na tému príkazov s hodnotou led_on nastavenou na true alebo false v závislosti od toho, či je svetlo menšie ako 300 alebo nie. Ak je svetlo menšie ako 300, odošle sa true, aby zariadenie zaplo LED.

  4. Spustite kód ako predtým.

  5. Upravte úrovne svetla detekované vaším fyzickým alebo virtuálnym zariadením. Prijaté správy a odoslané príkazy sa budú vypisovať do terminálu:

    (.venv) ➜  nightlight-server python app.py
    Message received: {'light': 0}
    Sending message: {'led_on': True}
    Message received: {'light': 400}
    Sending message: {'led_on': False}
    

💁 Telemetria a príkazy sa odosielajú na jednu tému. To znamená, že telemetria z viacerých zariadení sa objaví na rovnakej telemetrickej téme a príkazy pre viaceré zariadenia sa objavia na rovnakej téme príkazov. Ak by ste chceli odoslať príkaz konkrétnemu zariadeniu, mohli by ste použiť viacero tém, pomenovaných unikátnym ID zariadenia, ako napríklad /commands/device1, /commands/device2. Takto by zariadenie mohlo počúvať iba správy určené pre konkrétne zariadenie.

💁 Tento kód nájdete v priečinku code-commands/server.

Spracovanie príkazov na zariadení IoT

Teraz, keď sa príkazy odosielajú zo servera, môžete pridať kód do zariadenia IoT na ich spracovanie a ovládanie LED.

Postupujte podľa príslušného kroku nižšie na počúvanie príkazov z MQTT brokera:

Keď bude tento kód napísaný a spustený, experimentujte so zmenou úrovní svetla. Sledujte výstup zo servera a zariadenia a sledujte LED, keď meníte úrovne svetla.

Strata pripojenia

Čo by mala cloudová služba robiť, ak potrebuje odoslať príkaz zariadeniu IoT, ktoré je offline? Odpoveď opäť závisí od situácie.

Ak najnovší príkaz prepíše predchádzajúci, potom môžu byť predchádzajúce ignorované. Ak cloudová služba odošle príkaz na zapnutie kúrenia a potom príkaz na jeho vypnutie, príkaz na zapnutie môže byť ignorovaný a nemusí byť odoslaný znova.

Ak je potrebné príkazy spracovať v poradí, napríklad pohybovať robotickým ramenom hore a potom zatvoriť uchopovač, musia byť odoslané v poradí, keď sa pripojenie obnoví.

Ako by mohli zariadenie alebo kód servera zabezpečiť, že príkazy bud Premýšľajte o týchto zariadeniach, aké správy môžu posielať alebo prijímať. Aké telemetrické údaje posielajú? Aké správy alebo príkazy môžu prijímať? Myslíte si, že sú bezpečné?

Kvíz po prednáške

Kvíz po prednáške

Prehľad a samostatné štúdium

Prečítajte si viac o MQTT na stránke Wikipédie o MQTT.

Vyskúšajte si spustiť vlastný MQTT broker pomocou Mosquitto a pripojte sa k nemu zo svojho IoT zariadenia a serverového kódu.

💁 Tip - predvolene Mosquitto neumožňuje anonymné pripojenia (teda pripojenia bez používateľského mena a hesla) a neumožňuje pripojenia mimo počítača, na ktorom beží. Toto môžete vyriešiť pomocou mosquitto.conf konfiguračného súboru s nasledujúcim obsahom:

listener 1883 0.0.0.0
allow_anonymous true

Zadanie

Porovnajte a porovnajte MQTT s inými komunikačnými protokolmi


Upozornenie:
Tento dokument bol preložený pomocou služby AI prekladu Co-op Translator. Hoci sa snažíme o presnosť, prosím, berte na vedomie, že automatizované preklady môžu obsahovať chyby alebo nepresnosti. Pôvodný dokument v jeho rodnom jazyku by mal byť považovaný za autoritatívny zdroj. Pre kritické informácie sa odporúča profesionálny ľudský preklad. Nenesieme zodpovednosť za akékoľvek nedorozumenia alebo nesprávne interpretácie vyplývajúce z použitia tohto prekladu.