VictronMPPT-ESPHOME/smartsolar-mppt-esp8266-example-advanced.yaml
2024-09-10 17:00:57 +02:00

272 lines
6.8 KiB
YAML

substitutions:
external_components_source: github://KinDR007/VictronMPPT-ESPHOME@main
lower_devicename: "victron"
devicename: "SmartSolar_150_35"
config_version: "v2024.06.21"
wifi_fast_connect: "false"
accuracy: "2"
esphome:
name: "${lower_devicename}"
platform: ESP8266
board: d1_mini
# board: nodemcuv2
min_version: 2024.6.0
external_components:
- source: ${external_components_source}
refresh: 0s
wifi:
ssid: !secret wifi_ssid
password: !secret wifi_password
power_save_mode: none
fast_connect: $wifi_fast_connect
# Enable fallback hotspot (captive portal) in case wifi connection fails
ap:
ssid: "${devicename} Hotspot"
password: !secret wifi_password
captive_portal:
ota:
platform: esphome
logger:
baud_rate: 0
# level: VERY_VERBOSE
esp8266_store_log_strings_in_flash: false
# If you use Home Assistant please remove this `mqtt` section and uncomment the `api` component!
# The native API has many advantages over MQTT: https://esphome.io/components/api.html#advantages-over-mqtt
mqtt:
broker: !secret mqtt_host
username: !secret mqtt_username
password: !secret mqtt_password
id: mqtt_client
# api:
web_server:
port: 80
time:
- platform: sntp
uart:
id: uart_bus
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
stop_bits: 1
data_bits: 8
parity: NONE
rx_buffer_size: 256
victron:
id: victron0
uart_id: uart_bus
throttle: 10s
sensor:
- platform: victron
victron_id: victron0
panel_voltage:
name: "Panel voltage"
id: pv
battery_voltage:
name: "Battery voltage"
id: bv
battery_current:
name: "Battery current"
id: bc
load_current:
name: "Load current"
id: load_current
max_power_yesterday:
name: "Max power yesterday"
id: max_power_yesterday
max_power_today:
name: "Max power today"
id: max_power_today
accuracy_decimals: ${accuracy}
yield_total:
name: "Yield total"
id: yield_total
filters:
# Multiplication factor from W to kW is 0.001
- multiply: 0.001
unit_of_measurement: kWh
accuracy_decimals: ${accuracy}
yield_yesterday:
name: "Yield yesterday"
id: yield_yesterday
filters:
# Multiplication factor from W to kW is 0.001
- multiply: 0.001
unit_of_measurement: kWh
accuracy_decimals: ${accuracy}
yield_today:
name: "Yield today"
id: yt
filters:
# Multiplication factor from W to kW is 0.001
- multiply: 0.001
unit_of_measurement: kWh
accuracy_decimals: ${accuracy}
panel_power:
name: "Panel power"
id: panel_power
day_number:
name: "Day sequence number"
id: day_number
icon: "mdi:calendar-today"
charging_mode_id:
name: "Charger mode id"
error_code:
name: "Error code"
tracking_mode_id:
name: "Tracker mode id"
- platform: wifi_signal
name: "${devicename} WiFi Signal Sensor"
id: rssi_sensor
update_interval: 15s
- platform: template
name: "Wifi Quality"
unit_of_measurement: "%"
accuracy_decimals: 0
icon: "mdi:wifi"
update_interval: 15s
lambda: |-
int quality;
const int rssi = id(rssi_sensor).state;
if (rssi <= -100) {
quality = 0;
} else if (rssi >= -50) {
quality = 100;
} else {
quality = 2 * (rssi + 100);
}
return quality;
- platform: uptime
name: "${devicename} Uptime"
id: uptime_s
update_interval: 5s
- platform: template # for 1 cell of battery
name: "Bat S1 " # 7S pack
lambda: |-
if ((((id(bv).state) / 7) > 4.22) && (((id(bv).state) / 7) < 3.2)) {
return NAN;
}
return ((id(bv).state) / 7);
update_interval: 10s
icon: "mdi:battery"
unit_of_measurement: V
device_class: "voltage"
accuracy_decimals: ${accuracy}
- platform: template # Battery working percent
name: "Bat working percent" # cycle batt between 3,7v - 4.17v
lambda: |-
if (((((((((id(bv).state) / 7 )) - 3.700) / (4.170 - 3.700)) * 100)) >= 115) && ((((((((id(bv).state) / 7 )) - 3.700) / (4.170 - 3.700)) * 100)) <= -25)) {
return NAN;
}
return ((((((id(bv).state) / 7 )) - 3.700) / (4.170 - 3.700) ) * 100);
update_interval: 15s
icon: "mdi:battery"
unit_of_measurement: "%"
device_class: "voltage"
accuracy_decimals: ${accuracy}
- platform: template # FVE percent
name: "FVE percent" # 500Wp max power of my FVE grid
lambda: |-
if (((((id(panel_power).state) / 500) * 100) >= 120) && ((((id(panel_power).state) / 500) * 100) < 0)) {
return NAN;
}
return (((id(panel_power).state) / 500) * 100);
icon: "mdi:gauge"
unit_of_measurement: "%"
device_class: "power"
accuracy_decimals: ${accuracy}
update_interval: 15s
- platform: template # median generated day energy
name: "Day median generated " # 500Wp max power of my FVE grid
lambda: |-
return (id(yield_total).state) / (id(day_number).state);
update_interval: 15s
icon: "mdi:gauge"
unit_of_measurement: "kWh"
device_class: "power"
accuracy_decimals: 3
text_sensor:
- platform: victron
victron_id: victron0
charging_mode:
name: "Charging Mode"
error:
name: "Error"
tracking_mode:
name: "Tracking Mode"
firmware_version:
name: "Firmware Version"
device_type:
name: "Device Type"
- platform: template
name: "${devicename} Config Version"
icon: mdi:information-outline
lambda: |-
return {"${config_version}"};
- platform: version
name: "${devicename} Esphome Version"
icon: mdi:information-outline
- platform: wifi_info
ip_address:
name: "${devicename} IP Address"
icon: mdi:ip
ssid:
name: "${devicename} Connected SSID"
icon: mdi:wifi
bssid:
name: "${devicename} Connected BSSID"
mac_address:
name: "${devicename} Mac Wifi Address"
- platform: template
name: "${devicename} Uptime (formatted)"
lambda: |-
uint32_t dur = id(uptime_s).state;
int dys = 0;
int hrs = 0;
int mnts = 0;
if (dur > 86399) {
dys = trunc(dur / 86400);
dur = dur - (dys * 86400);
}
if (dur > 3599) {
hrs = trunc(dur / 3600);
dur = dur - (hrs * 3600);
}
if (dur > 59) {
mnts = trunc(dur / 60);
dur = dur - (mnts * 60);
}
char buffer[17];
sprintf(buffer, "%ud %02uh %02um %02us", dys, hrs, mnts, dur);
return {buffer};
icon: mdi:clock-start
update_interval: 5s
switch:
- platform: restart
icon: mdi:reload-alert
name: "${devicename} Restart"