Skip to content

Commit

Permalink
copy vedirect data if send only
Browse files Browse the repository at this point in the history
updated data is true
  • Loading branch information
helgeerbe committed Feb 14, 2023
1 parent 43bfee4 commit 7022ed9
Showing 1 changed file with 29 additions and 19 deletions.
48 changes: 29 additions & 19 deletions src/MqttHandleVedirect.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -27,69 +27,79 @@ void MqttHandleVedirectClass::loop()
String serial;
auto pos = VeDirect.veMap.find("SER");
if (pos == VeDirect.veMap.end()) {
MessageOutput.printf("No VeDirect Data\r\n");
return;
}
else {
serial = pos->second;
}

if (millis() - _lastPublish > (config.Mqtt_PublishInterval * 1000)) {
if (millis() - VeDirect.getLastUpdate() > (config.Vedirect_PollInterval * 3 * 1000)) {
MessageOutput.printf("VeDirect Data too old: Stopping publishing. Last read before %f seconds\r\n", (millis() - VeDirect.getLastUpdate()) / 1000.0);
if ((millis() - VeDirect.getLastUpdate()) / 1000 > config.Vedirect_PollInterval * 5) { // same as age critical in live view
MessageOutput.printf("VeDirect Data too old: Stopping publishing. Last read before %lu seconds\r\n", (millis() - VeDirect.getLastUpdate()) / 1000);
return;
}

String key;
String value;
bool bChanged;
String mapedValue;
bool bChanged = false;

String topic = "";
for (auto it = VeDirect.veMap.begin(); it != VeDirect.veMap.end(); ++it) {
key = it->first;
value = it->second;

// Mark changed values
auto a = _kv_map.find(key);
bChanged = true;
if (a != _kv_map.end()) {
if (_kv_map[key] == value) {
bChanged = false;
}
if (config.Vedirect_UpdatesOnly){
// Mark changed values
auto a = _kv_map.find(key);
bChanged = true;
if (a != _kv_map.end()) {
if (a->first.equals(value)) {
bChanged = false;
}
}
}


// publish only changed key, values pairs
if (!config.Vedirect_UpdatesOnly || (bChanged && config.Vedirect_UpdatesOnly)) {
topic = "victron/" + serial + "/";
topic.concat(key);
if (key.equals("PID")) {
value = VeDirect.getPidAsString(value.c_str());
mapedValue = VeDirect.getPidAsString(value.c_str());
}
else if (key.equals("CS")) {
value = VeDirect.getCsAsString(value.c_str());
mapedValue = VeDirect.getCsAsString(value.c_str());
}
else if (key.equals("ERR")) {
value = VeDirect.getErrAsString(value.c_str());
mapedValue = VeDirect.getErrAsString(value.c_str());
}
else if (key.equals("OR")) {
value = VeDirect.getOrAsString(value.c_str());
mapedValue = VeDirect.getOrAsString(value.c_str());
}
else if (key.equals("MPPT")) {
value = VeDirect.getMpptAsString(value.c_str());
mapedValue = VeDirect.getMpptAsString(value.c_str());
}
else if (key.equals("V") ||
key.equals("I") ||
key.equals("VPV")) {
value = round(value.toDouble() / 10.0) / 100.0;
mapedValue = round(value.toDouble() / 10.0) / 100.0;
}
else if (key.equals("H19") ||
key.equals("H20") ||
key.equals("H22")) {
value = value.toDouble() / 100.0;
mapedValue = value.toDouble() / 100.0;
}
MqttSettings.publish(topic.c_str(), value.c_str());
else {
mapedValue = value;
}
MqttSettings.publish(topic.c_str(), mapedValue.c_str());
}
}
_kv_map = VeDirect.veMap;
if (config.Vedirect_UpdatesOnly){
_kv_map = VeDirect.veMap;
}
_lastPublish = millis();
}
}

0 comments on commit 7022ed9

Please sign in to comment.