You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
302 lines
8.6 KiB
302 lines
8.6 KiB
/*! \file ELClientMqtt.cpp |
|
\brief Constructor and functions for ELClientMqtt |
|
\author B. Runnels |
|
\author T. von Eicken |
|
\date 2016 |
|
*/ |
|
// Copyright (c) 2016 by B. Runnels and T. von Eicken |
|
|
|
#include <Arduino.h> |
|
#include "ELClientMqtt.h" |
|
|
|
// constructor |
|
/*! ELClientMqtt(ELClient* elc) |
|
@brief Constructor for ELClientMqtt |
|
@par Example |
|
@code |
|
ELClientMqtt(ELClient* elc); |
|
@endcode |
|
*/ |
|
ELClientMqtt::ELClientMqtt(ELClient* elc) :_elc(elc) {} |
|
|
|
/*! setup(void) |
|
@brief Setup mqtt |
|
@details Send callback functions for MQTT events to the ESP |
|
@par Example |
|
@code |
|
mqtt.connectedCb.attach(mqttConnected); |
|
mqtt.disconnectedCb.attach(mqttDisconnected); |
|
mqtt.publishedCb.attach(mqttPublished); |
|
mqtt.dataCb.attach(mqttData); |
|
mqtt.setup(); |
|
@endcode |
|
*/ |
|
void ELClientMqtt::setup(void) { |
|
//Serial.print(F("ConnectedCB is 0x")); Serial.println((uint32_t)&connectedCb, 16); |
|
_elc->Request(CMD_MQTT_SETUP, 0, 4); |
|
uint32_t cb = (uint32_t)&connectedCb; |
|
_elc->Request(&cb, 4); |
|
cb = (uint32_t)&disconnectedCb; |
|
_elc->Request(&cb, 4); |
|
cb = (uint32_t)&publishedCb; |
|
_elc->Request(&cb, 4); |
|
cb = (uint32_t)&dataCb; |
|
_elc->Request(&cb, 4); |
|
_elc->Request(); |
|
} |
|
|
|
// LWT |
|
|
|
/*! lwt(const char* topic, const char* message, uint8_t qos, uint8_t retain) |
|
@brief Set MQTT last will. |
|
@details Sends the "last will" to the ESP. |
|
@param topic |
|
Last will topic name |
|
@param message |
|
Last will message |
|
@param qos |
|
(optional) Requested qos level, default 0 |
|
@param retain |
|
(optional) Requested retain level, default 0 |
|
@warning At the moment only qos level 0 is implemented and supported! |
|
@par Example |
|
@code |
|
Serial.println("ARDUINO: setup mqtt lwt"); |
|
mqtt.lwt("/lwt", "offline", 0, 0); //or mqtt.lwt("/lwt", "offline"); |
|
@endcode |
|
*/ |
|
void ELClientMqtt::lwt(const char* topic, const char* message, uint8_t qos, uint8_t retain) { |
|
_elc->Request(CMD_MQTT_LWT, 0, 4); |
|
_elc->Request(topic, strlen(topic)); |
|
_elc->Request(message, strlen(message)); |
|
_elc->Request(&qos, 1); |
|
_elc->Request(&retain, 1); |
|
_elc->Request(); |
|
} |
|
|
|
/*! lwt(const __FlashStringHelper* topic, const __FlashStringHelper* message, uint8_t qos, uint8_t retain) |
|
@brief Set MQTT last will. |
|
@details Sends the "last will" to the ESP with the topic and message stored in program memory |
|
@param topic |
|
Last will topic name |
|
@param message |
|
Last will message |
|
@param qos |
|
(optional) Requested qos level, default 0 |
|
@param retain |
|
(optional) Requested retain level, default 0 |
|
@warning At the moment only qos level 0 is implemented and supported! |
|
@par Example |
|
@code |
|
no example code yet |
|
@endcode |
|
*/ |
|
void ELClientMqtt::lwt(const __FlashStringHelper* topic, const __FlashStringHelper* message, |
|
uint8_t qos, uint8_t retain) |
|
{ |
|
_elc->Request(CMD_MQTT_LWT, 0, 4); |
|
_elc->Request(topic, strlen_P((const char*)topic)); |
|
_elc->Request(message, strlen_P((const char*)message)); |
|
_elc->Request(&qos, 1); |
|
_elc->Request(&retain, 1); |
|
_elc->Request(); |
|
} |
|
|
|
// SUBSCRIBE |
|
|
|
/*! subscribe(const char* topic, uint8_t qos) |
|
@brief Subscribe to MQTT topic |
|
@details Sends the MQTT subscription request to the ESP |
|
@param topic |
|
Topic name |
|
@param qos |
|
(optional) Requested qos level, default 0 |
|
@warning At the moment only qos level 0 is implemented and supported! |
|
@par Example |
|
@code |
|
mqtt.subscribe("/esp-link/1"); |
|
mqtt.subscribe("/hello/world/#"); |
|
@endcode |
|
*/ |
|
void ELClientMqtt::subscribe(const char* topic, uint8_t qos) { |
|
_elc->Request(CMD_MQTT_SUBSCRIBE, 0, 2); |
|
_elc->Request(topic, strlen(topic)); |
|
_elc->Request(&qos, 1); |
|
_elc->Request(); |
|
} |
|
|
|
/*! subscribe(const __FlashStringHelper* topic, uint8_t qos) |
|
@brief Subscribe to MQTT topic |
|
@details Sends the MQTT subscription request to the ESP with the topic and message stored in program memory |
|
@param topic |
|
Topic name |
|
@param qos |
|
(optional) Requested qos level, default 0 |
|
@warning At the moment only qos level 0 is implemented and supported! |
|
@par Example |
|
@code |
|
no example code yet |
|
@endcode |
|
*/ |
|
void ELClientMqtt::subscribe(const __FlashStringHelper* topic, uint8_t qos) { |
|
_elc->Request(CMD_MQTT_SUBSCRIBE, 0, 2); |
|
_elc->Request(topic, strlen_P((const char*)topic)); |
|
_elc->Request(&qos, 1); |
|
_elc->Request(); |
|
} |
|
|
|
// PUBLISH |
|
|
|
/*! publish(const char* topic, const uint8_t* data, const uint16_t len, uint8_t qos, uint8_t retain) |
|
@brief Subscribe to MQTT topic |
|
@details Sends the MQTT subscription request to the ESP |
|
@param topic |
|
Topic name |
|
@param data |
|
Pointer to data buffer |
|
@param len |
|
Size of data buffer |
|
@param qos |
|
(optional) Requested qos level, default 0 |
|
@param retain |
|
(optional) Requested retain level, default 0 |
|
@warning At the moment only qos level 0 is implemented and supported! |
|
@par Example |
|
@code |
|
char buf[12]; |
|
itoa(count++, buf, 10); |
|
mqtt.publish("/esp-link/1", buf); |
|
itoa(count+99, buf, 10); |
|
mqtt.publish("/hello/world/arduino", buf, 12); |
|
@endcode |
|
*/ |
|
void ELClientMqtt::publish(const char* topic, const uint8_t* data, const uint16_t len, |
|
uint8_t qos, uint8_t retain) |
|
{ |
|
_elc->Request(CMD_MQTT_PUBLISH, 0, 5); |
|
_elc->Request(topic, strlen(topic)); |
|
_elc->Request(data, len); |
|
_elc->Request(&len, 2); |
|
_elc->Request(&qos, 1); |
|
_elc->Request(&retain, 1); |
|
_elc->Request(); |
|
} |
|
|
|
/*! publish(const char* topic, const char* data, uint8_t qos, uint8_t retain) |
|
@brief Subscribe to MQTT topic |
|
@details Sends the MQTT subscription request to the ESP. Data must be null-terminated |
|
@param topic |
|
Topic name |
|
@param data |
|
Pointer to data buffer |
|
@param qos |
|
(optional) Requested qos level, default 0 |
|
@param retain |
|
(optional) Requested retain level, default 0 |
|
@warning At the moment only qos level 0 is implemented and supported! |
|
@par Example |
|
@code |
|
char buf[12]; |
|
itoa(count++, buf, 10); |
|
mqtt.publish("/esp-link/1", buf); |
|
itoa(count+99, buf, 10); |
|
mqtt.publish("/hello/world/arduino", buf); |
|
@endcode |
|
*/ |
|
void ELClientMqtt::publish(const char* topic, const char* data, uint8_t qos, uint8_t retain) |
|
{ |
|
publish(topic, (uint8_t*)data, strlen(data), qos, retain); |
|
} |
|
|
|
/*! publish(const __FlashStringHelper* topic, const __FlashStringHelper* data, const uint16_t len, uint8_t qos, uint8_t retain) |
|
@brief Subscribe to MQTT topic |
|
@details Sends the MQTT subscription request to the ESP with the topic and data stored in program memory |
|
@param topic |
|
Topic name |
|
@param data |
|
Pointer to data buffer |
|
@param len |
|
Size of data buffer |
|
@param qos |
|
(optional) Requested qos level, default 0 |
|
@param retain |
|
(optional) Requested retain level, default 0 |
|
@warning At the moment only qos level 0 is implemented and supported! |
|
@par Example |
|
@code |
|
no example code yet |
|
@endcode |
|
*/ |
|
void ELClientMqtt::publish(const __FlashStringHelper* topic, const __FlashStringHelper* data, |
|
const uint16_t len, uint8_t qos, uint8_t retain) |
|
{ |
|
_elc->Request(CMD_MQTT_PUBLISH, 0, 5); |
|
_elc->Request(topic, strlen_P((const char*)topic)); |
|
_elc->Request(data, len); |
|
_elc->Request(&len, 2); |
|
_elc->Request(&qos, 1); |
|
_elc->Request(&retain, 1); |
|
_elc->Request(); |
|
} |
|
|
|
/*! ELClientMqtt::publish(const char* topic, const __FlashStringHelper* data, const uint16_t len, uint8_t qos, uint8_t retain) |
|
@brief Subscribe to MQTT topic |
|
@details Sends the MQTT subscription request to the ESP with the data stored in program memory |
|
@param topic |
|
Topic name |
|
@param data |
|
Pointer to data buffer |
|
@param len |
|
Size of data buffer |
|
@param qos |
|
(optional) Requested qos level, default 0 |
|
@param retain |
|
(optional) Requested retain level, default 0 |
|
@warning At the moment only qos level 0 is implemented and supported! |
|
@par Example |
|
@code |
|
no example code yet |
|
@endcode |
|
*/ |
|
void ELClientMqtt::publish(const char* topic, const __FlashStringHelper* data, |
|
const uint16_t len, uint8_t qos, uint8_t retain) |
|
{ |
|
_elc->Request(CMD_MQTT_PUBLISH, 0, 5); |
|
_elc->Request(topic, strlen(topic)); |
|
_elc->Request(data, len); |
|
_elc->Request(&len, 2); |
|
_elc->Request(&qos, 1); |
|
_elc->Request(&retain, 1); |
|
_elc->Request(); |
|
} |
|
|
|
/*! publish(const __FlashStringHelper* topic, const uint8_t* data, const uint16_t len, uint8_t qos, uint8_t retain) |
|
@brief Subscribe to MQTT topic |
|
@details Sends the MQTT subscription request to the ESP with the topic stored in program memory |
|
@param topic |
|
Topic name |
|
@param data |
|
Pointer to data buffer |
|
@param len |
|
Size of data buffer |
|
@param qos |
|
(optional) Requested qos level, default 0 |
|
@param retain |
|
(optional) Requested retain level, default 0 |
|
@warning At the moment only qos level 0 is implemented and supported! |
|
@par Example |
|
@code |
|
no example code yet |
|
@endcode |
|
*/ |
|
void ELClientMqtt::publish(const __FlashStringHelper* topic, const uint8_t* data, |
|
const uint16_t len, uint8_t qos, uint8_t retain) |
|
{ |
|
_elc->Request(CMD_MQTT_PUBLISH, 0, 5); |
|
_elc->Request(topic, strlen_P((const char*)topic)); |
|
_elc->Request(data, len); |
|
_elc->Request(&len, 2); |
|
_elc->Request(&qos, 1); |
|
_elc->Request(&retain, 1); |
|
_elc->Request(); |
|
}
|
|
|