10#include <ESP8266WiFi.h>
54 this->wifiSsid = wifiSsid;
55 this->wifiPass = wifiPass;
56 this->mqttHost = mqttHost;
57 this->mqttPort = mqttPort;
58 this->mqttUser = mqttUser;
59 this->mqttPass = mqttPass;
60 this->deviceId = deviceId;
64 chipId = ESP.getChipId();
67 baseTopic = String(mqttUser) +
"/" + site +
"/" + deviceId;
71 mqtt.setServer(mqttHost, mqttPort);
74 mqtt.setBufferSize(1024);
90 if (WiFi.status() != WL_CONNECTED) {
95 if (!mqtt.connected()) {
109 return mqtt.connected();
118void WifiMqttClient::connectWifi() {
121 Serial.println(
"=== WiFi: connect start ===");
122 Serial.print(
"SSID: ");
123 Serial.println(wifiSsid);
126 if (WiFi.status() == WL_CONNECTED)
return;
128 Serial.print(
"WiFi mode: ");
129 Serial.println(WIFI_STA ?
"STA" :
"UNKNOWN");
131 Serial.println(
"Calling WiFi.begin()");
134 WiFi.begin(wifiSsid, wifiPass);
136 unsigned long start = millis();
140 while (WiFi.status() != WL_CONNECTED) {
145 if (dots % 16 == 0) {
150 if (millis() - start > 15000) {
152 Serial.println(
"WiFi connect timeout (15s)");
166void WifiMqttClient::connectMqtt() {
169 while (!mqtt.connected()) {
176 String((uint32_t)chipId, HEX);
179 mqtt.connect(clientId.c_str(), mqttUser, mqttPass);
182 if (!mqtt.connected()) {
198 return baseTopic +
"/" + suffix;
212 const char* topicSuffix,
213 const JsonDocument& data
215 StaticJsonDocument<256> envelope;
218 JsonObject device = envelope.createNestedObject(
"device");
219 device[
"id"] = deviceId;
221 device[
"chip_id"] = String((uint32_t)chipId, HEX);
224 envelope[
"sent_ts_ms"] = millis();
225 envelope[
"data"] = data;
229 size_t len = serializeJson(envelope, buffer);
255 if (!mqtt.connected())
return false;
256 return mqtt.subscribe(topic);
266 if (!mqtt.connected())
return false;
267 return mqtt.unsubscribe(topic);
static constexpr const char * DEVICE_NAME
Human-readable device platform name.
Lightweight WiFi + MQTT helper wrapper for ESP-based Arduino systems.
void callback(char *topic, byte *payload, unsigned int length)
MQTT message callback handler.
void loop()
Main service loop.
bool subscribe(const char *topic)
Subscribes to a topic.
bool connected()
Checks whether the MQTT client is currently connected.
WifiMqttClient()
Default constructor.
String makeTopic(const char *suffix) const
Constructs a fully qualified MQTT topic.
bool unsubscribe(const char *topic)
Unsubscribes from a topic.
void setCallback(MQTT_CALLBACK_SIGNATURE)
Sets the MQTT message callback.
bool publishJson(const char *topicSuffix, const JsonDocument &data)
Publishes a JSON document to an MQTT topic.
void begin(const char *wifiSsid, const char *wifiPass, const char *mqttHost, uint16_t mqttPort, const char *mqttUser, const char *mqttPass, const char *deviceId, const char *site)
Initializes WiFi and MQTT configuration.