#include "widget.h"
#include "ui_widget.h"
#include <QMessageAuthenticationCode>
#include <QMessageBox>
Widget::Widget(QWidget *parent) :
QWidget(parent),
ui(new Ui::Widget)
{
ui->setupUi(this);
m_client = new QMqttClient(this);
connect(m_client, &QMqttClient::stateChanged, this, &Widget::updateLogStateChange);
//接收订阅消息
connect(m_client, &QMqttClient::messageReceived, this, [this](const QByteArray &message, const QMqttTopicName &topic) {
const QString content = QDateTime::currentDateTime().toString()
+ QLatin1String(" Received Topic: ")
+ topic.name()
+ QLatin1String(" Message: ")
+ message
+ QLatin1Char('\n');
ui->textEdit->insertPlainText(content);
});
//保活
m_client->setAutoKeepAlive(true);
m_strProductKey="xxxxx"; //需要跟阿里云Iot平台一致;
m_strDeviceName="xxxxx"; //需要跟阿里云Iot平台一致;
m_strDeviceSecret="xxxxx"; //需要跟阿里云平台一致
m_strRegionId="cn-shanghai";
m_strPubTopic = "/sys/" + m_strProductKey + "/" + m_strDeviceName + "/thing/event/property/post";//发布topic
m_strSubTopic = "/sys/" + m_strProductKey + "/" + m_strDeviceName + "/thing/service/property/set";//订阅topic
m_strTargetServer = m_strProductKey + ".iot-as-mqtt." + m_strRegionId + ".aliyuncs.com";//域名
m_client->setHostname(m_strTargetServer);
m_client->setPort(1883);
}
Widget::~Widget()
{
delete ui;
}
void Widget::on_connectBtn_clicked()
{
QString clientId="abcdefg"; //表示客户端ID,建议使用设备的MAC地址或SN码,64字符内。
QString signmethod = "hmacsha1"; //加密方式
QString message ="clientId"+clientId+"deviceName"+m_strDeviceName+"productKey"+m_strProductKey;
m_client->setUsername(m_strDeviceName + "&" + m_strProductKey);
m_client->setClientId(clientId + "|securemode=3,signmethod=" + signmethod + /*",timestamp="+timestamp+ */"|");
m_client->setPassword(QMessageAuthenticationCode::hash(message.toLocal8Bit(),
m_strDeviceSecret.toLocal8Bit(),
QCryptographicHash::Sha1).toHex());
m_client->connectToHost();//连接阿里云
}
void Widget::on_publishBtn_clicked()
{
// QString payload2="{\"properties\":[{\"identifier\": \"Version\",\"dataType\":{\"type\": \"2.0.1\"}}]}";
QString payload2="{\"method\":\"thing.event.property.post\",\"params\":{\"Version\":\"2.0.13\"}}";;
//发布消息
if (m_client->publish(m_strPubTopic, payload2.toLocal8Bit(),0,true) == -1)
QMessageBox::critical(this, QLatin1String("Error"), QLatin1String("Could not publish message"));
}
void Widget::updateLogStateChange()
{
const QString content = QDateTime::currentDateTime().toString()
+ QLatin1String(": State Change")
+ QString::number(m_client->state())
+ QLatin1Char('\n');
ui->textEdit->insertPlainText(content);
}
void Widget::on_disconnectBtn_clicked()
{
m_client->disconnectFromHost();
}