Raspberry Pi上的OpenHAB家庭自动化入门

OpenHAB是一个成熟的开源家庭自动化平台,可在各种硬件上运行并且与协议无关,这意味着它可以连接到当今市场上几乎所有的家庭自动化硬件。如果您对仅需要控制灯光就需要运行的制造商特定应用程序的数量感到沮丧,那么我对您来说是个好消息:OpenHAB是您一直在寻找的解决方案–它是最灵活的智能家居

不幸的是,它距离消费者友好型产品只有千里之遥–但是,与往常一样,这就是PCPC.me的用武之地:我们将向您展示如何启动和运行最终的智能家居系统无需花钱(因为OpenHAB是100%免费的,只需提供硬件即可)。

本指南的第一部分专门介绍如何通过Raspberry Pi 2获得OpenHAB设置。 ,但进一步来说,这些教程和建议可以应用于安装OpenHAB的任何地方。

本指南涵盖了三个入门主题和一个稍微高级的主题。

  • 启动并运行OpenHAB在Pi上安装,并安装演示房子配置以检查核心系统是否正常工作。
  • 如何添加绑定和设备配置文件。我将使用Philips Hue。
  • 启用远程访问,并连接到IFTTT。
  • 使用蓝牙添加DIY存在传感器,并介绍REST接口。
  • 配置OpenHAB移动应用。
  • 所需条件

    至少,您需要一个树莓派(最好是v2)和一个以太网或无线适配器(首选以太网,本指南将不包含有关使Wi-Fi适配器工作的说明)。其他所有内容都是可选的。请注意,OpenHAB也可以在原始Raspberry Pi上运行,但是存在处理速度较慢和Z-Wave设备存在的已知问题。如果您不需要Z-Wave,则可以放心地忽略此警告,并继续使用Raspberry Pi B或B +模型,因为其他一切似乎都可以正常工作。

    在撰写本文时,OpenHAB的最新稳定版本是1.71;而在您添加Z-Wave时,您始终可以升级到最新的Pi。即将推出1.8版,尽管某些绑定可能具有更多功能,但本指南中的所有内容仍应相关。第2版​​目前也可以作为早期的Alpha预览版本使用,但采用与OpenHAB 1系列截然不同的体系结构:本指南与第2版不兼容。

    我强烈建议您遵循此指南 –缓慢而有条理地进行操作–不要试图一头扎进并立即添加所有内容。是的,它是一本很长的指南– OpenHAB是一个困难的系统,通常需要根据您的需要进行调整,而确保成功的最佳方法是一次缓慢地工作并一次完成一件。

    好消息是一旦运行正常,这将是一次坚如磐石的体验,并带来令人难以置信的回报。

    安装OpenHAB

    There’s no pre-configured image for OpenHAB, so installation is done the old fashioned way via a command line. I suggest you work headless on the RPi – the overhead of managing a GUI which you’ll rarely use isn’t worth it.

    从最新的(完整)Raspbian SD映像开始(不是``精简版'',这些(不包括Java虚拟机)。插入网络电缆,然后启动,并浏览SSH。运行:

    sudo raspi-config

    扩展文件系统;然后从高级菜单中将内存分配更改为16。完成后,重新启动,并作为一个好的实践,运行完整更新

    sudo apt-get updatesudo apt-get upgrade

    安装OpenHAB运行时的更简单方法是通过 apt-get ,但首先我们需要添加一个安全密钥和新的存储库:

    wget -qO - 'https://bintray.com/user/downloadSubjectPublicKey?username=openhab' |sudo apt-key add -echo "deb http://dl.bintray.com/openhab/apt-repo stable main" | sudo tee /etc/apt/sources.list.d/openhab.listsudo apt-get updatesudo apt-get install openhab-runtimesudo update-rc.d openhab defaults

    奇怪的是,所有东西都被安装为“ root"所有。我们需要使用以下命令来修复该问题。

    sudo chown -hR openhab:openhab /etc/openhabsudo chown -hR openhab:openhab /usr/share/openhab

    接下来,我们将安装Samba并共享配置和用户文件夹-这将使安装附件和远程更改站点地图变得更加容易。

    sudo apt-get install samba samba-common-binsudo nano /etc/samba/smb.conf

    根据需要更改工作组名称,否则启用WINS支持:

    wins support = yes

    (您需要取消注释该行,并将no更改为yes)

    然后将以下内容添加到共享定义部分(一直滚动到长文件的底部):

    [OpenHAB Home] comment= OpenHAB Home path=/usr/share/openhab browseable=Yes writeable=Yes only guest=no create mask=0777 directory mask=0777 public=no[OpenHAB Config] comment= OpenHAB Site Config path=/etc/openhab browseable=Yes writeable=Yes only guest=no create mask=0777 directory mask=0777 public=no

    我也注释了打印机部分。我做了两份共享,因为配置文件实际上是分别存储在附件中的。

    保存并退出。我们最终需要为openhab用户设置一个Samba密码:

    sudo smbpasswd -a openhab

    我建议使用“ openhab"作为密码,只是为了易于使用,但这并不重要。

    感谢读者David L –在最新的Raspian中,重新启动Samba的方法似乎已更改。这是更新的说明:

    sudo update-rc.d smbd enablesudo update-rc.d nmbd enablesudo service smbd restart

    重新启动Samba(旧安装使用 sudo服务samba restart ),测试您是否可以访问共享驱动器。在Mac上可能不会自动发现它。但是您可以使用 Finder -> Go ->连接到服务器和地址

    smb://[email protected]

    使用用户名openhab进行身份验证和您选择的密码,然后打开两个共享以进行浏览。您甚至应该可以在网络浏览器中打开http://raspberrypi.local:8080 /,但由于我们尚未创建站点地图,因此会出现错误。

    现在是学习尾随OpenHAB日志命令的好时机,这样您就可以留意错误。

    tail -f /var/log/openhab/openhab.log

    请确保该命令在打开并在

    安装演示中心

    ,在我们深入了解配置文件的复杂性,添加设备和绑定等之前,请始终保持单独的SSH窗口。让我们通过添加演示内容来检查一切是否正常。您可以在OpenHAB.org的下载部分下找到“演示设置"。

    解压缩后,有两个文件夹:插件配置

    使用网络共享,将配置复制到 OpenHAB Config 共享并覆盖现有文件夹。再次将附件复制到其他 OpenHAB Home 共享中,覆盖现有文件夹。如果未提示您覆盖某些内容,则说明您做错了。如果您关注调试日志文件,则应该会看到一些活动,因为它会注意到新的绑定并开始起作用。打开raspberrypi.local:8080 / openhab.app?sitemap = demo观看该演示。

    目前,这有点基础,但是OpenHAB的开放性意味着我们可以安装一个可爱的新主题以后或完全替代的界面。现在,我们只需要知道一切正常即可。请注意,我们正在查看的称为站点地图(与网站站点地图无关)。站点地图描述了用户界面,而不是网络上的实际设备或传感器,仅描述了查看它们的界面。它的每个部分都是完全可定制的。要查看如何创建此文件,请打开OpenHAB Config共享上的 sitemaps / demo.sitemap 文件。

    这很令人生畏,但对于大多数人来说部分,您将复制其他示例中的粘贴代码片段以创建自己的自定义界面。这是所有可能的站点地图元素的技术概述,但现在就足以开始考虑您要构建哪种界面以及要显示哪些信息。

    当您在那儿时,也打开 items / demo.items 。同样,看上去很吓人,但这是您在其中创建要控制和定义要跟踪的传感器的地方。

    那么OpenHAB如何工作?

    现在您已经快速阅读了Sitemap和items文件夹,让我们确切地分解这些文件是什么以及OpenHAB的其他主要组件,它们组合在一起可以创建完整的智能家居。您将在OpenHAB Config共享文件夹中找到每个子目录。

    项目是系统中所需的每个控制设备,传感器或信息元素的清单。它也不必是物理设备,您可以定义天气或股票价格之类的网络资源。每个项目都可以命名,分配多个组(或不分配任何组),并连接到特定的绑定。 (初学者提示:绑定时,大写很重要。我花了很长时间试图弄清楚为什么“ Hue"灯泡不起作用;这是因为它们应该是“ hue")。 / em>

    站点地图仅与打开OpenHAB移动或Web应用程序时看到的界面有关。您可以精确控制按钮的布局方式和信息显示方式。您可以为房子的每个房间定义顶层组;单击每个按钮将显示该房间中每个设备的列表。或者,您可能更愿意为每种类型的设备显示组:一个按钮用于照明,另一个按钮用于电源插座。您可能经常使用某些设备,以至于只希望在主屏幕上对其进行切换。

    规则是家庭自动化方面发挥作用的地方,您可以在其中可以定义行动发生的时间表或条件。一些简单的事件,例如晚上10点打开卧室的灯光,变成暖红色。或更复杂的逻辑,例如,如果温度低于0且房间中有人,则打开空间加热器。您还会找到一个脚本文件夹,该文件夹提供与规则相似的功能,但具有更复杂的可编程逻辑级别。

    持久性是高级本指南中不会涉及的主题,但是持久性定义了您要记录的数据。默认情况下,OpenHAB仅会显示某些事物的当前状态。如果要随时间跟踪该值,则需要为该数据源设置持久性定义。在此,您将指定诸如应该多久测量一次数据点或何时丢弃旧数据点的内容–您还需要告诉它使用哪种持久性引擎,例如MySQL或简单记录到文件中。 。

    转换包含数据值到标签的映射。例如, humidex.scale 文件定义了湿度指数值的范围以及用英语显示的方式:29-38表示``有些不适''。

    > sitemap items 文件对于OpenHAB的运行至关重要;其余均为可选。您可以有多个站点地图和项目,因此您可以保留演示内容并随时返回参考,或为家庭控制界面尝试新的布局。不用担心,如果这一切现在看来似乎有些让人不知所措,我们会将其分解为可管理的部分,我保证在本指南结束时,您将有信心创建自己的OpenHAB设置。

    接下来,我们将引导您添加一些常见的智能家居套件,从新的站点地图开始。每个人都会介绍一些核心概念,例如如何安装绑定和项目定义,因此,我强烈建议您通读这些说明,即使您不拥有这些特定设备

    首先在相关目录中创建一个新的(空白) home.items 文件和一个新的 home.sitemap 文件。打开 home.sitemap 并粘贴以下代码。

    sitemap home label="My Home"{ }

    您应该会看到一条通知,报告OpenHAB已识别出新的站点地图和项目文件。

    尽管您仍在尝试使OpenHAB正常工作,但是启用更详细的调试日志(列出所有内容,而不仅仅是重要内容)会很有用。要启用此模式,请打开OpenHAB Config共享文件夹,然后编辑 logback.xml 。在第40行上,将以下行更改为读取DEBUG而不是INFO。更改后,您需要重新启动。

    <logger name="org.openhab" level="INFO"/>

    这是全局更改,因此一旦拖尾日志文件,您将获得更多信息。

    添加飞利浦色相

    我将从飞利浦色相开始。像大多数您想在OpenHAB中进行交互的事物一样,Hue灯泡要求您安装绑定 –将绑定视为设备驱动程序。在撰写本文时,OpenHAB 1大约有160种绑定可用,这就是为什么OpenHAB如此强大的系统–它可以与任何接口连接,将所有这些不同的控制系统组合成一个统一的接口。这是一个演示和快速概述了其中涉及的步骤。

    必须首先下载绑定,在Pi上执行绑定的最简单方法是使用 apt-get ,然后强制所有权

    sudo apt-get install openhab-addon-binding-huesudo chown -hR openhab:openhab /usr/share/openhab

    Next you need to tell OpenHAB to load in that binding, and configure any variables needed. Browse to the configurations folder and make a copy of openhab-default.cfg, naming it openhab.cfg. Open that up, search for HUE and replace the whole section with the following code. The only thing you need to change is the IP value of your bridge – if you don’t already know it, try the online discovery tool. The secret value doesn’t really matter, it’s just a kind of username that OpenHAB will use to identify itself to the bridge.

    快速提示:要启用一行,只需从头开始删除#。默认情况下,指定网桥IP地址的行是禁用的(或从技术上讲,是“注释掉")。另外,如果您要尝试其他配置,只需复制现有行并在开头添加#标记为注释,这将很有用,这样在出现问题时可以轻松还原。

    ################################ HUE Binding #########################################
    # IP of the Hue bridgehue:ip=192.168.1.216hue:secret=PCPC.medotcomhue:refresh=10000

    保存并退出。像任何其他第三方Hue应用程序一样,您需要通过按前面板上的按钮来批准Hue Bridge上的OpenHAB-您只需执行一次。如果您要拖尾日志文件,则会看到一条有关等待配对的消息,但是如果您忘记或错过了倒数,只需重置Pi,您将获得100从启动色调绑定开始的第二个计时器。在继续之前,请确保已成功配对。

    下一步,打开 home.items 文件,我们将在其中添加一些Hue灯泡。下面是一个示例商品定义:

    Color Bedroom_Hue "Bedroom Hue" <hue> (Bedroom) {hue="1"}
  • 颜色字指定了我们对该商品的控制类型。 RGB色相灯泡是“颜色",因为我们可以对其进行全彩色控制。其他的灯光可能只是一个开关。
  • 下一个是项目的代号:我选择了 Bedroom_Hue ,但实际上没什么问题–只是描述性的,对您来说很自然,因为您在稍后制作站点地图时需要记住它。代号不应包含空格。
  • 引号之间是标签。在这种情况下,我们的代码很简单,但是对于某些项目(例如温度或报告值的项目),您将添加一些特殊的代码,告诉它如何显示该值或使用什么转换。 标签用于接口,并且可以有空格。
  • 在尖括号之间是图标的名称。您可以在 webapps / images 目录下的OpenHAB共享中找到所有可用的图标。实际上,有各种各样的色调图标代表不同的亮度或开/关。只需指定基本图标名称-如果这是一个已切换的项目,OpenHAB就会知道自动寻找不同的开/关图标。这是可选的。
  • 在圆括号中,我们告诉它属于哪个组–在这种情况下,仅是 Bedroom 组。
  • 最后并且至关重要的是,我们将项目与所需的任何变量连接到适当的绑定。在这种情况下,色调绑定,灯泡的编号为1。您可以通过打开正式的Hue应用程序并查看“灯光"选项卡来找到编号。每个灯泡都有一个唯一的编号。
  • 我总共添加了四个灯泡,并简单声明了我们稍后将扩展的组。这是我目前完整的 home.items

    Group BedroomGroup OfficeGroup KaiGroup Living_RoomGroup CinemaGroup 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"}

    / *灯* / 文本仅是注释,除此功能外没有其他功能帮助我们稍后在文件变大时对其进行扫描。现在我们已经添加了设备,但是打开http://raspberrypi.local:8080 /?sitemap = home会得到一个空白界面-当然,因为我们实际上尚未在站点地图中创建界面元素。现在让我们开始非常简单。打开 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" }}

    组是用于快速测试的有用工具,但实际上,您需要对项目的显示方式进行更多控制。目前,这已足够。在浏览器中保存并重新加载主站点地图。您应该会看到此(或您添加的任何组)。

    点击所有照明以查看每种色相灯,因为我们已经将它们定义为属于

    注意,Office Hue项以不同的图标显示–这是因为我的办公室灯已经打开,并且当OpenHAB与Hue桥通话时,它就知道了这一点,并且足够聪明将图标调整为文件的“打开"版本。不幸的是,它不能反映颜色,但是如果您安装了移动应用程序,它将反映当前的颜色。

    如果看到的项目比您想象的要多,或者收到有关多种定义,请注意,尽管您一次只能将一个站点地图加载到页面上。所有站点地图都会从所有.item文件中提取项目,因此,如果您将演示项目文件留在那里,可能还会在您的群组中显示一些其他项目。我建议在这一点上备份演示项目内容并将其移出文件夹,以避免重复错误。

    远程访问,以及带有My.OpenHAB的IFTTT

    现在,您需要使用同一个本地网络才能访问OpenHAB系统,但是如果您要控制设备并在Wi-Fi超出范围时检查传感器又该怎么办?为此,我们需要设置远程访问,并且我们将通过My.OpenHAB Web服务以一种简单的方式来完成此操作,该服务无需处理端口转发和路由器配置。另外,My.OpenHAB服务还具有IFTTT频道,使您可以进行远程控制和自动化。

    首先:安装绑定。快速提示:如果您不知道特定安装软件包的确切名称,请尝试使用apt-cache搜索它。

    sudo apt-get install openhab-addon-io-myopenhabsudo chown -hR openhab:openhab /usr/share/openhab

    在可以注册My之前。在OpenHAB站点上,您需要创建一个密钥,并找到唯一标识您的安装的UUID。在 OpenHAB主页共享-> webapps ->静态下进行检查,您应该找到包含唯一标识符的UUID文件。到了这一点,我发现我的Pi使用的是旧版本的Java,该Java版本无法正确创建密钥。键入

    java -version

    进行检查。如果不是1.7或更高,则说明您的版本错误。奇怪的是,最新版本的Raspbian确实安装了Oracle Java 8,但未设置为默认值。

    现在,您还应该在 webapps / static 文件夹中找到一个秘密文件。打开秘密 uuid ,并准备复制粘贴。

    现在,使用这些详细信息创建My.OpenHAB帐户,然后回来-您还需要先确认电子邮件,然后一切正常。此步骤还有几个步骤。首先,我们需要将默认的持久性引擎设置为myopenhab(持久性是后面的指南,但是,无论如何,我们都需要进行一些基本设置,以便将数据“导出"到在线服务并使它对IFTTT可见) 。为此,请打开openhab.cfg,找到显示为 persistence:default = 的变量并将其更改为 persistence:default = myopenhab 。保存。

    最后,在 configuration / persistence 文件夹中创建一个名为 myopenhab.persist 的新文件,并粘贴以下规则。

    Strategies {	default = everyChange}Items {	* : strategy = everyChange}

    您现在不需要了解这一点,但是知道它上面写着“更改时保存每个项目状态"。

    要与IFTTT连接,请转至OpenHAB频道–您需要进行身份验证并授予其对您的MyOpenHAB帐户的访问权限。另请注意,在您的商品至少更改一次之前,它们将不会在IFTTT的商品列表中显示,因此,如果看不到它们,请先打开或关闭某些内容,然后重新加载。恭喜,您现在可以完全使用IFTTT来访问OpenHAB系统中的所有内容!

    使用REST的蓝牙状态传感器

    不久前,我向您展示了如何制作自动办公室门锁使用蓝牙扫描来检测用户的存在–我想将类似的东西引入OpenHAB。

    在Raspberry Pi以外的任何平台上,这都非常简单,这要归功于现成的蓝牙绑定;不幸的是,由于关键的Java文件需要针对ARM体系结构进行重新编译,添加到绑定中然后重新构建绑定,因此它在Pi上不起作用。可以说,我已经尝试过了,它非常复杂,无法正常工作。但是,有一个更简单的解决方案也可以很好地介绍OpenHAB的纯粹可扩展性:我们将简单地修改我们以前的Python脚本,使其直接向OpenHAB RESTful接口报告。

    另外:RESTful接口意味着您可以使用其内置的Web服务器与系统进行交互,只需调用URL并传入或获取数据即可。您可以访问以下URL在自己的服务器上查看此示例的简单示例:http://raspberrypi.local:8080 / rest / items-它输出所有已定义项目的编码列表。它具有强大的功能,因为它可以充分发挥OpenHAB的潜力,并允许您编写自定义接口。或反过来使用,以在没有特定绑定的情况下报告传感器的状态。我们将使用此功能来报告特定蓝牙设备的存在而无需诉诸蓝牙绑定。

    首先向您的<添加一个新的 Switch 项目em> home.items 文件。我将其称为“ JamesInOffice",并且将其设置为开关而不是简单的开/关触点,以便在手机死机时可以手动控制自己的状态。

    Switch JamesInOffice "James in Office" (Office)

    注意,尚未定义图标,或未关联特定的绑定。

    下一步,插入兼容的USB蓝牙适配器,并安装一些与之交互的基本工具。

    sudo apt-get install bluez python-bluez python-pipsudo pip install requestshcitool dev

    最后一个命令应显示您的蓝牙适配器。如果未列出任何内容,请尝试使用其他适配器,因为您的适配器与Linux不兼容。下一步是找到设备的蓝牙硬件地址。

    wget https://pybluez.googlecode.com/svn/trunk/examples/simple/inquiry.pypython inquiry.py

    确保手机在“蓝牙设置"页面上处于打开状态(将其置于配对/公共模式),并且显然蓝牙已激活。您应该会找到列出的十六进制硬件地址。

    从Pi用户主目录中,创建一个新的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

    向下滚动至底部,然后单击退出0,添加以下行:

    python /home/pi/detect.py &

    &符号表示“在后台执行此操作"。继续运行脚本(如果尚未运行),然后打开OpenHAB界面。如果您已将其添加到组中,请单击该组。更新大约需要10秒钟,但是您会看到默认的灯泡图标是亮还是灭,这取决于是否检测到您的手机。检查日志文件是否没有任何反应,可能是您使用了错误的项目名称。

    OpenHAB Mobile App

    尽管您当然可以从移动设备使用Web界面设备,OpenHAB具有适用于iOS和Android的本机应用程序-与默认的浏览器界面相比,它们看起来更美观很多。在设置屏幕上,输入本地URL作为您到目前为止一直在使用的内部IP,包括端口号。对于远程URL,请输入 https://my.openhab.org ,然后输入您在注册时输入的用户名(电子邮件)和密码。如果尚未注册MyOpenHAB,只需将身份验证和远程URL保留为空白,但只能通过本地Wi-Fi访问系统。

    前进并获得帮助< /

    可以添加到OpenHAB控制器中的大量自定义功能和简洁功能确实是史诗般的。除了具有绑定的受支持设备的广泛列表之外,您还可以使用RESTful接口,HTTP扩展和IFTTT来读取或控制任何类型的IoT设备,然后再读取其中的内容(尝试一些我们的创造性照明想法)。是的,安装绝对是一件很痛苦的事情,但是没有一个商业系统可以像定制的OpenHAB系统那样强大。

    那对我来说,这次旅行并不容易,这就是正是我编写此指南的原因,以简化您的流程。而且,如果您发现OpenHAB系统不堪重负,那么在Raspberry家庭自动化方面还有其他选择,例如使用Raspberry Pi自动化车库门。

    请继续关注PCPC.me,以获取涵盖高级内容的指南。您可以设置Z-Wave和其他炫酷技巧。

    如果您需要本指南特定部分的帮助,请在评论中提问。如果您需要其他绑定或我们尚未涉及的高级主题的帮助,欢迎访问OpenHAB官方论坛。

    标签: 家庭自动化 Longform指南 智能集线器