I found a mistake in filter lambda. Fixed it, tried to compile the YAML and it works now. You’ll find the code attached below. Your formatting is pretty wild.
esphome:
name: growatt-modbus
platform: ESP8266
board: d1_mini
substitutions:
esp_name: Growattmodbus
#Shift sunrise on minutes
shift_sunrise: '10'
wifi:
ssid: "SSID"
password: !secret wifi_key
use_address: 192.168.6.42
domain: !secret domain
# Enable fallback hotspot (captive portal) in case wifi connection fails
ap:
ssid: "${esp_name} fb Hotspot"
password: !secret Fallback_Hotspot
captive_portal:
# Enable logging
logger:
# level: VERBOSE
# baud_rate: 0
# Enable Home Assistant API
api:
ota:
time:
- platform: homeassistant
id: homeassistant_time
#on_time:
# Every morning on weekdays reset ID todaygen
# - seconds: 0
# minutes: 0
# hours: 0
# #days_of_week: MON-SUN
# then:
# - lambda: id(todaygen).publish_state(0);
sun:
latitude: !secret latitude_data
longitude: !secret longitude_data
id: sun_sun
uart:
- id: uart1
baud_rate: 9600
tx_pin: D1
rx_pin: D2
# stop_bits: 1
modbus:
uart_id: uart1
web_server:
port: 80
binary_sensor:
- platform: template
id: enable_sun_sensor
lambda: |-
auto sunrise = id(sun_sun).sunrise(-0.833); //Get sunrise time
auto time = id(homeassistant_time).now(); //Get aktual time
if (!sunrise.has_value() and !time.is_valid()) //Validation sunrise and time data
return false ;
//1439 == 23:59 and 23:59 reset data to 0
if((sunrise.value().hour * 60 + sunrise.value().minute + ${shift_sunrise}) < (time.hour*60+time.minute) && (time.hour*60+time.minute) < 1439) {
return true;
}
else return false;
sensor:
- platform: wifi_signal
name: "${esp_name} - ESP WiFi Signal"
update_interval: 60s
- platform: uptime
name: "${esp_name} - ESP Uptime"
icon: mdi:clock-outline
update_interval: 60s
- platform: growatt_solar
update_interval: 3s
protocol_version: RTU2
inverter_status:
name: "${esp_name} - Status Code"
id: inverter_status
phase_a:
voltage:
name: "${esp_name} - AC Voltage"
current:
name: "${esp_name} - AC Current"
active_power:
name: "${esp_name} - AC Power"
filters:
- filter_out: NaN
pv1:
voltage:
name: "${esp_name} - PV1 Voltage"
current:
name: "${esp_name} - PV1 Current"
active_power:
name: "${esp_name} - PV1 Power"
pv2:
voltage:
name: "${esp_name} - PV2 Voltage"
current:
name: "${esp_name} - PV2 Current"
active_power:
name: "${esp_name} - PV2 Power"
active_power:
state_class: "measurement"
name: "${esp_name} - Output Power"
filters:
- lambda: |-
if (x <= 5500 && x >= 0) return x;
else return 0;
#- lambda: |-
# if (x <= 5500) return x;
# else return {};
pv_active_power:
name: "${esp_name} - Input Power"
frequency:
name: "${esp_name} - Grid Frequency"
energy_production_day:
name: "${esp_name} - Today Gen"
id: todaygen
filters:
- lambda: |-
if (enable_sun_sensor) return x;
else return 0;
#- lambda: |-
# if(id(sun_sun).elevation() < 1.0 && id(sun_sun).elevation() > -0.8) return 0; else
# {if (x >= 0) return x;
# else return 0;}
#lambda: |-
# if (id(inverter_status).state != 0) {
# return x;
# }
# return {};
# - lambda: "if (x - id(todaygen).state) > 0.5) return {}; return x;"
# https://github.com/esphome/feature-requests/issues/607
#- lambda: auto s = id(${todaygen}_skips); if(s->state > 100) { return x; } else { s->publish_state(s->state+1); return {}; }
#state_class: total
#state_class: total_increasing # was empty
# https://developers.home-assistant.io/docs/core/entity/sensor/#how-to-choose-state_class-and-last_reset
total_energy_production:
name: "${esp_name} - Total Gen"
#state_class: "measurement"
#device_class: energy
accuracy_decimals: 1
inverter_module_temp:
name: "${esp_name} - Temperature"
switch:
- platform: restart
name: "${esp_name} - ESP Restart"
text_sensor:
- platform: wifi_info
ip_address:
name: "${esp_name} IP Address"
ssid:
name: "${esp_name} Connected SSID"
bssid:
name: "${esp_name} Connected BSSID"
mac_address:
name: "${esp_name} Mac Wifi Address"
- platform: version
name: "${esp_name} - ESPHome Version"
Linking .pioenvs/growatt-modbus/firmware.elf
RAM: [==== ] 43.0% (used 35232 bytes from 81920 bytes)
Flash: [===== ] 45.5% (used 474841 bytes from 1044464 bytes)
Building .pioenvs/growatt-modbus/firmware.bin
esp8266_copy_factory_bin([".pioenvs/growatt-modbus/firmware.bin"], [".pioenvs/growatt-modbus/firmware.elf"])
======================== [SUCCESS] Took 323.95 seconds ========================
INFO Successfully compiled program.
esohome v2022.12.3