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ć.
źródło
Odpowiedzi:
Może nie trafiłem w sedno pytania, ale myślę, że to dobry początek od odpowiedzi.
Potrzebujesz co najmniej trzech rzeczy.
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.
źródło
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.
źródło
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.
źródło