Czego potrzebuję, aby stworzyć własną chmurę osobistą dla urządzeń IoT?

18

Jest to temat, nad którym zastanawiałem się od dłuższego czasu, szczególnie dlatego, że koncepcja „IoT” ostatnio często się unosi.

Zacznę od tego, co mam na myśli, mówiąc „IoT” . Wiem, że termin IoT może oznaczać różne rzeczy i że czasami jest niewłaściwie używany. Może to być termin, który nie jest jasno zdefiniowany i może prowadzić do dużych dyskusji wokół tego, co to dokładnie znaczy, sam nie znam właściwej i powszechnie akceptowanej definicji tego terminu. Dla mnie IoT to koncepcja, która określa możliwość zdalnego połączenia z urządzeniem wbudowanym za pośrednictwem Internetu albo z innego urządzenia wbudowanego, albo z telefonu komórkowego . Tak proste jak to.

W tym kontekście cel połączenia nie ma znaczenia, jeśli możesz połączyć jedno urządzenie w biurze z innym urządzeniem w domu lub jeśli możesz połączyć się z jednym urządzeniem w domu z telefonu komórkowego, wszystko to przez Internet, wtedy mówimy o urządzeniach IoT (urządzeniach osadzonych, a nie telefonie).

Po uzgodnieniu, co rozumiem przez Internet Rzeczy, opiszę teraz, co próbuję osiągnąć.

Staram się osiągnąć właśnie to, co opisuję w mojej definicji Internetu Rzeczy.

Chcę mieć jedno lub kilka wbudowanych urządzeń w domu podłączonych do mojego routera internetowego za pośrednictwem sieci Ethernet lub Wi-Fi i móc połączyć się z nimi zdalnie z innymi urządzeniami osadzonymi w zdalnej lokalizacji (a przez zdalny nie mam na myśli tej samej sieci) a może też być w stanie połączyć się z nimi za pomocą aplikacji monitorującej na moim telefonie

Na przykład mogę mieć proste urządzenie osadzone działające jako włącznik / wyłącznik podłączone do mechanizmu otwierania drzwi garażowych i inne urządzenie osadzone działające jak duży czerwony przycisk na biurku w pracy, dzięki czemu mogę nacisnąć czerwony przycisk na biurku i otwierają się drzwi garażu.

Innym przykładem może być wbudowane urządzenie z funkcjami ADC, które mogą monitorować temperaturę w moim domu i wysyłać mi ostrzeżenie, gdy osiągnie próg. Powiadomienie może zostać odebrane albo przez prostą aplikację na Androida, albo przez inne wbudowane urządzenie z małym ekranem siedzącym na biurku w pracy.

Te przykłady mogą być głupie, ale służą jedynie zilustrowaniu możliwych scenariuszy i przypadków użycia dla tego, co próbuję osiągnąć. Na koniec pomysł jest taki sam: połącz jedno urządzenie osadzone z drugim za pośrednictwem Internetu.

Kolejną rzeczą do wyjaśnienia jest to, że wymiana danych między tymi urządzeniami będzie bardzo lekka, tylko kilka bajtów za każdym razem, nie jest tak, że setki kilobajtów są potrzebne do wymiany między urządzeniami.

Dodatkowo, rodzaj „urządzeń wbudowanych”, o których mówię, to proste, ale zdolne urządzenia oparte na mikrokontrolerach cortex-m4 100 MHz lub 200 MHz. Należy to wyjaśnić, ponieważ na tych urządzeniach nie będzie działał żaden system Linux ani złożone biblioteki. W końcu marnowanie zasobów jest całkowicie niepotrzebne, aby mieć potężny procesor z systemem Linux, aby włączyć lub wyłączyć żarówkę . W każdym razie planuję używać BeagleBoard, Raspberry Pi lub innej takiej płyty jako mojego urządzenia wbudowanego. Tylko mikrokontrolery, ponieważ nie jest potrzebna większa złożoność.

Nie wiem wiele o platformach IoT i tego rodzaju złożonych rozwiązaniach. Kiedy rozpocząłem tę podróż, aby znaleźć sposób połączenia jednego urządzenia osadzonego z drugim za pośrednictwem Internetu, natknąłem się na kilka witryn z usługami IoT.

Wiem, że istnieją pewne usługi w chmurze IoT, takie jak:

Żeby wymienić tylko kilka. Głównymi problemami z nimi są koszty i złożoność. Musisz zapłacić, aby uzyskać te usługi, a także nauczyć się, jak wdrażać wszystkie usługi, które mają, na wypadek, gdybyś potrzebował ich wszystkich, a także ich interfejsów API i być może wielu innych rzeczy, które nie wydają mi się konieczne. w stanie po prostu zamienić niektóre bajty między urządzeniami. Chcę tylko czegoś prostszego, czegoś, co mogę zrobić sam.

Można powiedzieć, że wdrożenie mojej „chmury”, jeśli jest to coś, co muszę zrobić, nie jest proste i czasami lepiej jest korzystać z tego rodzaju usług ze względu na prostotę, ale istnieją dwa główne powody, dla których chcę wiedzieć, jak to zrobić. wdrażam własne usługi IoT.

Głównym powodem jest to, że chcę to zrobić sam. Nie chcę polegać na firmach zewnętrznych, które łączą ze sobą moje urządzenia, a ponieważ będę opracowywać kod i sprzęt dla moich urządzeń, lepiej jest również stworzyć własne środki, aby połączyć je jako urządzenia IoT.

Drugim powodem jest nauczenie się, jak to zrobić. Wiedząc wszystkie niezbędne rzeczy, których potrzebuję, aby to osiągnąć, będę lepiej rozumieć świat Internetu Rzeczy.

Chciałbym również wspomnieć, że biegle posługuję się językiem C i używam Linuksa jako mojego codziennego systemu operacyjnego zarówno w pracy, jak i w domu, więc unikaj Windowsa, ponieważ jest to dla mnie bezużyteczne. Nie boję się niczego, co muszę zaimplementować w C dla moich urządzeń wbudowanych lub w Linuksie, aby zaimplementować wszystko, co jest potrzebne do osiągnięcia mojego celu.

Moje pytanie brzmi zatem: co należy wdrożyć i gdzie można połączyć ze sobą dwa lub więcej urządzeń wbudowanych w celu wymiany danych między nimi?

To pytanie Czego mogę użyć do stworzenia Internetu Rzeczy na naszym własnym serwerze? mieć coś podobnego, ale jest zamknięty i nie ma żadnych odpowiedzi, zakłada także, że ma być już używana infrastruktura chmurowa. Więc to mi nie pomaga.

Ten inny post Jakie usługi IoT są dostępne do przechowywania / wysyłania / publikowania ogólnych danych w chmurze? ma podobne pytanie, ale OP wyraźnie prosi o usługi IoT i staram się ich unikać.

m4l490n
źródło
2
W jaki sposób serwer jest „istniejącą infrastrukturą chmurową”? Serwer to tylko komputer. Infrastruktura chmurowa to znacznie więcej.
user253751
1
Zauważ też, że kiedy mamy wszechobecny IPv6, możesz mieć możliwość, aby twoje urządzenia IoT komunikowały się ze sobą bezpośrednio, bez potrzeby centralnego serwera / chmury.
user253751
1
powiązane: iot.stackexchange.com/questions/1119/…
Sean Houlihane

Odpowiedzi:

10

Może nie trafiłem w sedno pytania, ale myślę, że to dobry początek od odpowiedzi.

Potrzebujesz co najmniej trzech rzeczy.

  1. Zawsze włączony węzeł obliczeniowy do agregowania danych. To nie musi być potężne, może to być proces działający na twoim NAS, a nawet (teoretycznie) na twoim routerze. Dla uproszczenia załóżmy, że jest to Raspberry Pi. Może to również zapewnić dowolne fantazyjne protokoły radiowe, które zdecydujesz się w przyszłości wspierać. Chociaż teoretycznie można uruchamiać peer-to-peer ze wszystkimi węzłami dostępnymi w Internecie, łatwiej jest wyznaczyć jeden jako główny i mieć to do obsługi zestawiania danych i publikowania (dla aplikacji / użytkownika). Oczywiście hub może być również węzłem, szczególnie jeśli korzystasz z węzłów WiFi o umiarkowanie dużej mocy.
  2. Odpowiedni stos oprogramowania, aby umożliwić punktom końcowym przesłanie danych do węzła koncentrującego. to coś, czego potrzebujesz tutaj, a także system operacyjny, aby go uruchomić.
  3. DNS i przekierowanie portów, aby ułatwić dostęp do serwera z Internetu.

Więc nie zapomnij o bezpieczeństwie. W ten sposób będziesz bliżej otwarcia wszystkiego w sieci domowej na atak. Może tylko trochę, ale dobrze jest mieć świadomość ryzyka. Możesz starać się zachować ostrożność, ale zakładaj, że popełnisz błędy.

Sean Houlihane
źródło
1
Nie jestem pewien, czy to była odpowiedź, której chciałeś. Powinno to jednak pomóc w ustaleniu, o co musisz zapytać.
Sean Houlihane
1
Dzięki za pomoc!! Więc, co masz na myśli w pierwszym punkcie, że potrzebuję jakiegoś koncentratora lub bramy?
m4l490n
1
Tak, potrzebujesz bramy lub więcej niż jednego. Jeśli masz tylko jeden węzeł, może to oczywiście być twój węzeł. Trochę zredagowałem swoją odpowiedź.
Sean Houlihane
11

Lekkie urządzenia i kilka bajtów szybkości przesyłania danych proszą o użycie MQTT , jak już wspomniano. Twoje węzły czujnikowe mogą być oparte na samodzielnych modułach ESP8266, które są wystarczająco mocne, aby obsługiwać implementację klienta MQTT. Możesz też po prostu użyć tych modułów jako modułu Wi-Fi sterowanego komendą AT wraz z zewnętrznymi mikrokontrolerami.

Możesz wdrożyć własne rozwiązanie MQTT na znacznie słabszych mikrokontrolerach, takich jak ten facet, który użył Atmega48V z 4 kB flash .

Możesz hostować brokera na swoim komputerze, ale bardziej wydajne byłoby uruchomienie Raspberry Pi. Ponownie, jeśli lubisz kodować, możesz wdrożyć własnego brokera MQTT. Osobiście uważam Mosquitto za świetne do tego celu.

Wadą jest to, że wszystkie węzły czujnikowe wymagają połączenia TCP / IP.


Rozwiązaniem przyjaznym dla baterii może być użycie węzłów czujnik / siłownik z obsługą LoraWAN lub ZigBee i zaimplementowanie bramki na Raspberry / BeagleBone, która może obsługiwać również prosty serwer WWW, do którego można uzyskać dostęp z telefonu lub innych urządzeń.


W każdym przypadku wszystko sprowadza się do tego, aby koncentrator, brama lub serwer były dostępne poza siecią prywatną. Można to zrobić na wiele innych sposobów, a główną troską jest zawsze bezpieczeństwo. To jest, moim zdaniem, najbardziej ryzykowna część.

Podstawowe wymagania są dość dobrze podsumowane przez @Sean.

Bence Kaulics
źródło
Zgodnie z twoją odpowiedzią i odpowiedzią @ Seana widzę, że potrzebuję jakiegoś koncentratora lub bramy. Czy to absolutnie konieczne? Mam na myśli, czy nie mogę połączyć się bezpośrednio z żadnym węzłem, wiedząc, że jest to adres IP lub nazwa hosta? Nie chodzi o to, że staram się unikać koncentratora lub bramy, chcę tylko zrozumieć, czy jest to konieczne i dlaczego. Dzięki za pomoc!!
m4l490n
Czy odkryłeś, że Raspberry Pi jest w porządku jako urządzenie „zawsze włączone”? Mam mały dysk twardy podłączony do mojego Pi, którego używam jako pamięci sieciowej, ale wahaj się, aby pozostawić go cały czas włączony. Czy to powinno być w porządku, jeśli to zrobię? (FWIW Mam na nim małe radiatory)
BruceWayne
1
@ m4l490n Korzystanie z koncentratora lub bramy czyni to prostszym. W ten sposób musisz skonfigurować przekierowanie portów lub podobne tylko dla koncentratora lub bramy. Jeśli chcesz bezpośrednio połączyć się ze wszystkimi urządzeniami za routerem, musisz na przykład skonfigurować przekierowanie portów dla każdego z nich. Większe ryzyko, gdy otworzysz więcej dróg do swojej prywatnej sieci i więcej pracy.
Bence Kaulics
1
@BruceWayne mówię tak. Również na RaspberryPi.SE szczegółowo omówili ten temat .
Bence Kaulics
10

Zakwestionowałeś obie poprzednie odpowiedzi dotyczące potrzeby kontrolera / koncentratora. Pomyśl, że aby coś się stało, potrzebujesz reguł. Jeśli chcesz nacisnąć duży czerwony przycisk, aby otworzyć bramę garażową, jakaś zasada musi powiązać czujnik (przycisk) z żądaną czynnością (otwarcie drzwi). Można to zrobić na dwa sposoby: możesz umieścić regułę bezpośrednio w przycisku lub możesz umieścić regułę na osobnym komputerze.

Pomyślmy więcej o bezpośrednim rozwiązaniu. Jeśli nauczysz przycisku o bramie garażowej, to twój przycisk będzie przestrzegał zasad wewnętrznie. Przycisk potrzebuje identyfikatora drzwi garażowej, więc jeśli wymienisz drzwi garażowe, przycisk nie będzie działać. Jeśli przycisk znajduje się na biurku, a Twój dom korzysta z zastrzeżonej sieci, przycisk musi znać zarówno adres bramy domu, jak i adres drzwi. Przycisk musi znać konkretny protokół sygnalizujący otwarcie drzwi - czy wszyscy producenci tworzą kompatybilne przyciski, które znają wszystkie sygnały drzwi? Przycisk nie może zrobić nic innego, dopóki go nie przeprogramujesz - czy masz programator flash do układania przycisku przycisku i czy ten programator jest kompatybilny z innymi urządzeniami? Jeśli chcesz otworzyć bramę garażową, a 5 minut później zamknąć, przycisk wymaga wszystkich zawiłości związanych z utrzymywaniem zegara czasu rzeczywistego. Twój przycisk nie pozna stanu drzwi, co utrudni ustalenie, czy je zamykasz, czy otwierasz. Jak wykonać kopię zapasową zasad, aby w przypadku złamania przycisku przycisk zastępczy mógł wykonać zadanie? Na plus brzmi tanio: nie potrzebujesz osobnego komputera.

W przypadku kontrolera sprawy wyglądają inaczej. Wszystkie wiadomości ze wszystkich czujników są dostarczane do sterownika. Każdy czujnik jest prosty: wyślij sygnał do kontrolera. Sterownik może następnie zastosować wszelkie potrzebne dane wejściowe do bardzo skomplikowanych zasad: może sprawdzić czujnik nasłonecznienia i nie włączać oświetlenia zewnętrznego, chyba że jest ciemno, lub nie uruchamiać zraszaczy, jeśli średnia opadów w miesiącu jest wyższa niż średnia i aktualna temperatura jest pięć stopni poniżej średniej. Kontroler może śledzić stan. Może to być ważne, jeśli chcesz przycisk „Zamknij drzwi garażowe”, ale nie przycisk „Otwórz drzwi garażowe” (kiedy jestem poza domem, rzadko chcę otwierać drzwi, ale zdecydowanie chcę je zamknąć, jeśli są przypadkowo pozostawione otwarte).

Kontroler może zapewnić miejsce dla sterowników urządzeń, które potrafią słuchać przycisków i innych sterowników, które potrafią mówić do drzwi. Kontroler może być łatwiejszy do uaktualnienia do nowych urządzeń i typów urządzeń niż niewielki czip umieszczony w przycisku.

Kontroler może również mieć bardziej złożoną logikę dla zadań infrastrukturalnych, takich jak dostarczanie wiadomości, oferując określone poziomy usług. Na przykład protokół MQTT pozwala na trzy różne poziomy: spróbuj dostarczyć wiadomość jeden raz, dostarczaj ją wielokrotnie, aż zobaczy się przynajmniej raz, lub dostarczaj raz i tylko raz.

Kontroler oferuje logicznie architektoniczne miejsce do konsolidacji całego przesyłania komunikatów do i z bramki komunikacyjnej, umożliwiając korzystanie z zewnętrznego interfejsu. Oznacza to, że zarówno przycisk, jak i telefon mogą wysyłać sygnały, a zasady mogą przewidywać, że jedno z nich może otworzyć bramę garażową. Brama może również zapewnić bezpieczeństwo. Nie musisz umieszczać przycisku i bramy garażowej w Internecie; możesz umieścić je zarówno w prywatnych izolowanych sieciach, jak i użyć bramki do przenoszenia sygnałów. Kontroler zapewnia również jeden punkt, aby wykonać kopię zapasową wszystkich reguł systemu.

Wadami kontrolera są dodatkowe opóźnienia i dodatkowa złożoność. Co zaskakujące, kontroler nie powoduje znacznego wzrostu kosztów. Możesz zaimplementować kontroler na Raspberry Pi za mniej niż koszt jednego średniego, zdalnie sterowanego włącznika światła. Nie dyskontuj pomysłu na podstawie samego kosztu.

John Deters
źródło
Wydaje się, że posiadanie HUB-a lub kontrolera jest wysoce pożądane, szczególnie jeśli potrzebuję funkcjonalności opartej na regułach na wszystkich moich urządzeniach IoT, która mogłaby pozwolić na jak najlepsze wykorzystanie całej sieci.
m4l490n
Tak więc, jeśli dobrze zrozumiałem, mogę mieć połączenie peer-to-peer, pod warunkiem, że nie potrzebuję skomplikowanych reguł ani nawet złożonej sieci urządzeń IoT, a to również zakłada, że ​​urządzenia IoT nie będą współpracować z inne marki i na przykład jeden przycisk będzie zawsze związany z tym samym otwieraczem drzwi.
m4l490n
W przeciwnym razie, jeśli potrzebna jest większa elastyczność i funkcjonalność, powinienem mieć HUB. Czy to jest poprawne?
m4l490n
Tak, to dokładne podsumowanie. Praktycznie każdy ostatecznie potrzebuje jakiegoś koncentratora / kontrolera. Istnieje wiele opcji dla hubów, zarówno komercyjnych, jak i open source.
John Deters