RingCentral 短信和飞利浦 HUE API
一篇关于如何使用 RingCentral 在家中飞利浦 HUE 灯亮起时接收短信的简短文章。
引言
上次我写文章时,我提到我想学习如何使用 Ring Central 的 API 接收短信,并且我用 RingCentral + ngrok + Formstack 做了一个示例,你可以在 这里 查看。
我还提到我想开发一些可以在自己家中使用的东西,所以这次我决定使用 Ring Central 的短信 API,以便在我的房子里有灯亮起时通知我。
而且,如果有人在意你的灯是否亮着,那又是为什么呢?
好吧,我可以举出几个例子,但你可以自己想象一下。
我家里有几个飞利浦 HUE 灯,大部分在我的游戏室/办公室,卧室里有几个白色的灯。
Using the Code
- Ring Central 开发者账户
- Hue 开发者账户
- PHP
- 奖励步骤
你需要找到 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
属性感兴趣,这是一个布尔值(true
或 false
)。
这是 API 响应的一个示例。
2. PHP 脚本
现在让我们用一些代码来玩玩。我们需要创建一个简单的脚本来 GET
我们需要的灯的数据。在此示例中,我将获取灯的 name
,并从 state
中,我需要知道 on
的值(true
,false
)。
<?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);
在这个小程序中,我们将把我们灯的 name
和 state->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 日:初始版本