73 lines
1.8 KiB
C++
73 lines
1.8 KiB
C++
void ConnectMQTT() {
|
|
ConfigData config;
|
|
EEPROM.get(ConfAddress, config);
|
|
|
|
static const char *user = config.mqtt.user;
|
|
static const char *password = config.mqtt.password;
|
|
//config.mqtt.topic.root
|
|
//config.mqtt.broker
|
|
|
|
Serial.println("connecting MQTT...");
|
|
while (!mqtt_client.connect("brewhouse", user, password)) {
|
|
Serial.print(".");
|
|
delay(1000);
|
|
}
|
|
|
|
Serial.println("\nconnected!");
|
|
|
|
mqtt_client.subscribe(config.mqtt.topic.root + config.mqtt.topic.boil.setpoint);
|
|
mqtt_client.subscribe(config.mqtt.topic.root + config.mqtt.topic.mash.setpoint);
|
|
}
|
|
|
|
void MessageReceived(String &topic, String &payload) {
|
|
ConfigData config;
|
|
EEPROM.get(ConfAddress, config);
|
|
|
|
/** JSON Parser Setup */
|
|
StaticJsonDocument<200> doc;
|
|
|
|
// Deserialize the JSON document
|
|
DeserializationError error = deserializeJson(doc, payload);
|
|
|
|
// Test if parsing succeeds.
|
|
if (error) {
|
|
Serial.println(error.f_str());
|
|
return;
|
|
}
|
|
|
|
if (topic == config.mqtt.topic.root + config.mqtt.topic.boil.setpoint) {
|
|
// Update PWM setpoint.
|
|
String setting = doc["setpoint"];
|
|
KettleDuty = setting.toInt();
|
|
}
|
|
}
|
|
|
|
void SetupMQTT(const char *broker) {
|
|
// Note: Local domain names (e.g. "Computer.local" on OSX) are not supported
|
|
// by Arduino. You need to set the IP address directly.
|
|
mqtt_client.begin(broker, net);
|
|
mqtt_client.onMessage(MessageReceived);
|
|
|
|
ConnectMQTT();
|
|
}
|
|
|
|
static void SendSensorData() {
|
|
ConfigData config;
|
|
EEPROM.get(ConfAddress, config);
|
|
// NOTE: max message length is 250 bytes.
|
|
StaticJsonDocument<200> doc;
|
|
|
|
doc["entity"] = config.mqtt.topic.boil.name;
|
|
doc["setpoint"] = KettleDuty;
|
|
doc["units"] = "%";
|
|
|
|
String jstr;
|
|
serializeJson(doc, jstr);
|
|
|
|
String topic = config.mqtt.topic.root;
|
|
topic += config.mqtt.topic.boil.sensor;
|
|
|
|
mqtt_client.publish(topic, jstr);
|
|
|
|
}
|