将您的智能家居设备嵌入到SmartThings生态系统中

智能家居平台使您能够集成设备并创建新的交互方案。平台效应是众所周知的:用户更有可能选择与其现有设备兼容的设备,而不是切换到任何新设备。因此,对于新的智能设备的开发人员来说,将其集成到一个已经完成的平台(专注于“铁”产品)上,而不是以云生态系统和个人帐户的形式开发自己的“自行车”,可能会更加有利可图。

让我们看看如何将自己的设备与Samsung SmartThings Smart Home平台集成。我们正在通过按钮开关和三色灯泡示例实现用于控制Smart Home设备的直接连接选项。 




为什么我们需要智能家居平台?


现在,小工具和智能设备已开始发售-数量不限。买带蓝牙控制的水壶或带WiFi的灯泡没问题。但这是否会使您的房屋“变得智能”?情况并不少见:仅通过制造商的移动应用程序来控制灯泡。如果您要合并至少几个不同的品牌,这会带来不便。因此,理想的平台是允许您以相同的方式管理不同制造商的设备的平台。

而且,我希望看到“溶解在日常生活中的计算机”,正如施乐PARC的Mark Weiser梦到的那样:不要通过特殊的应用程序进行控制,不要将注意力集中在自己身上。我希望与不会改变我们习惯的智能环境进行自然互动。如何从技术上实施?例如,在某些情况下,可能会涉及到房屋中的异构设备:您醒了-穿戴式设备检测到此问题,然后打开了水壶;您回家了-考虑到一天中的时间,关上窗帘,打开灯,并打开空调,并考虑到温度,门上的传感器固定了它。

如果使用Internet,场景将变得更加有用:例如,远程检查带熨斗的插座是否已关闭。或一个平庸的例子:您的智能家居查看了天气预报,并为您提供了最佳着装建议。或者,您可以通过智能扬声器添加语音控制。

智能家居平台专为所有这些而设计。考虑一下三星SmartThings平台可以做什么。

背景-什么是SmartThing?


SmartThings是一家初创公司。当他出现时,2012年在美国,“智能家居”的话题还没有成为炒作的重头戏,商店中仍然没有智能扬声器和各种小工具。一次事件发生后,这个想法传给了创业公司的创始人亚历克斯·霍金森(Alex Hawkinson):他家在科罗拉多州的房子遭受了苦难,因为临时中断后水管被严重冻结,破裂,整个地板都被水淹了。然后他认为,如果他知道房子里正在发生什么,就可以避免这个问题。 

在未找到统包解决方案后,霍金森及其同事制作了该设备的原型,并在Kickstarter上发起了一场运动。该活动取得了圆满成功,在30天内筹集了1,200,000美元,而不是计划的250,000美元。集线器集线器和套件中的一整套设备已开始销售:智能插座,开门传感器,运动传感器,状态传感器。并在2019年以三星SmartThings品牌命名,发布了该中心的第三版。


在Kickstarter上成功的关键是可以使用铁和软件的工作原型,以及对制造商社区的友好

这家初创公司的创建者已经离开了DIY环境,因此他们一直在为面向怪胎制造者的开放式API开发概念,他们可以在早期阶段扮演早期采用者的角色。在Kickstarter活动中,为Arduino和各种云模块提供了屏蔽,以无缝连接您的第三方设备。在互联网上,您可以找到许多与SmartThings兼容的家用设备示例,无论它是鸡舍的受控(解决严峻的生活任务-拯救掠食性貂皮中的鸡),还是通过Airbnb 远程为客人安装电子锁代码。


图片来源:https : //www.hackster.io/aaronpk/auto-airbnb-entry-745799

在2012-2013年间,SmartThings经历了几轮投资,获得了1,250万美元。最后,在2014年,她对三星产生了兴趣,并以2亿美元的价格被收购,这是进入物联网市场战略的一部分。
该平台的云功能仍然是免费的:作者(现为三星公司的员工)在不排除对大量流量收费的理论可能性的同时,强调:设备开发人员将永远有免费的选择。这是件好事,因为现在几乎所有云服务都提供货币化功能,而且甚至在试用期内,您通常都需要附上银行卡。SmartThings是一个完全免费的平台。

SmartThings架构




让我们从左到右移动模式。

设备


SmartThings设备-不仅可以是SmartThings套件中的设备,还可以是合作伙伴列表中的许多第三方合作伙伴。



如果该设备不在官方支持的列表中,则可以搜索该设备的设备处理程序(由开发人员社区提供)或编写您自己的设备。

连接方式


您可以通过以下方式将设备连接到平台:

  • 集线器连接-通过集线器集线器,与没有Internet连接但通过此类系统的传统无线网络(如ZigBee)连接的设备有关。 
  • 直接连接-通过Internet直接连接到云。SmartThings最近发布了便携式摄录机,灯泡和智能插座,它们无需集线器即可工作-通过WiFi。这是我们将在本指南中实现的选项。
  • 与云连接-通过第三方云为那些已经拥有自己的云生态系统的设备提供支持。这更加复杂,因此我们将不考虑这种选择。


通常,要连接家庭中的各种设备,应使用支持各种协议的特殊小型服务器“ Smart Home”。他-集线器,集线器,网关-名称不同。


集线器和一组设备。图片来源:IXBT

应用


SmartThings App是一款可以安装在主要移动操作系统上的应用程序,它具有以下帮助:将新设备添加到系统中,控制已添加的设备,设置自动化规则,通过推送和SMS接收通知等。 



抽象化


与其他许多智能家居平台一样,在SmartThings中,存在以下抽象:房间,场景,场景。 

设备被分组到房间中。您只需将此小工具附加到应用程序中的一个房间,然后将其命名为“厨房”,“浴室”,“走廊”。

仍然存在场景(场景)-这些是场景:“睡眠”,“休息”,“工作”,“观看电影”-每个场景都具有自己的一组设备状态。


应用程序屏幕上的场景和房间

最后是脚本(常规):if-then自动化规则。默认情况下,该程序具有四个方案:“我回来了”,“晚安”,“再见”,“早安”。您可以根据早晨的情况,移动的情况或开门的情况等配置脚本的激活。一个不平凡的例子:当我进入家中时-在我的家庭监控摄像机上阻止网络流量,以防止个人视频泄漏。或一个残酷的教育示例:在晚上11点将平板电脑从网络上强行断开,以防止自己上网,而不是健康睡眠。



此外,在电话上的SmartThings程序中,有一个有趣的机会-记住典型的动作。当您经常使用电话时,随着时间的流逝,它开始告诉您如何最好地基于最频繁启动的应用程序配置场景。

要将新设备添加到系统,提供了一个插件系统。开发人员可以为自己的设备编程插件-SmartThings应用程序内部的用户界面以及设备的逻辑。这本质上是一个Web应用程序。从开发人员的角度来看,该插件可以订阅来自设备的事件或通知,向他发送消息,监视与设备的连接状态。有关于插件生命周期的清晰文档

用户可以根据需要从“插件商店”下载它们,以免在手机上使应用程序膨胀。



但是现在我们不会做任何插件,但是会使其更简单:我们将仅使用标准平台工具来添加自制设备。

使您的设备与SmartThings兼容


您可能有一个问题:为什么?如果您是设备开发人员,则使其兼容的意义何在?

  • 主要优点是由于与整个生态系统的自动集成而增加了产品价值。
  • 通过功能测试后,您可以在产品包装盒上粘贴徽标:“与SmartThings兼容”,从而确保在SmartThings生态系统中无故障安装和配置设备。
  • 与任何平台一样,您的任务得到了简化:例如,您不再需要尝试开发用户界面-您可以使用标准按钮和SmartThings界面的其他元素。
  • 借助SmartThings社区(它既活跃又活跃),您可以获得PR和用户观众。

在下面的手册中,我们将连接我们自己的完全定制的设备。

建议做什么


SmartThings设备SDK(STDK)最近在2019年10月的三星开发者大会上发布。下面,我们提供此SDK 手册的翻译。不仅是翻译:我们做了同样的事情,并且用自己的双手重复了它,所以会有一些实用的注释超出了原始手册的范围。

最终结果将如视频所示:


RGB灯通过WiFi连接到SmartThings平台,您可以通过电话对其进行控制。灯本身以最便宜,最简单的方式实现-在超级流行的ESP8266芯片上。 Iron并不重要:它可以在任何微控制器上完成,因为SDK是用C编写的,在公共领域中布局,并且可以根据需要移植。 ESP不太可能投入生产(对于初学者来说,在Smart Home中使用其他接口比使用WiFi更方便),但它非常适合模型和插图。

产生的“智能灯泡”的功能如下:使用手机上的色轮进行RGB-LED控制。以及使用按钮关闭和打开它。
开发过程如图所示:


所示过程并不难,有些步骤可以逆转,我们将在手册中显示。


原始手册显示了WeMos D1 Mini板示例中的所有内容,这是一个基于ESP8266的调试板,可以插入面包板中。总的来说,它并没有什么棘手的问题,它只是中国ESP芯片的一个模块,在风扇中超级流行,为了方便而焊接到面包板尺寸的更大板上。因此,您可以在任何其他板上进行所有操作。


左:WeMos D1,右-Troyka WiFi Shield

柔软的


构建示例所需的内容:

  • 不低于18.04的Ubuntu Linux版本(您可以为Windows和MacOS构建示例,但是为了确定起见,我们选择了Linux)
  • Android 1.7.39, iOS 1.6.41-343. Play Market SmartThings, Samsung Account. Samsung, .
  • ESP8266 SDK. , , , :

    git clone https://github.com/espressif/ESP8266_RTOS_SDK.git

    SDK IDF_PATH:

    nano ~/.bashrc
    export IDF_PATH="~/git/ESP8266_RTOS_SDK:$IDF_PATH"
  • :

    sudo apt-get install gcc git wget make libncurses-dev flex bison gperf python python-pip python-setuptools python-serial python-cryptography python-future python-pyparsing python-pyelftools

    ():

    sudo mkdir /opt/Espressif
    sudo chown username /opt/Espressif/
    cd /opt/Espressif
    wget https://dl.espressif.com/dl/xtensa-lx106-elf-linux64-1.22.0-100-ge567ec7-5.2.0.tar.gz
    tar -xzf ./xtensa-lx106-elf-linux64-1.22.0-100-ge567ec7-5.2.0.tar.gz
    cd xtensa-lx106-elf
    export PATH="/opt/Espressif/xtensa-lx106-elf/bin:$PATH"

  • Smart Things Device SDK C – . github, , , .

    git clone https://github.com/SmartThingsCommunity/st-device-sdk-c-ref.git
    cd st-device-sdk-c-ref
    ./setup.sh esp8266



以下设备将作为示例:智能开关和智能灯泡。我们将从更简单,不需要任何外部外围设备的智能开关开始。

步骤1.注册您的设备。


工作始于SmartThings Developer Workspace,您需要在此处使用Samsung帐户登录。此帐户是免费创建的,创建该帐户不需要三星手机。 



在Developer Workspace中,将立即为您创建第一个项目。我们同意,之后,您需要从两个项目选项中选择“设备集成”。



该选择将提供用于集成设备的三个选项: 

  • SmartThings Cloud Connector-用于连接具有自己的云的设备,这些设备将连接到SmartThings云
  • SmartThings集线器不适用于ZigBee,Z-Wave,蓝牙设备,在撰写本文时,因为该集线器尚未在俄罗斯正式销售
  • 直接连接是直接连接的最简单选项,无需任何中介。 

选择第三个选项。例如,为简单起见,请考虑一个项目名称-SmartSwitch。



添加设备配置文件。就OOP而言,设备配置文件就是这样的“类”,而特定的设备就是“类实例”。

我们需要根据SmartThings Capability确定设备的功能特性。你可以阅读有关设备的一般的“能力” 的说明书中无。



我们用我们的值填写字段。例如,可以输入配置文件名称测试交换机配置文件,描述-任何文本,设备类型-交换机,供应商ID-任何文本。“设备类型”会影响设备的图标和用户界面。列表中的设备类型并不多(尽管有异国情调的设备,例如WineCellar-酒柜),因此,如果找不到自己的设备,不要气and,只需选择最接近的设备即可。在最后一个屏幕(仪表板控件)上,您无法进行任何更改。

创建配置文件后,不要忘记单击右上角的“将设备配置文件添加到项目”按钮。



  • 重要:所有直接连接的设备都需要运行状况检查。将其添加到设备配置文件。 
  • « » : Switch, Health Check.

现在添加身份验证配置文件(入职配置文件)。简而言之,您可以在此配置文件中自定义首次连接和登录时出现的屏幕。输入任何名称和任何三位数的数字。您现在可以跳过其他两个屏幕。在最后一个屏幕上,通过按设备上的按钮,选择确认选项-Button Confirm-。在本手册中,我们假设您有一个带有内置按钮的电路板。如果突然没有按钮(例如,您正在使用另一个ESP模块),则可以选择完全不进行身份验证的选项-称为Just Works,即“正常”而没有任何问题。

同样,与前面的示例类似,不要忘记单击“将设备添加到项目中”按钮。



剩下的就是单击Deploy按钮。之后,您可以在SmartThings应用程序中看到您的设备-但仅在开发人员模式下。如果未推送部署,并且他们说“请添加型号名称”(这意味着您没有指定设备入机ID),请向下滚动页面并进行选择-输入您选择的任何名称。



现在,您可以开始在手机上测试虚拟设备了。

视频中详细显示了整个第一步:


在云端注册设备


在开始使用实际硬件之前,您需要做其他事情。按下Deploy按钮后,屏幕看起来将有所不同:一个新的Device Identity字段将出现在此处。 


要在SmartThings云中对设备进行身份验证,您需要输入其序列号和公共密钥(带有ED25519签名方案)。这很容易。

本示例说明如何使用SDK中的工具创建一对ED25519键。作为程序的结果,您将tools / keygen / linux / output_ {serialNumber}文件夹中获得device_info.json文件。  Linux版本的keygen位于st-iot-device-sdk-c-reference / iot-core / tools / keygen / linuxst-device-sdk-c / tools / keygen / linux中



测试设备的序列号将以STDK + [MNID]格式+字母数字格式(8个字符)随机生成。您可以在“管理帐户”部分的开发人员资料中找到您的MNID。 





接下来,要生成字母数字部分,您需要输入MNID(4个字符)作为keygen参数。在下面的示例中,MNID为fJ * c。


    cd ~/Workspace/st-iot-device-sdk-c-ref/iot-core/tools/keygen
    ./stdk-keygen -m fJ*c
    Go Device Identity of Developer Workspace.
    
    Serial Number:
    ┌──────────┬──────────┐
    │ STDKfJ*c    │ abed**5c   │
    └──────────┴──────────┘
    
    Public Key:
    waGgyjWIvHhF1LU***FG2hx/4u***ADFHr/ry0j5jbk=

从密钥生成发行中复制“ abed ** 5c”,然后粘贴到“设备身份注册”部分的XXXXXXXX字段中。将出现一个窗口,要求您输入公共密钥。


从密钥生成发行中复制公共密钥(在此示例中为“ waGgyjWIvHhF1LU *** FG2hx / 4u *** ADFHr / ry0j5jbk =”),然后粘贴在“设备公共密钥”字段中。



步骤2.设备固件


讨论要下载到设备上的代码。
固件示例位于st-device-sdk-c-ref / apps / esp8266 /文件夹中我们将对st_switch示例感兴趣

  • 在开发人员办公室的设备概述窗口中下载onboarding_profile.json


  • 将下载的onboarding_profile.json文件复制到应用程序的目录中(在本例中为apps / esp8266 / st_switch / main)

    cd ~/Workspace/st-device-sdk-c-ref/apps/esp8266/st_switch/main/
    cp ~/Downloads/onboarding_profile.json .
    

    已有这样的文件的示例-只需将其替换为您的文件即可。
  • 同样,将特定于设备的信息所在tools / keygen / linux / output_ {serialNumber}文件夹device_info.json文件复制到同一文件夹中,以替换现有文件。

    cd ~/Workspace/st-device-sdk-c-ref/iot-core/tools/keygen/linux/
    cp output_{serialNumber}/device_info.json ~/Workspace/st-device-sdk-c-ref/apps/esp8266/st_switch/main/

    在此文件中,除了密钥和序列号外,还有“ firmwareVersion”行-可以用程序的版本替换它。
  • 现在汇编并刷新程序。

    cd ~/Workspace/st-device-sdk-c-ref
    ./build.sh esp8266 st_switch
    ./build.sh esp8266 st_switch flash
    ./build.sh esp8266 st_switch monitor

    或相同,但更短:

    cd ~/Workspace/st-device-sdk-c-ref
    ./build.sh esp8266 st_switch flash monitor


如果无法以任何方式刷新程序,很可能是您忘记了将ESP8266开发板置于编程模式。这通常是通过按板上的按钮来完成的。例如,可以通过按住PROG按钮,然后按下并释放RESET按钮来转换Wi-Fi Troyka模块。

下载固件后,请不要忘记重启板卡。

步骤3.通过电话进行连接和控制


在手机上的SmartThings应用中打开开发者模式。这样做的方法在官方网站上,但用文字更容易解释:通过“齿轮”输入设置,然后按“ SmartThings Details”按钮20秒钟。下方显示“开发人员模式”菜单。



我们的设备应该在SmartThings应用程序的列表中可见:启动该应用程序,单击加号按钮并添加设备。滚动到供应商列表的末尾,然后看到“我的测试设备”图标。单击它并选择您的设备。



此外:如果您已经激活了开发人员模式并打开了设备,则将有一个弹出菜单可添加该特定设备!

连接开始


从SmartThings应用程序管理设备。 

首先,该设备显示为访问点,因为它尚不知道WiFi密码。在连接过程中,您可以指定设备应连接的网络。如果您有一个隐藏的接入点,那么ESP将无法与其连接,因此请选择一个开放点。

结果将是这样的:



在此示例中(st-switch),您可以通过按板上的按钮来控制板上的内置LED。如您所见,在本示例中,您甚至不需要任何其他外围设备,只需ESP8266板本身。

您也可以使用移动应用程序中控制面板上的按钮来打开/关闭设备:



当然,如果您按下物理按钮,应用程序中灯泡的状态也会更新。

智能灯示例


在完成Smart Switch示例之后,让我们尝试使事情复杂一些。将有一个RGB LED,我们将打开/关闭一个外部按钮,并通过应用程序选择一种颜色。


连接方案将很简单:

电路图也不会受到伤害:



如果您查看源代码(位于:st-device-sdk-c-ref / apps / esp8266 / st_lamp),则存在以下连接: 您可以根据以下内容重新分配结论这是您拥有的董事会的模型。请注意,开发板上有一个符号系统(D1,D2 ...),而代码中还有另一个符号系统,但是仅通过查看您的开发板文档即可轻松确定。

#define GPIO_OUTPUT_NOTIFICATION_LED 2
#define GPIO_INPUT_BUTTON 5
#define GPIO_OUTPUT_COLORLED_R 16
#define GPIO_OUTPUT_COLORLED_G 14
#define GPIO_OUTPUT_COLORLED_B 12
#define GPIO_OUTPUT_COLORLED_0 13 




软件部分


根据软件部分,我们将更改几个步骤:

  • 添加功能时,必须指定以下各项:开关,开关级别,颜色控制,运行状况检查。设备的类型将是-轻。
  • 我们从同一文件夹中获取一个带有示例的固件示例,称为st_lamp。 

应用程序中的界面将



如下所示:它的工作方式-再次是GIF:



结论


因此,您有一个现成的示例。您会看到大多数代码已经为您完成-与连接,身份验证,设备接口有关的所有内容。SmartThings示例很有价值,因为它不与任何硬件设备绑定,并且如果您正在开发智能家居,则可以观察和评估2k20需要什么平台功能。


Tatyana Volkova-三星IT学院物联网跟踪课程的作者,三星研究中心的企业社会责任计划专家

All Articles