Amazon Echo Bridge 
Amazon Echo Bridge 允许您快速模拟 Phillips Hue 桥接器,从而能够将 Amazon Echo 无缝集成到各种家庭自动化系统中。
此外,借助易于使用的 POST/PUT REST API,使用您自己的嵌入式应用程序让设备与 Amazon Echo 配合运行,从未如此简单!
发布说明:
v0.4.0 变更日志:
- 启动时必须指定 --upnp.config.address=
- 目前支持超过 25 个模拟设备,当前设置为 75 个,可通过指定 --emulator.portcount= 以 25 个设备为增量进行增加,默认为 3,因此 3*25 = 75 个总设备数。其工作原理是获取 emulator.baseport 并从 baseport 到 baseport+portcount 顺序打开 n 个端口
- 放宽了 http 响应代码,支持 200 到小于 300 之间的任何 http 响应代码,以支持行为异常的资源
其他说明: 我看到有些人能够运行此程序,但无法发现设备。我建议检查具有重复名称的设备,因为我发现这会导致 echo 拒绝所有设备。懒惰的方法是删除 /data 目录并重新开始。
快速入门
目前有三种不同的方式来运行预构建的 jar 文件:
Java - java -jar amazon-echo-bridge-*.jar
Maven - mvn spring-boot:run
Docker - docker build -t amazon-echo-ha-bridge . docker run -ti --rm --net=host amazon-echo-ha-bridge
此外,还建议您传递命令行参数 --upnp.config.address 和 --server.port 以覆盖当前实现的硬编码值。
示例:
--upnp.config.address=192.168.1.240 --server.port=8081
应用程序启动并运行后,您可以通过访问 http://YOURIP:PORT/configurator.html 来访问配置器。
使用页面底部的表单输入您的设备,添加要解析的命令 URL(如果您使用 OpenHAB 等系统,这很有用),然后保存。
通过说“Alexa, discover my devices”指示您的 Amazon Echo 了解您的设备,然后您就设置好了!
使用
现在,您可以通过说“Alexa, Turn on the office light”或您为已配置设备指定的其他名称,使用 Amazon Echo 控制设备。
要查看或移除 Alexa 已知的设备,您可以使用移动应用中的 菜单 / 设置 / 已连接家庭。如果您从 Amazon Echo Bridge 中移除设备,则需要执行此操作。
构建
如果您希望内部配置自己的 Amazon Echo Bridge 构建版本,则需要满足一些要求。
安装 Maven:
Ubuntu/Linux - sudo apt-get install maven
OS X - 安装 Homebrew 并运行 brew install maven
进行修改:
例如,服务器默认在端口 8080 上运行。如果您已经在 8080 上运行了一个服务器(如 openHAB),您可以在构建 jar 之前编辑 server.port 中的 src/main/resources/application.properties 为您想要的端口。
或者,您也可以传入一个命令行参数来覆盖 server.port。
编译:
要自行构建 jar 文件,请进行修改,然后像这样运行 Maven:
mvn install
然后定位 jar 文件,并按照上述说明启动服务器。默认情况下,maven 会将 jar 文件放置在 target 目录中。java -jar target/amazon-echo-bridge-*.jar
POST/PUT REST API
除了通过 Configurator 页面注册设备外,您还可以通过 REST 向 Amazon Echo Bridge 推送设备信息,如下所示:
POST http://host:port/api/devices
{
"name" : "bedroom light",
"deviceType" : "switch",
"onUrl" : "http://192.168.1.201:3480/data_request?id=action&output_format=json&serviceId=urn:upnp-org:serviceId:SwitchPower1&action=SetTarget&newTargetValue=1&DeviceNum=41",
"offUrl" : "http://192.168.1.201:3480/data_request?id=action&output_format=json&serviceId=urn:upnp-org:serviceId:SwitchPower1&action=SetTarget&newTargetValue=0&DeviceNum=41"
}
通过使用表达式 ${intensity.percent} 并设置 0-100 的值,或使用 ${intensity.byte} 并设置 0-255 的值,也支持调光功能。
示例:
{
"name": "entry light",
"deviceType": "switch",
"offUrl": "http://192.168.1.201:3480/data_request?id=action&output_format=json&serviceId=urn:upnp-org:serviceId:SwitchPower1&action=SetTarget&newTargetValue=0&DeviceNum=31",
"onUrl": "http://192.168.1.201:3480/data_request?id=action&output_format=json&DeviceNum=31&serviceId=urn:upnp-org:serviceId:Dimming1&action=SetLoadLevelTarget&newLoadlevelTarget=${intensity.percent}"
}
您还可以推送额外的可选字段,例如:
-
contentType,目前未进行验证
-
httpVerb,仅支持 POST/PUT/GET
-
contentBody:您的 POST/PUT 请求体
如下所示:
{
"name": "test device",
"deviceType": "switch",
"offUrl": "http://192.168.1.201:3480/data_request?id=action&output_format=json&serviceId=urn:upnp-org:serviceId:SwitchPower1&action=SetTarget&newTargetValue=0&DeviceNum=31",
"onUrl": "http://192.168.1.201:3480/data_request?id=action&output_format=json&DeviceNum=31&serviceId=urn:upnp-org:serviceId:Dimming1&action=SetLoadLevelTarget&newLoadlevelTarget=${intensity.percent}",
"contentType" : "application/json",
"httpVerb":"POST",
"contentBody" : "{\"fooBar\":\"baz\"}"
}