{"id":5480,"date":"2018-06-20T13:56:53","date_gmt":"2018-06-20T11:56:53","guid":{"rendered":"https:\/\/sii.pl\/blog\/?p=5480"},"modified":"2023-09-11T12:41:54","modified_gmt":"2023-09-11T10:41:54","slug":"mozilla-iot","status":"publish","type":"post","link":"https:\/\/sii.pl\/blog\/mozilla-iot\/","title":{"rendered":"Mozilla IoT"},"content":{"rendered":"\n<p>Jednym z najgor\u0119tszych temat\u00f3w ostatnich lat w \u015bwiecie IT, poza blockchainem i sztuczn\u0105 inteligencj\u0105, jest zdecydowanie Internet Rzeczy czyli IoT (Internet of Things). W tym artykule opisz\u0119 pokr\u00f3tce propozycj\u0119 standardowego protoko\u0142u komunikacji i definicji urz\u0105dze\u0144 IoT stworzonego przez W3C i proponowan\u0105 implementacj\u0119 tego standardu stworzon\u0105 przez Mozilla Foundation.<\/p>\n\n\n\n<figure class=\"wp-block-image aligncenter\"><a href=\"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2022\/07\/things_framework_banner-1.png\"><img decoding=\"async\" width=\"300\" height=\"157\" src=\"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2022\/07\/things_framework_banner-1-300x157.png\" alt=\"\" class=\"wp-image-14828\" srcset=\"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2022\/07\/things_framework_banner-1-300x157.png 300w, https:\/\/sii.pl\/blog\/wp-content\/uploads\/2022\/07\/things_framework_banner-1-768x401.png 768w, https:\/\/sii.pl\/blog\/wp-content\/uploads\/2022\/07\/things_framework_banner-1.png 800w\" sizes=\"(max-width: 300px) 100vw, 300px\" \/><\/a><\/figure>\n\n\n\n<p class=\"has-text-align-left\">Szybki rozw\u00f3j rynku IoT spowodowa\u0142 spor\u0105 fragmentacj\u0119 technologii, jako \u017ce ka\u017cdy producent tworzy\u0142 w\u0142asne protoko\u0142y komunikacyjne i rozwi\u0105zania. Fragmentacja ta utrudnia\u0142a dalszy rozw\u00f3j, st\u0105d do\u015b\u0107 szybko pojawi\u0142y si\u0119 inicjatywy standaryzacji protoko\u0142\u00f3w komunikacji mi\u0119dzy urz\u0105dzeniami IoT. Jeden z tych standard\u00f3w zosta\u0142 zaproponowany przez W3C (World Wide Web Consortium). Nosi on nazw\u0119 Web of Things (WoT). Standard ten jest nadal w trakcie opracowywania, ale znane ju\u017c s\u0105 podstawowe za\u0142o\u017cenia. Istniej\u0105 te\u017c propozycje specyfikacji API. WoT nie tworzy nowych protoko\u0142\u00f3w czy technologii, a jedynie zbiera istniej\u0105ce ju\u017c rozwi\u0105zania w sp\u00f3jn\u0105 ca\u0142o\u015b\u0107. I tak ka\u017cda Rzecz (Thing) wchodz\u0105ca w sk\u0142ad WoT powinna wystawia\u0107 po HTTP RESTowe API, kt\u00f3re umo\u017cliwia wywo\u0142ywanie funkcji owej Rzeczy, a tak\u017ce zbieranie z niej danych. J\u0119zykiem wymiany danych jest oczywi\u015bcie JSON. Podstawowa komunikacja z urz\u0105dzeniem powinna odbywa\u0107 si\u0119 wed\u0142ug klasycznego wzorca zapytanie-odpowied\u017a (request-response), ale mo\u017cna te\u017c wykorzystywa\u0107 mechanizm subskrypcji poprzez WebSockets.<\/p>\n\n\n\n<p>Poj\u0119cie Rzeczy jest do\u015b\u0107 elastyczne \u2013 mo\u017ce by\u0107 to cokolwiek czym mo\u017cna jako\u015b sterowa\u0107 poprzez ustawianie w\u0142a\u015bciwo\u015bci lub wywo\u0142ywanie akcji i co udost\u0119pnia jakie\u015b informacje o swoim stanie. I tu na scen\u0119 wchodzi Mozilla Foundation ze swoim projektem \u2013 Project Things. Projekt ten to pr\u00f3ba stworzenia implementacji standardu WoT ze szczeg\u00f3lnym naciskiem na obszar inteligentnych dom\u00f3w. W jego sk\u0142ad wchodz\u0105 trzy cz\u0119\u015bci:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Things Gateway: Bramka do WoT pozwalaj\u0105ca zarz\u0105dza\u0107 Rzeczami w lokalnej sieci i udost\u0119pniaj\u0105ca je przez internet<\/li>\n\n\n\n<li>Things Cloud: Kolekcja us\u0142ug IoT w chmurze<\/li>\n\n\n\n<li>Things Framework: Zbi\u00f3r bibliotek, dzi\u0119ki kt\u00f3rym mo\u017cna pod\u0142\u0105czy\u0107 Rzecz do sieci WoT, czyli stworzy\u0107 dla niej webowe API zgodne z Web Things API<\/li>\n<\/ul>\n\n\n\n<figure class=\"wp-block-image aligncenter\"><a href=\"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2022\/07\/project_things_architecture.png\"><img decoding=\"async\" width=\"258\" height=\"300\" src=\"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2022\/07\/project_things_architecture-258x300.png\" alt=\"Things Framework\" class=\"wp-image-14826\" srcset=\"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2022\/07\/project_things_architecture-258x300.png 258w, https:\/\/sii.pl\/blog\/wp-content\/uploads\/2022\/07\/project_things_architecture-768x894.png 768w, https:\/\/sii.pl\/blog\/wp-content\/uploads\/2022\/07\/project_things_architecture.png 800w\" sizes=\"(max-width: 258px) 100vw, 258px\" \/><\/a><\/figure>\n\n\n\n<p>Sercem ca\u0142ego rozwi\u0105zania jest Bramka (Gateway). Od strony oprogramowania ma ona posta\u0107 serwera NodeJS ze specjaln\u0105 aplikacj\u0105 webow\u0105, ale zamiast instalowa\u0107 ten serwer na zwyk\u0142ym komputerze, Mozilla proponuje wykorzystanie Raspbery Pi. Na stronie projektu dost\u0119pny jest obraz specjalnej wersji Raspbiana z oprogramowaniem Bramki. Wystarczy pobra\u0107 ten obraz, zapisa\u0107 go na karcie microSD i uruchomi\u0107 \u201eMalink\u0119\u201d. Oficjalnie, wymagana jest wersja trzecia RPi, ale mo\u017cliwe jest uruchomienie Bramki na starszych wersjach, a tak\u017ce na Raspberry Pi Zero. Podczas pierwszego uruchomienia niezb\u0119dna b\u0119dzie konfiguracja, dzi\u0119ki kt\u00f3rej nasza Bramka b\u0119dzie dost\u0119pna nie tylko w sieci lokalnej, ale tak\u017ce globalnie w domenie mozilla-iot.org (poprzez tunel SSL). Dla ka\u017cdej Bramki mo\u017cna zdefiniowa\u0107 nazw\u0119 subdomeny, pod kt\u00f3r\u0105 b\u0119dzie publicznie widoczna. Dzi\u0119ki temu nawet je\u015bli nie mamy publicznego adresu IP, nasza Bramka b\u0119dzie dost\u0119pna przez internet. Oczywi\u015bcie dost\u0119p do niej b\u0119dzie chroniony has\u0142em. Po zalogowaniu, wejdziemy do aplikacji webowej pozwalaj\u0105cej na zarz\u0105dzanie pod\u0142\u0105czonymi do naszej Bramki urz\u0105dzeniami. Interfejs jest prosty, przejrzysty i nie\u017ale dzia\u0142a na smartfonach. Pozwala przegl\u0105da\u0107 pod\u0142\u0105czone Rzeczy, sterowa\u0107 nimi, wyszukiwa\u0107 nowe Rzeczy w sieci lokalnej, a tak\u017ce projektowa\u0107 proste automaty steruj\u0105ce pod\u0142\u0105czonymi urz\u0105dzeniami. Wszystko wizualnie. Mo\u017cna te\u017c instalowa\u0107 wtyczki (Add-on), kt\u00f3re umo\u017cliwiaj\u0105 dodawanie urz\u0105dze\u0144 niezgodnych ze standardem Web Things API. Np. dzi\u0119ki takiej wtyczce mo\u017cemy sterowa\u0107 przez Bramk\u0119 urz\u0105dzeniem pod\u0142\u0105czonym do naszego RPi przez GPIO. Wtyczki mo\u017cna pisa\u0107 w JavaScripcie i Pythonie. Things Framework, czyli biblioteka u\u0142atwiaj\u0105ca pisanie serwer\u00f3w wystawiaj\u0105cych do sieci pojedyncze Rzeczy, dost\u0119pna jest w pi\u0119ciu wersjach j\u0119zykowych. Mamy zatem JavaScript, Pythona, Rusta, Jav\u0119 i Arduino (czyli C++). Do niedawna wersja na Arduino dzia\u0142a\u0142a w\u0142a\u015bciwie tylko na urz\u0105dzeniach ESP8266 ale obecnie wspiera tak\u017ce ESP32 oraz urz\u0105dzenia kompatybilne z bibliotek\u0105 WiFi101 (Np taki Adafruit Feather M0 z modu\u0142em ATWINC1500).<\/p>\n\n\n\n<p>Na GitHubie dost\u0119pnych jest sporo przyk\u0142ad\u00f3w zar\u00f3wno wtyczek, jak i API dla konkretnych urz\u0105dze\u0144. Projekt jest obecnie w wersji 0.7 i jest ju\u017c ca\u0142kiem dojrza\u0142y. Posiada nawet wsparcie dla kamer IP (cho\u0107 eksperymentalne) i inteligentnego asystenta, kt\u00f3remu mo\u017cna wydawa\u0107 komendy j\u0119zykiem (jakby) naturalnym.<\/p>\n\n\n\n<p>W tym miejscu warto zaznaczy\u0107, \u017ce Things Gateway jest dedykowana dla inteligentnego domu &#8211; UI pozawala nawet stworzy\u0107 schemat w\u0142asnego mieszkania i porozmieszcza\u0107 na nim ikony r\u00f3\u017cnych Rzeczy pod\u0142\u0105czonych do Bramki. Jednak ju\u017c Things Framework (a tak\u017ce samo Web of Things) nie ogranicza si\u0119 do zastosowa\u0144 domowych i mo\u017ce by\u0107 wykorzystywany jako uniwersalny mechanizm wystawiania RESTowego API dla dowolnego urz\u0105dzenia nawet niekoniecznie pod\u0142\u0105czonego do internetu. Mo\u017cliwo\u015bci jest wiele&#8230;<\/p>\n\n\n\n<p>Je\u015bli interesuje Was temat IoT albo chcecie uzyska\u0107 mo\u017cliwo\u015b\u0107 kontroli przez internet w\u0142asnego urz\u0105dzenia, to Project Things mo\u017ce by\u0107 wart Waszej uwagi.<\/p>\n\n\n\n<p>Linki:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/iot.mozilla.org\/wot\/\" rel=\"nofollow\" >Szkic specyfikacji Web Thing API<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/iot.mozilla.org\/\" rel=\"nofollow\" >Project Things<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/github.com\/mozilla-iot\" rel=\"nofollow\" >Mozilla IoT na GitHub<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/hacks.mozilla.org\/category\/web-of-things\/\" rel=\"nofollow\" >Blog o Things Gateway<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/hacks.mozilla.org\/2018\/02\/how-to-build-your-own-private-smart-home-with-a-raspberry-pi-and-mozillas-things-gateway\/\" rel=\"nofollow\" >Instrukcja instalacji Bramki na RPi<\/a><\/li>\n<\/ul>\n\n\n<div class=\"kk-star-ratings kksr-auto kksr-align-left kksr-valign-bottom\"\n    data-payload='{&quot;align&quot;:&quot;left&quot;,&quot;id&quot;:&quot;5480&quot;,&quot;slug&quot;:&quot;default&quot;,&quot;valign&quot;:&quot;bottom&quot;,&quot;ignore&quot;:&quot;&quot;,&quot;reference&quot;:&quot;auto&quot;,&quot;class&quot;:&quot;&quot;,&quot;count&quot;:&quot;9&quot;,&quot;legendonly&quot;:&quot;&quot;,&quot;readonly&quot;:&quot;&quot;,&quot;score&quot;:&quot;4.4&quot;,&quot;starsonly&quot;:&quot;&quot;,&quot;best&quot;:&quot;5&quot;,&quot;gap&quot;:&quot;11&quot;,&quot;greet&quot;:&quot;&quot;,&quot;legend&quot;:&quot;4.4\\\/5 ( votes: 9)&quot;,&quot;size&quot;:&quot;18&quot;,&quot;title&quot;:&quot;Mozilla IoT&quot;,&quot;width&quot;:&quot;122.1&quot;,&quot;_legend&quot;:&quot;{score}\\\/{best} ( {votes}: {count})&quot;,&quot;font_factor&quot;:&quot;1.25&quot;}'>\n            \n<div class=\"kksr-stars\">\n    \n<div class=\"kksr-stars-inactive\">\n            <div class=\"kksr-star\" data-star=\"1\" style=\"padding-right: 11px\">\n            \n\n<div class=\"kksr-icon\" style=\"width: 18px; height: 18px;\"><\/div>\n        <\/div>\n            <div class=\"kksr-star\" data-star=\"2\" style=\"padding-right: 11px\">\n            \n\n<div class=\"kksr-icon\" style=\"width: 18px; height: 18px;\"><\/div>\n        <\/div>\n            <div class=\"kksr-star\" data-star=\"3\" style=\"padding-right: 11px\">\n            \n\n<div class=\"kksr-icon\" style=\"width: 18px; height: 18px;\"><\/div>\n        <\/div>\n            <div class=\"kksr-star\" data-star=\"4\" style=\"padding-right: 11px\">\n            \n\n<div class=\"kksr-icon\" style=\"width: 18px; height: 18px;\"><\/div>\n        <\/div>\n            <div class=\"kksr-star\" data-star=\"5\" style=\"padding-right: 11px\">\n            \n\n<div class=\"kksr-icon\" style=\"width: 18px; height: 18px;\"><\/div>\n        <\/div>\n    <\/div>\n    \n<div class=\"kksr-stars-active\" style=\"width: 122.1px;\">\n            <div class=\"kksr-star\" style=\"padding-right: 11px\">\n            \n\n<div class=\"kksr-icon\" style=\"width: 18px; height: 18px;\"><\/div>\n        <\/div>\n            <div class=\"kksr-star\" style=\"padding-right: 11px\">\n            \n\n<div class=\"kksr-icon\" style=\"width: 18px; height: 18px;\"><\/div>\n        <\/div>\n            <div class=\"kksr-star\" style=\"padding-right: 11px\">\n            \n\n<div class=\"kksr-icon\" style=\"width: 18px; height: 18px;\"><\/div>\n        <\/div>\n            <div class=\"kksr-star\" style=\"padding-right: 11px\">\n            \n\n<div class=\"kksr-icon\" style=\"width: 18px; height: 18px;\"><\/div>\n        <\/div>\n            <div class=\"kksr-star\" style=\"padding-right: 11px\">\n            \n\n<div class=\"kksr-icon\" style=\"width: 18px; height: 18px;\"><\/div>\n        <\/div>\n    <\/div>\n<\/div>\n                \n\n<div class=\"kksr-legend\" style=\"font-size: 14.4px;\">\n            4.4\/5 ( votes: 9)    <\/div>\n    <\/div>\n","protected":false},"excerpt":{"rendered":"<p>Jednym z najgor\u0119tszych temat\u00f3w ostatnich lat w \u015bwiecie IT, poza blockchainem i sztuczn\u0105 inteligencj\u0105, jest zdecydowanie Internet Rzeczy czyli IoT &hellip; <a class=\"continued-btn\" href=\"https:\/\/sii.pl\/blog\/mozilla-iot\/\">Continued<\/a><\/p>\n","protected":false},"author":164,"featured_media":5489,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"_editorskit_title_hidden":false,"_editorskit_reading_time":0,"_editorskit_is_block_options_detached":false,"_editorskit_block_options_position":"{}","inline_featured_image":false,"footnotes":""},"categories":[1314],"tags":[435,572,361,189],"class_list":["post-5480","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-development-na-twardo","tag-iot","tag-mozilla","tag-open-source","tag-w3c"],"acf":[],"aioseo_notices":[],"republish_history":[],"featured_media_url":"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2018\/06\/obrazek-wyrozniajacy.jpg","category_names":["Development na twardo"],"_links":{"self":[{"href":"https:\/\/sii.pl\/blog\/wp-json\/wp\/v2\/posts\/5480"}],"collection":[{"href":"https:\/\/sii.pl\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/sii.pl\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/sii.pl\/blog\/wp-json\/wp\/v2\/users\/164"}],"replies":[{"embeddable":true,"href":"https:\/\/sii.pl\/blog\/wp-json\/wp\/v2\/comments?post=5480"}],"version-history":[{"count":2,"href":"https:\/\/sii.pl\/blog\/wp-json\/wp\/v2\/posts\/5480\/revisions"}],"predecessor-version":[{"id":24033,"href":"https:\/\/sii.pl\/blog\/wp-json\/wp\/v2\/posts\/5480\/revisions\/24033"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/sii.pl\/blog\/wp-json\/wp\/v2\/media\/5489"}],"wp:attachment":[{"href":"https:\/\/sii.pl\/blog\/wp-json\/wp\/v2\/media?parent=5480"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/sii.pl\/blog\/wp-json\/wp\/v2\/categories?post=5480"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/sii.pl\/blog\/wp-json\/wp\/v2\/tags?post=5480"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}