Files
2025-10-13 13:33:46 +02:00

268 lines
6.7 KiB
YAML

substitutions:
external_components_source: github://KinDR007/VictronMPPT-ESPHOME@main
lower_devicename: "victron-blue"
devicename: "BlueSolar_75_10"
config_version: "v2023.12.30"
wifi_fast_connect: "false"
accuracy: "2"
esphome:
name: "${lower_devicename}"
# platform: ESP8266
esp8266:
board: d1_mini
# board: nodemcuv2
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: Andra1977
captive_portal:
logger:
baud_rate: 0
# level: VERY_VERBOSE
esp8266_store_log_strings_in_flash: false
# Enable Home Assistant API
api:
encryption:
key: "ck+V6y6vOpR9ty6rMXshGFb4L/15rPM+P34D6yBbV/s="
#reboot_timeout: 0s
ota:
- platform: esphome
password: "0dd572e476ee28d45e11707f63b4c8a3"
web_server:
port: 80
time:
- platform: homeassistant
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 " # 6S pack
# lambda: |-
# if ((((id(bv).state) / 6) > 4.22) && (((id(bv).state) / 6) < 3.0)) {
# return NAN;
# }
# return ((id(bv).state) / 6);
# 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,0v - 4.01v
# lambda: |-
# if (((((((((id(bv).state) / 7 )) - 3.142) / (4.01142 - 3.142)) * 100)) >= 115) && ((((((((id(bv).state) / 7 )) - 3.142) / (4.01142 - 3.142)) * 100)) <= -25)) {
# return NAN;
# }
# return ((((((id(bv).state) / 7 )) - 3.142) / (4.01142 - 3.142) ) * 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"