使用Things框架构建你自己的网络事物

去年,Mozilla启动了Things项目,帮助开发者以安全、可靠和互操作的方式将物理“事物”连接到网络。

A diagram of the Things Framework

2月份,我们宣布Things网关的0.3版本发布,该版本将现有的智能家居设备桥接到万维网事物。今天,我们很高兴地告诉大家关于Things框架的开始,该框架旨在帮助开发者构建他们自己的“原生网络事物”,以及Things网关的0.4版本发布,该版本现在支持更广泛的智能家居设备。

Things框架

Things框架是一组可重用的软件组件,可帮助您构建自己的网络事物,这些事物直接公开Web事物API。这意味着它们可以被万维网事物的客户端或网关发现,这些客户端或网关可以通过网络监控和控制它们。

An illustration of the Things Framework by Mozilla

一个网络事物具有Web事物描述,该描述描述了设备的功能,并公开了Web事物REST API和/或WebSocket API,以便可以对其进行监控和控制。事物描述提供了有关设备及其可用属性操作事件的可读机器元数据。Web事物API允许客户端读取和写入其属性,请求操作并订阅其事件。

您可以立即开始使用我们的Java网络事物库Android事物转换为网络事物,或者如果您更喜欢使用PythonNodeJS构建事物,我们也可以满足您的需求。我们有一些关于如何使用支持WiFi的微控制器(如ESP8266)构建网络事物的早期示例,以及用于资源受限芯片组的串行网关适配器。我们正在开发的早期阶段发布这些库,以便您可以向我们提供反馈,并帮助我们帮助您构建更好的网络事物。

在接下来的几天里,我们将发布关于如何使用每个新的网络事物库的博文,以帮助您动手构建自己的设备。

这些仍然是正在标准化过程中的实验性技术在W3C,但我们希望我们早期的开源实现将帮助开发者尝试万维网事物并帮助我们改进它。

添加Web事物

使用Things网关的0.4版本,您现在可以将原生网络事物添加到您的网关,以便与所有其他智能家居设备一起控制它们。原生网络事物的优势在于,它们不需要自定义网关适配器,因为它们使用现有的Web技术遵循通用标准。

The interface when "scanning for new devices" to add a Web Thing

网络事物可以使用mDNS或蓝牙信标广播其Web地址,以便网关可以发现它们,或者可以通过其URL手动添加它们。只需单击网关“事物”屏幕中的“+”按钮,即可允许其扫描设备,或使用“通过URL添加…”链接手动复制粘贴Web事物URL。

新的附加组件

0.4网关版本还提供更多附加组件适配器,这些适配器增加了对Apple HomeKit等智能家居协议以及LIFX和Broadlink设备的支持。

New add-ons for the Things Gateway

您还会注意到,与网关本身一样,附加组件现在会自动更新,因此您将始终拥有最新版本。

其他更改

0.4版本中还有许多其他更改。您现在可以根据数值和颜色属性创建规则,我们添加了对色温灯泡的支持,并且有一个新的附加组件配置UI。有新的开发者功能,如Windows支持、查看和下载日志以及新的本地令牌服务。本地令牌服务为希望使用OAuth访问网关的Web事物API的人员提供简单的入门体验。

您可以查看0.4版本的完整更改日志此处

我们要感谢我们不断壮大的Mozilla IoT社区贡献了一些新的附加组件,为我们提供反馈,报告错误,编写文档,并普遍帮助我们推动Things项目向前发展。没有你们,我们做不到!

您可以在iot.mozilla.org/things上了解更多关于Things框架的信息,并随时前往Discourse提出任何问题和评论。

关于 Ben Francis

前Mozilla软件工程师。W3C网络应用和万维网事物特邀专家。

更多Ben Francis的文章…


12条评论

  1. Attila Csibi

    你好,

    这个Things框架太棒了! :)
    我想知道是否可以在同一个树莓派上运行一个或多个Web事物以及网关,并通过名称或/和端口来区分它们。

    提前感谢!

    2018年4月17日 02:54

    1. Ben Francis

      是的,这在技术上是可行的,只要您在与网关不同的端口上运行Web事物。

      2018年4月17日 07:50

  2. Randy Constan

    一位朋友向我指出了这个链接,作为我长期以来一直想研究的一个可能线索,即纯粹基于浏览器的控制面板,用于我计划开发的各种物联网设备。20多年前,我曾创建了一个演示,展示了如何使用简单的网页进行远程控制。当时,您所能做的就是移动或隐藏各种屏幕对象(每个浏览器的方法都不同),并且在不重新加载页面情况下更新屏幕指标的唯一方法是使用字段。为了连接到服务器,使用了带有“共享字节数组”的Java Applet,因此形成了一个粗略的演示网页,并且确实允许用户控制和监控设备。

    因此,如今,在CSS和Ajax之间,似乎做类似的事情会容易得多,并且安全性选项也更容易。当然,优点是,与其创建依赖于操作系统和iOS的应用程序,以及处理Apple和Android对其应用程序商店和Google Play商店的任何规则,不如创建一个与大量浏览器和设备兼容的基于网页的控制面板,无需下载“应用程序”。

    因此,我一直希望探索这种方法来用于我自己的物联网项目。但是,由于我厌倦了不得不发明或重新发明每一个轮子,我一直试图说服我认识的一些Web编码大师考虑制作一个真正的Web控制面板“构建集”。而正是其中一位朋友向我指出了这个页面。

    但我来晚了,我不知道您的系统是打算帮助人们构建特定设备的应用程序,还是像我讨论的那样基于浏览器的控制页面。请告诉我我们是否在同一页上,或者我是否在错误的方向上思考。:-)

    2018年4月17日 14:02

    1. Ben Francis

      你好,Randy,

      这正是我们希望实现的用例。我们的Things网关(https://hacks.mozilla.ac.cn/2018/02/how-to-build-your-own-private-smart-home-with-a-raspberry-pi-and-mozillas-things-gateway/)可以为各种现成的现成物联网设备以及使用Things框架创建的“原生网络事物”提供Web界面。

      如果您想构建自己的仪表板Web界面,则网关通过Web事物API(https://iot.mozilla.org/wot/)公开所有设备,该API可通过OAuth供第三方Web应用程序使用。

      2018年4月18日 07:02

      1. Randy Constan

        谢谢,Ben。听起来很有趣。我最终会要求将对话转移到电子邮件中,但我相信其他人可以从这次讨论中受益。

        回到我的项目。如果您看过Arduino等各种微控制器论坛,您可能听说过功能非常强大且价格低廉的esp8266 wifi模块。您可以将自己的代码放入其中,或通过另一个CPU板控制它。我还没有完全探索它,所以如果我的讨论暴露出一些思维盲点,请原谅我:-)

        作为电子和代码开发者,似乎这样的模块可以通过您的家庭宽带服务将任意数量的小型“部件”或“电器”类型的产品连接到互联网。使用付费或免费的DNS服务以及路由器中的端口转发调整,您甚至不需要任何特殊的技巧来发现您的设备,因为它至少可以成为一个远程连接的服务器。

        但是,这里对我来说有点模糊。虽然我相信小小的esp8266 wifi可以保存和处理一个小的网页,但我认为启用屏幕对象和服务器之间方便的双向通信所需的Ajax等工具,可能需要比esp8266 wifi可以舒适容纳的更多的开销。即使它可以,它也可能不存在执行此操作的库,这当然意味着需要花费时间来发明更多的轮子。

        我将在其他一些论坛上探索esp8266可用的内容。但最重要的是,如果这是一个问题,显而易见(也许更容易)的解决方案是在也连接到同一家庭路由器的PC上运行Web服务器。从那里,PC可以在自身和MCU之间维护TCP/IP链接,因此它只需要处理简单的监管监控和控制命令。

        但您看到了我在这里有一些理解上的差距,关于像esp8266模块这样的小型板在处理Ajax或Json请求方面可用的CPU马力(和库)有多少。就像我说的,我将在一些论坛上对此进行更多调查,但我认为您会同意,在本地PC上实现Web服务器,并让它在单独的链接上使用更简单的自制命令集与MCU通信要容易得多,不是吗?

        顺便说一句,因为我做了很多底层电子产品,包括PCB布局和构建。如今我主要为音乐家做电子产品,但我工作了20多年,为电力公用事业公司进行SCADA类型的编程和电子设计,并且带来了丰富的经验(虽然其中一些是老式的经验)。因此,我们将来可能在某些物联网软件和硬件组合产品上进行合作。我的网站在我的电子邮件地址中,如果您想在那里与我联系,也可以。

        2018年4月20日 11:07

        1. Ben Francis

          你好,Randy,

          您描述的基本原理是Things框架(https://iot.mozilla.org/things/)和Things网关(https://iot.mozilla.org/gateway/)如何组合在一起。

          Things框架为支持IP的设备提供了库,例如您提到的芯片组的webthing-esp8266(https://github.com/mozilla-iot/webthing-esp8266),以帮助它们公开简单的标准HTTP或WebSocket API(WebSocket实际上与原始TCP套接字非常相似)。然后,网关(您可以使用始终开启的无头树莓派而不是PC)执行大部分繁重工作,以托管HTML5 Web界面并提供一系列其他功能,如规则引擎和语音控制。

          对于资源更受限的MCU,可以使用一系列非IP低功耗无线协议,包括ZigBee、Z-Wave和蓝牙,网关为此提供适配器。或者,您只需将MCU直接插入网关上的串行端口并使用串行适配器。

          2018年4月20日 11:27

          1. Randy Constan

            我非常了解用于简单非TCP通信的许多“无线选项”。但让我们专注于那些确实支持TCP的,比如ESP8266。请记住我的目标……能够设计可以远程控制和监控的电子设备,使用现代浏览器,而不是依赖于平台的“应用程序”。

            如果我正确理解您上一条消息,尽管基于ESP的产品在技术上可能能够连接到互联网,但它可能需要更强大的Web服务器的帮助。我理解正确吗?如果是这样,这就是您提到树莓派而不是PC的原因吗?

            虽然我熟悉树莓派,但如果可能,我想避免在最终产品中使用它。除了增加成本外,可以肯定的是,任何已经拥有WiFi路由器的家庭也将拥有PC,并且PC上的免费Web服务器比比皆是。

            所以为了清楚起见,如果ESP板本身没有直接充当基于浏览器的控制面板的Web服务器所需的资源,您是否有基于PC的解决方案?

            2018年4月23日 09:41

          2. Ben Francis

            ESP8266本身可以通过家庭路由器连接到互联网,但您可能希望使用TLS,添加一些身份验证并配置DNS和防火墙以使其可以通过网络地址访问。Things Gateway可以通过充当面向互联网的代理来提供所有这些功能。

            您可以在PC上自己构建和运行网关软件(请参阅README上的说明https://github.com/mozilla-iot/gateway/blob/master/README.md),但我不会推荐将其用于最终产品,因为PC需要24/7开机并连接,并且您需要非常小心安全性。

            专用网关具有一些优势。除了我们目前正在开发的Raspberry Pi之外,我们还正在开发一个OpenWrt版本,以便在各种现有的路由器类硬件上运行,因此将来您的物联网网关和家庭路由器可以是同一个设备。

            我们还致力于改进Things Framework,以向事物本身添加身份验证等功能,以便它们可以直接连接到互联网,而无需WoT网关。

            2018年4月23日 10:03

  3. Amber

    我想构建我自己的仪表板,但这很复杂,请帮忙。

    2018年4月19日 07:30

  4. Kingsley Uchunor

    听起来很有趣!这将为物联网设备的远程网络控制打开大门。想象一下,您只需使用手机或桌面通过网络就可以从办公室或任何地方控制您的物联网设备。

    显然,这是一个可持续的发展。

    点赞!

    2018年4月30日 10:04

  5. L3d

    这是否也支持蓝牙,因为我有一个诺基亚150的非智能手机。

    2018年5月11日 01:13

  6. Ravinder

    如何开始使用Web Things?

    2018年5月11日 03:38

本文评论已关闭。