使用室内地理围栏控制飞利浦 Hue 灯泡

Posted

技术标签:

【中文标题】使用室内地理围栏控制飞利浦 Hue 灯泡【英文标题】:Control Philips Hue Bulbs with Indoor Geofencing 【发布时间】:2017-12-05 10:06:46 【问题描述】:

对于一个研究项目,我必须确定是否可以根据地理位置控制室内飞利浦 Hue 灯泡。 飞利浦 Hue 允许通过 GPS 进行地理围栏,例如,如果您离开家或回家,但是否有可能提高地理围栏的准确性? 这个想法是在离开一个房间并进入下一个房间时切换灯。

我的工作刚刚起步,目前正在阅读数十篇有关室内导航的文章。似乎最好的方法是通过 RSSI 的定位系统。

最终,智能手机上应该有一个应用程序,当智能手机在灯泡的特定范围内时,它会自动切换灯光。据我估计,最大的问题是大多数智能手机(目前)还不支持 Zigbee。

所以在我深入探讨这个问题之前,我想问一下,是否有任何可能的方法来实现这一点。是否可以读取飞利浦 Hue 灯泡的信号强度?有没有我还没有想到的另一种方法?

例如,即使我会购买 Xbee 模块和 Arduino 板,是否可以读取灯泡的 RSSI?是否有可能以任何方式在 android 中使用这些信息?

有人对这个问题有实际经验吗?

我非常感谢您能给我的每一个提示/意见/解释。

您好, 迈克尔

【问题讨论】:

【参考方案1】:

我不知道你是否还记得我们在这里的小对话,但我只想告诉你这个项目。那段时间我遇到了很多问题,项目也发生了很大的变化。 老实说,整个项目与我原来的问题没有太大关系了:D

今天我完成了该项目的工作(这是我的硕士论文),并提出了一个应用程序,该应用程序能够基于 Beacon Regions 通过指向它们来记录和控制 Hue 灯。因此,如果输入支持的区域并且智能手机指向 Hue 灯,则可以单击一个按钮来保存值“UUID”、“Major”、“Minor”、“LightID”、“Room name”、“Pointing direction ”和“指向倾斜”(基于智能手机传感器的值)。

之后,为了控制灯光,将保存的数据处理成 JSON 格式。如果智能手机然后指向其中一个灯并且记录的数据(JSON 文件中的值)与实际的实时值(区域、色调光 ID、方向等)匹配,则灯是可控的并且可以打开/关闭按钮点击。

因此,不是根据灯的接近程度来打开和关闭灯(正如我在最初的问题中谈到的),现在可以在第一次记录这些点后从定义区域内的任何点进行切换该应用程序已使用。

再次感谢您在项目开始时的帮助,尤其是关于如何控制和使用桥梁的信息是我进入项目的切入点,对我帮助很大!

您好!

【讨论】:

对不起,我才看到这个。感谢您的更新,听起来您的最终结果比您最初的目标更令人印象深刻。该项目是纯粹的学术项目还是您自己实际使用它?我已经确定的房间监控解决方案是监控房间内其他设备的功耗,并使用这些数据来确定房间内是否有人。对我来说效果很好,并且具有完全自动化的额外优势。【参考方案2】:

我想添加一些 miknik 遗漏的信息,但我还没有评论的声誉......

首先引用的信标不是 BLE,它们是 802.15.4 信标,并受 ZigBee、Z-Wave、蓝牙、BLE、Wifi 等支持。它们是此类项目的绝佳资源,但不是所有设备都必须支持信标,这取决于协议(Zigbee 等)和产品的开发人员(在这个行业中,每个人都喜欢偷工减料)。

第二次使用 RSSI 变化很大,否则人们很久以前就会通过这些值进行地理定位。即使您采用最简单的方法并且仅使用 RSSI 值来确定与设备的距离,该值也可以根据接线、存在或活动的其他设备、您的身体等波动 +-100%。从技术上讲,甚至某些天气和占星现象会影响到这一点。为此,大多数方法集成了指示链路质量的 LQI 值,以影响他们认为 RSSI 的可靠性。 LQI 可与 RSSI 一起报告。

考虑到你必须使用的东西,miknik 的其余策略非常好。

【讨论】:

beacons I referenced 是 BLE。它们在与 802.15.4 设备相同的频率范围内运行,但在数据速率、调制、带宽和网络模型方面存在一些差异。 802.15.4 协议规定了 2 种网络拓扑,p2p(可扩展为网状)或星形。相关区别在于 802.15.4 实现设备之间的请求/确认通信,而 BLE 信标盲目地传输广告数据包,无法连接到客户端设备或从客户端设备接收任何数据。客户保持匿名,无法被追踪。 我对 BLE 的细节不够熟悉,无法知道他们是否出于某种原因对不同的数据包类型使用完全相同的名称,但 ZigBee 和 ZWave 都有盲信标。它们可用于查找网络等,但不允许传递任何实际数据,这听起来与您使用“广告包”所得到的完全一样。【参考方案3】:

室内定位的行业标准方法似乎是使用低功耗蓝牙信标的 RSSI。除非您的项目是特定于 Zigbee 的,否则我会选择这种方法并忘记尝试与 Zigbee 网络集成。

我玩过一些 BLE 信标。您可以根据需要更改其传输功率,最低设置会导致信标仅在几英尺外对手机可见。

每个房间都有一个信标,我不明白为什么这对你不起作用。如果房间之间没有门,那么每个房间里可能有一对信标会更可靠。

BLE 支持从 4.3 版开始融入 Android,它可以轻松测量信号强度、估计到信标的距离等。然后根据哪个信标离手机最近,只需对网桥进行 REST 调用即可。如果您有 Raspberry Pi 3,则可以在购买任何专用信标之前将其配置为 BLE 信标进行测试。

在色调集成方面,我可能会在每个房间的桥上设置一个新传感器,并让手机根据每个信标的信号强度修改这个传感器的值。然后在桥上,我会创建规则来对这些传感器值的变化做出反应。这将使部署包含最少代码的 Android 应用程序变得容易,并使用 Hue 桥创建更复杂的条件规则,例如如果有人快速进出房间该怎么办,处理同一个房间里的多人等。

编辑添加以下内容以回应您的评论,对冗长的帖子表示歉意!

在 Hue API 中,可用资源之一是传感器。如果您购买运动传感器、电灯开关等 Hue 产品,这些产品将作为单独的传感器添加到桥接器中。但是,您也可以使用 API 创建自己的通用传感器,并使用这些传感器存储您通过 REST 接口更新的值。您的自定义传感器的值可以在桥的规则中用作条件和触发器,您甚至可以通过 API 读取传感器值以在您自己的应用程序中使用。这是系统变得非常可定制的地方。

当您使用 Android 进行开发时,我建议您使用 Tasker 应用和 RESTasker 插件,因为这提供了一种与 Hue 桥集成并对 BLE 传感器做出反应的简单方法。

以下是我在设置中如何使用传感器的示例,这些传感器与树莓派配合使用:

电视状态 - 我的电视有 IP 控制,我有一个 python 脚本轮询 每秒检查一次它是打开还是关闭。当这个值 更改 python 脚本更新我的 Hue 上的电视状态传感器 桥。 每个家庭成员的家庭传感器 - 我有一个 433mhz 的门 打开我家的前门。每当门打开 这会触发一个延迟的 python 脚本,它会 ping (静态)IP 局域网上每个家庭成员的电话地址 确定谁在家。然后它将 Home 传感器值设置在 为在家中的每个人搭建通往 1 的桥梁。 一夜之间我们使用无线充电器,当每部手机都放在一个 无线充电器它会更新那个人的家庭传感器值 从 1 到 2。

因此,桥接器现在可以通过这几个自定义传感器触发基于谁在家、他们是否在床上以及电视是否开着的规则。我的一些规则是:

如果客厅灯亮着,电视也开着,调暗 灯,如果电视关闭,请再次增加亮度。如果 电视已打开,外面的亮度为 0(从 Hue 运动中读取 传感器外),然后慢慢将灯泡色调变为红色。 一旦屋子里的最后一个人放下所有灯,就关掉所有的灯 手机上的无线充电器。一个 python 脚本也可以关闭电视 关闭它一直打开。 当我将手机放在无线充电器上时,Tasker 任务会读取 从桥上为我女儿的家庭变量。然后它设置我的闹钟 如果她不在这里会比平时晚,因为我不必带她去 学校。 如果我连接到家庭 wifi 并且我的电话响了或我拨打了电话 Tasker 任务读取传感器变量。如果家里没人 并且电视已打开 Tasker 将 IP 命令发送到我的电视以静音 音量,一旦通话结束,它会再次取消静音。

就接近您的项目而言,我会在桥上创建一个传感器,以配合房屋中的每个房间,并将初始值设置为 0。然后在 Tasker 中,我将扫描最近的 BLE 传感器。假设最近的 BLE 传感器是客厅,我会让 Tasker 从网桥读取客厅传感器变量(值为 0),然后将值加 1 并将其写回网桥(现在值为 1)。我会让 Tasker 保存最后一次更新的传感器是客厅的变量,并继续扫描 BLE 信标。现在,如果 Tasker 发现一个比客厅更近的不同 BLE 信标,我会让它再次从桥上读取客厅传感器(仍然是 1),从值中减去 1 并将其写回(所以现在是 0)然后重复上面的过程,将手机现在最接近的房间的传感器值加 1。 在桥上,我会制定规则,如果房间的传感器值 = 0,则关闭该房间的灯,如果传感器值> 0,则打开该房间的灯。因为您正在读取现有值并在电话进入房间时对其进行添加或减去,所以系统可以处理房屋中的多个电话/人。如果两个人在一个房间里,那么房间传感器的值将是 2,所以灯只会在最后一个人离开时关闭,而不是在其中一个人去喝水或其他什么时关闭。

如您所知,我花了很长时间修补我的 Hue,但这是一个很棒的学习过程。我对编程知之甚少,发现 API 很容易理解,它的灵活性和易于与其他东西集成的特点启发了我精通多种语言并在此过程中制作了一些很酷的项目。

【讨论】:

哇,非常感谢您的想法/解释!我一定会朝这个方向走。我了解您的方法的主要原理,但是“在每个房间的桥上设置传感器”是什么意思? 我已经编辑了我的答案以包含更多信息,希望这会有所帮助。 哇!首先,让我感谢您为答案付出的时间和精力。这真的有助于我理解这个项目的通用工作流程。其次,由于您的陈述,我刚刚为我的项目获得了一些额外的动力。谢谢你。 :) 不客气。当我开始编码时,我花了几个小时在这个网站上寻找关于如何做几乎所有事情的答案。能够帮助别人改变是件好事。让我知道你的项目进展如何,我很想听听你的想法。 我一定会这样做的。

以上是关于使用室内地理围栏控制飞利浦 Hue 灯泡的主要内容,如果未能解决你的问题,请参考以下文章

python 使用Chromecast时(或更具体地说,当某些应用程序处于打开状态时),快速破解使飞利浦Hue灯泡变暗。

如何远程连接后端服务与飞利浦 Hue Bridge?

使用 Applescript 和 cURL 控制飞利浦 Hue 照明系统

飞利浦HUE未使用'飞利浦Hue娱乐'(通过DTLS)回复

如何使用 philips hue API 创建“场景”

收听原始蓝牙键盘数据