118 lines
3.3 KiB
C
118 lines
3.3 KiB
C
#include <ESP8266WiFi.h>
|
|
#include <AsyncMqttClient.h>
|
|
#include <Ticker.h>
|
|
|
|
static bool action_power = 0;
|
|
static bool action_power_force = 0;
|
|
static bool action_reset = 0;
|
|
|
|
static AsyncMqttClient mqttClient;
|
|
Ticker mqttReconnectTimer;
|
|
|
|
void mqttSetup();
|
|
|
|
void connectToMqtt() {
|
|
Serial.println("*MQTT: Connecting to MQTT...");
|
|
mqttClient.connect();
|
|
}
|
|
|
|
void onMqttConnect(bool sessionPresent) {
|
|
Serial.println("*MQTT: Connected to MQTT.");
|
|
Serial.print("*MQTT: Session present: ");
|
|
Serial.println(sessionPresent);
|
|
if (strlen(mqtt_topic)==0) {
|
|
strcpy(mqtt_topic,"wakeonesp/wake");
|
|
};
|
|
uint16_t packetIdSub = mqttClient.subscribe(mqtt_topic, 2);
|
|
Serial.print("*MQTT: Subscribing at QoS 2, packetId: ");
|
|
Serial.println(packetIdSub);
|
|
}
|
|
|
|
void onMqttDisconnect(AsyncMqttClientDisconnectReason reason) {
|
|
Serial.println("*MQTT: Disconnected from MQTT.");
|
|
|
|
// if (reason == AsyncMqttClientDisconnectReason::TLS_BAD_FINGERPRINT) {
|
|
// Serial.println("Bad server fingerprint.");
|
|
// }
|
|
|
|
if (WiFi.isConnected()) {
|
|
mqttReconnectTimer.once(5, connectToMqtt);
|
|
}
|
|
}
|
|
|
|
void onMqttSubscribe(uint16_t packetId, uint8_t qos) {
|
|
Serial.println("*MQTT: Subscribe acknowledged.");
|
|
Serial.print("*MQTT: packetId: ");
|
|
Serial.println(packetId);
|
|
Serial.print("*MQTT: qos: ");
|
|
Serial.println(qos);
|
|
}
|
|
|
|
void onMqttUnsubscribe(uint16_t packetId) {
|
|
Serial.println("*MQTT: Unsubscribe acknowledged.");
|
|
Serial.print("*MQTT: packetId: ");
|
|
Serial.println(packetId);
|
|
}
|
|
|
|
void onMqttMessage(char* topic, char* payload, AsyncMqttClientMessageProperties properties, size_t len, size_t index, size_t total) {
|
|
Serial.println("*MQTT: Publish received.");
|
|
Serial.print("*MQTT: topic: ");
|
|
Serial.println(topic);
|
|
Serial.print("*MQTT: qos: ");
|
|
Serial.println(properties.qos);
|
|
Serial.print("*MQTT: dup: ");
|
|
Serial.println(properties.dup);
|
|
Serial.print("*MQTT: retain: ");
|
|
Serial.println(properties.retain);
|
|
Serial.print("*MQTT: len: ");
|
|
Serial.println(len);
|
|
Serial.print("*MQTT: index: ");
|
|
Serial.println(index);
|
|
Serial.print("*MQTT: total: ");
|
|
Serial.println(total);
|
|
Serial.println();
|
|
if (!strncmp(payload, "on", len)) {
|
|
action_power = 1;
|
|
} else if (!strncmp(payload, "force_off", len)) {
|
|
action_power_force = 1;
|
|
} else if (!strncmp(payload, "reset", len)) {
|
|
action_reset = 1;
|
|
}
|
|
}
|
|
|
|
void onMqttPublish(uint16_t packetId) {
|
|
Serial.println("*MQTT: Publish acknowledged.");
|
|
Serial.print("*MQTT: packetId: ");
|
|
Serial.println(packetId);
|
|
}
|
|
|
|
void mqttSetup() {
|
|
mqttClient.onConnect(onMqttConnect);
|
|
mqttClient.onDisconnect(onMqttDisconnect);
|
|
mqttClient.onSubscribe(onMqttSubscribe);
|
|
mqttClient.onUnsubscribe(onMqttUnsubscribe);
|
|
mqttClient.onMessage(onMqttMessage);
|
|
mqttClient.onPublish(onMqttPublish);
|
|
|
|
IPAddress mqtt_ip;
|
|
mqtt_ip.fromString(mqtt_server);
|
|
|
|
Serial.print("*MQTT: Connecting to: ");
|
|
Serial.println(mqtt_ip);
|
|
|
|
mqttClient.setServer(mqtt_ip, atoi(mqtt_port));
|
|
mqttClient.setCredentials(mqtt_user, mqtt_password);
|
|
String clientIdStr = "WoE-"+WiFi.macAddress();
|
|
char clientId[24];
|
|
clientIdStr.toCharArray(clientId,24);
|
|
mqttClient.setClientId(clientId);
|
|
|
|
// if (strncmp(mqtt_port, "8883", 4)) {
|
|
// mqttClient.setSecure(true);
|
|
// byte target_fp[128];
|
|
// StringToBytes((String)mqtt_fingerprint, target_fp);
|
|
// mqttClient.addServerFingerprint(target_fp);
|
|
// }
|
|
mqttClient.connect();
|
|
}
|