mirror of
https://github.com/KinDR007/VictronMPPT-ESPHOME.git
synced 2024-10-21 07:09:27 +00:00
Merge smart shunt support
This commit is contained in:
parent
231f950b16
commit
5b96cb1fb6
22
.github/workflows/ci.yaml
vendored
22
.github/workflows/ci.yaml
vendored
@ -163,14 +163,13 @@ jobs:
|
||||
shell: bash
|
||||
run: 'echo -e "wifi_ssid: ssid\nwifi_password: password\nmqtt_host: host\nmqtt_username: username\nmqtt_password: password" > secrets.yaml'
|
||||
- run: |
|
||||
sed -i 's#source: github://KinDR007/VictronMPPT-ESPHOME@main#source: components#' esp8266-example.yaml
|
||||
esphome config esp8266-example.yaml
|
||||
esphome -s external_components_source components config smartsolar-mppt-esp8266-example.yaml
|
||||
- run: |
|
||||
sed -i 's#source: github://KinDR007/VictronMPPT-ESPHOME@main#source: components#' esp8266-example-multiple-uarts.yaml
|
||||
esphome config esp8266-example-multiple-uarts.yaml
|
||||
esphome -s external_components_source components config smartsolar-mppt-esp8266-example-multiple-uarts.yaml
|
||||
- run: |
|
||||
sed -i 's#source: github://KinDR007/VictronMPPT-ESPHOME@main#source: components#' esp8266-example-advanced.yaml
|
||||
esphome config esp8266-example-advanced.yaml
|
||||
esphome -s external_components_source components config smartsolar-mppt-esp8266-example-advanced.yaml
|
||||
- run: |
|
||||
esphome -s external_components_source components config smartshunt-esp8266-example.yaml
|
||||
|
||||
esphome-compile:
|
||||
runs-on: ubuntu-latest
|
||||
@ -208,11 +207,10 @@ jobs:
|
||||
shell: bash
|
||||
run: 'echo -e "wifi_ssid: ssid\nwifi_password: password\nmqtt_host: host\nmqtt_username: username\nmqtt_password: password" > secrets.yaml'
|
||||
- run: |
|
||||
sed -i 's#source: github://KinDR007/VictronMPPT-ESPHOME@main#source: components#' esp8266-example.yaml
|
||||
esphome compile esp8266-example.yaml
|
||||
esphome -s external_components_source components compile smartsolar-mppt-esp8266-example.yaml
|
||||
- run: |
|
||||
sed -i 's#source: github://KinDR007/VictronMPPT-ESPHOME@main#source: components#' esp8266-example-multiple-uarts.yaml
|
||||
esphome compile esp8266-example-multiple-uarts.yaml
|
||||
esphome -s external_components_source components compile smartsolar-mppt-esp8266-example-multiple-uarts.yaml
|
||||
- run: |
|
||||
sed -i 's#source: github://KinDR007/VictronMPPT-ESPHOME@main#source: components#' esp8266-example-advanced.yaml
|
||||
esphome compile esp8266-example-advanced.yaml
|
||||
esphome -s external_components_source components compile smartsolar-mppt-esp8266-example-advanced.yaml
|
||||
- run: |
|
||||
esphome -s external_components_source components compile smartshunt-esp8266-example.yaml
|
||||
|
2
.gitignore
vendored
2
.gitignore
vendored
@ -1,5 +1,5 @@
|
||||
.idea/
|
||||
secret.yaml
|
||||
secrets.yaml
|
||||
.esphome/
|
||||
**/.pioenvs/
|
||||
**/.piolibdeps/
|
||||
|
17
README.md
17
README.md
@ -130,7 +130,19 @@ The available numeric sensors are:
|
||||
- `battery_voltage`
|
||||
- `device_mode_id`
|
||||
- `warning_code`
|
||||
|
||||
- `instantaneous_power`
|
||||
- `consumed_amp_hours`
|
||||
- `state_of_charge`
|
||||
- `time_to_go`
|
||||
- `depth_of_the_deepest_discharge`
|
||||
- `depth_of_the_last_discharge`
|
||||
- `number_of_charge_cycles`
|
||||
- `number_of_full_discharges`
|
||||
- `min_battery_voltage`
|
||||
- `max_battery_voltage`
|
||||
- `last_full_charge`
|
||||
- `amount_of_discharged_energy`
|
||||
- `amount_of_charged_energy`
|
||||
|
||||
The available text sensors are:
|
||||
- `charging_mode`
|
||||
@ -140,6 +152,9 @@ The available text sensors are:
|
||||
- `device_type`
|
||||
- `device_mode`
|
||||
- `warning`
|
||||
- `alarm_condition_active`
|
||||
- `alarm_reason`
|
||||
- `model_description`
|
||||
|
||||
Binary sensors:
|
||||
|
||||
|
@ -10,9 +10,13 @@ from esphome.const import (
|
||||
ICON_CURRENT_AC,
|
||||
ICON_EMPTY,
|
||||
ICON_FLASH,
|
||||
ICON_PERCENT,
|
||||
ICON_POWER,
|
||||
ICON_TIMELAPSE,
|
||||
UNIT_AMPERE,
|
||||
UNIT_EMPTY,
|
||||
UNIT_MINUTE,
|
||||
UNIT_PERCENT,
|
||||
UNIT_VOLT,
|
||||
UNIT_WATT,
|
||||
UNIT_WATT_HOURS,
|
||||
@ -42,6 +46,20 @@ CONF_LOAD_CURRENT = "load_current"
|
||||
CONF_AC_OUT_VOLTAGE = "ac_out_voltage"
|
||||
CONF_AC_OUT_CURRENT = "ac_out_current"
|
||||
|
||||
CONF_INSTANTANEOUS_POWER = "instantaneous_power"
|
||||
CONF_CONSUMED_AMP_HOURS = "consumed_amp_hours"
|
||||
CONF_STATE_OF_CHARGE = "state_of_charge"
|
||||
CONF_TIME_TO_GO = "time_to_go"
|
||||
CONF_DEPTH_OF_THE_DEEPEST_DISCHARGE = "depth_of_the_deepest_discharge"
|
||||
CONF_DEPTH_OF_THE_LAST_DISCHARGE = "depth_of_the_last_discharge"
|
||||
CONF_NUMBER_OF_CHARGE_CYCLES = "number_of_charge_cycles"
|
||||
CONF_NUMBER_OF_FULL_DISCHARGES = "number_of_full_discharges"
|
||||
CONF_MIN_BATTERY_VOLTAGE = "min_battery_voltage"
|
||||
CONF_MAX_BATTERY_VOLTAGE = "max_battery_voltage"
|
||||
CONF_LAST_FULL_CHARGE = "last_full_charge"
|
||||
CONF_AMOUNT_OF_DISCHARGED_ENERGY = "amount_of_discharged_energy"
|
||||
CONF_AMOUNT_OF_CHARGED_ENERGY = "amount_of_charged_energy"
|
||||
|
||||
SENSORS = [
|
||||
CONF_BATTERY_VOLTAGE,
|
||||
CONF_AC_OUT_VOLTAGE,
|
||||
@ -61,6 +79,20 @@ SENSORS = [
|
||||
CONF_TRACKING_MODE_ID,
|
||||
CONF_DEVICE_MODE_ID,
|
||||
CONF_LOAD_CURRENT,
|
||||
#
|
||||
CONF_INSTANTANEOUS_POWER,
|
||||
CONF_CONSUMED_AMP_HOURS,
|
||||
CONF_STATE_OF_CHARGE,
|
||||
CONF_TIME_TO_GO,
|
||||
CONF_DEPTH_OF_THE_DEEPEST_DISCHARGE,
|
||||
CONF_DEPTH_OF_THE_LAST_DISCHARGE,
|
||||
CONF_NUMBER_OF_CHARGE_CYCLES,
|
||||
CONF_NUMBER_OF_FULL_DISCHARGES,
|
||||
CONF_MIN_BATTERY_VOLTAGE,
|
||||
CONF_MAX_BATTERY_VOLTAGE,
|
||||
CONF_LAST_FULL_CHARGE,
|
||||
CONF_AMOUNT_OF_DISCHARGED_ENERGY,
|
||||
CONF_AMOUNT_OF_CHARGED_ENERGY,
|
||||
]
|
||||
|
||||
|
||||
@ -175,6 +207,84 @@ CONFIG_SCHEMA = cv.Schema(
|
||||
accuracy_decimals=3,
|
||||
device_class=DEVICE_CLASS_CURRENT,
|
||||
),
|
||||
cv.Optional(CONF_INSTANTANEOUS_POWER): sensor.sensor_schema(
|
||||
unit_of_measurement=UNIT_WATT,
|
||||
icon=ICON_POWER,
|
||||
accuracy_decimals=0,
|
||||
device_class=DEVICE_CLASS_POWER,
|
||||
),
|
||||
cv.Optional(CONF_CONSUMED_AMP_HOURS): sensor.sensor_schema(
|
||||
unit_of_measurement=UNIT_AMPERE,
|
||||
icon=ICON_CURRENT_AC,
|
||||
accuracy_decimals=3,
|
||||
device_class=DEVICE_CLASS_POWER,
|
||||
),
|
||||
cv.Optional(CONF_STATE_OF_CHARGE): sensor.sensor_schema(
|
||||
unit_of_measurement=UNIT_PERCENT,
|
||||
icon=ICON_PERCENT,
|
||||
accuracy_decimals=0,
|
||||
device_class=DEVICE_CLASS_EMPTY,
|
||||
),
|
||||
cv.Optional(CONF_TIME_TO_GO): sensor.sensor_schema(
|
||||
unit_of_measurement=UNIT_MINUTE,
|
||||
icon=ICON_TIMELAPSE,
|
||||
accuracy_decimals=0,
|
||||
device_class=DEVICE_CLASS_EMPTY,
|
||||
),
|
||||
cv.Optional(CONF_DEPTH_OF_THE_DEEPEST_DISCHARGE): sensor.sensor_schema(
|
||||
unit_of_measurement=UNIT_AMPERE,
|
||||
icon=ICON_CURRENT_AC,
|
||||
accuracy_decimals=3,
|
||||
device_class=DEVICE_CLASS_CURRENT,
|
||||
),
|
||||
cv.Optional(CONF_DEPTH_OF_THE_LAST_DISCHARGE): sensor.sensor_schema(
|
||||
unit_of_measurement=UNIT_AMPERE,
|
||||
icon=ICON_CURRENT_AC,
|
||||
accuracy_decimals=3,
|
||||
device_class=DEVICE_CLASS_CURRENT,
|
||||
),
|
||||
cv.Optional(CONF_NUMBER_OF_CHARGE_CYCLES): sensor.sensor_schema(
|
||||
unit_of_measurement=UNIT_EMPTY,
|
||||
icon=ICON_EMPTY,
|
||||
accuracy_decimals=0,
|
||||
device_class=DEVICE_CLASS_EMPTY,
|
||||
),
|
||||
cv.Optional(CONF_NUMBER_OF_FULL_DISCHARGES): sensor.sensor_schema(
|
||||
unit_of_measurement=UNIT_EMPTY,
|
||||
icon=ICON_EMPTY,
|
||||
accuracy_decimals=0,
|
||||
device_class=DEVICE_CLASS_EMPTY,
|
||||
),
|
||||
cv.Optional(CONF_MIN_BATTERY_VOLTAGE): sensor.sensor_schema(
|
||||
unit_of_measurement=UNIT_VOLT,
|
||||
icon=ICON_FLASH,
|
||||
accuracy_decimals=3,
|
||||
device_class=DEVICE_CLASS_VOLTAGE,
|
||||
),
|
||||
cv.Optional(CONF_MAX_BATTERY_VOLTAGE): sensor.sensor_schema(
|
||||
unit_of_measurement=UNIT_VOLT,
|
||||
icon=ICON_FLASH,
|
||||
accuracy_decimals=3,
|
||||
device_class=DEVICE_CLASS_VOLTAGE,
|
||||
),
|
||||
cv.Optional(CONF_LAST_FULL_CHARGE): sensor.sensor_schema(
|
||||
unit_of_measurement=UNIT_MINUTE,
|
||||
icon=ICON_TIMELAPSE,
|
||||
accuracy_decimals=0,
|
||||
device_class=DEVICE_CLASS_EMPTY,
|
||||
),
|
||||
cv.Optional(CONF_AMOUNT_OF_DISCHARGED_ENERGY): sensor.sensor_schema(
|
||||
unit_of_measurement=UNIT_WATT_HOURS,
|
||||
icon=ICON_POWER,
|
||||
accuracy_decimals=0,
|
||||
device_class=DEVICE_CLASS_POWER,
|
||||
),
|
||||
cv.Optional(CONF_AMOUNT_OF_CHARGED_ENERGY): sensor.sensor_schema(
|
||||
unit_of_measurement=UNIT_WATT_HOURS,
|
||||
icon=ICON_POWER,
|
||||
accuracy_decimals=0,
|
||||
device_class=DEVICE_CLASS_POWER,
|
||||
),
|
||||
}
|
||||
)
|
||||
|
||||
|
@ -17,6 +17,10 @@ CONF_DEVICE_MODE = "device_mode"
|
||||
CONF_FIRMWARE_VERSION = "firmware_version"
|
||||
CONF_DEVICE_TYPE = "device_type"
|
||||
|
||||
CONF_ALARM_CONDITION_ACTIVE = "alarm_condition_active"
|
||||
CONF_ALARM_REASON = "alarm_reason"
|
||||
CONF_MODEL_DESCRIPTION = "model_description"
|
||||
|
||||
TEXT_SENSORS = [
|
||||
CONF_CHARGING_MODE,
|
||||
CONF_ERROR,
|
||||
@ -25,6 +29,10 @@ TEXT_SENSORS = [
|
||||
CONF_DEVICE_MODE,
|
||||
CONF_FIRMWARE_VERSION,
|
||||
CONF_DEVICE_TYPE,
|
||||
#
|
||||
CONF_ALARM_CONDITION_ACTIVE,
|
||||
CONF_ALARM_REASON,
|
||||
CONF_MODEL_DESCRIPTION,
|
||||
]
|
||||
|
||||
|
||||
@ -52,6 +60,15 @@ CONFIG_SCHEMA = cv.Schema(
|
||||
cv.Optional(CONF_DEVICE_TYPE): text_sensor.TEXT_SENSOR_SCHEMA.extend(
|
||||
{cv.GenerateID(): cv.declare_id(text_sensor.TextSensor)}
|
||||
),
|
||||
cv.Optional(CONF_ALARM_CONDITION_ACTIVE): text_sensor.TEXT_SENSOR_SCHEMA.extend(
|
||||
{cv.GenerateID(): cv.declare_id(text_sensor.TextSensor)}
|
||||
),
|
||||
cv.Optional(CONF_ALARM_REASON): text_sensor.TEXT_SENSOR_SCHEMA.extend(
|
||||
{cv.GenerateID(): cv.declare_id(text_sensor.TextSensor)}
|
||||
),
|
||||
cv.Optional(CONF_MODEL_DESCRIPTION): text_sensor.TEXT_SENSOR_SCHEMA.extend(
|
||||
{cv.GenerateID(): cv.declare_id(text_sensor.TextSensor)}
|
||||
),
|
||||
}
|
||||
)
|
||||
|
||||
|
@ -9,6 +9,8 @@ static const char *const TAG = "victron";
|
||||
|
||||
void VictronComponent::dump_config() {
|
||||
ESP_LOGCONFIG(TAG, "Victron:");
|
||||
LOG_BINARY_SENSOR(" ", "Load state", load_state_binary_sensor_);
|
||||
LOG_BINARY_SENSOR(" ", "Relay state", relay_state_binary_sensor_);
|
||||
LOG_SENSOR(" ", "Max Power Yesterday", max_power_yesterday_sensor_);
|
||||
LOG_SENSOR(" ", "Max Power Today", max_power_today_sensor_);
|
||||
LOG_SENSOR(" ", "Yield Total", yield_total_sensor_);
|
||||
@ -34,8 +36,23 @@ void VictronComponent::dump_config() {
|
||||
LOG_TEXT_SENSOR(" ", "Device Mode", device_mode_text_sensor_);
|
||||
LOG_TEXT_SENSOR(" ", "Firmware Version", firmware_version_text_sensor_);
|
||||
LOG_TEXT_SENSOR(" ", "Device Type", device_type_text_sensor_);
|
||||
LOG_BINARY_SENSOR(" ", "Load state", load_state_binary_sensor_);
|
||||
LOG_BINARY_SENSOR(" ", "Relay state", relay_state_binary_sensor_);
|
||||
|
||||
LOG_SENSOR(" ", "Instantaneous Power", instantaneous_power_sensor_);
|
||||
LOG_SENSOR(" ", "Consumed Amp Hours", consumed_amp_hours_sensor_);
|
||||
LOG_SENSOR(" ", "State Of Charge", state_of_charge_sensor_);
|
||||
LOG_SENSOR(" ", "Time To Go", time_to_go_sensor_);
|
||||
LOG_SENSOR(" ", "Depth Of The Deepest Discharge", depth_of_the_deepest_discharge_sensor_);
|
||||
LOG_SENSOR(" ", "Depth Of The Last Discharge", depth_of_the_last_discharge_sensor_);
|
||||
LOG_SENSOR(" ", "Number Of Charge Cycles", number_of_charge_cycles_sensor_);
|
||||
LOG_SENSOR(" ", "Number Of Full Discharges", number_of_full_discharges_sensor_);
|
||||
LOG_SENSOR(" ", "Min Battery Voltage", min_battery_voltage_sensor_);
|
||||
LOG_SENSOR(" ", "Max Battery Voltage", max_battery_voltage_sensor_);
|
||||
LOG_SENSOR(" ", "Last Full Charge", last_full_charge_sensor_);
|
||||
LOG_SENSOR(" ", "Amount Of Discharged Energy", amount_of_discharged_energy_sensor_);
|
||||
LOG_SENSOR(" ", "Amount Of Charged Energy", amount_of_charged_energy_sensor_);
|
||||
LOG_TEXT_SENSOR(" ", "Alarm Condition Active", alarm_condition_active_text_sensor_);
|
||||
LOG_TEXT_SENSOR(" ", "Alarm Reason", alarm_reason_text_sensor_);
|
||||
LOG_TEXT_SENSOR(" ", "Model Description", model_description_text_sensor_);
|
||||
|
||||
check_uart_settings(19200);
|
||||
}
|
||||
@ -97,6 +114,8 @@ static const std::string charging_mode_text(int value) {
|
||||
switch (value) {
|
||||
case 0:
|
||||
return "Off";
|
||||
case 1:
|
||||
return "Low power";
|
||||
case 2:
|
||||
return "Fault";
|
||||
case 3:
|
||||
@ -105,14 +124,22 @@ static const std::string charging_mode_text(int value) {
|
||||
return "Absorption";
|
||||
case 5:
|
||||
return "Float";
|
||||
case 6:
|
||||
return "Storage";
|
||||
case 7:
|
||||
return "Equalize (manual)";
|
||||
case 9:
|
||||
return "Inverting";
|
||||
case 11:
|
||||
return "Power supply";
|
||||
case 245:
|
||||
return "Starting-up";
|
||||
case 246:
|
||||
return "Repeated absorption";
|
||||
case 247:
|
||||
return "Auto equalize / Recondition";
|
||||
case 248:
|
||||
return "BatterySafe";
|
||||
case 252:
|
||||
return "External control";
|
||||
default:
|
||||
@ -236,86 +263,144 @@ static const std::string device_type_text(int value) {
|
||||
return "BMV-702";
|
||||
case 0x205:
|
||||
return "BMV-700H";
|
||||
case 0xA389:
|
||||
return "SmartShunt";
|
||||
case 0xA381:
|
||||
return "BMV-712 Smart";
|
||||
case 0xA04C:
|
||||
return "BlueSolar MPPT 75/10";
|
||||
case 0x300:
|
||||
return "BlueSolar MPPT 70/15";
|
||||
case 0xA042:
|
||||
return "BlueSolar MPPT 75/15";
|
||||
case 0xA043:
|
||||
return "BlueSolar MPPT 100/15";
|
||||
case 0xA044:
|
||||
return "BlueSolar MPPT 100/30 rev1";
|
||||
case 0xA04A:
|
||||
return "BlueSolar MPPT 100/30 rev2";
|
||||
case 0xA041:
|
||||
return "BlueSolar MPPT 150/35 rev1";
|
||||
case 0xA04B:
|
||||
return "BlueSolar MPPT 150/35 rev2";
|
||||
case 0xA04D:
|
||||
return "BlueSolar MPPT 150/45";
|
||||
case 0x0300:
|
||||
return "BlueSolar MPPT 70|15";
|
||||
case 0xA040:
|
||||
return "BlueSolar MPPT 75/50";
|
||||
return "BlueSolar MPPT 75|50";
|
||||
case 0xA041:
|
||||
return "BlueSolar MPPT 150|35";
|
||||
case 0xA042:
|
||||
return "BlueSolar MPPT 75|15";
|
||||
case 0xA043:
|
||||
return "BlueSolar MPPT 100|15";
|
||||
case 0xA044:
|
||||
return "BlueSolar MPPT 100|30";
|
||||
case 0xA045:
|
||||
return "BlueSolar MPPT 100/50 rev1";
|
||||
case 0xA049:
|
||||
return "BlueSolar MPPT 100/50 rev2";
|
||||
case 0xA04E:
|
||||
return "BlueSolar MPPT 150/60";
|
||||
return "BlueSolar MPPT 100|50";
|
||||
case 0xA046:
|
||||
return "BlueSolar MPPT 150/70";
|
||||
case 0xA04F:
|
||||
return "BlueSolar MPPT 150/85";
|
||||
return "BlueSolar MPPT 150|70";
|
||||
case 0xA047:
|
||||
return "BlueSolar MPPT 150/100";
|
||||
return "BlueSolar MPPT 150|100";
|
||||
case 0xA049:
|
||||
return "BlueSolar MPPT 100|50 rev2";
|
||||
case 0xA04A:
|
||||
return "BlueSolar MPPT 100|30 rev2";
|
||||
case 0xA04B:
|
||||
return "BlueSolar MPPT 150|35 rev2";
|
||||
case 0xA04C:
|
||||
return "BlueSolar MPPT 75|10";
|
||||
case 0xA04D:
|
||||
return "BlueSolar MPPT 150|45";
|
||||
case 0xA04E:
|
||||
return "BlueSolar MPPT 150|60";
|
||||
case 0xA04F:
|
||||
return "BlueSolar MPPT 150|85";
|
||||
case 0xA050:
|
||||
return "SmartSolar MPPT 250/100";
|
||||
return "SmartSolar MPPT 250|100";
|
||||
case 0xA051:
|
||||
return "SmartSolar MPPT 150/100";
|
||||
return "SmartSolar MPPT 150|100";
|
||||
case 0xA052:
|
||||
return "SmartSolar MPPT 150/85";
|
||||
return "SmartSolar MPPT 150|85";
|
||||
case 0xA053:
|
||||
return "SmartSolar MPPT 75/15";
|
||||
return "SmartSolar MPPT 75|15";
|
||||
case 0xA054:
|
||||
return "SmartSolar MPPT 75/10";
|
||||
return "SmartSolar MPPT 75|10";
|
||||
case 0xA055:
|
||||
return "SmartSolar MPPT 100/15";
|
||||
return "SmartSolar MPPT 100|15";
|
||||
case 0xA056:
|
||||
return "SmartSolar MPPT 100/30";
|
||||
return "SmartSolar MPPT 100|30";
|
||||
case 0xA057:
|
||||
return "SmartSolar MPPT 100/50";
|
||||
return "SmartSolar MPPT 100|50";
|
||||
case 0xA058:
|
||||
return "SmartSolar MPPT 150/35";
|
||||
return "SmartSolar MPPT 150|35";
|
||||
case 0xA059:
|
||||
return "SmartSolar MPPT 150/100 rev2";
|
||||
return "SmartSolar MPPT 150|100 rev2";
|
||||
case 0xA05A:
|
||||
return "SmartSolar MPPT 150/85 rev2";
|
||||
return "SmartSolar MPPT 150|85 rev2";
|
||||
case 0xA05B:
|
||||
return "SmartSolar MPPT 250/70";
|
||||
return "SmartSolar MPPT 250|70";
|
||||
case 0xA05C:
|
||||
return "SmartSolar MPPT 250/85";
|
||||
return "SmartSolar MPPT 250|85";
|
||||
case 0xA05D:
|
||||
return "SmartSolar MPPT 250/60";
|
||||
return "SmartSolar MPPT 250|60";
|
||||
case 0xA05E:
|
||||
return "SmartSolar MPPT 250/45";
|
||||
return "SmartSolar MPPT 250|45";
|
||||
case 0xA05F:
|
||||
return "SmartSolar MPPT 100/20";
|
||||
return "SmartSolar MPPT 100|20";
|
||||
case 0xA060:
|
||||
return "SmartSolar MPPT 100/20 48V";
|
||||
return "SmartSolar MPPT 100|20 48V";
|
||||
case 0xA061:
|
||||
return "SmartSolar MPPT 150/45";
|
||||
return "SmartSolar MPPT 150|45";
|
||||
case 0xA062:
|
||||
return "SmartSolar MPPT 150/60";
|
||||
return "SmartSolar MPPT 150|60";
|
||||
case 0xA063:
|
||||
return "SmartSolar MPPT 150/70";
|
||||
return "SmartSolar MPPT 150|70";
|
||||
case 0xA064:
|
||||
return "SmartSolar MPPT 250/85 rev2";
|
||||
return "SmartSolar MPPT 250|85 rev2";
|
||||
case 0xA065:
|
||||
return "SmartSolar MPPT 250/100 rev2";
|
||||
return "SmartSolar MPPT 250|100 rev2";
|
||||
case 0xA066:
|
||||
return "BlueSolar MPPT 100|20";
|
||||
case 0xA067:
|
||||
return "BlueSolar MPPT 100|20 48V";
|
||||
case 0xA068:
|
||||
return "SmartSolar MPPT 250|60 rev2";
|
||||
case 0xA069:
|
||||
return "SmartSolar MPPT 250|70 rev2";
|
||||
case 0xA06A:
|
||||
return "SmartSolar MPPT 150|45 rev2";
|
||||
case 0xA06B:
|
||||
return "SmartSolar MPPT 150|60 rev2";
|
||||
case 0xA06C:
|
||||
return "SmartSolar MPPT 150|70 rev2";
|
||||
case 0xA06D:
|
||||
return "SmartSolar MPPT 150|85 rev3";
|
||||
case 0xA06E:
|
||||
return "SmartSolar MPPT 150|100 rev3";
|
||||
case 0xA06F:
|
||||
return "BlueSolar MPPT 150|45 rev2";
|
||||
case 0xA070:
|
||||
return "BlueSolar MPPT 150|60 rev2";
|
||||
case 0xA071:
|
||||
return "BlueSolar MPPT 150|70 rev2";
|
||||
case 0xA102:
|
||||
return "SmartSolar MPPT VE.Can 150/70";
|
||||
case 0xA103:
|
||||
return "SmartSolar MPPT VE.Can 150/45";
|
||||
case 0xA104:
|
||||
return "SmartSolar MPPT VE.Can 150/60";
|
||||
case 0xA105:
|
||||
return "SmartSolar MPPT VE.Can 150/85";
|
||||
case 0xA106:
|
||||
return "SmartSolar MPPT VE.Can 150/100";
|
||||
case 0xA107:
|
||||
return "SmartSolar MPPT VE.Can 250/45";
|
||||
case 0xA108:
|
||||
return "SmartSolar MPPT VE.Can 250/60";
|
||||
case 0xA109:
|
||||
return "SmartSolar MPPT VE.Can 250/70";
|
||||
case 0xA10A:
|
||||
return "SmartSolar MPPT VE.Can 250/85";
|
||||
case 0xA10B:
|
||||
return "SmartSolar MPPT VE.Can 250/100";
|
||||
case 0xA10C:
|
||||
return "SmartSolar MPPT VE.Can 150/70 rev2";
|
||||
case 0xA10D:
|
||||
return "SmartSolar MPPT VE.Can 150/85 rev2";
|
||||
case 0xA10E:
|
||||
return "SmartSolar MPPT VE.Can 150/100 rev2";
|
||||
case 0xA10F:
|
||||
return "BlueSolar MPPT VE.Can 150/100";
|
||||
case 0xA112:
|
||||
return "BlueSolar MPPT VE.Can 250/70";
|
||||
case 0xA113:
|
||||
return "BlueSolar MPPT VE.Can 250/100";
|
||||
case 0xA114:
|
||||
return "SmartSolar MPPT VE.Can 250/70 rev2";
|
||||
case 0xA115:
|
||||
return "SmartSolar MPPT VE.Can 250/100 rev2";
|
||||
case 0xA116:
|
||||
return "SmartSolar MPPT VE.Can 250/85 rev2";
|
||||
case 0xA201:
|
||||
return "Phoenix Inverter 12V 250VA 230V";
|
||||
case 0xA202:
|
||||
@ -394,6 +479,52 @@ static const std::string device_type_text(int value) {
|
||||
return "Phoenix Inverter 24V 1200VA 120V";
|
||||
case 0xA27C:
|
||||
return "Phoenix Inverter 48V 1200VA 120V";
|
||||
case 0xA281:
|
||||
return "Phoenix Inverter 12V 1600VA 230V";
|
||||
case 0xA282:
|
||||
return "Phoenix Inverter 24V 1600VA 230V";
|
||||
case 0xA284:
|
||||
return "Phoenix Inverter 48V 1600VA 230V";
|
||||
case 0xA291:
|
||||
return "Phoenix Inverter 12V 2000VA 230V";
|
||||
case 0xA292:
|
||||
return "Phoenix Inverter 24V 2000VA 230V";
|
||||
case 0xA294:
|
||||
return "Phoenix Inverter 48V 2000VA 230V";
|
||||
case 0xA2A1:
|
||||
return "Phoenix Inverter 12V 3000VA 230V";
|
||||
case 0xA2A2:
|
||||
return "Phoenix Inverter 24V 3000VA 230V";
|
||||
case 0xA2A4:
|
||||
return "Phoenix Inverter 48V 3000VA 230V";
|
||||
case 0xA340:
|
||||
return "Phoenix Smart IP43 Charger 12|50 (1+1)";
|
||||
case 0xA341:
|
||||
return "Phoenix Smart IP43 Charger 12|50 (3)";
|
||||
case 0xA342:
|
||||
return "Phoenix Smart IP43 Charger 24|25 (1+1)";
|
||||
case 0xA343:
|
||||
return "Phoenix Smart IP43 Charger 24|25 (3)";
|
||||
case 0xA344:
|
||||
return "Phoenix Smart IP43 Charger 12|30 (1+1)";
|
||||
case 0xA345:
|
||||
return "Phoenix Smart IP43 Charger 12|30 (3)";
|
||||
case 0xA346:
|
||||
return "Phoenix Smart IP43 Charger 24|16 (1+1)";
|
||||
case 0xA347:
|
||||
return "Phoenix Smart IP43 Charger 24|16 (3)";
|
||||
case 0xA381:
|
||||
return "BMV-712 Smart";
|
||||
case 0xA382:
|
||||
return "BMV-710H Smart";
|
||||
case 0xA383:
|
||||
return "BMV-712 Smart Rev2";
|
||||
case 0xA389:
|
||||
return "SmartShunt 500A/50mV";
|
||||
case 0xA38A:
|
||||
return "SmartShunt 1000A/50mV";
|
||||
case 0xA38B:
|
||||
return "SmartShunt 2000A/50mV";
|
||||
default:
|
||||
return "Unknown";
|
||||
}
|
||||
@ -443,10 +574,35 @@ void VictronComponent::handle_value_() {
|
||||
|
||||
// "T" °C Battery temperature
|
||||
// "P" W Instantaneous power
|
||||
if (label_ == "P") {
|
||||
this->publish_state_(instantaneous_power_sensor_, atoi(value_.c_str())); // NOLINT(cert-err34-c)
|
||||
return;
|
||||
}
|
||||
|
||||
// "CE" mAh Consumed Amp Hours
|
||||
if (label_ == "CE") {
|
||||
this->publish_state_(consumed_amp_hours_sensor_, atoi(value_.c_str()) / 1000.00); // NOLINT(cert-err34-c)
|
||||
return;
|
||||
}
|
||||
|
||||
// "SOC" %o State of charge
|
||||
if (label_ == "SOC") {
|
||||
// Per mill to %
|
||||
this->publish_state_(state_of_charge_sensor_, atoi(value_.c_str()) * 0.10); // NOLINT(cert-err34-c)
|
||||
return;
|
||||
}
|
||||
|
||||
// "TTG" min Time-to-go
|
||||
if (label_ == "TTG") {
|
||||
this->publish_state_(time_to_go_sensor_, atoi(value_.c_str())); // NOLINT(cert-err34-c)
|
||||
return;
|
||||
}
|
||||
|
||||
// "Alarm" Alarm condition active
|
||||
if (label_ == "Alarm") {
|
||||
this->publish_state_(alarm_condition_active_text_sensor_, value_);
|
||||
return;
|
||||
}
|
||||
|
||||
if (label_ == "RELAY") {
|
||||
this->publish_state_(relay_state_binary_sensor_, value_ == "ON");
|
||||
@ -454,16 +610,64 @@ void VictronComponent::handle_value_() {
|
||||
}
|
||||
|
||||
// "AR" Alarm reason
|
||||
if (label_ == "AR") {
|
||||
this->publish_state_(alarm_reason_text_sensor_, error_code_text(atoi(value_.c_str()))); // NOLINT(cert-err34-c)
|
||||
return;
|
||||
}
|
||||
|
||||
// "OR" Off reason
|
||||
|
||||
// "H1" mAh Depth of the deepest discharge
|
||||
if (label_ == "H1") {
|
||||
// mAh -> Ah
|
||||
this->publish_state_(depth_of_the_deepest_discharge_sensor_,
|
||||
atoi(value_.c_str()) / 1000.0); // NOLINT(cert-err34-c)
|
||||
return;
|
||||
}
|
||||
|
||||
// "H2" mAh Depth of the last discharge
|
||||
if (label_ == "H2") {
|
||||
// mAh -> Ah
|
||||
this->publish_state_(depth_of_the_last_discharge_sensor_, atoi(value_.c_str()) / 1000.0); // NOLINT(cert-err34-c)
|
||||
return;
|
||||
}
|
||||
|
||||
// "H3" mAh Depth of the average discharge
|
||||
|
||||
// "H4" Number of charge cycles
|
||||
if (label_ == "H4") {
|
||||
this->publish_state_(number_of_charge_cycles_sensor_, atoi(value_.c_str())); // NOLINT(cert-err34-c)
|
||||
return;
|
||||
}
|
||||
|
||||
// "H5" Number of full discharges
|
||||
if (label_ == "H5") {
|
||||
this->publish_state_(number_of_full_discharges_sensor_, atoi(value_.c_str())); // NOLINT(cert-err34-c)
|
||||
return;
|
||||
}
|
||||
|
||||
// "H6" mAh Cumulative Amp Hours drawn
|
||||
// "H7" mV Minimum main (battery) voltage
|
||||
if (label_ == "H7") {
|
||||
// mV to V
|
||||
this->publish_state_(min_battery_voltage_sensor_, atoi(value_.c_str()) / 1000.00); // NOLINT(cert-err34-c)
|
||||
return;
|
||||
}
|
||||
|
||||
// "H8" mV Maximum main (battery) voltage
|
||||
if (label_ == "H8") {
|
||||
// mV to V
|
||||
this->publish_state_(max_battery_voltage_sensor_, atoi(value_.c_str()) / 1000.00); // NOLINT(cert-err34-c)
|
||||
return;
|
||||
}
|
||||
|
||||
// "H9" S Number of seconds since last full charge
|
||||
if (label_ == "H9") {
|
||||
// sec -> min
|
||||
this->publish_state_(last_full_charge_sensor_, (float) atoi(value_.c_str()) / 60.0); // NOLINT(cert-err34-c)
|
||||
return;
|
||||
}
|
||||
|
||||
// "H10" Number of automatic synchronizations
|
||||
// "H11" Number of low main voltage alarms
|
||||
// "H12" Number of high main voltage alarms
|
||||
@ -471,8 +675,20 @@ void VictronComponent::handle_value_() {
|
||||
// "H14" Number of high auxiliary voltage alarms
|
||||
// "H15" mV Minimum auxiliary (battery) voltage
|
||||
// "H16" mV Maximum auxiliary (battery) voltage
|
||||
|
||||
// "H17" 0.01 kWh Amount of discharged energy (BMV) / Amount of produced energy (DC monitor)
|
||||
if (label_ == "H17") {
|
||||
// Wh
|
||||
this->publish_state_(amount_of_discharged_energy_sensor_, atoi(value_.c_str()) * 10.00); // NOLINT(cert-err34-c)
|
||||
return;
|
||||
}
|
||||
|
||||
// "H18" 0.01 kWh Amount of charged energy (BMV) / Amount of consumed energy (DC monitor)
|
||||
if (label_ == "H18") {
|
||||
// Wh
|
||||
this->publish_state_(amount_of_charged_energy_sensor_, atoi(value_.c_str()) * 10.00); // NOLINT(cert-err34-c)
|
||||
return;
|
||||
}
|
||||
|
||||
if (label_ == "H19") {
|
||||
this->publish_state_(yield_total_sensor_, atoi(value_.c_str()) * 10); // NOLINT(cert-err34-c)
|
||||
@ -514,6 +730,10 @@ void VictronComponent::handle_value_() {
|
||||
}
|
||||
|
||||
// "BMV" Model description (deprecated)
|
||||
if (label_ == "BMV") {
|
||||
this->publish_state_(model_description_text_sensor_, value_);
|
||||
return;
|
||||
}
|
||||
|
||||
if (label_ == "FW") {
|
||||
this->publish_state_once_(firmware_version_text_sensor_, value_.insert(value_.size() - 2, "."));
|
||||
|
@ -77,6 +77,54 @@ class VictronComponent : public uart::UARTDevice, public Component {
|
||||
device_type_text_sensor_ = device_type_text_sensor;
|
||||
}
|
||||
|
||||
void set_instantaneous_power_sensor(sensor::Sensor *instantaneous_power_sensor) {
|
||||
instantaneous_power_sensor_ = instantaneous_power_sensor;
|
||||
}
|
||||
void set_consumed_amp_hours_sensor(sensor::Sensor *consumed_amp_hours_sensor) {
|
||||
consumed_amp_hours_sensor_ = consumed_amp_hours_sensor;
|
||||
}
|
||||
void set_state_of_charge_sensor(sensor::Sensor *state_of_charge_sensor) {
|
||||
state_of_charge_sensor_ = state_of_charge_sensor;
|
||||
}
|
||||
void set_time_to_go_sensor(sensor::Sensor *time_to_go_sensor) { time_to_go_sensor_ = time_to_go_sensor; }
|
||||
void set_depth_of_the_deepest_discharge_sensor(sensor::Sensor *depth_of_the_deepest_discharge_sensor) {
|
||||
depth_of_the_deepest_discharge_sensor_ = depth_of_the_deepest_discharge_sensor;
|
||||
}
|
||||
void set_depth_of_the_last_discharge_sensor(sensor::Sensor *depth_of_the_last_discharge_sensor) {
|
||||
depth_of_the_last_discharge_sensor_ = depth_of_the_last_discharge_sensor;
|
||||
}
|
||||
void set_number_of_charge_cycles_sensor(sensor::Sensor *number_of_charge_cycles_sensor) {
|
||||
number_of_charge_cycles_sensor_ = number_of_charge_cycles_sensor;
|
||||
}
|
||||
void set_number_of_full_discharges_sensor(sensor::Sensor *number_of_full_discharges_sensor) {
|
||||
number_of_full_discharges_sensor_ = number_of_full_discharges_sensor;
|
||||
}
|
||||
void set_min_battery_voltage_sensor(sensor::Sensor *min_battery_voltage_sensor) {
|
||||
min_battery_voltage_sensor_ = min_battery_voltage_sensor;
|
||||
}
|
||||
void set_max_battery_voltage_sensor(sensor::Sensor *max_battery_voltage_sensor) {
|
||||
max_battery_voltage_sensor_ = max_battery_voltage_sensor;
|
||||
}
|
||||
void set_last_full_charge_sensor(sensor::Sensor *last_full_charge_sensor) {
|
||||
last_full_charge_sensor_ = last_full_charge_sensor;
|
||||
}
|
||||
void set_amount_of_discharged_energy_sensor(sensor::Sensor *amount_of_discharged_energy_sensor) {
|
||||
amount_of_discharged_energy_sensor_ = amount_of_discharged_energy_sensor;
|
||||
}
|
||||
void set_amount_of_charged_energy_sensor(sensor::Sensor *amount_of_charged_energy_sensor) {
|
||||
amount_of_charged_energy_sensor_ = amount_of_charged_energy_sensor;
|
||||
}
|
||||
|
||||
void set_alarm_condition_active_text_sensor(text_sensor::TextSensor *alarm_condition_active_text_sensor) {
|
||||
alarm_condition_active_text_sensor_ = alarm_condition_active_text_sensor;
|
||||
}
|
||||
void set_alarm_reason_text_sensor(text_sensor::TextSensor *alarm_reason_text_sensor) {
|
||||
alarm_reason_text_sensor_ = alarm_reason_text_sensor;
|
||||
}
|
||||
void set_model_description_text_sensor(text_sensor::TextSensor *model_description_text_sensor) {
|
||||
model_description_text_sensor_ = model_description_text_sensor;
|
||||
}
|
||||
|
||||
void dump_config() override;
|
||||
void loop() override;
|
||||
|
||||
@ -111,7 +159,6 @@ class VictronComponent : public uart::UARTDevice, public Component {
|
||||
sensor::Sensor *warning_code_sensor_{nullptr};
|
||||
sensor::Sensor *tracking_mode_id_sensor_{nullptr};
|
||||
sensor::Sensor *device_mode_id_sensor_{nullptr};
|
||||
|
||||
text_sensor::TextSensor *charging_mode_text_sensor_{nullptr};
|
||||
text_sensor::TextSensor *error_text_sensor_{nullptr};
|
||||
text_sensor::TextSensor *warning_text_sensor_{nullptr};
|
||||
@ -120,6 +167,23 @@ class VictronComponent : public uart::UARTDevice, public Component {
|
||||
text_sensor::TextSensor *firmware_version_text_sensor_{nullptr};
|
||||
text_sensor::TextSensor *device_type_text_sensor_{nullptr};
|
||||
|
||||
sensor::Sensor *instantaneous_power_sensor_{nullptr};
|
||||
sensor::Sensor *consumed_amp_hours_sensor_{nullptr};
|
||||
sensor::Sensor *state_of_charge_sensor_{nullptr};
|
||||
sensor::Sensor *time_to_go_sensor_{nullptr};
|
||||
sensor::Sensor *depth_of_the_deepest_discharge_sensor_{nullptr};
|
||||
sensor::Sensor *depth_of_the_last_discharge_sensor_{nullptr};
|
||||
sensor::Sensor *number_of_charge_cycles_sensor_{nullptr};
|
||||
sensor::Sensor *number_of_full_discharges_sensor_{nullptr};
|
||||
sensor::Sensor *min_battery_voltage_sensor_{nullptr};
|
||||
sensor::Sensor *max_battery_voltage_sensor_{nullptr};
|
||||
sensor::Sensor *last_full_charge_sensor_{nullptr};
|
||||
sensor::Sensor *amount_of_discharged_energy_sensor_{nullptr};
|
||||
sensor::Sensor *amount_of_charged_energy_sensor_{nullptr};
|
||||
text_sensor::TextSensor *alarm_condition_active_text_sensor_{nullptr};
|
||||
text_sensor::TextSensor *alarm_reason_text_sensor_{nullptr};
|
||||
text_sensor::TextSensor *model_description_text_sensor_{nullptr};
|
||||
|
||||
bool publishing_{true};
|
||||
int state_{0};
|
||||
std::string label_;
|
||||
|
103
smartshunt-esp8266-example.yaml
Normal file
103
smartshunt-esp8266-example.yaml
Normal file
@ -0,0 +1,103 @@
|
||||
substitutions:
|
||||
name: victron-smartshunt
|
||||
external_components_source: github://KinDR007/VictronMPPT-ESPHOME@main
|
||||
|
||||
esphome:
|
||||
name: ${name}
|
||||
platform: ESP8266
|
||||
board: d1_mini
|
||||
|
||||
external_components:
|
||||
- source: ${external_components_source}
|
||||
refresh: 0s
|
||||
|
||||
wifi:
|
||||
ssid: !secret wifi_ssid
|
||||
password: !secret wifi_password
|
||||
|
||||
ota:
|
||||
# api:
|
||||
|
||||
logger:
|
||||
baud_rate: 0
|
||||
esp8266_store_log_strings_in_flash: false
|
||||
|
||||
mqtt:
|
||||
broker: !secret mqtt_host
|
||||
username: !secret mqtt_username
|
||||
password: !secret mqtt_password
|
||||
id: mqtt_client
|
||||
|
||||
uart:
|
||||
id: uart0
|
||||
tx_pin: D8 # Not connected! The communication is read-only
|
||||
rx_pin: D7 # Connect this this GPIO and GND to the MPPT charger
|
||||
baud_rate: 19200
|
||||
rx_buffer_size: 256
|
||||
|
||||
victron:
|
||||
uart_id: uart0
|
||||
id: victron0
|
||||
throttle: 10s
|
||||
|
||||
sensor:
|
||||
- platform: victron
|
||||
victron_id: victron0
|
||||
battery_voltage:
|
||||
name: "${name} battery voltage"
|
||||
# TODO: VS
|
||||
# TODO: VM
|
||||
# TODO: DM
|
||||
battery_current:
|
||||
name: "${name} battery current"
|
||||
# TODO: T
|
||||
instantaneous_power:
|
||||
name: "${name} instantaneous power"
|
||||
consumed_amp_hours:
|
||||
name: "${name} consumed amp hours"
|
||||
state_of_charge:
|
||||
name: "${name} state of charge"
|
||||
time_to_go:
|
||||
name: "${name} time to go"
|
||||
depth_of_the_deepest_discharge:
|
||||
name: "${name} depth of the deepest discharge"
|
||||
depth_of_the_last_discharge:
|
||||
name: "${name} depth of the last discharge"
|
||||
# TODO: H3
|
||||
number_of_charge_cycles:
|
||||
name: "${name} number of charge cycles"
|
||||
number_of_full_discharges:
|
||||
name: "${name} number of full discharges"
|
||||
# TODO: H6
|
||||
min_battery_voltage:
|
||||
name: "${name} min battery voltage"
|
||||
max_battery_voltage:
|
||||
name: "${name} max battery voltage"
|
||||
last_full_charge:
|
||||
name: "${name} last full charge"
|
||||
# TODO: H10...H16
|
||||
amount_of_discharged_energy:
|
||||
name: "${name} amount of discharged energy"
|
||||
amount_of_charged_energy:
|
||||
name: "${name} amount of charged energy"
|
||||
|
||||
text_sensor:
|
||||
- platform: victron
|
||||
victron_id: victron0
|
||||
alarm_condition_active:
|
||||
name: "${name} alarm condition active"
|
||||
alarm_reason:
|
||||
name: "${name} alarm reason"
|
||||
model_description:
|
||||
name: "${name} model description"
|
||||
firmware_version:
|
||||
name: "${name} firmware version"
|
||||
device_type:
|
||||
name: "${name} device type"
|
||||
|
||||
binary_sensor:
|
||||
- platform: victron
|
||||
victron_id: victron0
|
||||
relay_state:
|
||||
name: "${name} relay state"
|
||||
# TODO: MON
|
@ -1,3 +1,11 @@
|
||||
substitutions:
|
||||
external_components_source: github://KinDR007/VictronMPPT-ESPHOME@main
|
||||
lower_devicename: "victron"
|
||||
devicename: "SmartSolar_150_35"
|
||||
config_version: "v2021.05.30"
|
||||
wifi_fast_connect: "false"
|
||||
accuracy: "2"
|
||||
|
||||
esphome:
|
||||
name: "${lower_devicename}"
|
||||
platform: ESP8266
|
||||
@ -5,21 +13,12 @@ esphome:
|
||||
# board: nodemcuv2
|
||||
|
||||
external_components:
|
||||
- source: github://KinDR007/VictronMPPT-ESPHOME@main
|
||||
- source: ${external_components_source}
|
||||
refresh: 0s
|
||||
|
||||
substitutions:
|
||||
lower_devicename: "victron"
|
||||
devicename: "SmartSolar_150_35"
|
||||
config_version: "v2021.05.30"
|
||||
wifi_fast_connect: "false"
|
||||
# wifi_reboot_timeout: 0s
|
||||
accuracy: "2"
|
||||
|
||||
wifi:
|
||||
ssid: !secret wifi_ssid
|
||||
password: !secret wifi_password
|
||||
# reboot_timeout: $wifi_reboot_timeout
|
||||
power_save_mode: none
|
||||
fast_connect: $wifi_fast_connect
|
||||
|
@ -2,6 +2,7 @@ substitutions:
|
||||
name: victron
|
||||
device0: victron0
|
||||
device1: victron1
|
||||
external_components_source: github://KinDR007/VictronMPPT-ESPHOME@main
|
||||
|
||||
esphome:
|
||||
name: ${name}
|
||||
@ -9,7 +10,7 @@ esphome:
|
||||
board: d1_mini
|
||||
|
||||
external_components:
|
||||
- source: github://KinDR007/VictronMPPT-ESPHOME@main
|
||||
- source: ${external_components_source}
|
||||
refresh: 0s
|
||||
|
||||
wifi:
|
@ -1,5 +1,6 @@
|
||||
substitutions:
|
||||
name: victron
|
||||
name: victron-mppt
|
||||
external_components_source: github://KinDR007/VictronMPPT-ESPHOME@main
|
||||
|
||||
esphome:
|
||||
name: ${name}
|
||||
@ -7,7 +8,7 @@ esphome:
|
||||
board: d1_mini
|
||||
|
||||
external_components:
|
||||
- source: github://KinDR007/VictronMPPT-ESPHOME@main
|
||||
- source: ${external_components_source}
|
||||
refresh: 0s
|
||||
|
||||
wifi:
|
3
test-esp8266.sh
Executable file
3
test-esp8266.sh
Executable file
@ -0,0 +1,3 @@
|
||||
#!/bin/bash
|
||||
|
||||
esphome -s external_components_source components ${1:-run} ${2:-smartsolar-mppt-esp8266-example.yaml}
|
Loading…
Reference in New Issue
Block a user