44 lines
1.0 KiB
C
44 lines
1.0 KiB
C
|
PubSubClient mqtt_client(wifi);
|
||
|
long mqtt_last_reconnect_attempt = 0;
|
||
|
|
||
|
void mqtt_callback(char* topic, byte* payload, unsigned int length) {
|
||
|
payload[length] = '\0';
|
||
|
|
||
|
for (int i=0; i<NUM_EFFECTS; i++) {
|
||
|
EffectEntry e = effects[i];
|
||
|
if (strcmp(e.name, (char*)payload)==0) {
|
||
|
current_effect = e.effect;
|
||
|
clear();
|
||
|
return;
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
boolean mqtt_connect() {
|
||
|
if (mqtt_client.connect("pitrix", MQTT_USER, MQTT_PASS)) {
|
||
|
mqtt_client.subscribe(MQTT_TOPIC_MODE);
|
||
|
mqtt_client.publish(MQTT_TOPIC_STATUS, "ONLINE");
|
||
|
}
|
||
|
return mqtt_client.connected();
|
||
|
}
|
||
|
|
||
|
void mqtt_setup() {
|
||
|
mqtt_client.setServer(MQTT_SERVER, MQTT_PORT);
|
||
|
mqtt_client.setCallback(mqtt_callback);
|
||
|
mqtt_last_reconnect_attempt = 0;
|
||
|
}
|
||
|
|
||
|
void mqtt_loop() {
|
||
|
if (!mqtt_client.connected()) {
|
||
|
long now = millis();
|
||
|
if (now - mqtt_last_reconnect_attempt > 5000) {
|
||
|
mqtt_last_reconnect_attempt = now;
|
||
|
if (mqtt_connect()) {
|
||
|
mqtt_last_reconnect_attempt = 0;
|
||
|
}
|
||
|
}
|
||
|
} else {
|
||
|
mqtt_client.loop();
|
||
|
}
|
||
|
}
|