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"