Merge remote-tracking branch 'upstream/main'

This commit is contained in:
Victor Chang
2024-06-02 22:03:32 -07:00
3 changed files with 78 additions and 13 deletions

View File

@@ -50,10 +50,12 @@ class EmporiaVueUtility : public Component, public UARTDevice {
Sensor *kWh_net = new Sensor();
Sensor *kWh_consumed = new Sensor();
Sensor *kWh_returned = new Sensor();
Sensor *Wh_net = new Sensor();
Sensor *Wh_consumed = new Sensor();
Sensor *Wh_returned = new Sensor();
Sensor *W = new Sensor();
Sensor *Wh_net = new Sensor();
Sensor *Wh_consumed = new Sensor();
Sensor *Wh_returned = new Sensor();
Sensor *W = new Sensor();
Sensor *W_consumed = new Sensor();
Sensor *W_returned = new Sensor();
const char *TAG = "Vue";
const uint8_t meter_reading_interval;
@@ -531,6 +533,13 @@ class EmporiaVueUtility : public Component, public UARTDevice {
last_reading_has_error = 1;
} else {
W->publish_state(watts);
if (watts > 0) {
W_consumed->publish_state(watts);
W_returned->publish_state(0);
} else {
W_consumed->publish_state(0);
W_returned->publish_state(-watts);
}
}
return(watts);
}
@@ -550,6 +559,13 @@ class EmporiaVueUtility : public Component, public UARTDevice {
last_reading_has_error = 1;
} else {
W->publish_state(watts);
if (watts > 0) {
W_consumed->publish_state(watts);
W_returned->publish_state(0);
} else {
W_consumed->publish_state(0);
W_returned->publish_state(-watts);
}
}
return(watts);
}
@@ -601,7 +617,7 @@ class EmporiaVueUtility : public Component, public UARTDevice {
int handle_resp_firmware_ver() {
struct Ver *ver;
ver = &input_buffer.ver;
mgm_firmware_ver = ver->value;
ESP_LOGI(TAG, "MGM Firmware Version: %d", mgm_firmware_ver);
@@ -682,6 +698,19 @@ class EmporiaVueUtility : public Component, public UARTDevice {
msg_len = read_msg();
now = ::time(&now);
/* sanity checks! */
if (next_meter_request >
now + (INITIAL_STARTUP_DELAY + METER_REJOIN_INTERVAL)) {
ESP_LOGD(TAG,
"Time jumped back (%lld > %lld + %lld); resetting",
(long long) next_meter_request,
(long long) now,
(long long) (INITIAL_STARTUP_DELAY +
METER_REJOIN_INTERVAL));
next_meter_request = next_meter_join = 0;
}
if (msg_len != 0) {
msg_type = input_buffer.data[2];
@@ -761,9 +790,8 @@ class EmporiaVueUtility : public Component, public UARTDevice {
}
if (now >= next_meter_request) {
// Handle initial startup delay
if (next_meter_request == 0) {
// Handle initial startup delay
if (next_meter_request == 0) {
next_meter_request = now + INITIAL_STARTUP_DELAY;
next_meter_join = next_meter_request + METER_REJOIN_INTERVAL;
return;
@@ -778,13 +806,12 @@ class EmporiaVueUtility : public Component, public UARTDevice {
next_meter_join = now + METER_REJOIN_INTERVAL;
return;
}
if (startup_step == 0) send_version_req();
else if (startup_step == 1) send_mac_req();
else if (startup_step == 2) send_install_code_req();
else if (startup_step == 3) send_meter_join();
else send_meter_request();
}
}
};

View File

@@ -25,7 +25,7 @@ api:
mqtt:
broker: !secret mqtt_broker
id: vue-utility
id: vue_utility
username: !secret mqtt_username
password: !secret mqtt_password
discovery: False # Only if you use the HA API usually
@@ -42,7 +42,7 @@ sensor:
lambda: |-
auto vue = new EmporiaVueUtility(id(emporia_uart));
App.register_component(vue);
return {vue->kWh_consumed, vue->kWh_returned, vue->W, vue->kWh_net};
return {vue->kWh_consumed, vue->kWh_returned, vue->W_consumed, vue->W_returned, vue->W, vue->kWh_net};
sensors:
- name: "kWh Consumed"
id: kWh_consumed
@@ -88,6 +88,44 @@ sensor:
lambda: |-
ESP_LOGI("Vue", "kWh = %0.3f", x);
- name: "Watts consumed"
id: watts_consumed
unit_of_measurement: "W"
accuracy_decimals: 0
state_class: measurement
device_class: power
# Report every 5 minutes or when +/- 20 watts
filters:
- or:
- throttle: 5min
- delta: 20 # <- watts
- lambda: |-
if (id(fast_reporting)) return(x);
return {};
on_raw_value:
then:
lambda: |-
ESP_LOGI("Vue", "Watts consumed = %0.3f", x);
- name: "Watts returned"
id: watts_returned
unit_of_measurement: "W"
accuracy_decimals: 0
state_class: measurement
device_class: power
# Report every 5 minutes or when +/- 20 watts
filters:
- or:
- throttle: 5min
- delta: 20 # <- watts
- lambda: |-
if (id(fast_reporting)) return(x);
return {};
on_raw_value:
then:
lambda: |-
ESP_LOGI("Vue", "Watts returned = %0.3f", x);
- name: "Watts"
id: watts
unit_of_measurement: "W"

View File

@@ -25,7 +25,7 @@ api:
mqtt:
broker: !secret mqtt_broker
id: vue-utility
id: vue_utility
username: !secret mqtt_username
password: !secret mqtt_password
discovery: False # Only if you use the HA API usually