Files
nuki_hub/lib/espMqttClient/examples/simple-linux/main.cpp
iranl 7454208230 Revert ESP-MQTT (#508)
* Revert ESP-MQTT

* Revert ESP-MQTT

* Update sdkconfig.defaults
2024-11-02 23:07:00 +07:00

90 lines
3.0 KiB
C++

#include <iostream>
#include <thread>
#include <espMqttClient.h>
#define MQTT_HOST IPAddress(192,168,1,10)
#define MQTT_PORT 1883
espMqttClient mqttClient;
std::atomic_bool exitProgram(false);
void connectToMqtt() {
std::cout << "Connecting to MQTT..." << std::endl;
mqttClient.connect();
}
void onMqttConnect(bool sessionPresent) {
std::cout << "Connected to MQTT." << std::endl;
std::cout << "Session present: " << sessionPresent << std::endl;
uint16_t packetIdSub = mqttClient.subscribe("test/lol", 2);
std::cout << "Subscribing at QoS 2, packetId: " << packetIdSub << std::endl;
mqttClient.publish("test/lol", 0, true, "test 1");
std::cout << "Publishing at QoS 0" << std::endl;
uint16_t packetIdPub1 = mqttClient.publish("test/lol", 1, true, "test 2");
std::cout << "Publishing at QoS 1, packetId: " << packetIdPub1 << std::endl;
uint16_t packetIdPub2 = mqttClient.publish("test/lol", 2, true, "test 3");
std::cout << "Publishing at QoS 2, packetId: " << packetIdPub2 << std::endl;
}
void onMqttDisconnect(espMqttClientTypes::DisconnectReason reason) {
std::cout << "Disconnected from MQTT: %u.\n" << unsigned(static_cast<uint8_t>(reason)) << std::endl;
exitProgram = true;
}
void onMqttSubscribe(uint16_t packetId, const espMqttClientTypes::SubscribeReturncode* codes, size_t len) {
std::cout << "Subscribe acknowledged." << std::endl;
std::cout << " packetId: " << packetId << std::endl;
for (size_t i = 0; i < len; ++i) {
std::cout << " qos: " << unsigned(static_cast<uint8_t>(codes[i])) << std::endl;
}
}
void onMqttMessage(const espMqttClientTypes::MessageProperties& properties, const char* topic, const uint8_t* payload, size_t len, size_t index, size_t total) {
(void) payload;
std::cout << "Publish received." << std::endl;
std::cout << " topic: " << topic << std::endl;
std::cout << " qos: " << unsigned(properties.qos) << std::endl;
std::cout << " dup: " << properties.dup << std::endl;
std::cout << " retain: " << properties.retain << std::endl;
std::cout << " len: " << len << std::endl;
std::cout << " index: " << index << std::endl;
std::cout << " total: " << total << std::endl;
}
void onMqttPublish(uint16_t packetId) {
std::cout << "Publish acknowledged." << std::endl;
std::cout << " packetId: " << packetId << std::endl;
}
void ClientLoop(void* arg) {
(void) arg;
for(;;) {
mqttClient.loop(); // includes a yield
if (exitProgram) break;
}
}
int main() {
std::cout << "Setting up sample MQTT client" << std::endl;
mqttClient.onConnect(onMqttConnect);
mqttClient.onDisconnect(onMqttDisconnect);
mqttClient.onSubscribe(onMqttSubscribe);
mqttClient.onMessage(onMqttMessage);
mqttClient.onPublish(onMqttPublish);
mqttClient.setServer(MQTT_HOST, MQTT_PORT);
std::cout << "Starting sample MQTT client" << std::endl;
std::thread t = std::thread(ClientLoop, nullptr);
connectToMqtt();
while(1) {
if (exitProgram) break;
std::this_thread::yield();
}
t.join();
return EXIT_SUCCESS;
}