9static const char *
const TAG =
"bl0906";
14 return static_cast<int32_t
>(
encode_uint32((uint8_t) input.
h, input.
m, input.
l, 0)) >> 8;
19 return (
address + data->
l + data->
m + data->
h) ^ 0xFF;
32 this->
read_data_(BL0906_TEMPERATURE, BL0906_TREF, this->temperature_sensor_);
34 this->
read_data_(BL0906_I_1_RMS, BL0906_IREF, this->current_1_sensor_);
35 this->
read_data_(BL0906_WATT_1, BL0906_PREF, this->power_1_sensor_);
36 this->
read_data_(BL0906_CF_1_CNT, BL0906_EREF, this->energy_1_sensor_);
38 this->
read_data_(BL0906_I_2_RMS, BL0906_IREF, this->current_2_sensor_);
39 this->
read_data_(BL0906_WATT_2, BL0906_PREF, this->power_2_sensor_);
40 this->
read_data_(BL0906_CF_2_CNT, BL0906_EREF, this->energy_2_sensor_);
42 this->
read_data_(BL0906_I_3_RMS, BL0906_IREF, this->current_3_sensor_);
43 this->
read_data_(BL0906_WATT_3, BL0906_PREF, this->power_3_sensor_);
44 this->
read_data_(BL0906_CF_3_CNT, BL0906_EREF, this->energy_3_sensor_);
46 this->
read_data_(BL0906_I_4_RMS, BL0906_IREF, this->current_4_sensor_);
47 this->
read_data_(BL0906_WATT_4, BL0906_PREF, this->power_4_sensor_);
48 this->
read_data_(BL0906_CF_4_CNT, BL0906_EREF, this->energy_4_sensor_);
50 this->
read_data_(BL0906_I_5_RMS, BL0906_IREF, this->current_5_sensor_);
51 this->
read_data_(BL0906_WATT_5, BL0906_PREF, this->power_5_sensor_);
52 this->
read_data_(BL0906_CF_5_CNT, BL0906_EREF, this->energy_5_sensor_);
54 this->
read_data_(BL0906_I_6_RMS, BL0906_IREF, this->current_6_sensor_);
55 this->
read_data_(BL0906_WATT_6, BL0906_PREF, this->power_6_sensor_);
56 this->
read_data_(BL0906_CF_6_CNT, BL0906_EREF, this->energy_6_sensor_);
59 this->
read_data_(BL0906_FREQUENCY, BL0906_FREF, frequency_sensor_);
61 this->
read_data_(BL0906_V_RMS, BL0906_UREF, voltage_sensor_);
64 this->
read_data_(BL0906_WATT_SUM, BL0906_WATT, this->total_power_sensor_);
66 this->
read_data_(BL0906_CF_SUM_CNT, BL0906_CF, this->total_energy_sensor_);
78 this->
write_array(USR_WRPROT_WITABLE,
sizeof(USR_WRPROT_WITABLE));
87 this->
write_array(USR_WRPROT_ONLYREAD,
sizeof(USR_WRPROT_ONLYREAD));
93 this->action_queue_.push_back(function);
94 return this->action_queue_.size();
98 if (this->action_queue_.empty()) {
102 for (
size_t i = 0; i < this->action_queue_.size(); i++) {
103 ptr_func = this->action_queue_[i];
105 ESP_LOGI(TAG,
"HandleActionCallback[%zu]", i);
114 this->action_queue_.clear();
129 if (sensor ==
nullptr) {
137 bool signed_result = reference == BL0906_TREF || reference == BL0906_WATT || reference == BL0906_PREF;
141 if (!this->
read_array((uint8_t *) &buffer,
sizeof(buffer) - 1)) {
142 ESP_LOGW(TAG,
"Read failed");
146 ESP_LOGW(TAG,
"Junk on wire. Throwing away partial message");
152 data_s24.
l = buffer.
l;
153 data_s24.
m = buffer.
m;
154 data_s24.
h = buffer.
h;
156 data_u24.
l = buffer.
l;
157 data_u24.
m = buffer.
m;
158 data_u24.
h = buffer.
h;
161 if (reference == BL0906_PREF) {
162 value = (float)
to_int32_t(data_s24) * reference;
166 if (reference == BL0906_WATT) {
167 value = (float)
to_int32_t(data_s24) * reference;
171 if (reference == BL0906_UREF || reference == BL0906_IREF || reference == BL0906_EREF || reference == BL0906_CF) {
176 if (reference == BL0906_FREF) {
180 if (reference == BL0906_TREF) {
182 value = (value - 64) * 12.5 / 59 - 40;
190 float ki = 12875 * 1 * (5.1 + 5.1) * 1000 / 2000 / 1.097;
191 float i_rms0 = measurements * ki;
192 float i_rms = correction * ki;
193 int32_t value = (
i_rms *
i_rms - i_rms0 * i_rms0) / 256;
194 data.
l = value & 0xFF;
195 data.
m = (value >> 8) & 0xFF;
196 data.
h = (value >> 16) & 0xFF;
198 ESP_LOGV(TAG,
"RMSOS:%02X%02X%02X%02X%02X%02X", BL0906_WRITE_COMMAND,
address, data.
l, data.
m, data.
h, data.
address);
207void BL0906::dump_config() {
208 ESP_LOGCONFIG(TAG,
"BL0906:");
209 LOG_SENSOR(
" ",
"Voltage", this->voltage_sensor_);
211 LOG_SENSOR(
" ",
"Current1", this->current_1_sensor_);
212 LOG_SENSOR(
" ",
"Current2", this->current_2_sensor_);
213 LOG_SENSOR(
" ",
"Current3", this->current_3_sensor_);
214 LOG_SENSOR(
" ",
"Current4", this->current_4_sensor_);
215 LOG_SENSOR(
" ",
"Current5", this->current_5_sensor_);
216 LOG_SENSOR(
" ",
"Current6", this->current_6_sensor_);
218 LOG_SENSOR(
" ",
"Power1", this->power_1_sensor_);
219 LOG_SENSOR(
" ",
"Power2", this->power_2_sensor_);
220 LOG_SENSOR(
" ",
"Power3", this->power_3_sensor_);
221 LOG_SENSOR(
" ",
"Power4", this->power_4_sensor_);
222 LOG_SENSOR(
" ",
"Power5", this->power_5_sensor_);
223 LOG_SENSOR(
" ",
"Power6", this->power_6_sensor_);
225 LOG_SENSOR(
" ",
"Energy1", this->energy_1_sensor_);
226 LOG_SENSOR(
" ",
"Energy2", this->energy_2_sensor_);
227 LOG_SENSOR(
" ",
"Energy3", this->energy_3_sensor_);
228 LOG_SENSOR(
" ",
"Energy4", this->energy_4_sensor_);
229 LOG_SENSOR(
" ",
"Energy5", this->energy_5_sensor_);
230 LOG_SENSOR(
" ",
"Energy6", this->energy_6_sensor_);
232 LOG_SENSOR(
" ",
"Total Power", this->total_power_sensor_);
233 LOG_SENSOR(
" ",
"Total Energy", this->total_energy_sensor_);
234 LOG_SENSOR(
" ",
"Frequency", this->frequency_sensor_);
235 LOG_SENSOR(
" ",
"Temperature", this->temperature_sensor_);