garrcomm / php-tradfri
与宜家TRÅDFRI网关通信的PHP库
Requires
- php: >=7.3
- ext-json: *
Requires (Dev)
- phpunit/phpunit: ^9.4
- squizlabs/php_codesniffer: ^3.5
This package is auto-updated.
Last update: 2024-09-06 20:55:09 UTC
README
此代码目前仍在开发中。它的接口可能会在首次发布前发生很大变化。
此库通过CoAP连接到宜家TRÅDFRI网关,并提供一个简单的Web界面,以便与您的宜家智能家居设备交互。
此存储库仅包含库。要获取一个完整工作的客户端,请参阅https://bitbucket.org/garrcomm/tradfri-web-application。
如何使用
首先,初始化一个TRÅDFRI客户端。最好存储客户端数据并重复使用,因为网关不喜欢内存中有太多的客户端。
<?php
$ip = '192.168.2.170';
$securityCode = 'f00b4r';
// Initiate a TRÅDFRI client
$tradfri = new \Garrcomm\Tradfri\Service\Tradfri($ip, '/usr/local/bin/coap-client');
// First time; fetch a client ID and pre-shared key
$clientData = $tradfri->authenticate($securityCode);
当拥有客户端数据后,我们可以继续如下
$ip = '192.168.2.170';
// Initiate a TRÅDFRI client
$tradfri = new \Garrcomm\Tradfri\Service\Tradfri($ip, '/usr/local/bin/coap-client');
// Log in using known credentials
$tradfri->setClientIdentity($clientData['clientIdentity'], $clientData['privateSharedKey']);
// Turn on all plugs that are currently off
foreach($tradfri->listDevices() as $device) {
if ($device instanceof \Garrcomm\Tradfri\Model\TradfriPlug && !$device->isOn()) {
$device->turnOn();
}
}
设备可以是扩展BaseTradfriDevice的任何类。每个设备都可以有自己的功能。有几种方法可以看到设备有哪些功能
// instanceof check
if ($device instanceof \Garrcomm\Tradfri\Model\TradfriLight) {
// I'm a lamp, so you can display me with a lamp icon.
}
// method_exists check
if (method_exists($device, 'turnOn')) {
// I'm either a plug, or a lamp, or maybe something else? But you can turn me on!
}
if (method_exists($device, 'setBrightness')) {
// I'm very likely some kind of a lamp. You can brighten me up!
}
要查看更多用法,请查看https://bitbucket.org/garrcomm/tradfri-web-application中的代码
coap-client依赖
对于PHP,我们没有太多的依赖。只需PHP 7.3+
和ext-json
(这是PHP默认安装的)。但我们确实需要一个coap-client二进制文件。有几种方法。
在我的Web应用程序示例中,包含了一个已经包含此二进制文件的docker容器。您也可以通过执行在https://github.com/glenndehaan/ikea-tradfri-coap-docs/tree/master/scripts中找到的脚本来自行编译。
第三种方法,在开发过程中,您可以使用此存储库中tests/CoapClient文件夹中可用的coap-client
模拟器。此脚本也用于单元测试,并模拟了我的宜家智能家居设置。
与IKEA TRÅDFRI产品测试
为了测试,我先使用了我家里已有的设备。后来我又购买了一些额外的设备,以便测试更多的功能。有关我在测试期间使用的设备完整列表,请参阅supported-devices.md。
其他设备也可能可以使用,但我还没有测试它们。此外,请注意,传感器/遥控器/调光器是输入设备。就像这个应用程序一样,它们旨在写入输出设备。因此,尽管我检测到了这些设备,但无法与它们交互,除非读取它们的电池状态和元数据。
我愿望清单上的物品
- FYRTUR遮光卷帘
我的家庭办公室有两个并排的窗户,一个宽160cm,一个宽60cm。目前FYRTUR系列的大小无法覆盖整个窗户组。但这个项目未来也支持窗帘会很好。 - TRÅDFRI LED灯泡GU10 CWS乳白色345流明
在我的阁楼上,我有四个在乐高火车桌上的位置。在某个时候,我想在那里添加多色灯光。
Windows开发者的提示
在bin
文件夹中,存在一些批处理文件,可以简化开发。
如果您安装了Windows版的Docker Desktop,您可以使用bin\composer.cmd、bin\phpcs.cmd、bin\phpunit.cmd和bin\security-checker.cmd作为Composer、CodeSniffer、PHPUnit和安全检查器的快捷方式,无需在您的机器上安装PHP和其他依赖。
在Bitbucket Pipelines中也使用了相同的Docker容器和工具来自动测试此项目。
外部资源
在我开始这个项目之前,我使用Google搜索类似的内容。我没有找到很多可以使用的PHP相关内容,但我找到了一些有用的资源。
- libcoap coap-client的一个基本的PHP包装器。我没有使用这个,因为它只有一个提交,不是一个完整的应用程序,也不是一个现成的包,但它仍然是一个很好的灵感来源;
https://github.com/MiniMeOSc/phpTradfri - 关于TRÅDFRI网关如何与CoAP协同工作的非常详细的文档
https://github.com/glenndehaan/ikea-tradfri-coap-docs - 许多常量的列表,有助于识别CoAP协议中的数值
https://gist.github.com/r41d/5d62033f88b3046bccf406c9158d4e59