群晖NAS使用套件安装MQTT服务器(mosquitto)

在这里插入图片描述

群晖NAS使用套件安装MQTT服务器(mosquitto)

部署环境

群晖:DS918+ DSM 6.2.3-25426
mosquitto version 1.6.15
MQTTX version 1.9.2

前言

MQTT(Message Queuing Telemetry Transport)是一种基于发布/订阅(publish/subscribe)模式的”轻量级”通讯协议。客户端的发布者不直接将消息传递给订阅者,而是服务端(MQTT Broker)进行分发,一个客户端既可以是发布者,也可以是订阅者,更多介绍请参看维基百科上的词条 。以智能家居的情形简单举例,人体感应器(发布者)感应到有人时发布主题为”有人“的消息到服务端,而由于摄像头订阅了该主题,因此收到消息,开始录像,此时摄像头角色为(接收者),同时摄像头也作为(发布者)发布”监控异动“消息到服务器,而我们手机订阅了此主题,作为(接收者)便可收到消息。

添加社群套件(第三方)

在套件中心里新增社群套件来源:https://spk.imnks.com/
在这里插入图片描述

安装mosquitto套件

  • 安装套件
    套件中心-社群里,找到Mosquitto套件,然后点击“安装套件”。因我已经安装,所以显示的是“已安装”。
    在这里插入图片描述

  • 增加用户名和密码
    因套件安装完后没有用户名和密码,且群晖下没有mosquitto_passwd命令,所以没法直接修改。此处提供网上的一种解决办法,创建“pwfile.conf”文件并写入用户名(mqtt)和密码(mqtt),具体内容如下:

mqtt:$6$zwY/9Y4t7gdfjv/e$lpa0Bfgv75ObUE9n+MJF953lX1wt+8YlYVmmDdI8IluM1JRBHSoOXJ6i4zfS4udBiDKyREWEXt5fzJAQMcvZFw==

具体步骤:
1.暂停Mosquitto套件。
2. SSH登陆群晖(使用root账户),进入mosquitto目录下

cd /volume1/@appstore/mosquitto/etc/mosquitto
  1. 创建“pwfile.conf”文件
touch pwfile.conf
  1. 修改“pwfile.conf”,添加用户名和密码
vim pwfile.conf //添加用户名和密码的字符串,具体见上文所列内容。

5.启动Mosquitto套件。

使用MQTT客户端验证

协议:mqtt,端口号:1883,用户名:mqtt,密码:mqtt,服务器地址:XXX.XXX.XXX.XXX(服务器所安装地址)

  1. 参数设置
    在这里插入图片描述

  2. 连接Mosquitto服务器成功
    在这里插入图片描述

  3. 添加订阅和发布,验证服务器正常运行。
    在发布端发布一个订阅端一样的主题:humidity,然后输入发布的消息,点击”Publish“后完成发布,该主题的订阅者即可收到该条消息
    在这里插入图片描述

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
在Windows平台下使用C语言向Mosquitto服务器推送JSON数据需要先安装MQTT C客户端库,比如使用Eclipse Paho C库。 下面是一个简单的代码示例,用于将JSON数据发布到Mosquitto服务器: ```c #include <stdio.h> #include <stdlib.h> #include <string.h> #include <MQTTClient.h> #include <cJSON.h> #define ADDRESS "tcp://localhost:1883" #define CLIENTID "ExampleClientPub" #define TOPIC "test" #define QOS 1 #define TIMEOUT 10000L int main(int argc, char* argv[]) { MQTTClient client; MQTTClient_connectOptions conn_opts = MQTTClient_connectOptions_initializer; cJSON *root = NULL; char *payload = NULL; int rc; MQTTClient_create(&client, ADDRESS, CLIENTID, MQTTCLIENT_PERSISTENCE_NONE, NULL); conn_opts.keepAliveInterval = 20; conn_opts.cleansession = 1; if ((rc = MQTTClient_connect(client, &conn_opts)) != MQTTCLIENT_SUCCESS) { printf("Failed to connect, return code %d\n", rc); exit(EXIT_FAILURE); } root = cJSON_CreateObject(); cJSON_AddStringToObject(root, "name", "John"); cJSON_AddStringToObject(root, "surname", "Doe"); cJSON_AddNumberToObject(root, "age", 30); payload = cJSON_Print(root); MQTTClient_message pubmsg = MQTTClient_message_initializer; pubmsg.payload = payload; pubmsg.payloadlen = strlen(payload); pubmsg.qos = QOS; pubmsg.retained = 0; MQTTClient_deliveryToken token; MQTTClient_publishMessage(client, TOPIC, &pubmsg, &token); printf("Waiting for up to %d seconds for publication of %s\n" "on topic %s for client with ClientID: %s\n", (int)(TIMEOUT / 1000), payload, TOPIC, CLIENTID); rc = MQTTClient_waitForCompletion(client, token, TIMEOUT); printf("Message with delivery token %d delivered\n", token); cJSON_Delete(root); free(payload); MQTTClient_disconnect(client, 10000); MQTTClient_destroy(&client); return rc; } ``` 这个例子使用了两个库:MQTT C客户端库和cJSON库。它首先创建了一个MQTT客户端实例,然后连接到Mosquitto服务器。接下来,它使用cJSON库创建一个JSON对象,将其转换为字符串,然后将其作为消息发布到Mosquitto服务器。最后,它断开了MQTT连接并销毁了客户端实例。 需要注意的是,在使用这个例子之前,需要先安装并配置Mosquitto服务器,并使用正确的地址、客户端ID、主题等参数来运行程序。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值