飞利浦色调照明系统使您可以通过移动应用程序或您编写的任何可以连接到Internet的应用程序来控制房屋中的照明。系统的中心是Hue Bridge,这是一种通过Zigbee HA无线电协议与兼容灯通信的以太网连接的设备。飞利浦制作了一系列兼容色调的灯,许多第三方灯可以使用相同的协议使用。 Iconnecthue保留了与色相兼容的灯的全面列表。主要以欧元市场为中心,但仍然非常有用。
每个色调桥是其自己的HTTP Web服务器,可以使用色调REST API控制。有许多编程语言中可用的色调的库。这里的教程全部使用p5.js,普通JavaScript或使用Node.js或基于Arduino的MicroController的服务器端的JavaScript。
色相API V2最近发行,最终将取代V1。这些注释目前是指V1(2021年1月19日),并且仍然有效。色调API V2具有HTTPS,以及V1的一些破坏变化。
为了开始编程色调应用程序,您需要访问色调桥。您也需要一个色调帐户。开发人员帐户是免费的。保持色相开发人员网站链接方便。
开发时,适用于Android或iOS的HUE应用程序很有帮助,因为它在您的项目还没有时起作用。色调Essentials应用程序也是一个非常有用的选择。
每种色调都有一个调试接口,可在http://$ADDR/debug/clip.html替换为桥梁的IP地址替换$ADDR 。当您开发时,您可以使用它将API命令发送到桥梁以测试内容。
Peter Murray的Node.js的节点含量-API库是我测试过用于控制色调的各种node.js javascript库中最好的。
为了控制浏览器客户端的色相,P5.JS做得很好,因为它具有简单的HTTP请求API。当然,您也可以使用普通的JavaScript。
如果您使用任何Arduino Wifi-nable-abled板连接到您的Hue Bridge,则ArduinohttpClient库和Arduino_json库将很有用。 (注意:还有另一个以相同名称的JSON库,没有下划线。那不是这里使用的)。
如果您熟悉POSIX(linux/unix)命令行,则命令行工具卷曲有助于测试HTTP请求到您的桥梁。 curl在Windows命令接口中不可用,但是您可以通过Windows 10中的Linux或Cygwin将其获取,该应用程序是为Windows提供Linux Shell的应用程序。以下是有关使用卷曲来访问色调桥的一些详细信息。
除此之外,您还需要了解一些HTML和JavaScript,以及文本编辑器,命令行界面以及浏览器来尝试此站点上的示例。此处显示的命令行示例全部用于Linux或Unix,但使用Windows 10中的Linux的Windows子系统在Windows 10上工作。
您的应用需要使用唯一的用户名将您的应用程序识别到您的桥梁。如果您知道桥梁的IP地址,则此示例页面将简化这一点。您无法从远程服务器运行此页面;下载并从您的文件系统中浏览器中打开index.html文件。这是因为色相API版本1使用HTTP,而不是HTTP。
您还可以遵循Hue开发人员网站的入门说明。
当您正确做到时,您应该得到这样的回复:
[
{
"success": {
"username": "newusername"
}
}
]
现在,您准备为桥梁编写代码。无论您在哪种环境中进行编程,都将使用您在此处建立的用户名。
调试夹接口是您可以在桥上测试功能的页面。它的地址是:
http://your.bridge.ip.address/debug/clip.html
它可用于将任何API命令发送到您的桥梁。一般查询字符串如下:
/api/$HUE_USER/command
通常,查询设备的状态是使用get命令完成的,然后使用put更改它们。例如,要查询所有灯的状态,请在URL字段中输入以下内容:
/api/$HUE_USER/lights
然后点击获取。要查询配置,请输入:
/api/$HUE_USER/config
然后点击获取。要打开灯1,请在URL字段中输入以下内容:
/api/$HUE_USER/lights/1/state
并在消息主体字段中输入以下内容:
{"on":true}
然后单击放置。灯应该亮起,桥应该回答:
[
{
"success": {
"/lights/1/state/on": true
}
}
]
有关色调API的更多信息,请参阅《色调入门指南》,《色调API核心概念》和完整的色调API文档。您需要创建一个免费帐户并登录以使用开发人员门户。
当您将桥式添加到网络中时,您应该能够使用HUE应用程序或Hue Essentials应用程序获取IP地址。但是,在像学校网络这样的复杂网络上,这可能行不通。您的移动设备和色调桥必须在同一本地网络上才能正常工作。例如,如果您的WiFi网络与有线以太网网络(桥梁寿命)不同,则您可能无法获得地址。但是,如果您可以获取桥梁的MAC地址,则可以在网络上搜索它。这就是方法
每个桥都有一个独特的您可以在桥底部找到MAC地址。在十六进制符号中,这是一个六字节的数字:
00:17:88:0B:14:48
一些桥梁只会显示最后三个字节。例如,上面的桥梁可能仅显示0B1448。有了较旧的色调桥,前三个字节将始终为00:17:88 。有了较新的,您可能还会看到EC:B5:FA 。
要在网络上查找桥梁,请确保您拥有本地网络的前三位数字,并且可以访问它,然后打开命令行接口并输入:
$ ping -c 5 xxx.xxx.xxx.255
其中xxx.xxx.xxx是您网络的前三个数字。例如,在路由器为172.16.130.1的网络上,您要输入172.16.130.255。有时,大型机构将使用两个不同的子网进行有线与无线网络,但它们仍将位于同一较大的本地网络上。
当网络上的设备响应您的PING请求时,您将获得响应列表。完成后,输入:
$ arp -a
您将在计算机可以看到的同一网络上获取所有设备的列表。寻找与桥梁的MAC地址匹配的一个,旁边的IP地址将是您的桥梁的IP地址。 MAC地址的最后三个字节从底部的标签中。如上所述,前三个可能是00:17:88或EC:B5:FA。这是一个典型的例子:
$ arp -a
? (192.168.0.1) at ac:b7:16:61:e3:77 on en0 ifscope [ethernet]
? (192.168.0.3) at 00:17:88:0B:14:48 on en0 ifscope [ethernet]
? (192.168.0.255) at ff:ff:ff:ff:ff:ff on en0 ifscope [ethernet]
在这种情况下,色相的IP地址为192.168.0.3。
您可以使用常规的移动色调应用程序在桥上搜索新灯。您也可以使用以下URL上的帖子请求从调试夹接口进行操作:
/api/$HUE_USER/lights/
填写$ addr的桥地址和$ hue_user的色相用户名。您应该得到这样的答复:
[[ { "success": { "/lights": "Searching for new devices" } }]
90秒后,您可以扫描像这样添加的新灯:
/api/$HUE_USER/lights/new
在卷发中:
$ curl -X GET http://$ADDR/api/$HUE_USER/lights/new
这将仅列出在扫描新灯后添加的新灯。
如果您想添加以前连接到其他桥梁的灯,则需要使用其他方法。将灯靠近您要控制的桥(比其他任何灯都更近,理想情况下,小于1米)。关闭连接到桥梁的所有其他灯,或确保它们比您想要的灯更远。
使用PUT请求发送以下调试夹接口:
/api/$HUE_USER/config/
在您的请求正文中:
{"touchlink": true}
在卷发中:
$ curl -X PUT -d '{"touchlink": true}' http://$ADDR/api/$HUE_USER/config
灯应眨眼几次,服务器将通过成功消息做出响应。现在,您可以使用上面描述的查找新灯请求添加灯。
如果TouchLink无法成功重置灯,则可能需要手动重置它。每个制造商都不同,但是一般的模式是打开和关闭三到五次的灯,然后将灯闪烁或略微昏暗,以表明其已重置。例如,使用GE链接灯泡,模式是:
对于一些第三方灯泡,例如CREE Connect或INTR灯泡,您可以以2秒的间隔进行操作。如有疑问,请三秒钟。
如果您有一个色调遥控器,则也可以使用它重置灯。为此,打开灯并将遥控器放置在灯的六英寸之内。按下电源并关闭按钮(或电源上的电源,场景在更近期的型号上选择按钮),并将其固定为直到灯泡闪烁。这将使灯置于其默认的工厂状态,并准备与新桥配对。
您可以在以下URL上使用删除请求从调试夹接口从桥梁删除灯:
/api/$HUE_USER/lights/1
在卷发中:
$ curl -X DELETE http://$ADDR/api/$HUE_USER/lights/1
用您希望删除的灯替换1。
要获取所有连接灯的状态,请使用GET请求从调试夹接口发送以下内容:
/api/$HUE_USER/lights/
在卷发中,那是:
$ curl http://$ADDR/api/$HUE_USER/lights/
这应该返回可用灯的列表,例如:
{"1":{"state":{"on":true,"bri":254,"hue":14314,"sat":172,"effect":"none","xy":[0.4791,0.4139],"ct":405,"alert":"none","colormode":"ct","reachable":true},"type":"Extended color light","name":"Hue color light 1","modelid":"LCT001","manufacturername":"Philips","uniqueid":"00:17:88:01:00:ff:9a:28-0b","swversion":"5.127.1.26581"}}
要打开灯,您需要知道它是哪个数字。然后,您像这样更改其状态:
使用PUT请求从调试夹接口发送以下内容:
/api/$HUE_USER/lights/4/state
在您的请求正文中:
{"on": true}
在卷发中,那是:
$ curl -X PUT -d '{"on":true}' http://$ADDR/api/$HUE_USER/lights/4/state
要将其关闭,请将请求的主体更改为
{"on": false}
您可以通过这种方式更改光的状态的任何属性。例如,从上面获取所有灯的状态下的状态下,请在光1上查看:
{"1":{"state":{"on":true,"bri":254,"hue":14314,"sat":172,"effect":"none","xy":[0.4791,0.4139],"ct":405,"alert":"none","colormode":"ct","reachable":true},
只要reachable属性是正确的,这意味着桥试图到达灯并得到响应,您就可以更改其他任何属性。这是一个颜色灯,具有三种模式,HS(用于色相,饱和),CT(用于彩色温度)和XY(用于CIE1931颜色空间中的X和Y尺寸)。如果您更改色调或饱和度,则灯的菌落变为HS,如果更改色温,则菌落将变为CT。如果发送XY值,则将菌落更改为XY模式。
不同的灯在其状态变量中将具有不同的属性,您可以更改。 P5.js草图将扫描每个灯在
MKR1000,MKR1010和NANO 33 IoT Arduino型号也可以通过HTTP请求控制色调桥。在此存储库中也有一些Arduino Hue示例,并带有注释。