天天看点

NodeMCU文档中文翻译 6 MQTT模块【本文出处:http://blog.csdn.net/leytton/article/details/72454287】一、译文 【转载请注明出处:http://blog.csdn.net/leytton/article/details/72454287】二、原文 MQTT Module MQTT Client

【本文出处:http://blog.csdn.net/leytton/article/details/72454287】

一、译文 

MQTT客户端支持Mqtt3.1.1协议,要确保你的MQTT服务器配置正确并支持3.1.1版本。此Mqtt模块并不兼容3.1版本之前的MQTT服务器。

mqtt.Client() 创建一个MQTT客户端.
mqtt.client:close() 关闭与服务器之间的连接.
mqtt.client:connect() 根据主机名、端口号和安全配置连接服务器.
mqtt.client:lwt() 创建遗嘱 (可选).
mqtt.client:on() 为事件创建回调函数.
mqtt.client:publish() 发送一条消息.
mqtt.client:subscribe() 订阅一个或多个主题.
mqtt.client:unsubscribe() 取消订阅一个或多个主题.

1、mqtt.Client()

创建一个MQTT客户端。

语法(PS:中括号内为可选参数)

mqtt.Client(clientid, keepalive[, username, password, cleansession])

参数

  • clientid

     客户端id
  • keepalive

     心跳秒数
  • username

     用户名
  • password

     密码
  • cleansession

     清除session  0/1 表示 

    /

返回

Mqtt客户端

示例代码

-- 初始化无需登陆的客户端, 心跳时间 120秒
m = mqtt.Client("clientid", 120)

-- 初始化需要登陆的客户端, 心跳时间 120秒
m = mqtt.Client("clientid", 120, "user", "password")

-- 创建遗嘱(可选)
-- 服务器将会发送一条 qos = 0, retain = 0, 内容为"offline"的消息到"/lwt"主题,如果没收到客户端发送的心跳数据包(掉线) 
m:lwt("/lwt", "offline", 0, 0)

m:on("connect", function(client) print ("connected") end) --连接到服务器触发事件
m:on("offline", function(client) print ("offline") end) --掉线触发事件

-- 收到消息时触发事件
m:on("message", function(client, topic, data) 
  print(topic .. ":" ) 
  if data ~= nil then
    print(data)
  end
end)

-- 对于 TLS: m:connect("192.168.11.118", secure-port, 1)
m:connect("192.168.11.118", 1883, 0, function(client) print("connected") end, 
                                     function(client, reason) print("failed reason: "..reason) end)

-- 确保subscribe/publish方法在连接上服务器后再调用,在实际应用中是把他们放在connect回调函数里或者确定连接成功

-- 订阅/topic主题、服务质量为0
m:subscribe("/topic",0, function(client) print("subscribe success") end)
-- 发送一条信息 data = hello, QoS = 0, retain = 0
m:publish("/topic","hello",0,0, function(client) print("sent") end)

m:close();
-- 你可以再次调用 m:connect 连接函数
           

2、mqtt.client:close()

关闭与服务器的连接

语法  mqtt:close()

参数 无

返回 成功true,失败false

3、mqtt.client:connect()

根据主机名、端口号和安全配置连接服务器。

语法   mqtt:connect(host[, port[, secure[, autoreconnect]]][, function(client)[, function(client, reason)]]) 参数

  • host

     主机名, 域名或 IP (字符串)
  • port

     服务器端口(数字), 默认1883
  • secure

     0/1 表示 

    false

    /

    true

    , 默认 0. 详情查看文档 net module.
  • autoreconnect

     0/1表示 

    false

    /

    true

    ,默认 0 (断线是否重连)
  • function(client)

     连接服务器成功时的回调函数
  • function(client, reason)

     连接服务器失败时的回调函数

返回  成功 true,失败 false

连接失败时的错误代码

常量 描述

mqtt.CONN_FAIL_SERVER_NOT_FOUND

-5 未找到服务器(或没开端口)

mqtt.CONN_FAIL_NOT_A_CONNACK_MSG

-4 返回消息回应不是Mqtt协议

mqtt.CONN_FAIL_DNS

-3 DNS错误

mqtt.CONN_FAIL_TIMEOUT_RECEIVING

-2 等待响应超时

mqtt.CONN_FAIL_TIMEOUT_SENDING

-1 尝试发送连接消息超时

mqtt.CONNACK_ACCEPTED

没有错误. 注意: 这不会触发错误回调函数.

mqtt.CONNACK_REFUSED_PROTOCOL_VER

1 服务器MQTT版本不是3.1.1.

mqtt.CONNACK_REFUSED_ID_REJECTED

2 ClientID被服务器拒绝. (查看

mqtt.Client()

)

mqtt.CONNACK_REFUSED_SERVER_UNAVAILABLE

3 服务不可用.

mqtt.CONNACK_REFUSED_BAD_USER_OR_PASS

4 用户名或密码错误.

mqtt.CONNACK_REFUSED_NOT_AUTHORIZED

5 用户名没经过认证.

4、mqtt.client:lwt()

创建遗嘱(可选),服务器将会发送一条 qos = 0, retain = 0, 内容为"offline"的消息到"/lwt"主题,如果没收到客户端发送的心跳数据包(掉线)。

语法 mqtt:lwt(topic, message[, qos[, retain]])

参数

  • topic

     将要发送遗嘱消息的主题 (字符串)
  • message

     遗嘱消息, (缓存 或 字符串)
  • qos

     消息质量, 默认 0
  • retain

     保留标志, 默认 0

返回 空

5、mqtt.client:on()

为事件创建回调函数.

语法 mqtt:on(event, function(client[, topic[, message]]))

参数

  • event

     可以是 "connect", "message" 或者 "offline"
  • function(client[, topic[, message]])

     回调函数。第一个参数为client、如果事件为 "message",那么第二个、第三个参数分别是主题和接收到的消息

返回 空

6、mqtt.client:publish()

发送一条消息.

语法 mqtt:publish(topic, payload, qos, retain[, function(client)])

参数

  • topic

     要发送消息的主题 (字符串)
  • message

     消息, (缓存 或 字符串)
  • qos

     消息质量
  • retain

     消息保留标志
  • function(client)

     可选的回调函数。当消息发送成功(服务器传来PUBACK响应)则触发该事件。注意:当多次调用publish() 函数,所有的发送指令将会调用最后定义的回调函数。

返回  成功 true,失败 false

7、mqtt.client:subscribe()

订阅一个或多个主题. 语法

mqtt:subscribe(topic, qos[, function(client)]) 或

mqtt:subscribe(table[, function(client)])

参数

  • topic

     主题 (字符串)
  • qos

     订阅的消息质量, 默认 0
  • table

     要订阅的'topic, qos'数组对
  • function(client)

     订阅成功时的可选回调函数.注意:当多次调用subscribe() 函数,所有的订阅指令将会调用最后定义的回调函数。

返回  成功 true,失败 false

示例代码

-- 订阅/topic主题、服务质量为0
m:subscribe("/topic",0, function(conn) print("subscribe success") end)

-- 或者订阅多个主题 (topic/0, qos = 0; topic/1, qos = 1; topic2 , qos = 2)
m:subscribe({["topic/0"]=0,["topic/1"]=1,topic2=2}, function(conn) print("subscribe success") end)
           

8、mqtt.client:unsubscribe()

取消订阅一个或多个主题. 语法

mqtt:unsubscribe(topic[, function(client)]) 或

mqtt:unsubscribe(table[, function(client)])

参数

  • topic

     主题 (字符串)
  • table

     要取消订阅的'topic, qos'数组对
  • function(client)

     取消订阅成功时的可选回调函数.注意:当多次调用unsubscribe() 函数,所有的取消订阅指令将会调用最后定义的回调函数。

返回  成功 true,失败 false

示例代码

-- 取消订阅主题
m:unsubscribe("/topic", function(conn) print("unsubscribe success") end)

-- 或者取消订阅多个主题 (topic/0; topic/1; topic2)
m:unsubscribe({["topic/0"]=0,["topic/1"]=0,topic2="anything"}, function(conn) print("unsubscribe success") end)
           

【转载请注明出处:http://blog.csdn.net/leytton/article/details/72454287】

二、原文

摘自 https://nodemcu.readthedocs.io/en/master/en/modules/mqtt/

MQTT Module

Since Origin / Contributor Maintainer Source
2015-01-23 Stephen Robinson, Tuan PM Vowstar mqtt.c

The client adheres to version 3.1.1 of the MQTT protocol. Make sure that your broker supports and is correctly configured for version 3.1.1. The client is backwards incompatible with brokers running MQTT 3.1.

mqtt.Client() Creates a MQTT client.
mqtt.client:close() Closes connection to the broker.
mqtt.client:connect() Connects to the broker specified by the given host, port, and secure options.
mqtt.client:lwt() Setup Last Will and Testament (optional).
mqtt.client:on() Registers a callback function for an event.
mqtt.client:publish() Publishes a message.
mqtt.client:subscribe() Subscribes to one or several topics.
mqtt.client:unsubscribe() Unsubscribes from one or several topics.

mqtt.Client()

Creates a MQTT client.

Syntax

mqtt.Client(clientid, keepalive[, username, password, cleansession])

Parameters

  • clientid

     client ID
  • keepalive

     keepalive seconds
  • username

     user name
  • password

     user password
  • cleansession

     0/1 for 

    false

    /

    true

Returns

MQTT client

Example

-- init mqtt client without logins, keepalive timer 120s
m = mqtt.Client("clientid", )

-- init mqtt client with logins, keepalive timer 120sec
m = mqtt.Client("clientid", , "user", "password")

-- setup Last Will and Testament (optional)
-- Broker will publish a message with qos = 0, retain = 0, data = "offline" 
-- to topic "/lwt" if client don't send keepalive packet
m:lwt("/lwt", "offline", , )

m:on("connect", function(client) print ("connected") end)
m:on("offline", function(client) print ("offline") end)

-- on publish message receive event
m:on("message", function(client, topic, data) 
  print(topic .. ":" ) 
  if data ~= nil then
    print(data)
  end
end)

-- for TLS: m:connect("192.168.11.118", secure-port, 1)
m:connect("192.168.11.118", , , function(client) print("connected") end, 
                                     function(client, reason) print("failed reason: "..reason) end)

-- Calling subscribe/publish only makes sense once the connection
-- was successfully established. In a real-world application you want
-- move those into the 'connect' callback or make otherwise sure the 
-- connection was established.

-- subscribe topic with qos = 0
m:subscribe("/topic",, function(client) print("subscribe success") end)
-- publish a message with data = hello, QoS = 0, retain = 0
m:publish("/topic","hello",,, function(client) print("sent") end)

m:close();
-- you can call m:connect again
           

MQTT Client

mqtt.client:close()

Closes connection to the broker.

Syntax

mqtt:close()

Parameters

none

Returns

true

 on success, 

false

 otherwise

mqtt.client:connect()

Connects to the broker specified by the given host, port, and secure options.

Syntax

mqtt:connect(host[, port[, secure[, autoreconnect]]][, function(client)[, function(client, reason)]])

Parameters

  • host

     host, domain or IP (string)
  • port

     broker port (number), default 1883
  • secure

     0/1 for 

    false

    /

    true

    , default 0. Take note of constraints documented in the net module.
  • autoreconnect

     0/1 for 

    false

    /

    true

    , default 0
  • function(client)

     callback function for when the connection was established
  • function(client, reason)

     callback function for when the connection could not be established

Returns

true

 on success, 

false

 otherwise

Connection failure callback reason codes:

Constant Value Description

mqtt.CONN_FAIL_SERVER_NOT_FOUND

-5 There is no broker listening at the specified IP Address and Port

mqtt.CONN_FAIL_NOT_A_CONNACK_MSG

-4 The response from the broker was not a CONNACK as required by the protocol

mqtt.CONN_FAIL_DNS

-3 DNS Lookup failed

mqtt.CONN_FAIL_TIMEOUT_RECEIVING

-2 Timeout waiting for a CONNACK from the broker

mqtt.CONN_FAIL_TIMEOUT_SENDING

-1 Timeout trying to send the Connect message

mqtt.CONNACK_ACCEPTED

No errors. Note: This will not trigger a failure callback.

mqtt.CONNACK_REFUSED_PROTOCOL_VER

1 The broker is not a 3.1.1 MQTT broker.

mqtt.CONNACK_REFUSED_ID_REJECTED

2 The specified ClientID was rejected by the broker. (See

mqtt.Client()

)

mqtt.CONNACK_REFUSED_SERVER_UNAVAILABLE

3 The server is unavailable.

mqtt.CONNACK_REFUSED_BAD_USER_OR_PASS

4 The broker refused the specified username or password.

mqtt.CONNACK_REFUSED_NOT_AUTHORIZED

5 The username is not authorized.

mqtt.client:lwt()

Setup Last Will and Testament (optional). A broker will publish a message with qos = 0, retain = 0, data = "offline" to topic "/lwt" if client does not send keepalive packet.

Syntax

mqtt:lwt(topic, message[, qos[, retain]])

Parameters

  • topic

     the topic to publish to (string)
  • message

     the message to publish, (buffer or string)
  • qos

     QoS level, default 0
  • retain

     retain flag, default 0

Returns

nil

mqtt.client:on()

Registers a callback function for an event.

Syntax

mqtt:on(event, function(client[, topic[, message]]))

Parameters

  • event

     can be "connect", "message" or "offline"
  • function(client[, topic[, message]])

     callback function. The first parameter is the client. If event is "message", the 2nd and 3rd param are received topic and message (strings).

Returns

nil

mqtt.client:publish()

Publishes a message.

Syntax

mqtt:publish(topic, payload, qos, retain[, function(client)])

Parameters

  • topic

     the topic to publish to (topic string)
  • message

     the message to publish, (buffer or string)
  • qos

     QoS level
  • retain

     retain flag
  • function(client)

     optional callback fired when PUBACK received. NOTE: When calling publish() more than once, the last callback function defined will be called for ALL publish commands.

Returns

true

 on success, 

false

 otherwise

mqtt.client:subscribe()

Subscribes to one or several topics.

Syntax

mqtt:subscribe(topic, qos[, function(client)])

mqtt:subscribe(table[, function(client)])

Parameters

  • topic

     a topic string
  • qos

     QoS subscription level, default 0
  • table

     array of 'topic, qos' pairs to subscribe to
  • function(client)

     optional callback fired when subscription(s) succeeded. NOTE: When calling subscribe() more than once, the last callback function defined will be called for ALL subscribe commands.

Returns

true

 on success, 

false

 otherwise

Example

-- subscribe topic with qos = 0
m:subscribe("/topic",, function(conn) print("subscribe success") end)

-- or subscribe multiple topic (topic/0, qos = 0; topic/1, qos = 1; topic2 , qos = 2)
m:subscribe({["topic/0"]=,["topic/1"]=,topic2=}, function(conn) print("subscribe success") end)
           

mqtt.client:unsubscribe()

Unsubscribes from one or several topics.

Syntax

mqtt:unsubscribe(topic[, function(client)])

mqtt:unsubscribe(table[, function(client)])

Parameters

  • topic

     a topic string
  • table

     array of 'topic, anything' pairs to unsubscribe from
  • function(client)

     optional callback fired when unsubscription(s) succeeded. NOTE: When calling unsubscribe() more than once, the last callback function defined will be called for ALL unsubscribe commands.

Returns

true

 on success, 

false

 otherwise

Example

-- unsubscribe topic
m:unsubscribe("/topic", function(conn) print("unsubscribe success") end)

-- or unsubscribe multiple topic (topic/0; topic/1; topic2)
m:unsubscribe({["topic/0"]=,["topic/1"]=,topic2="anything"}, function(conn) print("unsubscribe success") end)
           

转载于:https://www.cnblogs.com/leytton/p/8253271.html