65.9K
CodeProject 正在变化。 阅读更多。
Home

RingCentral 短信和飞利浦 HUE API

starIconstarIconstarIconstarIconstarIcon

5.00/5 (2投票s)

2020年4月26日

CPOL

4分钟阅读

viewsIcon

5619

一篇关于如何使用 RingCentral 在家中飞利浦 HUE 灯亮起时接收短信的简短文章。

引言

上次我写文章时,我提到我想学习如何使用 Ring Central 的 API 接收短信,并且我用 RingCentral + ngrok + Formstack 做了一个示例,你可以在 这里 查看。

我还提到我想开发一些可以在自己家中使用的东西,所以这次我决定使用 Ring Central 的短信 API,以便在我的房子里有灯亮起时通知我。
而且,如果有人在意你的灯是否亮着,那又是为什么呢?
好吧,我可以举出几个例子,但你可以自己想象一下。

我家里有几个飞利浦 HUE 灯,大部分在我的游戏室/办公室,卧室里有几个白色的灯。

Using the Code

你需要找到 HUE 飞利浦桥接网络的 IP 地址。

最简单的方法是尝试这个地址:https://discovery.meethue.com/,如果找不到,你也可以尝试 HUE 开发者 提供的详细步骤,或者像我一样,直接在你的路由器上查看 IP。我的家里有三个 Google 路由器,它们运行良好,我只是打开 Google Wifi 应用,查看所有连接的设备,然后寻找飞利浦 hue 的 IP。

现在我们有了 IP 地址,打开浏览器,输入你的 IP 地址,然后加上 /debug/clip.html。
这个端点是 HUE 桥接 API 的调试器。

让我们为我们的设备生成一个用户名。

  • 在 URL 字段中输入:/api
  • 在 Message Body 字段中输入:{“devicetype”:”my_hue_app#Juan“}
  • 点击 **POST** 按钮。

有什么问题?

注意到错误消息了吗?
“未按下链接按钮”
我们在这里缺少了重要的东西。

问题在于,在尝试创建用户名之前,我们必须亲自与设备进行身份验证。这是一个安全步骤,用于证明我们有权控制灯光。所以,请到你的 hue 桥接处按下链接按钮。

现在再次点击 POST,** voilà**!

我们现在已经创建了用户名。

现在你拥有一个具有权限的用户名,可以使用它与你的所有灯进行交互。

下一个端点

https://BRIDGEIPADRESS/api/USERNAME/lights/ 返回我们所有灯的当前信息。对于本教程,我只对名为 on 的灯的 state 属性感兴趣,这是一个布尔值(truefalse)。

这是 API 响应的一个示例。

2. PHP 脚本

现在让我们用一些代码来玩玩。我们需要创建一个简单的脚本来 GET 我们需要的灯的数据。在此示例中,我将获取灯的 name,并从 state 中,我需要知道 on 的值(truefalse)。

<?php
$curl = curl_init();

$internalIp = 'YOUR-IP';
$user       = 'YOUR-USERNAME';
$url        = $internalIp.'/api/'.$user.'/lights';

curl_setopt_array($curl,
    [
    CURLOPT_URL            => $url,
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_ENCODING       => "",
    CURLOPT_MAXREDIRS      => 10,
    CURLOPT_TIMEOUT        => 0,
    CURLOPT_FOLLOWLOCATION => true,
    CURLOPT_HTTP_VERSION   => CURL_HTTP_VERSION_1_1,
    CURLOPT_CUSTOMREQUEST  => "GET",
    ]
);

$response = curl_exec($curl);
$result   = json_decode($response, true);
curl_close($curl);

$lights = [];
foreach($result as $key=> $light) {

    $lights[$key]['state'] = $light['state']['on'];
    $lights[$key]['name']  = $light['name'];
}

var_dump($lights);

在这个小程序中,我们将把我们灯的 namestate->on 的信息保存在 $lights 数组的键值对中。

这里可以看到我的一些灯的一个例子。

3. 使用 Ring Central 短信 API 的 PHP 脚本

我们将使用 RingCentral 的 API 来通知我们,如果灯的 state->on 属性变为 true

我将不详细介绍如何设置 Ring Central 账户,你可以按照这个 帖子 中的步骤进行操作,查看第 5 步(设置 RingCentral 短信 API)。获得开发者账户非常简单快捷。

我们已经有了调用 HUE API 的第一部分。

<?php
require('vendor/autoload.php');

$curl = curl_init();

// Hue Lights credentials
$internalIp = 'YOUR-IP';
$user       = 'YOUR-USERNAME';
$url        = $internalIp.'/api/'.$user.'/lights';

// Call Hue Philips API
curl_setopt_array($curl,
    [
    CURLOPT_URL            => $url,
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_ENCODING       => "",
    CURLOPT_MAXREDIRS      => 10,
    CURLOPT_TIMEOUT        => 0,
    CURLOPT_FOLLOWLOCATION => true,
    CURLOPT_HTTP_VERSION   => CURL_HTTP_VERSION_1_1,
    CURLOPT_CUSTOMREQUEST  => "GET",
    ]
);

$response = curl_exec($curl);
$result   = json_decode($response, true);
curl_close($curl);

foreach($result as $key=> $light) {
    if ($light['state']['on'] === true){
        smsRingCentralAlert($light['name']);
    }
}

现在我们只需添加 RingCentral 的 API。

// Call Ring Central SMS API
function smsRingCentralAlert($light)
{

    $message = $light. ' light has been turned on';

$RECIPIENT                = 'YOUR-TEST-PHONE-NUMBER';
$RINGCENTRAL_CLIENTID     = '<code>YOUR-</code>CLIENT-ID';
$RINGCENTRAL_CLIENTSECRET = '<code>YOUR-SECRE</code>T';
$RINGCENTRAL_SERVER       = 'https://platform.devtest.ringcentral.com';
$RINGCENTRAL_USERNAME     = 'YOUR-USERNAME';
$RINGCENTRAL_PASSWORD     = '<code>YOUR-</code>PASSWORD';
$RINGCENTRAL_EXTENSION    = 'YOUR-EXTENSION';

$rcsdk    = new RingCentral\SDK\SDK
            ($RINGCENTRAL_CLIENTID, $RINGCENTRAL_CLIENTSECRET, $RINGCENTRAL_SERVER);
$platform = $rcsdk->platform();
$platform->login($RINGCENTRAL_USERNAME, $RINGCENTRAL_EXTENSION, $RINGCENTRAL_PASSWORD);

$platform->post('/account/~/extension/~/sms',
    [
        'from' => [ 'phoneNumber' => $RINGCENTRAL_USERNAME],
        'to'   => [['phoneNumber' => $RECIPIENT]],
        'text' => $message
    ]
);
}

记住要使用你的凭据!

如果一切顺利,你应该会收到一条短信,通知你每一盏亮着的灯。

4. 奖励步骤 – Cron Job

为了持续检查灯是否亮着,我们将不得不一遍又一遍地运行我们的 PHP 脚本,这是一项手动完成的无尽任务。如果我们使用一个简单的 cron job 为我们检查灯的状态,那将容易得多。

要创建一个 cron job,我们需要一些要素。

  • Timing – 设置分钟、小时、日期、月份。
  • Execute – cron job 需要 PHP EXE 来运行。
  • Path to script – 脚本所在位置的完整路径。
  • Output – (可选) 你可以保存脚本的输出或记录错误。

要创建一个 cron job,只需打开你的 CLI 并输入

crontab -e

确保检查你的 PHP EXE 的当前路径。此命令会有帮助。

whereis php

PHP 路径通常是

/usr/bin/php

运行 crontab 后,很可能会打开一个编辑器,这是我在本文中使用的 cron 的示例。

*/1 * * * * /usr/bin/php /Users/juan/DEV/RingCentral/smsLights.php >
/tmp/stdout.log 2>/tmp/stderr.log

第一部分将脚本设置为每分钟运行一次:*/1 * * * *
接下来是我的 PHP EXE 文件的路径:/usr/bin/php
现在我们需要脚本的完整路径:/Users/juan/DEV/RingCentral/smsLights.php
最后,我决定添加一个日志: >/tmp/stdout.log 2>/tmp/stderr.log

这只是一个简单的脚本,试图解释如何将所有这些工具结合使用。在测试后,记得注释掉你的 cron job,或者更改时间,否则你每分钟都会收到垃圾邮件,哈哈。

历史

  • 2020 年 4 月 26 日:初始版本
© . All rights reserved.