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

Control Philips Hue Bulbs with Indoor Geofencing

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

我刚开始工作,目前正在阅读几十篇关于室内导航的文章。看来最好的方法是通过 RSSI 定位系统。

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

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

即使我会购买一个 Xbee 模块和一个 Arduino 板,是否可以读取灯泡的 RSSI?是否可以以任何方式在 Android 中使用此信息?

有没有人对这个问题有实践经验?

我真的很感谢你给我的每一个提示/意见/解释。

您好, 迈克尔

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

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

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

BLE 支持从 4.3 版开始融入 Android,测量信号强度、估计到信标的距离等都很容易。然后它只是根据哪个信标对桥进行 REST 调用的情况最接近 phone。如果您有 Raspberry Pi 3,您可以将其配置为 BLE 信标,以便在购买任何专用信标之前进行测试。

就 Hue 集成而言,我可能会在桥上为每个房间设置一个新传感器,并让 phone 根据每个信标的信号强度修改此传感器的值。然后在桥上我会创建规则来响应这些传感器值的变化。这将使部署涉及最少代码的 Android 应用程序变得容易,并使用 Hue 桥创建更复杂的条件规则,例如如果有人快速进出房间时该怎么做,处理同一房间中的多个人等等

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

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

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

以下是我如何在我的设置中使用传感器的示例,它与 raspberry pi:

一起工作
  • 电视状态 - 我的电视有 IP 控制,我有一个 python 脚本轮询 每秒查看它是打开还是关闭。当这个值 更改 python 脚本更新我的 Hue 上的电视状态传感器 桥.
  • 每个家庭成员的家庭传感器 - 我有一个 433mhz 门 打开我家的前门。每当门被打开 这会触发一个延迟的 python 脚本,该脚本会 ping(静态)IP phone 每个家庭成员在 LAN 上的地址 找出谁在家。然后它在 为所有在家的人架起通往 1 的桥梁。
  • 一夜之间我们使用无线充电器,当每个 phone 放在 无线充电器它更新那个人的家庭传感器值 从 1 到 2.

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

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

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

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

我想添加 miknik 遗漏的一些信息,但我还没有资格发表评论...

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

其次使用 RSSI 变化很大,否则人们早就通过这些值进行地理定位了。即使您采用最简单的方法并且仅使用 RSSI 值来确定与设备的距离,该值也可能会波动 +-100%,仅基于布线、存在或活动的其他设备、您的 body 等。技术上什至可以肯定天气和占星现象会对此产生影响。为此,大多数方法都集成了 LQI 值,该值指示 link 质量,以影响他们认为 RSSI 的可靠性。 LQI 可与 RSSI 一起报告。

考虑到您必须使用的内容,miknik 的其余策略非常好。

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

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

之后为了控制灯光,将保存的数据处理成JSON格式。如果智能手机随后指向其中一盏灯并且记录的数据(JSON 文件中的值)与实际实时值(区域、Hue 灯 ID、方向等)匹配,则 lamp 是可控的,可以在单击按钮时切换 on/off。

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

再次感谢大家在项目开始时给予的帮助,尤其是关于桥的控制和操作的资料是我进入项目的切入点,对我帮助很大!

您好!