add mqtt
This commit is contained in:
parent
503afe913a
commit
e3d7c46ce1
|
@ -0,0 +1,72 @@
|
||||||
|
<?php
|
||||||
|
|
||||||
|
namespace app\api\controller;
|
||||||
|
|
||||||
|
use PhpMqtt\Client\ConnectionSettings;
|
||||||
|
use PhpMqtt\Client\MqttClient;
|
||||||
|
use think\App;
|
||||||
|
|
||||||
|
class MqttController extends BaseApiController
|
||||||
|
{
|
||||||
|
public string $host = "60.204.152.17";
|
||||||
|
public int $port = 2883;
|
||||||
|
public ?MqttClient $mqtt_client = null;
|
||||||
|
private string $username = "root";
|
||||||
|
private string $password = "root";
|
||||||
|
private ?ConnectionSettings $settings;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @throws ProtocolNotSupportedException
|
||||||
|
*/
|
||||||
|
public function __construct(App $app)
|
||||||
|
{
|
||||||
|
parent::__construct($app);
|
||||||
|
# mqtt配置
|
||||||
|
$this->mqtt_client = new MqttClient($this->host, $this->port);
|
||||||
|
$this->settings = new ConnectionSettings();
|
||||||
|
$this->settings = $this->settings->setUsername($this->username)->setPassword($this->password);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @throws ConfigurationInvalidException
|
||||||
|
* @throws ConnectingToBrokerFailedException
|
||||||
|
*/
|
||||||
|
public function upload(): void
|
||||||
|
{
|
||||||
|
try {
|
||||||
|
# 获取mqtt请求体
|
||||||
|
$msg = $this->request->post();
|
||||||
|
$payload = json_decode($msg["payload"], true);
|
||||||
|
# 获取json字符串长度,用于校验是否丢失包
|
||||||
|
$payload_receive_len = strlen(json_encode($payload));
|
||||||
|
# 获取l参数,得到原始发送包长度
|
||||||
|
$payload_send_len = $payload["l"];
|
||||||
|
# 如果不相等,name返回
|
||||||
|
if ($payload_receive_len != $payload_send_len) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
# 获取measurements参数,表示字段的名称
|
||||||
|
$measurements = $payload["m"];
|
||||||
|
# 获取字段相应的值
|
||||||
|
$values = $payload["v"];
|
||||||
|
# 拼接字符串,得到iotdb的数据库设备名称
|
||||||
|
$device = sprintf("%s.%s", "root.farm", $payload["v"][0]);
|
||||||
|
# 构造json,通过mqtt发送到iotdb数据库
|
||||||
|
$send_array = array(
|
||||||
|
"device" => $device,
|
||||||
|
"timestamp" => intval(microtime(true) * 1000),
|
||||||
|
"measurements" => $measurements,
|
||||||
|
"values" => $values
|
||||||
|
);
|
||||||
|
# 数组转为json字符串
|
||||||
|
$send_json = json_encode($send_array);
|
||||||
|
dump($send_json);
|
||||||
|
# 连接mqtt
|
||||||
|
$this->mqtt_client->connect($this->settings);
|
||||||
|
# 发送消息
|
||||||
|
$this->mqtt_client->publish("xumu", $send_json);
|
||||||
|
} catch (Exception $e) {
|
||||||
|
dump($e);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in New Issue