adding basic mqtt support
This commit is contained in:
parent
bbf3d44d69
commit
3b57550ead
@ -7,6 +7,7 @@
|
||||
#include "MqttSettings.h"
|
||||
#include "Huawei_can.h"
|
||||
// #include "Failsafe.h"
|
||||
#include "WebApi_Huawei.h"
|
||||
#include <ctime>
|
||||
|
||||
#define TOPIC_SUB_LIMIT_ONLINE_VOLTAGE "limit_online_voltage"
|
||||
@ -29,32 +30,39 @@ void MqttHandleHuaweiClass::init()
|
||||
MqttSettings.subscribe(String(topic + "huawei/cmd/" + TOPIC_SUB_LIMIT_ONLINE_CURRENT).c_str(), 0, std::bind(&MqttHandleHuaweiClass::onMqttMessage, this, _1, _2, _3, _4, _5, _6));
|
||||
MqttSettings.subscribe(String(topic + "huawei/cmd/" + TOPIC_SUB_POWER).c_str(), 0, std::bind(&MqttHandleHuaweiClass::onMqttMessage, this, _1, _2, _3, _4, _5, _6));
|
||||
|
||||
//pinMode(13, OUTPUT);
|
||||
//digitalWrite(13,HIGH);
|
||||
_lastPublish = millis();
|
||||
|
||||
}
|
||||
|
||||
|
||||
void MqttHandleHuaweiClass::loop()
|
||||
{
|
||||
if (!MqttSettings.getConnected() ) {
|
||||
return;
|
||||
}
|
||||
|
||||
const CONFIG_T& config = Configuration.get();
|
||||
const RectifierParameters_t& rp = HuaweiCan.get();
|
||||
// FIXME - Some memory issue when this is enabled
|
||||
return;
|
||||
|
||||
if (millis() - _lastPublish > (config.Mqtt_PublishInterval * 1000)) {
|
||||
MqttSettings.publish("huawei/data_age", String((millis() - HuaweiCan.getLastUpdate()) / 1000));
|
||||
MqttSettings.publish("huawei/input_voltage", String(rp.input_voltage));
|
||||
MqttSettings.publish("huawei/input_current", String(rp.input_current));
|
||||
MqttSettings.publish("huawei/input_power", String(rp.input_power));
|
||||
MqttSettings.publish("huawei/output_voltage", String(rp.output_voltage));
|
||||
MqttSettings.publish("huawei/output_current", String(rp.output_current));
|
||||
MqttSettings.publish("huawei/max_output_current", String(rp.max_output_current));
|
||||
MqttSettings.publish("huawei/output_power", String(rp.output_power));
|
||||
MqttSettings.publish("huawei/input_temp", String(rp.input_temp));
|
||||
MqttSettings.publish("huawei/output_temp", String(rp.output_temp));
|
||||
MqttSettings.publish("huawei/efficiency", String(rp.efficiency));
|
||||
String json_string;
|
||||
const CONFIG_T& config = Configuration.get();
|
||||
const RectifierParameters_t *rp = HuaweiCan.get();
|
||||
|
||||
if ((millis() - _lastPublish) > (config.Mqtt_PublishInterval * 1000) ) {
|
||||
DynamicJsonDocument doc(256);
|
||||
doc["data_age"] = (millis() - HuaweiCan.getLastUpdate()) / 1000;
|
||||
doc[F("input_voltage")] = rp->input_voltage;
|
||||
doc[F("input_current")] = rp->input_current;
|
||||
doc[F("input_power")] = rp->input_power;
|
||||
doc[F("output_voltage")] = rp->output_voltage;
|
||||
doc[F("output_current")] = rp->output_current;
|
||||
doc[F("max_output_current")] = rp->max_output_current;
|
||||
doc[F("output_power")] = rp->output_power;
|
||||
doc[F("input_temp")] = rp->input_temp;
|
||||
doc[F("output_temp")] = rp->output_temp;
|
||||
doc[F("efficiency")] = rp->efficiency;
|
||||
serializeJson(doc, json_string);
|
||||
MqttSettings.publish("huawei", json_string);
|
||||
|
||||
yield();
|
||||
_lastPublish = millis();
|
||||
@ -98,7 +106,11 @@ void MqttHandleHuaweiClass::onMqttMessage(const espMqttClientTypes::MessagePrope
|
||||
HuaweiCan.setValue(payload_val, HUAWEI_ONLINE_CURRENT);
|
||||
} else if (!strcmp(setting, TOPIC_SUB_POWER)) {
|
||||
// Control power on/off
|
||||
MessageOutput.printf("Limit Current: %f A\r\n", payload_val);
|
||||
//digitalWrite(13, payload_val > 0);
|
||||
MessageOutput.printf("Power: %f A\r\n", payload_val);
|
||||
if(payload_val > 0) {
|
||||
HuaweiCan.setPower(true);
|
||||
} else {
|
||||
HuaweiCan.setPower(false);
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -14,6 +14,7 @@
|
||||
#include "MqttHandleVedirectHass.h"
|
||||
#include "MqttHandleInverter.h"
|
||||
#include "MqttHandleVedirect.h"
|
||||
#include "MqttHandleHuawei.h"
|
||||
#include "MqttSettings.h"
|
||||
#include "NetworkSettings.h"
|
||||
#include "NtpSettings.h"
|
||||
@ -100,6 +101,7 @@ void setup()
|
||||
MqttHandleVedirect.init();
|
||||
MqttHandleHass.init();
|
||||
MqttHandleVedirectHass.init();
|
||||
MqttHandleHuawei.init();
|
||||
MessageOutput.println(F("done"));
|
||||
|
||||
// Initialize WebApi
|
||||
@ -163,8 +165,8 @@ void setup()
|
||||
// Initialize Huawei AC-charger PSU / CAN bus
|
||||
MessageOutput.println(F("Initialize Huawei AC charger interface... "));
|
||||
if (PinMapping.isValidHuaweiConfig()) {
|
||||
MessageOutput.printf("Huawei AC-charger miso = %d, mosi = %d, clk = %d, irq = %d, cs = %d\r\n", pin.huawei_miso, pin.huawei_mosi, pin.huawei_clk, pin.huawei_irq, pin.huawei_cs);
|
||||
HuaweiCan.init(pin.huawei_miso, pin.huawei_mosi, pin.huawei_clk, pin.huawei_irq, pin.huawei_cs);
|
||||
MessageOutput.printf("Huawei AC-charger miso = %d, mosi = %d, clk = %d, irq = %d, cs = %d, power_pin = %d\r\n", pin.huawei_miso, pin.huawei_mosi, pin.huawei_clk, pin.huawei_irq, pin.huawei_cs, pin.huawei_power);
|
||||
HuaweiCan.init(pin.huawei_miso, pin.huawei_mosi, pin.huawei_clk, pin.huawei_irq, pin.huawei_cs, pin.huawei_power);
|
||||
MessageOutput.println(F("done"));
|
||||
} else {
|
||||
MessageOutput.println(F("Invalid pin config"));
|
||||
@ -195,6 +197,8 @@ void loop()
|
||||
yield();
|
||||
MqttHandleVedirectHass.loop();
|
||||
yield();
|
||||
MqttHandleHuawei.loop();
|
||||
yield();
|
||||
WebApi.loop();
|
||||
yield();
|
||||
Display.loop();
|
||||
|
||||
Loading…
Reference in New Issue
Block a user