#include "mqtt.h" #include "tools.h" #include "prototypes.h" void connect() { LOGln("Connecting to MQTT broker..."); if (mqtt.connect(MQTT_CLIENT_ID, MQTT_USER, MQTT_PASS, MQTT_TOPIC_STATE, 0, true, "OFFLINE")) { LOGln("Connected."); mqtt.publish(MQTT_TOPIC_STATE, "ONLINE", true); char buffer[40]; snprintf(buffer, 40, "ONLINE %s", wifi.localIP().toString().c_str()); mqtt.publish(MQTT_TOPIC_STATE_LONG, buffer, true); mqtt.subscribe(MQTT_TOPIC_COMMANDS); } else { LOGln("Connection failed. Reason: %d", mqtt.state()); delay(1000); } } void callback(char* topic, byte* pl, unsigned int length) { pl[length] = 0; String payload((char*)pl); uint16_t duration = 0; int cp = payload.indexOf(","); if (cp != -1) { duration = payload.substring(cp+1).toInt(); payload = payload.substring(0, cp); } AnimationMode am; if (payload.equals("corners")) am = AM_CORNERS; else if (payload.equals("nodes")) am = AM_NODES; if (duration > 0) { temp_mode = am; temp_mode_until = millis() + duration*1000; } else { mode = am; } } void mqtt_setup() { mqtt.setServer(MQTT_SERVER, MQTT_SERVER_PORT); mqtt.setCallback(callback); mqtt.setSocketTimeout(1); connect(); } void mqtt_loop() { if (!mqtt.connected()) { connect(); } mqtt.loop(); }