本文描述智能家居开发中的智能开关的开发过程
功能介绍: 使用小程序界面控制开关的开启和关闭,开源节流,安全第一
实现方式: 客户端→接口→mqtt→设备
- 服务端启动动态订阅,新设备自动订阅
- 客户端通过接口给mqtt发送指令
- 开关开启后,设备不间断传输数据到mqtt,包括电压,电流,耗电量,有功功率,视在功率(总功率)
- 开关关闭后,发送一次关闭状态的数据作为最后的数据。
- 至此,不再发送数据
发送mqtt的代码附上:
<?php
namespace app\worker\controller;
use Bluerhinos\phpMQTT;
use think\Db;
use Workerman\Mqtt\Client;
use Workerman\Worker;
date_default_timezone_set("PRC");
class Pub
{
public static function index($serial, $content = '')
{
$server = 'IP地址';
$port = 1883;
$username = 'mqtt账号';
$password = 'mqtt密码';
$client_id = 'server_smart_5s431s5f4e646w465w4e64gd45ssrt5h';
$topic = "pubTopic/socket/{$serial}"; // 发送到设备
$mqtt = new phpMQTT($server, $port, $client_id);
if ($mqtt->connect(true, NULL, $username, $password)) {
$mqtt->publish($topic, $content, 1);
$mqtt->close();
return true;
} else {
return false;
}
}
#开关控制
public static function switch_control($device_id,$data)
{
$serial = Db::name('r_device')->where('id',$device_id)->value('code');
if ($data == 1){
$res = Pub::index($serial,'on');
}else{
$res = Pub::index($serial,'off');
}
if ($res == 1) {
return true;
} else {
return false;
}
}
}
我这里是用的字符串类型,因此给设备发送了自定义的on和off开启和关闭设备