我需要为物联网设备创建自己的个人云吗?


18

这是我已经思考了一段时间的主题,尤其是因为“ IoT”概念最近一直在浮动。

我将从说“ IoT”的意思开始。我知道物联网这个词可能有不同的含义,有时会被滥用。它可能是一个没有明确定义的术语,并且可能引起围绕其确切含义的广泛讨论,我自己也不知道该术语的正确和广泛接受的定义。因此,对我来说,物联网是一个概念,它定义了从另一个嵌入式设备或从手机通过Internet远程连接到嵌入式设备的能力。就如此容易。

在这种情况下,连接的目的无关紧要,如果您可以将办公室中的一台设备与家里的另一台设备连接在一起,或者可以通过手机通过电话连接到家里的一台设备,那么我们在谈论的是物联网设备(嵌入式设备,而不是电话)。

因此,在就物联网的含义达成共识之后,现在我将描述我要实现的目标。

我想要实现的正是我在IoT定义中描述的内容。

我想在家中通过以太网或wifi将一个或几个嵌入式设备连接到我的Internet路由器,并能够与远程位置上的另一个嵌入式设备远程连接到它们(而远程是指不在同一网络上)也许还可以通过我手机上的监控应用程序连接到他们

例如,我可能有一个简单的嵌入式设备,用作挂在车库门开启器上的开/关开关,而另一个嵌入式设备则在工作中用作办公桌上的红色大按钮,这样我就可以按下办公桌上的红色按钮车库门打开。

另一个示例是拥有一个具有ADC功能的嵌入式设备,该设备可以监视我的房屋的温度,并在达到阈值时向我发送警报。通知可以通过一个简单的android应用程序接收,也可以通过另一个有小屏幕的嵌入式设备接收,该设备坐在我工作的桌子上。

这些示例可能很愚蠢,但只是为了说明我尝试实现的可能方案和用例。最后,想法是一样的,通过互联网将一个嵌入式设备连接到另一个嵌入式设备。

需要澄清的另一件事是,这些设备之间的数据交换非常轻巧,每次只需几个字节,而无需在设备之间交换数百千字节。

此外,我所指的“嵌入式设备”是基于100MHz或200MHz cortex-m4微控制器的简单但功能强大的设备。这一点很重要,因为在这些设备上不会运行任何Linux或复杂的库。最后,这是浪费资源,完全没有必要拥有运行Linux的强大处理器来打开和关闭灯泡。无论如何,我计划使用BeagleBoard,Raspberry Pi或类似的任何其他板作为嵌入式设备。只是微控制器,因为没有比这更多的复杂性了。

我对物联网平台以及那些复杂的解决方案了解不多。当我开始寻找通过互联网将一个嵌入式设备与另一个嵌入式设备连接的方法时,我偶然发现了两个具有IoT服务的站点。

我知道有一些物联网云服务,例如:

仅举几个。这些方面的主要问题是成本和复杂性。您必须付费才能获得这些服务,还必须学习如何实现它们拥有的所有服务,以防万一您需要它们,以及它们的API以及可能对我来说似乎不是必需的其他一些东西只能在设备之间交换一些字节。我只想要比这更简单的东西,我可以自己做。

您可能会说,实现我自己的“云”(如果这是我必须要做的)并不简单,有时为了简单起见,最好使用这些类型的服务,但是有两个主要原因我想知道如何实施我自己的物联网服务。

主要原因是我想自己做。我不想依靠第三方来将我的设备彼此连接,并且由于我将为我的设备开发代码和硬件,所以最好也创建自己的方法将它们作为物联网设备连接。

第二个原因是学习如何做。通过了解实现此目标所需的所有必要条件,我将对物联网世界有了更好的了解。

另外,我想提一下,我精通C语言,在工作中和在家中都将Linux用作日常操作系统,因此请避免使用Windows,因为这对我没有用。我不担心必须为嵌入式设备或Linux在C中实现任何东西来实现我的目标所需的任何东西。

因此,我的问题是,为了实现两个或更多嵌入式设备之间的数据交换,必须实现什么功能以及在何处实现互连?

这个问题我可以用什么在我们自己的服务器上创建物联网?具有相似但封闭且没有任何答案的条件,还假定要使用现有的云基础架构。所以这对我没有帮助。

一篇文章哪些IoT服务可用于在云中存储/发送/发布通用数据?有一个类似的问题,但是OP明确要求提供IoT服务,而我试图避免这种情况。


2
服务器如何成为“现有的云基础架构”?服务器只是一台计算机。云基础架构还有很多。
user253751 '17

1
还要注意,当我们拥有无处不在的IPv6时,您也许可以让您的IoT设备直接相互通信,而无需中央服务器/云。
user253751 '17

Answers:


10

也许我错过了问题的重点,但是我认为这是一个很好的答案。

您至少需要三件事。

  1. 永远在线的计算节点,以聚合您的数据。这并不需要强大,它可以是一个在NAS上运行的进程,或者甚至(理论上)在路由器上运行的进程。为了简单起见,假设它是Raspberry Pi。这也可以提供您将来决定支持的任何高级无线电协议。尽管从理论上讲,您可以在所有暴露于Internet的节点上进行对等运行,但是更容易提名一个节点为主节点,并由它来处理数据整理和发布(到应用程序/用户)。当然,集线器也可以是节点,特别是如果您使用功能中等的WiFi节点。
  2. 一个合适的软件堆栈,允许端点将其数据提交到您的中心节点。是您在这里需要的东西,再加上一个可以运行它的操作系统。
  3. DNS和端口转发可简化从更广泛的Internet访问服务器的过程。

然后,不要忘记安全性。这样,您将更接近打开家庭网络上的所有内容进行攻击。也许只有一点点,但是意识到风险是一件好事。您可以尝试并保重,但要假设您会犯错误。


1
我不确定这是否是您想要的答案。它应该有助于解决您需要问的问题。
肖恩·胡利哈内

1
感谢您的帮助!那么,您的意思是我需要某种集线器或网关?
m4l490n

1
是的,您需要一个或多个网关,如果只有一个节点,则显然可能是您的节点。我对答案做了一点编辑。
肖恩·霍利哈内

11

轻量级设备和几个字节的日期速率要求使用MQTT,如前所述。您的传感器节点可能基于独立的ESP8266模块,这些模块的功能足以托管MQTT客户端实现。或者,您可以将这些模块与外部微控制器一起用作AT命令控制的Wi-Fi模块。

您可以在功能不那么强大的微控制器上实现自己的MQTT解决方案,例如使用Atmega48V和4 kB闪存的家伙

您可以在计算机上托管一个代理,尽管运行Raspberry Pi可能更省电。同样,如果您喜欢编码,则可以实现自己的MQTT代理。我个人认为Mosquitto非常适合此目的。

缺点是所有传感器节点都需要TCP / IP连接。


电池友好型解决方案可能是使用启用LoraWANZigBee的传感器/执行器节点,并在Raspberry / BeagleBone上实现网关,该网关也可以托管简单的Web服务器,也可以从您的手机或其他设备进行访问。


在每种情况下,所有这些事情都会使您的集线器,网关或服务器在专用网络之外访问。有更多的方法可以做到这一点,并且主要关注的始终是安全性。我认为这是最危险的部分。

@Sean很好地总结了基本要求。


根据您的回答和@Sean的回答,我看到我需要某种集线器或网关。这是绝对必要的吗?我的意思是,我不能仅通过知道IP地址或主机名直接连接到任何节点吗?不是我要避免使用集线器或网关,而是想了解是否有必要以及为什么。感谢您的帮助!
m4l490n

您是否发现Raspberry Pi可以作为“始终在线”设备使用?我的Pi上插入了一个小硬盘,用作网络存储,但始终不停地打开它。如果可以的话可以吗?(FWIW我上面有小的散热器)
BruceWayne

1
@ m4l490n使用集线器或网关使其更简单。这样,您必须为集线器或网关设置端口转发等。如果要直接连接到路由器后面的所有设备,则必须为每个设备设置端口转发。当您打开进入专用网络的更多方式并进行更多工作时,风险会更大。
Bence Kaulics '17


10

您已经问过关于控制器/集线器需求的两个先前答案。考虑到要使事情发生,您需要规则。如果要按红色大按钮打开车库门,则必须遵循一些规则将传感器(按钮)绑定到所需的动作(打开门)。有两种方法可以实现此目的:您可以将规则直接放在按钮中,也可以将规则放在单独的计算机中。

让我们更多地考虑直接解决方案。如果您向按钮讲授有关车库门的信息,那么您的按钮将内部保存规则。该按钮需要车库门的ID,因此,如果您更换车库门,该按钮将不起作用。如果按钮在您的办公桌上,并且您的房屋使用专有网络,则该按钮必须既要知道家庭网关的地址,也要知道门的地址。该按钮需要知道特定的协议来向您的门打开发出信号-所有制造商是否制造出兼容的按钮来知道所有门的信号?除非您对其重新编程,否则该按钮将无法执行其他任何操作-您是否有用于该按钮的芯片的Flash编程器,并且该编程器是否与任何其他设备兼容?如果您想打开车库门,然后在5分钟后关闭,您的按钮需要维护实时时钟的所有复杂性。您的按钮不会知道门的状态,因此很难知道您是要关闭门还是打开门。以及如何备份规则,以便如果按钮损坏,则替换按钮可以完成任务?从好的方面来说,这听起来很便宜:您不需要单独的计算机。

使用控制器,情况就不同了。来自所有传感器的所有消息均传递到控制器。每个传感器都很简单:将信号发送到控制器。然后,控制器可以将所需的任何输入应用于非常复杂的规则:它可以检查阳光传感器并且除非天黑否则不打开室外灯,或者如果该月的平均降雨量高于平均水平并且当前温度不运行洒水器比平均水平低5度。控制器可以跟踪状态。如果您需要“关闭车库门”按钮而不是“打开车库门”按钮,这可能很重要(当我出门在外时,我很少要打开门,但如果确实要关闭,我肯定要关闭它意外打开。)

控制器可以为知道如何听按钮的设备驱动程序和知道如何对门说话的其他驱动程序提供场所。与塞在按钮内的小芯片相比,该控制器可能更易于升级为新设备和设备类型。

对于基础结构任务,例如通过提供特定级别的服务来传递消息,控制器也可以具有更复杂的逻辑。例如,MQTT协议允许三个不同的级别:尝试传递一次消息,重复传递直到至少看到一次为止,或者传递一次也只有一次。

控制器提供了一个结构上合理的逻辑位置,以整合往返于通信网关的所有消息,从而允许使用外部接口。这意味着您的按钮和手机都可以发送信号,并且规则可以确定允许任何一个打开车库门。网关还可以提供安全性。您不必将按钮和车库门放在互联网上;您可以将它们都放置在专用的隔离网络上,并使用网关承载信号。控制器还提供了一个单点来备份系统的所有规则。

控制器的缺点是增加了延迟和额外的复杂性。令人惊讶的是,控制器并没有使成本明显上升。您可以在Raspberry Pi上实现一个控制器,而成本却比一个普通的远程可控电灯便宜。不要仅凭成本打折这个想法。


好吧,似乎非常需要HUB或控制器,尤其是当我需要在我的所有IoT设备上使用基于规则的功能以充分利用整个网络时。
m4l490n

因此,如果我理解正确,只要我不需要复杂的规则甚至不需要复杂的IoT设备网络,我就可以建立对等连接,并且这也将假定IoT设备不会与其他品牌,例如一个按钮将始终与同一个开门器捆绑在一起。
m4l490n

否则,如果需要更多的灵活性和功能性,那么我应该拥有一个HUB。那是对的吗?
m4l490n

是的,那是一个准确的总结。几乎每个人最终都需要某种集线器/控制器。商业中心和开源中心都有很多选择。
John Deters
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.