玩转树莓派:OpenHAB的入门(二)

通过第一篇的介绍,我们现在已经安装了OpenHAB和Demo House,那么接下来我们来看一下OpenHAB是如何工作的。

OpenHAB如何工作?

接下来你会在openHAB配置的共享文件夹看到sitemap和items的子目录。

Items是存放你想要在系统里用到的每一个控制设备、传感器或信息元素的库。它不一定是一个物理设备,你可以定义一个网络来源如天气或股票。每个项都可以被命名或指定多个组,并连接到特定的bindings。

当你打开openHAB移动或Web应用程序时,Sitemaps只关心你会看到的界面。你可以控制按钮如何放置以及信息如何呈现出来。您可以为你的每一个房间定义最高级别的组,点击每个房间的设备列表。或您可能更喜欢一种类型的设备为一组。

Rules是家庭自动化方面发挥作用的地方,在那里你可以预设打开设备的时间表或条件。比如在晚上10点打开卧室红色的灯;或者,如果温度小于0或有人在房间里的时候就打开一个供暖器。你可以找到一个脚本文件夹,它提供了类似的功能规则。

persistence engine是一个重要问题,不过本文不提。默认情况下,openHAB只会显示事物的现状;如果你想随着时间的推移跟踪数据,你需要设置一个数据源为持续数值。在这你可以设置通常数据点多久测一次,或删除旧的数据点,你还需要告诉它使用什么样的数据库,如MySQL或简单记录到一个文件。

你也可以将数据值变成文字标签。例如,humidex.scale文件定义湿度值的范围以及如何转换成文字:29-38“有些不适”。

在openHAB里,sitemap和items文件必不可少;其余的都可选择。你可以有多个sitemaps和Item,所以你可以控制demo内容,或尝试一种新的家居控制界面。

接下来,我们将添加一些常用的智能家居套件,从一个新的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访问你的系统。

时间: 2024-08-04 07:23:37

玩转树莓派:OpenHAB的入门(二)的相关文章

《开源硬件创客——15个酷应用玩转树莓派》——1.1树莓派是什么

1.1树莓派是什么 要想玩转树莓派,首先得知道树莓派是什么.在本节中,作者将带领大家揭开树莓派的神秘面纱,了解树莓派从最初诞生到现在发生的有趣故事,以及树莓派背后所蕴含着的深刻含义. 1.1.1 树莓派的"诞生" 2012年2月29日,一个载入开源史册的日子,本书的主角-树莓派正式发售了.热情的人们"刷爆"了树莓派订购网站的服务器,逼得网站站长在Twitter上恳求:"朋友,你能别如此频繁地按F5键进行刷新网页吗,将会使服务器瘫痪的."从最初的设

《开源硬件创客——15个酷应用玩转树莓派》——第1章 初识树莓派 1.1 树莓派是什么

第1章 初识树莓派 初识树莓派是一场美丽的邂逅.在本章中,作者将带领大家来认识树莓派.读者可通过本章了解树莓派的前世今生,掌握树莓派的来龙去脉,从而形成对树莓派的一个初步印象. 1.1 树莓派是什么 要想玩转树莓派,首先得知道树莓派是什么.在本节中,作者将带领大家揭开树莓派的神秘面纱,了解树莓派从最初诞生到现在发生的有趣故事,以及树莓派背后所蕴含着的深刻含义. 1.1.1 树莓派的"诞生" 2012年2月29日,一个载入开源史册的日子,本书的主角-树莓派正式发售了.热情的人们"

Kinect for Windows SDK开发入门(二)基础知识 上

上篇文章介绍了Kinect开发的环境配置,这篇文章和下一篇文章将介绍Kinect开发的基本知识,为深入研究Kinect for Windows SDK做好基础. 每一个Kinect应用都有一些基本元素.应用程序必须探测和发现链接到设备上的Kinect传感器.在使用这些传感器之前,必须进行初始化,一旦初始化成功后,就能产生数据,我们的程序就能处理这些数据.最后当应用程序关闭是,必须合理的释放这些传感器. 本文第一部分将会介绍如何探测初始化几释放传感器,这是非常基础的话题,但是对于基于Kinect开

Windows 8风格应用开发入门 二十九 捕获图片与视频

一.相机 关于相机 1.相机对话框提供了触屏优化的全屏体验,你可从嵌入的或附加 的相机中捕获照片和视频. 2.全屏对话框处理显示相机 UI 的工作. 3.通过此对话框, 你可以使用对 Windows.Media.Capture.CameraCaptureUI.captureFileAsyncAPI 的一种方法调用捕获 照片或视频. 4.作为捕获体验的一部分,用户可对其捕获的照片进行修剪,对捕获的视频进行 剪辑,然后再将它们返回至调用应用程序. 5.用户在捕获照片或视频前,还可调整一些相机设 置,

Windows 8风格应用开发入门 二十七 漫游应用数据

一.漫游应用数据概览 1.若应用当中使用了漫游应用数据,用户可以很轻松的在不同的设备间保持应用数据的同步. 2.Windows会将更新的漫游数据同步到云端,并将数据更新到其他安装此应用的设备上. 3.Windows 限制了每个应用可漫游的应用数据大小.若我们的应用达到漫游数据大小的限制,在应用的总漫游数据再次少于该限制之前,不会将应用的任何数据更新到云端,因此最好的做法是仅为用户首选项.链接和小型数据文件使用漫游数据. 4.只要用户在所需的时间间隔内从某个设备访问应用的漫游数据,这些数据将存在云

Windows 8风格应用开发入门 二十五 数据绑定

数据绑定是一种简单方式来显示数据,UI元素与数据对象之间的连接或绑定是允许数据在两者之间 流动的.另外建立了绑定且数据发生变化时,相应的UI元素会自动显示变化. 如何将UI元素与 数据进行绑定 开发入门 二十五 数据绑定-windows开发入门"> 从上面图可以知道,每个绑定必须指定一个源和一个目标. 其中源对象可以是任何CLR对象,包括目标元素自身和其他UI元素.目标可以是 FrameworkElement的任何DependencyProperty(依赖属性). 数据绑定引擎从Bindi

Windows 8风格应用开发入门 二十四 App Bar构建

构建应用栏的目的的显示导航.命令和始终隐藏不需要的使用的工具.我们可以把应用栏放在页面 顶部或底部或同时存在顶部和底部. 默认情况在AppBar是隐藏的,当用户单击右键.按下Win+Z .或从屏幕的顶部或底部边缘轻松时可显示或关闭AppBar.当然我们也可以通过编程的方式将AppBar设 置为当用户做选择或与应用交互时显示. 构建AppBar基本步骤 通常我们构建一个应用的 AppBar,只需要三步就可以完成: 开发入门 二十四 App Bar构建-jenkins构建自由风格"> 如何构建

Windows 8风格应用开发入门 二十三 App Bar概述及使用规范

App Bar概述 Windows 8 Store应用中的App Bar(应用程序工具栏)起到的作用和Windows Phone中AppBar一样.我们可以向用户提供各种操作接口,实现导航或者触发命令等. AppBar一 般默认是隐藏的,也可以设置为始终可见.我们可以通过清扫屏幕上边缘或下边缘时显示AppBar, AppBar被点击之后或失去焦点后隐藏,当然我们也可以通过编程方式控制AppBar显示或隐藏. Windows 8 Store应用中通常包含两种AppBar: 1)底部AppBar 底

Windows 8风格应用开发入门 二十二 MessageDialog

MessageDialog概述 MessageDialog指的就是对话框. 对话框的命令栏中最多包含三个命令.如果我们指定任何命令,将会有一个默认命令添加到对话框中,目的是关闭对话框. 对话框弹出后界面中所有元素将在对话框下面显示,并且将会阻塞任何触摸事件直到用户进行响应对话框. 另外对话框应该尽量少用. 注意:Windows 8风格应用中取消了MessageBox对象,取而代之的是MessageDialog对象. MessageDialog常用属性和方法 MessageDialog类包含两类构

《树莓派Python编程入门与实战》——2.3 使用Raspbian图形用户界面

2.3 使用Raspbian图形用户界面 树莓派Python编程入门与实战 默认情况下,当你启动树莓派并登录后会进入到Linux命令行.但是树莓派同样还有一个图形用户界面(GUI,Graphical User Interface). 为了打开图形界面,你需要在命令行键入startx并且回车.然后轻量级的X11桌面环境(LXDE,Lightweight X11 Desktop Environment)就启动了,你可以看到一个类似图2.1的图形界面. 提示: Linux桌面环境 一个关于Linux的