pitrix/mqtt.h
2019-05-21 05:52:57 +02:00

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();
}
}