Skip to content

Commit

Permalink
Merge pull request #4981 from esphome/bump-2023.6.0b4
Browse files Browse the repository at this point in the history
2023.6.0b4
  • Loading branch information
jesserockz committed Jun 21, 2023
2 parents fc544dc + d919373 commit 0c37d06
Show file tree
Hide file tree
Showing 5 changed files with 39 additions and 2 deletions.
2 changes: 2 additions & 0 deletions esphome/components/bmp280/sensor.py
Original file line number Diff line number Diff line change
Expand Up @@ -94,3 +94,5 @@ async def to_code(config):
sens = await sensor.new_sensor(conf)
cg.add(var.set_pressure_sensor(sens))
cg.add(var.set_pressure_oversampling(conf[CONF_OVERSAMPLING]))

cg.add(var.set_iir_filter(config[CONF_IIR_FILTER]))
31 changes: 31 additions & 0 deletions esphome/components/growatt_solar/growatt_solar.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -9,11 +9,42 @@ static const char *const TAG = "growatt_solar";
static const uint8_t MODBUS_CMD_READ_IN_REGISTERS = 0x04;
static const uint8_t MODBUS_REGISTER_COUNT[] = {33, 95}; // indexed with enum GrowattProtocolVersion

void GrowattSolar::loop() {
// If update() was unable to send we retry until we can send.
if (!this->waiting_to_update_)
return;
update();
}

void GrowattSolar::update() {
// If our last send has had no reply yet, and it wasn't that long ago, do nothing.
uint32_t now = millis();
if (now - this->last_send_ < this->get_update_interval() / 2) {
return;
}

// The bus might be slow, or there might be other devices, or other components might be talking to our device.
if (this->waiting_for_response()) {
this->waiting_to_update_ = true;
return;
}

this->waiting_to_update_ = false;
this->send(MODBUS_CMD_READ_IN_REGISTERS, 0, MODBUS_REGISTER_COUNT[this->protocol_version_]);
this->last_send_ = millis();
}

void GrowattSolar::on_modbus_data(const std::vector<uint8_t> &data) {
// Other components might be sending commands to our device. But we don't get called with enough
// context to know what is what. So if we didn't do a send, we ignore the data.
if (!this->last_send_)
return;
this->last_send_ = 0;

// Also ignore the data if the message is too short. Otherwise we will publish invalid values.
if (data.size() < MODBUS_REGISTER_COUNT[this->protocol_version_] * 2)
return;

auto publish_1_reg_sensor_state = [&](sensor::Sensor *sensor, size_t i, float unit) -> void {
if (sensor == nullptr)
return;
Expand Down
4 changes: 4 additions & 0 deletions esphome/components/growatt_solar/growatt_solar.h
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,7 @@ enum GrowattProtocolVersion {

class GrowattSolar : public PollingComponent, public modbus::ModbusDevice {
public:
void loop() override;
void update() override;
void on_modbus_data(const std::vector<uint8_t> &data) override;
void dump_config() override;
Expand Down Expand Up @@ -55,6 +56,9 @@ class GrowattSolar : public PollingComponent, public modbus::ModbusDevice {
}

protected:
bool waiting_to_update_;
uint32_t last_send_;

struct GrowattPhase {
sensor::Sensor *voltage_sensor_{nullptr};
sensor::Sensor *current_sensor_{nullptr};
Expand Down
2 changes: 1 addition & 1 deletion esphome/const.py
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
"""Constants used by esphome."""

__version__ = "2023.6.0b3"
__version__ = "2023.6.0b4"

ALLOWED_NAME_CHARS = "abcdefghijklmnopqrstuvwxyz0123456789-_"
VALID_SUBSTITUTIONS_CHARACTERS = (
Expand Down
2 changes: 1 addition & 1 deletion requirements.txt
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@ pyserial==3.5
platformio==6.1.7 # When updating platformio, also update Dockerfile
esptool==4.6
click==8.1.3
esphome-dashboard==20230516.0
esphome-dashboard==20230621.0
aioesphomeapi==14.0.0
zeroconf==0.63.0

Expand Down

0 comments on commit 0c37d06

Please sign in to comment.