精神api响应成功但没有任何反应

时间:2017-03-21 23:59:03

标签: php api udp

我正在尝试使用http://www.limitlessled.com/dev实现milight api。

我写了一个基于它的小PHP脚本。 根据文档,我总是收到UDP请求的良好响应,所有请求都是成功但没有任何反应(链接指示灯,打开/关闭等等)。

到目前为止我做了什么:

 <?php

function getResponse($command)
{
    $msg     = vsprintf(str_repeat('%c', count($command)), $command);


    $ip   = "255.255.255.255";
    $port = 5987;
    $buf  = null;
    socket_sendto($sock, $msg, strlen($msg), 0, $ip, $port);

    while (42) {
        $ret = socket_recvfrom($sock, $buf, 22, 0, $ip, $port);
        if ($ret === false) {
            die(socket_strerror(socket_last_error()));
            break;
        } else {
            break;
        }
    }

    return $buf;
}

if (($sock = socket_create(AF_INET, SOCK_DGRAM, SOL_UDP)) !== FALSE) {

    socket_set_option($sock, SOL_SOCKET, SO_BROADCAST, 1);
    socket_set_option($sock, SOL_SOCKET, SO_RCVTIMEO, array(
        "sec" => 5,
        "usec" => 0
    ));

    /** GET WIFI BRIDGE SESSION */

    $command = array(
        0x20,
        0x00,
        0x00,
        0x00,
        0x16,
        0x02,
        0x62,
        0x3A,
        0xD5,
        0xED,
        0xA3,
        0x01,
        0xAE,
        0x08,
        0x2D,
        0x46,
        0x61,
        0x41,
        0xA7,
        0xF6,
        0xDC,
        0xAF,
        0xD3,
        0xE6,
        0x00,
        0x00,
        0x1E
    );

    $buf = getResponse($command);

    $checksum = dechex(0x3D + 0x00 + 0x00 + 0x08 + 0x00 + 0x00 + 0x00 + 0x00 + 0x00 + 0x01 + 0x00);

    /** LINK COMMAND */

    $command  = array(
        0x80,
        0x00,
        0x00,
        0x00,
        0x11,
        bin2hex($buf[19]),
        bin2hex($buf[20]),
        0x00,
        0x00,
        0x00,
        0x3D,
        0x00,
        0x00,
        0x08,
        0x00,
        0x00,
        0x00,
        0x00,
        0x00,
        0x01,
        0x00,
        $checksum
    );

    $buf = getResponse($command);


    for ($i = 0; $i < strlen($buf); $i++)
        echo bin2hex($buf[$i]) . " ";

    socket_close($sock);
}

?>

我得到的是:88 00 00 00 03 00 00 01。

我也尝试使用LimitlessLED Wifi Bridge工具,我可以从日志中读到:

Start Wifi Bridge Session...
Send UDP commands to 192.168.0.15 port 5987
Sent: 20 00 00 00 16 02 62 3A D5 ED A3 01 AE 08 2D 46 61 41 A7 F6 DC AF D3 E6 00 00 1E
Received: 28 00 00 00 11 00 02 F0 FE 6B 1E 26 62 72 1D E3 68 00 01 DA 01 00
LimitlessLEDWifiBridgeSessionID1 is DA
LimitlessLEDWifiBridgeSessionID2 is 01
IP Address is 192.168.0.15
MAC Address is FE:6B:1E:26:62:72
Sequence Number is 02
Checksum is 46
Sent: 80 00 00 00 11 DA 01 00 02 00 3D 00 00 08 00 00 00 00 00 01 00 46
Command SUCCESSFUL.
Received: 88 00 00 00 03 00 02 00
Command completed.

一切似乎都很好,但没有任何反应,我无法控制任何光线。 我完全陷入困境,有人有想法吗?

我正在使用iBox2作为控制器和Mi-Light rgbw led灯泡系列。

谢谢

1 个答案:

答案 0 :(得分:0)

我弄清楚出了什么问题。

首先我注意到CW灯泡和WW灯泡之间的要求并不完全相同。 例如,您必须发送以使用CW灯泡打开灯的请求是:

[ 0x31,0,0,0x08,0x04,0x01,0,0,0,zoneID ]

与WW灯泡的相同要求是:

[0x31, 0x00, 0x00, 0x07, 0x03, 0x01, 0x00, 0x00, 0x00, zoneID]

我也不应该使用“bin2hex”功能,而是“解压缩”。

我实施了我在那里所做的事情: https://github.com/winosaure/MilightAPI

我希望它可以帮助别人..