Tôi cần gì để tạo đám mây cá nhân của riêng mình cho các thiết bị IoT?


18

Đây là một chủ đề tôi đã suy nghĩ trong một thời gian, đặc biệt là vì khái niệm "IoT" đã nổi xung quanh rất nhiều gần đây.

Tôi sẽ bắt đầu với những gì tôi muốn nói khi tôi nói "IoT" . Tôi biết rằng thuật ngữ IoT có thể có nghĩa là những thứ khác nhau và đôi khi nó bị sử dụng sai. Nó có thể là một thuật ngữ không được xác định rõ ràng và có thể dẫn đến các cuộc thảo luận lớn xung quanh ý nghĩa chính xác của nó, bản thân tôi không biết định nghĩa chính xác và được chấp nhận rộng rãi của thuật ngữ này. Vì vậy, đối với tôi IoT là một khái niệm, một khái niệm xác định khả năng kết nối với một thiết bị nhúng từ xa thông qua internet từ một thiết bị nhúng khác hoặc từ điện thoại di động . Đơn giản vậy thôi.

Trong bối cảnh này, mục đích của kết nối không thành vấn đề, nếu bạn có thể kết nối một thiết bị trong văn phòng của mình với một thiết bị khác ở nhà hoặc nếu bạn có thể kết nối với một thiết bị tại nhà từ điện thoại di động của mình, tất cả điều này thông qua internet, sau đó chúng ta đang nói về các thiết bị IoT (các thiết bị nhúng, không phải điện thoại).

Vì vậy, khi đã đồng ý về ý nghĩa của IoT, bây giờ tôi sẽ mô tả những gì tôi đang cố gắng đạt được.

Những gì tôi đang cố gắng đạt được chính xác là những gì tôi mô tả về định nghĩa của tôi về IoT.

Tôi muốn có một hoặc một số thiết bị nhúng ở nhà được kết nối với bộ định tuyến internet của mình, bằng ethernet hoặc wifi và có thể kết nối với chúng từ xa với một thiết bị nhúng khác ở một vị trí từ xa (và từ xa tôi có nghĩa là không phải trên cùng một mạng) và cũng có thể kết nối với họ bằng ứng dụng giám sát trên điện thoại của tôi

Ví dụ: tôi có thể có một thiết bị nhúng đơn giản hoạt động như một công tắc bật / tắt được nối với công cụ mở cửa nhà để xe của tôi và một thiết bị nhúng khác hoạt động như một nút lớn màu đỏ trên bàn làm việc để tôi có thể nhấn nút màu đỏ trong bàn làm việc của mình và cửa nhà để xe mở ra.

Một ví dụ khác là có một thiết bị nhúng có khả năng ADC có thể theo dõi nhiệt độ của nhà tôi và gửi cho tôi một cảnh báo khi nó đạt đến ngưỡng. Thông báo có thể được nhận bằng một ứng dụng Android đơn giản hoặc bởi một thiết bị nhúng khác có màn hình nhỏ ngồi trên bàn làm việc của tôi.

Những ví dụ này có thể ngớ ngẩn nhưng chỉ để minh họa các tình huống có thể xảy ra và các trường hợp sử dụng cho những gì tôi đang cố gắng đạt được. Cuối cùng, ý tưởng là như nhau, kết nối một thiết bị nhúng với thiết bị khác thông qua internet.

Một điều cần làm rõ là việc trao đổi dữ liệu giữa các thiết bị này sẽ rất nhẹ, chỉ cần một vài byte mỗi lần, không cần phải có hàng trăm kilobyte để được hoán đổi giữa các thiết bị.

Ngoài ra, loại "thiết bị nhúng" mà tôi đang đề cập đến là những thiết bị đơn giản nhưng có khả năng dựa trên bộ vi điều khiển cortex-m4 100 MHz hoặc 200 MHz. Và đó là điều quan trọng để làm rõ bởi vì sẽ không có bất kỳ thư viện Linux hoặc phức tạp nào chạy trên các thiết bị đó. Cuối cùng, thật lãng phí tài nguyên và hoàn toàn không cần thiết để có bộ xử lý mạnh mẽ chạy Linux chỉ để bật và tắt bóng đèn . Trong mọi trường hợp, tôi dự định sử dụng BeagleBoard, Raspberry Pi hoặc bất kỳ bảng nào khác giống như các thiết bị nhúng của tôi. Chỉ cần Vi điều khiển vì không phức tạp hơn mức cần thiết.

Tôi không biết nhiều về nền tảng IoT và các loại giải pháp phức tạp ngoài kia. Khi tôi bắt đầu hành trình tìm hiểu cách kết nối một thiết bị nhúng với thiết bị khác thông qua internet, tôi tình cờ thấy một vài trang web có dịch vụ IoT.

Tôi biết rằng có một số dịch vụ đám mây IoT như:

Chỉ để một vài tên. Các vấn đề chính với đó là chi phí và sự phức tạp. Bạn phải trả tiền để có được các dịch vụ đó và bạn cũng phải học cách triển khai tất cả các dịch vụ họ có, trong trường hợp bạn cần tất cả, API của họ và có thể là một loạt các thứ khác mà tôi không cần thiết chỉ có thể trao đổi một số byte giữa các thiết bị. Tôi chỉ muốn một cái gì đó đơn giản hơn thế, một cái gì đó tôi có thể tự làm.

Bạn có thể nói rằng việc thực hiện "đám mây" của riêng tôi, nếu đó là việc tôi phải làm, không đơn giản và đôi khi tốt hơn là sử dụng các loại dịch vụ đó vì đơn giản nhưng có hai lý do chính tôi muốn biết triển khai các dịch vụ IoT của riêng tôi.

Lý do chính là tôi muốn tự làm điều đó. Tôi không muốn dựa vào bên thứ 3 để kết nối các thiết bị của mình với nhau và vì tôi sẽ phát triển mã và phần cứng cho các thiết bị của mình nên sẽ tốt hơn khi tạo phương tiện của riêng tôi để kết nối chúng dưới dạng thiết bị IoT.

Lý do thứ hai là để học cách làm điều đó. Khi biết tất cả những điều cần thiết tôi cần để đạt được điều này, tôi sẽ hiểu rõ hơn về thế giới IoT.

Ngoài ra, tôi muốn đề cập rằng tôi thành thạo C và tôi sử dụng Linux như hệ điều hành hàng ngày của tôi tại nơi làm việc cũng như ở nhà của tôi, vì vậy xin vui lòng tránh các công cụ windows vì nó vô dụng với tôi. Tôi không sợ bất cứ điều gì tôi phải thực hiện trong C cho các thiết bị nhúng của mình hoặc trên Linux để thực hiện bất cứ điều gì cần thiết để đạt được mục tiêu của mình.

Vì vậy, câu hỏi của tôi là, cần phải thực hiện những gì, và ở đâu, để có thể kết nối hai hoặc nhiều thiết bị nhúng với nhau với mục đích trao đổi dữ liệu giữa chúng?

Câu hỏi này Tôi có thể sử dụng gì để tạo IoT trên máy chủ của chúng tôi? có một cái gì đó tương tự nhưng bị đóng và không có bất kỳ câu trả lời nào, cũng giả sử một cơ sở hạ tầng đám mây đã có sẵn sẽ được sử dụng. Vì vậy, nó không giúp tôi.

Bài đăng khác Các dịch vụ IoT nào có sẵn để lưu trữ / gửi / xuất bản dữ liệu chung trong đám mây? có một câu hỏi tương tự nhưng OP đang hỏi rõ ràng về các dịch vụ IoT và tôi đang cố gắng tránh những dịch vụ đó.


2
Làm thế nào là một máy chủ "cơ sở hạ tầng đám mây hiện tại"? Một máy chủ chỉ là một máy tính. Một cơ sở hạ tầng đám mây là nhiều hơn nữa.
dùng253751

1
Cũng lưu ý rằng khi chúng tôi có IPv6 phổ biến, bạn có thể có các thiết bị IoT của mình nói chuyện trực tiếp với nhau, không cần máy chủ trung tâm / đám mây.
dùng253751

Câu trả lời:


10

Có thể tôi đã bỏ lỡ điểm của câu hỏi, nhưng tôi nghĩ rằng đây là một khởi đầu tốt tại một câu trả lời.

Bạn cần ba điều, tối thiểu.

  1. Một nút tính toán luôn bật để tổng hợp dữ liệu của bạn. Điều này không cần phải mạnh mẽ, Nó có thể là một quá trình chạy trên NAS của bạn, hoặc thậm chí (trên lý thuyết) trên bộ định tuyến của bạn. Để đơn giản, giả sử nó là Raspberry Pi. Điều này cũng có thể cung cấp bất kỳ giao thức vô tuyến ưa thích nào mà bạn quyết định hỗ trợ trong tương lai. Mặc dù về lý thuyết, bạn có thể chạy ngang hàng với tất cả các nút được hiển thị trên internet, việc chỉ định một người là chủ và dễ dàng hơn để xử lý việc đối chiếu và xuất bản dữ liệu (cho ứng dụng / người dùng). Tất nhiên, trung tâm cũng có thể là một nút, đặc biệt nếu bạn sử dụng các nút WiFi có sức mạnh vừa phải.
  2. Một ngăn xếp phần mềm phù hợp để cho phép các điểm cuối gửi dữ liệu của họ đến nút trung tâm của bạn. là thứ bạn cần ở đây, cộng với một hệ điều hành để chạy nó.
  3. DNS và chuyển tiếp cổng để tạo điều kiện truy cập vào máy chủ của bạn từ internet rộng hơn.

Vậy thì đừng quên bảo mật. Bằng cách này, bạn sẽ tiến gần hơn đến việc mở mọi thứ trên mạng gia đình để tấn công. Có lẽ chỉ một chút thôi, nhưng thật tốt khi nhận thức được rủi ro. Bạn có thể cố gắng và chăm sóc, nhưng hãy cho rằng bạn sẽ phạm sai lầm.


1
Tôi không chắc đây là câu trả lời bạn muốn. Nó sẽ giúp để tìm ra những gì bạn cần phải hỏi mặc dù.
Sean Houlihane

1
Cảm ơn đã giúp đỡ !! Vì vậy, ý của bạn ở điểm đầu tiên là tôi cần một số loại trung tâm hoặc cổng?
m4l490n

1
Có, bạn cần một cổng, hoặc nhiều hơn một. Nếu bạn chỉ có một nút, đây rõ ràng có thể là nút của bạn. Tôi chỉnh sửa câu trả lời của tôi một chút.
Sean Houlihane

11

Các thiết bị nhẹ và vài byte tốc độ ngày yêu cầu sử dụng MQTT , vì nó đã được đề cập. Các nút cảm biến của bạn có thể dựa trên các mô-đun ESP8266 độc lập, đủ mạnh để lưu trữ triển khai máy khách MQTT. Hoặc bạn có thể chỉ cần sử dụng các mô-đun này làm mô-đun Wi-Fi được điều khiển bằng lệnh AT cùng với các bộ vi điều khiển bên ngoài của bạn.

Bạn có thể thực hiện giải pháp MQTT của riêng mình trên các bộ vi điều khiển ít mạnh hơn như anh chàng này đã sử dụng Atmega48V với 4 kB flash .

Bạn có thể lưu trữ một nhà môi giới trên máy tính của mình, mặc dù vậy việc chạy Raspberry Pi sẽ hiệu quả hơn về mặt năng lượng. Một lần nữa nếu bạn thích mã hóa, bạn có thể triển khai nhà môi giới MQTT của riêng bạn. Cá nhân tôi thấy Mosquitto tuyệt vời cho mục đích này.

Bất lợi là tất cả các nút cảm biến của bạn sẽ cần kết nối TCP / IP.


Giải pháp thân thiện với pin có thể là sử dụng các nút cảm biến / bộ truyền động kích hoạt LoraWAN hoặc ZigBee và triển khai một cổng trên Raspberry / BeagleBone có thể lưu trữ một máy chủ web đơn giản có thể truy cập từ điện thoại hoặc các thiết bị khác của bạn.


Trong mọi trường hợp, tất cả đều xuất hiện để làm cho trung tâm, cổng hoặc máy chủ của bạn có thể truy cập bên ngoài mạng riêng của bạn. Có nhiều cách để làm điều này và mối quan tâm chính luôn là bảo mật. Đây là phần rủi ro nhất theo ý kiến ​​của tôi.

Các yêu cầu cơ bản được tóm tắt khá tốt bởi @Sean.


Theo câu trả lời của bạn và câu trả lời của @ Sean, tôi thấy rằng tôi cần một số loại trung tâm hoặc cổng. Điều này là hoàn toàn cần thiết? Ý tôi là, tôi không thể kết nối trực tiếp với bất kỳ nút nào bằng cách biết địa chỉ IP hoặc tên máy chủ? Không phải là tôi đang cố gắng tránh một trung tâm hoặc cổng, tôi chỉ muốn hiểu nếu nó là cần thiết và tại sao. Cảm ơn đã giúp đỡ !!
m4l490n

Bạn có thấy rằng Raspberry Pi vẫn ổn như một thiết bị "luôn bật" không? Tôi có một ổ cứng nhỏ cắm vào Pi mà tôi sử dụng làm bộ nhớ mạng nhưng ngần ngại để nó mọi lúc. Nó có ổn không nếu tôi làm như vậy? (FWIW Tôi có tản nhiệt nhỏ trên đó)
BruceWayne

1
@ m4l490n Sử dụng hub hoặc gateway giúp đơn giản hơn. Bằng cách này, bạn phải thiết lập chuyển tiếp cổng hoặc chỉ như vậy cho trung tâm hoặc cổng. Nếu bạn muốn kết nối trực tiếp với tất cả các thiết bị phía sau bộ định tuyến của mình thì bạn phải thiết lập chuyển tiếp cổng cho từng thiết bị chẳng hạn. Rủi ro nhiều hơn khi bạn mở ra nhiều cách hơn vào mạng riêng của mình và nhiều công việc hơn.
Bence Kaulics


10

Bạn đã đặt câu hỏi cho cả hai câu trả lời trước về sự cần thiết của bộ điều khiển / trung tâm. Xem xét rằng để làm cho mọi thứ xảy ra, bạn cần các quy tắc để tồn tại. Nếu bạn muốn nhấn một nút lớn màu đỏ để mở cửa nhà để xe, một số quy tắc phải buộc cảm biến (nút) vào hành động mong muốn (mở cửa). Có hai cách để thực hiện điều đó: bạn có thể đặt quy tắc trực tiếp vào nút hoặc bạn có thể đặt quy tắc trong một máy tính riêng biệt.

Hãy suy nghĩ nhiều hơn về giải pháp trực tiếp. Nếu bạn dạy nút về cửa nhà để xe, thì nút của bạn giữ các quy tắc nội bộ. Nút cần ID của cửa nhà để xe, vì vậy nếu bạn thay thế cửa nhà để xe, nút không hoạt động. Nếu nút nằm trên bàn của bạn và nhà bạn sử dụng mạng độc quyền, nút đó phải biết cả địa chỉ cổng nhà của bạn và địa chỉ của cửa. Nút cần biết giao thức cụ thể để báo hiệu cho cửa của bạn mở - tất cả các nhà sản xuất có thực hiện các nút tương thích biết về tất cả các tín hiệu cửa không? Nút không thể làm gì khác trừ khi bạn lập trình lại nó - bạn có lập trình flash cho chip của nút không, và lập trình viên đó có tương thích với bất kỳ thiết bị nào khác không? Nếu bạn muốn mở cửa nhà để xe, và 5 phút sau đóng lại, nút của bạn cần tất cả sự phức tạp của việc duy trì đồng hồ thời gian thực. Nút của bạn sẽ không biết trạng thái của cửa, làm cho khó biết bạn đang đóng cửa hay mở nó. Và làm thế nào để bạn sao lưu các quy tắc để nếu nút của bạn bị hỏng, nút thay thế của bạn có thể thực hiện công việc? Về mặt tích cực, nghe có vẻ rẻ tiền: bạn không cần một máy tính riêng.

Với một bộ điều khiển, mọi thứ là khác nhau. Tất cả các thông điệp từ tất cả các cảm biến được gửi đến bộ điều khiển. Mỗi cảm biến rất đơn giản: gửi tín hiệu đến bộ điều khiển. Sau đó, bộ điều khiển có thể áp dụng bất kỳ đầu vào nào cần thiết cho các quy tắc rất phức tạp: nó có thể kiểm tra cảm biến ánh nắng và không bật đèn ngoài trời trừ khi trời tối hoặc không chạy vòi phun nước nếu lượng mưa trung bình trong tháng cao hơn trung bình và nhiệt độ hiện tại là năm độ dưới trung bình. Bộ điều khiển có thể theo dõi trạng thái. Điều này có thể quan trọng nếu bạn muốn có nút "đóng cửa nhà để xe" nhưng không phải là nút "mở cửa nhà để xe" (khi tôi vắng nhà, tôi hiếm khi muốn mở cửa, nhưng tôi chắc chắn muốn đóng nó nếu nó là vô tình bỏ ngỏ.)

Bộ điều khiển có thể cung cấp nơi cho các trình điều khiển thiết bị biết cách nghe nút và các trình điều khiển khác biết cách nói chuyện với cửa. Bộ điều khiển có thể được nâng cấp nhiều hơn cho các thiết bị và loại thiết bị mới hơn là một con chip nhỏ được giấu bên trong một nút.

Bộ điều khiển cũng có thể có logic phức tạp hơn cho các tác vụ cơ sở hạ tầng như gửi tin nhắn bằng cách cung cấp các mức dịch vụ nhất định. Ví dụ: giao thức MQTT cho phép ba cấp độ khác nhau: cố gắng gửi tin nhắn một lần, gửi đi lặp lại cho đến khi nó được nhìn thấy ít nhất một lần hoặc gửi một lần và chỉ một lần.

Bộ điều khiển cung cấp một vị trí hợp lý về mặt kiến ​​trúc để hợp nhất tất cả các tin nhắn đến và từ một cổng giao tiếp, cho phép sử dụng giao diện bên ngoài. Điều này có nghĩa là nút của bạn và điện thoại của bạn có thể gửi tín hiệu và các quy tắc có thể chỉ ra rằng một trong hai được phép mở cửa nhà để xe. Cổng cũng có thể cung cấp bảo mật. Bạn không cần phải đặt nút và cửa nhà để xe của bạn trên internet; bạn có thể đặt cả hai trên các mạng riêng biệt và sử dụng cổng để truyền tín hiệu. Bộ điều khiển cũng cung cấp một điểm duy nhất để sao lưu tất cả các quy tắc cho hệ thống của bạn.

Nhược điểm của bộ điều khiển được thêm độ trễ và độ phức tạp thêm. Đáng ngạc nhiên, một bộ điều khiển không làm cho chi phí tăng đáng kể. Bạn có thể triển khai bộ điều khiển trên Raspberry Pi với chi phí thấp hơn một công tắc đèn điều khiển từ xa trung bình. Đừng giảm giá ý tưởng trên cơ sở chi phí một mình.


Chà, có vẻ như có HUB, hoặc bộ điều khiển, rất đáng mong đợi, đặc biệt là nếu tôi cần một chức năng dựa trên quy tắc trên tất cả các thiết bị IoT của tôi có thể cho phép tận dụng tối đa toàn bộ mạng.
m4l490n

Vì vậy, nếu tôi hiểu chính xác, tôi có thể có kết nối ngang hàng với điều kiện tôi không cần các quy tắc phức tạp hoặc thậm chí là một mạng lưới các thiết bị IoT phức tạp và điều này cũng sẽ cho rằng các thiết bị IoT sẽ không có khả năng tương tác với các nhãn hiệu khác và ví dụ một nút sẽ luôn được gắn vào cùng một dụng cụ mở cửa.
m4l490n

Mặt khác, nếu cần linh hoạt hơn và chức năng, thì tôi nên có HUB. Đúng không?
m4l490n

Vâng, đó là một bản tóm tắt chính xác. Hầu như tất cả mọi người cuối cùng đều cần một số loại trung tâm / bộ điều khiển. Có rất nhiều tùy chọn cho các trung tâm, cả thương mại và nguồn mở.
John Deters
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.