garrcomm/php-tradfri

与宜家TRÅDFRI网关通信的PHP库

dev-master 2021-05-06 13:45 UTC

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.cmdbin\phpcs.cmdbin\phpunit.cmdbin\security-checker.cmd作为Composer、CodeSniffer、PHPUnit和安全检查器的快捷方式,无需在您的机器上安装PHP和其他依赖。

Bitbucket Pipelines中也使用了相同的Docker容器和工具来自动测试此项目。

外部资源

在我开始这个项目之前,我使用Google搜索类似的内容。我没有找到很多可以使用的PHP相关内容,但我找到了一些有用的资源。