随着物联网技术的发展,智能家居系统逐渐成为现代生活的一部分。本文将介绍如何利用RingCentral的API以及PHP脚本,创建一个能够监控家中灯光状态并在灯光开启时发送短信通知的系统。
本系统主要利用了RingCentral的短信API以及Philips Hue灯光系统的API。通过编写PHP脚本,可以定期检查家中灯光的状态,一旦发现灯光被开启,系统便会自动发送短信通知。
在开始之前,需要准备以下几个要素:
首先,需要找到家中Hue桥接器的IP地址。最简单的方法是访问。如果在这里找不到,可以查看Hue开发者提供的详细步骤,或者像一样,通过家中的路由器查找。
找到IP地址后,打开浏览器,输入IP地址后跟/debug/clip.html,进入Hue的桥接器API调试器。
在Hue桥接器的调试器中,需要生成一个设备用户名。在URL字段中输入/api,在消息体字段中输入{"devicetype":"my_hue_app#Juan"},然后点击POST按钮。
如果在操作过程中遇到“link button not pressed”的错误,说明需要先物理上与设备进行认证。这是为了证明有权限控制灯光,因此需要前往Hue桥接器并按下链接按钮。认证完成后,再次点击POST按钮,即可生成用户名。
接下来,需要获取灯光的当前状态信息。访问https://BRIDGEIPADRESS/api/USERNAME/lights/,可以获取到所有灯光的当前信息。对于本教程,只关心名为on的布尔值属性。
现在,开始编写PHP脚本。首先,需要创建一个简单的脚本,用于获取灯光的名称和状态信息。
<?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);
在上述脚本中,将灯光的名称和状态信息保存在$lights数组中。
接下来,将使用RingCentral的API来发送短信通知。如果灯光的状态为开启(true),则发送短信。
<?php
require('vendor/autoload.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);
foreach ($result as $key => $light) {
if ($light['state']['on'] === true) {
smsRingCentralAlert($light['name']);
}
}
function smsRingCentralAlert($light) {
$message = $light . ' light has been turned on';
$RECIPIENT = 'YOUR-TEST-PHONE-NUMBER';
$RINGCENTRAL_CLIENTID = 'YOUR-CLIENT-ID';
$RINGCENTRAL_CLIENTSECRET = 'YOUR-SECRET';
$RINGCENTRAL_SERVER = 'https://platform.devtest.ringcentral.com';
$RINGCENTRAL_USERNAME = 'YOUR-USERNAME';
$RINGCENTRAL_PASSWORD = 'YOUR-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
]);
}
请确保使用自己的凭据。如果一切顺利,将收到每个开启灯光的短信通知。
为了持续检查灯光状态,需要定期运行PHP脚本。使用简单的定时任务(cron job)可以大大简化这个过程。
创建定时任务需要以下要素:
要创建定时任务,只需打开命令行界面并输入:
crontab -e
确保检查当前的PHP可执行文件路径。可以使用以下命令:
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可执行文件的路径:
/usr/bin/php
现在需要脚本的完整路径:
/Users/juan/DEV/RingCentral/smsLights.php
最后,决定添加日志记录:
>/tmp/stdout.log 2>/tmp/stderr.log