经过第一篇的介绍,咱们如今已经安装了OpenHAB和Demo House,那么接下来咱们来看一下OpenHAB是如何工做的。html
OpenHAB如何工做?java
接下来你会在openHAB配置的共享文件夹看到sitemap和items的子目录。python
Items是存放你想要在系统里用到的每个控制设备、传感器或信息元素的库。它不必定是一个物理设备,你能够定义一个网络来源如天气或股票。每一个项均可以被命名或指定多个组,并链接到特定的bindings。git
当你打开openHAB移动或Web应用程序时,Sitemaps只关心你会看到的界面。你能够控制按钮如何放置以及信息如何呈现出来。您能够为你的每个房间定义最高级别的组,点击每一个房间的设备列表。或您可能更喜欢一种类型的设备为一组。github
Rules是家庭自动化方面发挥做用的地方,在那里你能够预设打开设备的时间表或条件。好比在晚上10点打开卧室红色的灯;或者,若是温度小于0或有人在房间里的时候就打开一个供暖器。你能够找到一个脚本文件夹,它提供了相似的功能规则。web
persistence engine是一个重要问题,不过本文不提。默认状况下,openHAB只会显示事物的现状;若是你想随着时间的推移跟踪数据,你须要设置一个数据源为持续数值。在这你能够设置一般数据点多久测一次,或删除旧的数据点,你还须要告诉它使用什么样的数据库,如MySQL或简单记录到一个文件。数据库
你也能够将数据值变成文字标签。例如,humidex.scale文件定义湿度值的范围以及如何转换成文字:29-38“有些不适”。浏览器
在openHAB里,sitemap和items文件必不可少;其他的均可选择。你能够有多个sitemaps和Item,因此你能够控制demo内容,或尝试一种新的家居控制界面。bash
接下来,咱们将添加一些经常使用的智能家居套件,从一个新的sitemap开始。每个都会介绍一些核心概念,好比如何安装bindings,以及定义项。服务器
首先建立一个新的(空白)home.items文件,并在相关目录中建立一个新home.sitemap文件。打开home.sitemap粘贴下面的代码。这只是做为一个基本骨架,咱们会在以后添加bits。
sitemap home label="My Home" { }
你应该看到一个通知,说openHAB已经肯定了一种新的sitemap和items文件。
启用调试模式
当你正在试图让openHAB正确工做,启用调试模式方便你的工做,它详细的调试日志列出了全部有用的东西。要启用此模式,打开openHAB配置共享文件夹,而后在logback.xml里编辑。在行40,将DEBUG改为INFO。以后你须要从新启动。
<logger name="org.openhab" level="INFO"/>
一旦你跟踪日志你会看到不少信息。
添加Philips Hue
本文使用了Philips Hue做为示范。Hue灯泡要求你安装一个binding ——把他想象成一个设备驱动程序。目前有约160 bindings适用于OpenHAB 1,这就是为何OpenHAB是一个强大的系统,它能够与全部不一样的控制系统组合成一个统一的接口。
Bindings必须先下载好,在树莓派上最简单的方法是使用apt-get,而后将控制权给openhab用户。
sudo apt-get install openhab-addon-binding-hue sudo chown -hR openhab:openhab /usr/share/openhab
接下来,你须要告诉OpenHAB加载binding,并配置全部所需的变量。进入配置文件夹,复制一份openhab-default.cfg的副本,将其命名为openhab.cfg。打开该文件,搜索HUE,用下面的代码替换整个部分。您须要更改的惟一事情就是你的桥接器的IP值,若是你不知道的话,尝试在网上搜索工具。secret的数值并不重要,它只是一种OpenHAB用来识别桥梁的用户名。
################################ HUE Binding #########################################
# IP of the Hue bridge hue:ip=192.168.1.216 hue:secret=makeuseofdotcom hue:refresh=10000
保存并退出。若是你正在跟踪日件,你会看到一个消息让你等待配对,但若是你忘记了或错过了倒计时,你只要重置树莓派就能够了,当Hue binding启动时你会获得另外100秒的计时器。在继续以前请确保你已成功配对。
接下来,打开home.items文件,咱们会添加一些Hue灯泡。下面是一个示例定义:
Color Bedroom_Hue "Bedroom Hue" <hue> (Bedroom) {hue="1"}
·Color指定咱们在这个项目上拥有什么样的控制权。RGB色调灯泡是“Color”,由于咱们对它们有全彩色的控制。其余的灯可能只是一个开关。 ·其次是项目的代号:我选择bedroom_hue,随便什么均可以,不过你要记住后来制做sitemap时。代号不能有空格。 ·引号之间的是标签。在这种状况下很简单,可是对于好比温度或某个值,你须要添加一些特殊的代码,告诉它如何显示该值或使用什么样的转换。标签是为了接口,它能够有空格。 ·角括号之间的是图标的名称。你会在openHAB分享的webapps/images中找到全部可用的图标。实际上,整个系列的色调图标表明不一样的亮度或开/关。只是指定基本图标的名称–若是这是个切换项,openHAB会自动寻找/关闭图标。这是可选的。 ·在圆括号中,咱们告诉它是哪组的一部分,在这种状况下大多只是卧室组。 ·最后,最重要的是,咱们将该项与任何须要的变量进行适当的绑定。在这种状况下,Hue灯泡绑定的数字是1。你能够经过打开官方色调应用程序找到这个数字而后看看灯光标签。每一个灯泡都有一个独特的数字。
这里增长了四个灯泡,这是完整的home.items:
Group Bedroom
Group Office
Group Kai
Group Living_Room
Group Cinema
Group Secret
Group Lights
/* Lights */ Color Bedroom_Hue "Bedroom Hue" <hue> (Bedroom,Lights) {hue="1"} Color Office_Hue "Office Hue" <hue> (Office, Lights) {hue="2"} Color Secret_Hue "Secret Hue" <hue> (Secret, Lights) {hue="3"} Color Kai_Hue "Kai's Hue" <hue> (Kai, Lights) {hue="4"}
/ * Lights * /文本只是一个评论,它没有任何功能,除了帮助咱们扫描该文件。如今咱们拥有了添加的设备。但打开http://raspberrypi.local:8080/?sitemap=home 是一个空白的界面,由于咱们尚未在Sitemap建立界面元素呢。让咱们如今开始。
用来描述的代码是不一样的,但如今咱们建立一个新的“框架”,并添加一些组控件以及一些图标。
sitemap home label="My Home" { Frame { Group item=Lights label="All lighting" icon="hue" Group item=Bedroom label="Bedroom" icon="bedroom" Group item=Office label="Office" icon="desk" } }
组别是一个用于快速测试的工具,现实中,你会想要更多的控制权来控制项是如何显示的。如今,这就足够了。保存并在浏览器加载你的家庭sitemap。你应该看到这个。
咱们已经把它们放在一个灯组里,点击All lighting看看。
注意,办公室色调项显示的是不一样的图标–由于办公灯已经在这个时候开了,那么OpenHAB就会智能地将图标调整为“on”的版本。不过,它并无反映的颜色,但若是你安装了移动应用程序,就会反映当前的颜色。
若是你发现多出一些多余的项,不用担忧。要知道虽然你只能一次加载一个sitemap,可是会从全部的.item文件中将全部的项都显示在一个页面上。所以若是你已经离开了代码项文件,可能会有一些额外的项也出如今你的组别中。建议备份代码内容,并将它从文件夹中移出,以免重复错误。
使用my.openhab IFTTT远程访问
如今,你须要在同一个本地网络访问openHAB系统,但若是在你的Wi-Fi范围以外你想控制你的设备并检查传感器?那咱们就须要设置远程访问–最简单的方式就是用my.openhab Web服务,它绕过端口转发和路由器配置。my.openhab服务也有一个IFTTT频道,让你进行远程控制和自动化。
首先安装binding。若是你不知道某个特定安装包的确切名称,能够经过apt-cache寻找。
sudo apt-get install openhab-addon-io-myopenhab sudo chown -hR openhab:openhab /usr/share/openhab
在my.openhab网站注册以前,你须要建立一个密钥,并找到你的UUID——惟一标识你的安装。而后检查下openHAB Home share -> webapps -> static,你应该能够找一个包含了你惟一识别码的UUID文件。因为此时发现如今使用的树莓派使用的是Java旧版本,没有正确地建立秘密密钥。
java -version
检查一下你的Raspbian。若是不是1.7或更高版本,那么你的版本并不能使用要赶忙更新。奇怪的是,最新版本的Raspbian安装了Oracle Java 8,但并无设置为默认。
sudo update-alternatives --config java
选择显示jdk-8-oracle,而后重启openHAB。Oracle Java 8比默认的OpenJDK更快!
如今你须要在webapps/static文件夹中找到一个secret文件。打开secret和uuid,并准备复制粘贴。
如今去建立一个My.OpenHAB账户,使用这些内容,而后回来–你还须要先确认你的电子邮件。首先,咱们须要对myopenhab设置默认的persistence engine(咱们须要创建一些基本的东西能够将咱们的数据“出口”到在线服务,并使IFTTT可见)。要作到这一点,打开openhab.cfg,找到变量persistence:default=而后改为persistence:default=myopenhab。保存。
最后,在configurations/persistence 文件夹中建立一个新的文件命名为myopenhab.persist,而后复制粘贴下面的内容。
Strategies { default = everyChange } Items { * : strategy = everyChange }
你不须要如今理解这个,可是要记住“每次改变就保存每一项的状态”。
前往openHAB通道(你须要验证并容许它访问你的myopenhab账户)链接IFTTT。还要注意,除非你的项至少有一次改变,不然IFTTT上的项目清单是不会出现的,因此若是没有出现,你就切换一下开关,而后从新加载。
恭喜你,你如今能够经过IFTTT 能够访问你的openHAB系统了!
经过REST来使用蓝牙状态传感器
其余的任何平台上,有现成的蓝牙绑定。可是,因为Java文件须要从新编译为ARM架构,所以现成的蓝牙绑定并不能在树莓派上实现,必需要添加到binding,而后再重建binding。这很是复杂并且还不能实现。不过有一种更简单的解决方案:调整以前的Python脚本,直接传递到OpenHAB RESTful接口。
RESTful接口意味着你可使用它的内置Web服务器与系统进行交互,仅仅经过调用URL和传递或获取数据,你就能够在本身的服务器上访问这个网址,来看看一个简单的例子:http://raspberrypi.local:8080/rest/items——输出全部你定义的项目编码列表。这很强大,由于它充分利用了openHAB的所有潜力,并且还容许你编写自定义的接口,并且传递传感器状态不须要特定的binding。咱们使用这种来呈现一个特定的蓝牙设备的存在。
首先添加一个新的开关项到你的home.items文件。咱们命名为“jamesinoffice”,而后作一个它的开关,这不是一个简单的开关触点,这样以便手机死机的时候能够手动控制。
Switch JamesInOffice "James in Office" (Office)
注意,我没有定义一个图标或关联特定的binding。这只是一个普通的开关。
接下来,插入一个兼容的USB蓝牙适配器,并安装一些能够与其交互的基本工具。
sudo apt-get install bluez python-bluez python-pip sudo pip install requests hcitool dev
最后一个命令是显示你的蓝牙适配器。若是没有列出,换另外一个适配器试试的。下一步就是要找到你的设备的蓝牙地址。
wget https://pybluez.googlecode.com/svn/trunk/examples/simple/inquiry.py python inquiry.py
确保你的手机打开了蓝牙设置页面(让它进入配对/公共模式),很明显蓝牙被激活了。你须要找出列出的十六进制硬件地址。
在你的树莓派用户主目录建立新的Python脚本而后把代码粘贴进去。
下面有一些你须要编辑的,首先是你特定的设备地址:
result = bluetooth.lookup_name('78:7F:70:38:51:1B', timeout=5)
以及这条,将jamesinoffice换成你定义的开关代号。
r = requests.put("http://localhost:8080/rest/items/JamesInOffice/state",data=payload)
最后要告诉这个脚本在启动的时候运行。
sudo nano /etc/rc.local
向下滚动至底部,在退出前添加下面这行:
python /home/pi/detect.py &
&符号的意思是“在后台运行”。若是你将它添加到一个组中,单击该组。它须要大约10秒的更新,不过若是你的手机能检测到,你会看到默认的灯泡图标打开或关闭。若是没有看到这种状况就检查一下日志,多是你使用了错误的项名称。
OpenHAB手机App
虽然你可使用移动设备的Web界面,可是openHAB有iOS和Android 版本的原生应用程序,它们看起来要比默认的浏览器界面更漂亮。在设置中,输入本地地址做为内部的IP,别忘了还有端口号。可是若是你尚未注册MyOpenHAB,你只能从你的本地Wi-Fi访问你的系统。