一. 内容
将Smart Hub 集成到OpenHAB中,作为一个binding,即将Smart Hub作为一个bridge,可以通过Smart Hub连接不同的设备,可以通过OpenHAB控制Smartthings设备。
参考连接
基于github上的开源实现进行的实验:https://github.com/BobRak/OpenHAB-Smartthings
二. 环境+设备
- Linux 16.04
- OpenHAB 2
- Smartthings App
- Smart Hub
- Outlet:三星smartthings的智能插座
- Motion Sensor
三. 实验步骤
1. 连接设置Smartthings环境
下载Smartthings App,并使用帐号进行登录,添加Smart Hub,Outlet和Motion Sensor
按照设备和App提示连接即可,操作简单。
2.在Smartthings上安装部署OpenHAB
(1) 安装OpenHabAppV2
在OpenHAB-Smartthings /target/smartthings/SmartApps目录中找到OpenHabAppV2.groovy。
- 登录Smartthings developers tools
- 选择My Smart Apps
- 点击右上角的 + New SmartApp
- 选择From Code
- 将OpenHabAppV2.groovy的代码粘贴进去
- 点击publish—For Me
- SmartApp现在已准备就绪
(2)安装OpenHabDeviceHandler
在/target/smartthings/DeviceHandlers目录中找到OpenHabDeviceHandler.groovy。
- 登录Smartthings developers tools
- 选择My Device Handlers
- 点击右上角的+ Create New Device Handler
- 选择From Code
- 将OpenHabDeviceHandler.groovy的代码粘贴进去
- 点击publish—For Me
- 设备处理程序已准备就绪
(3)创建设备
- 登录Smartthings developers tools
- 选择My Device
- 点击右上角附近的+new Device
在表格中输入以下数据:
Name: OpenHabDevice
Label: OpenHabDevice
Device Network ID: 这是OpenHAB服务器的MAC地址,不能包括空格或标点符号
Type: OpenHabDeviceHandler (这应该是列表的最后一个)
Location: (从下拉菜单中选择)
Hub: (从下拉菜单中选择上述Smartthings环境中部署的Hub)点击Creat按钮
- 在Preferences选项中输入:
ip:你的openhab服务器的IP地址
Mac:与Device Network ID相同,但是包含“:”
port : 8080(你的openhab服务器应用程序的端口)
(4)Smartthings App中配置
- 在手机上启动Smartthings App
- 从底部菜单中选择Automation
- 从顶部菜单中选择SmartApps
- 点击+Add a SmartApp
- 滚动到底部并选择My Apps
- 选择OpenHabAppV2
- 在Input选项中选择想要和OpenHAB交互的设备,这里选择的Motion Sensor和Outlet
- 在Device选项的Notify this virtual device中选择OpenHabDevice
- 最后点击右上角的Save
3.在OpenHAB中添加Smartthings Binding,并部署
(1)添加Smartthings Binding
找到OpenHAB-Smartthings的/target文件夹中的org.openhab.binding.smartthings-2.1.0-SNAPSHOT.jar文件,将其复制到OpenHAB中的addons目录,在我的环境下addons目录具体在:/usr/share/openhab2/addons;
重启OpenHAB,在Paper UI界面Configuration—Bindings中可以看到添加进去的Smartthings Binding。
(2)配置thing文件
打开openhab服务器上的/etc/openhab2/things文件夹,创建smartthing.things文件。
网桥配置
首先配置Smart Hub,其作为一个设备连接到OpenHAB的网桥,基本格式如下:
Bridge smartthings:smartthings:Home [ smartthingsIp="192.168.123.209", smartthingsPort=39500 ]
其中:
smartthings:smartthings:Home表示这是一个名字为Home的Smartthing Hub,smartthings:smartthings:是固定的,Home为你在Smartthings中设置的Smart Hub的名称,我的这里命名为Home。
smartthingsIp是Smartthings Hub的IP地址。
smartthingsPort是Smartthings Hub监听的端口。39500是指定我的Smartthings的端口。
设备配置
每个设备必须指定设备的类型,它是Smartthings设备名称。Thing描述的格式是:
Thing < thingTypeId> name [ smartthingsName="< deviceName>" ]
其中:
thingTypeId对应于Smartthings Capabilities文档中的id字段。也可以参看OpenHabAppV2.groovy文件中CAPABILITY_MAP下的设备capability字段。
name 就是你想要调用的设备的名称,并用此来定义设备的items
deviceName是您在Smartthings App中发现并连接到设备时分配给设备的名称
(3)配置items文件
打开openhab服务器上的/etc/openhab2/items文件夹,创建smartthing.items文件。
可以参考items文件
这里最重要的是配置channel,基本格式:
{ channel="smartthings:< thingTypeId>:< hubName>:< thingName>:< channelId>" }
其中:
smartthings:规定格式,表示这是要给smartthings设备
thingTypeId表示你要连接的设备的类型,和things文件中的一致
hubName即为在smartthings中配置的smart Hub的名称
thingName在things文件中定义的设备的name
channelId即为在Smartthings Capabilities list中定义的attribute,可以参看OpenHabAppV2.groovy文件中CAPABILITY_MAP下设置的attribute字段。
图中前两个字段,分别表示,设备属性值的类型,以及该设备items的名字
(4)配置sitemap
打开openhab服务器上的/etc/openhab2/sitemaps文件夹,创建smartthing.sitemap文件。
在basicUI上显示出如下界面
至此即可通过openHab对smartthings设置进行操作,同样可以获取到设备当前的状态信息。
说明:
在openHab上进行相关操作和配置时,如果出现问题,可以通过log文件查看详细的错误信息,
log文件的路径为:/var/log/openhab2
如果出现如下错误提示:
解决方法:重启openhab2服务
sudo systemctl restart openhab2.service