packages: - !include common/wifi.yaml - !include common/felicityinverter.yaml substitutions: name: sthome-ut3 friendly_name: "sthome-ut3" esphome: name: "${name}" friendly_name: "${friendly_name}" # on_boot: # - priority: 600 # This is where most sensors are set up (higher number means higher priority) # then: # - uart.write: # id: inv_uart1 # data: [0x0D, 0x0A] # - uart.write: # id: inv_uart2 # data: [0x0D, 0x0A] #external_components: # - source: github://pr#8103 # components: [uart] # - source: github://pr#8032 # components: [modbus, modbus_controller] #, growatt_solar] # refresh: 1h globals: - id: geyser_relay_status type: bool restore_value: yes initial_value: 'false' esp32: board: nodemcu-32s #esp32dev framework: type: arduino #esp-idf # Enable logging logger: level: VERY_VERBOSE initial_level: DEBUG logs: uart: VERY_VERBOSE modbus: VERBOSE modbus_controller: VERBOSE # Enable Home Assistant API api: encryption: key: "AIoquKPjpcHa2pcJ0aKxvtpM3mwgZuZhpCPtdVitP2Q=" ota: - platform: esphome password: "879012af7180c8700cee65fbf18704d1" wifi: manual_ip: static_ip: 10.0.2.3 # Enable fallback hotspot (captive portal) in case wifi connection fails ap: ssid: "${name} Fallback Hotspot" password: "cGXb2DqkwaOr" captive_portal: uart: - id: inv_uart1 rx_pin: GPIO16 tx_pin: GPIO17 baud_rate: 2400 stop_bits: 1 parity: NONE debug: direction: BOTH dummy_receiver: false after: delimiter: "\r" sequence: - lambda: UARTDebug::log_hex(direction, bytes, ','); # - id: inv_uart2 # rx_pin: GPIO25 # tx_pin: GPIO26 # baud_rate: 2400 # stop_bits: 1 # parity: NONE # debug: # direction: BOTH # dummy_receiver: false # after: # delimiter: "\r" # sequence: # - lambda: UARTDebug::log_hex(direction, bytes, ' '); sun: id: sun_sensor latitude: !secret latitude longitude: !secret longitude time: - platform: homeassistant id: time_source switch: - platform: restart name: "${name} Restart" id: "restart_switch" modbus: - id: modbus1 uart_id: inv_uart1 # flow_control_pin: GPIO4 send_wait_time: 1200ms #250ms disable_crc: false role: server # - id: modbus2 # uart_id: inv_uart2 # #flow_control_pin: GPIO27 # send_wait_time: 1200ms #250ms # disable_crc: false # role: server modbus_controller: # - id: modbus_device1 # modbus_id: modbus1 # address: 0x01 # allow_duplicate_commands: False # command_throttle: 0ms # update_interval: 10s #30s # offline_skip_updates: 2 # max_cmd_retries: 0 # setup_priority: -10 # - id: modbus_device2 # modbus_id: modbus2 # address: 0x01 # allow_duplicate_commands: False # command_throttle: 0ms # update_interval: 60s #30s # offline_skip_updates: 2 # max_cmd_retries: 0 # setup_priority: -10 - modbus_id: modbus1 address: 0x1 server_registers: - address: 0x1100 value_type: U_WORD read_lambda: |- return 0x01; - address: 0x1101 value_type: U_WORD read_lambda: |- return 0x02; // b0=power-on mode/PowerOnMode 1=standby mode/StandbyMode 2=bypass mode/BypassMode 3=battery mode/BatteryMode 4=fault mode/FaultMode 5=mains mode/LineMode 6=charging mode/PVChargeMode 0=no - address: 0x1102 value_type: U_WORD read_lambda: |- return 0x02; // No charge 1=Constant current charge/Bulk charge 2=Constant voltage charge/Absorption charge 3=Float charge/Float charge - address: 0x1103 # Fault Code value_type: U_WORD read_lambda: |- return 0x0; - address: 0x1104 # PowerFlowMsg value_type: U_WORD read_lambda: |- return 0x0; - address: 0x1105 # dummy value_type: U_WORD read_lambda: |- return 0x0; - address: 0x1106 # dummy value_type: U_DWORD read_lambda: |- return 0x0; - address: 0x1108 # Battery voltage value_type: U_WORD read_lambda: |- return 0x3A; - address: 0x1109 # Battery current value_type: S_WORD read_lambda: |- return 0xFFC4; // -60A - address: 0x110A # Battery power value_type: S_WORD read_lambda: |- return 0xED40; // -4800W - address: 0x110B # dummy value_type: U_QWORD read_lambda: |- return 0; - address: 0x110F # dummy value_type: U_DWORD read_lambda: |- return 0; - address: 0x1111 # AC Output voltage value_type: U_WORD read_lambda: |- return 0xE7; // 231V - address: 0x1112 # dummy value_type: U_QWORD read_lambda: |- return 0; - address: 0x1116 # dummy value_type: U_WORD read_lambda: |- return 0; - address: 0x1117 # AC Input voltage value_type: U_WORD read_lambda: |- return 0xE6; // 230V - address: 0x1118 # dummy value_type: U_WORD read_lambda: |- return 0; - address: 0x1119 # AC Input frequency value_type: U_WORD read_lambda: |- return 50; // 50Hz - address: 0x111A # dummy value_type: U_QWORD read_lambda: |- return 0; - address: 0x111B # dummy value_type: U_WORD read_lambda: |- return 0; - address: 0x111C # dummy value_type: U_DWORD read_lambda: |- return 0; - address: 0x111E value_type: S_WORD read_lambda: |- return 100; // 100W - address: 0x111F value_type: U_WORD read_lambda: |- return 120; // 120VA - address: 0x1120 value_type: U_WORD read_lambda: |- return 50; // 50% - address: 0x1121 # dummy value_type: U_QWORD read_lambda: |- return 0; - address: 0x1125 # dummy value_type: U_WORD read_lambda: |- return 0; - address: 0x1126 value_type: U_WORD read_lambda: |- return 450; // 450V - address: 0x1127 # dummy value_type: U_WORD read_lambda: |- return 0; - address: 0x1128 # dummy value_type: U_DWORD read_lambda: |- return 0; - address: 0x112A value_type: S_WORD read_lambda: |- return 4812; // 4812W # - modbus_id: modbus2 # server_registers: # - address: 0x1100 # value_type: U_WORD # read_lambda: |- # return 0x01; # - address: 0x1101 # value_type: U_WORD # read_lambda: |- # return 0x02; // b0=power-on mode/PowerOnMode 1=standby mode/StandbyMode 2=bypass mode/BypassMode 3=battery mode/BatteryMode 4=fault mode/FaultMode 5=mains mode/LineMode 6=charging mode/PVChargeMode 0=no # - address: 0x1102 # value_type: U_WORD # read_lambda: |- # return 0x02; // No charge 1=Constant current charge/Bulk charge 2=Constant voltage charge/Absorption charge 3=Float charge/Float charge # - address: 0x1103 # Fault Code # value_type: U_WORD # read_lambda: |- # return 0x0; # - address: 0x1104 # PowerFlowMsg # value_type: U_WORD # read_lambda: |- # return 0x0; # - address: 0x1105 # dummy # value_type: U_WORD # read_lambda: |- # return 0x0; # - address: 0x1106 # dummy # value_type: U_DWORD # read_lambda: |- # return 0x0; # - address: 0x1108 # Battery voltage # value_type: U_WORD # read_lambda: |- # return 0x3A; # - address: 0x1109 # Battery current # value_type: S_WORD # read_lambda: |- # return 0xFFC4; // -60A # - address: 0x110A # Battery power # value_type: S_WORD # read_lambda: |- # return 0xED40; // -4800W # - address: 0x110B # dummy # value_type: U_QWORD # read_lambda: |- # return 0; # - address: 0x110F # dummy # value_type: U_DWORD # read_lambda: |- # return 0; # - address: 0x1111 # AC Output voltage # value_type: U_WORD # read_lambda: |- # return 0xE7; // 231V # - address: 0x1112 # dummy # value_type: U_QWORD # read_lambda: |- # return 0; # - address: 0x1116 # dummy # value_type: U_WORD # read_lambda: |- # return 0; # - address: 0x1117 # AC Input voltage # value_type: U_WORD # read_lambda: |- # return 0xE6; // 230V # - address: 0x1118 # dummy # value_type: U_WORD # read_lambda: |- # return 0; # - address: 0x1119 # AC Input frequency # value_type: U_WORD # read_lambda: |- # return 50; // 50Hz # - address: 0x111A # dummy # value_type: U_QWORD # read_lambda: |- # return 0; # - address: 0x111B # dummy # value_type: U_WORD # read_lambda: |- # return 0; # - address: 0x111C # dummy # value_type: U_DWORD # read_lambda: |- # return 0; # - address: 0x111E # value_type: S_WORD # read_lambda: |- # return 100; // 100W # - address: 0x111F # value_type: U_WORD # read_lambda: |- # return 120; // 120VA # - address: 0x1120 # value_type: U_WORD # read_lambda: |- # return 50; // 50% # - address: 0x1121 # dummy # value_type: U_QWORD # read_lambda: |- # return 0; # - address: 0x1125 # dummy # value_type: U_WORD # read_lambda: |- # return 0; # - address: 0x1126 # value_type: U_WORD # read_lambda: |- # return 450; // 450V # - address: 0x1127 # dummy # value_type: U_WORD # read_lambda: |- # return 0; # - address: 0x1128 # dummy # value_type: U_DWORD # read_lambda: |- # return 0; # - address: 0x112A # value_type: S_WORD # read_lambda: |- # return 4812; // 4812W #text_sensor: #- platform: modbus_controller # modbus_controller_id: modbus_device1 # name: "Inverter1 SerialNo" # register_type: holding # address: ${Felicity_Inv_SerialNo} # 0xF804 # response_size: 7 # register_count: 7 # raw_encode: HEXBYTES # ##- platform: modbus_controller ## modbus_controller_id: modbus_device2 ## name: "Inverter2 SerialNo" ## register_type: holding ## address: ${Felicity_Inv_SerialNo} # 0xF804 ## response_size: 7 ## register_count: 7 ## raw_encode: HEXBYTES # #sensor: #- platform: modbus_controller # modbus_controller_id: modbus_device1 # name: "Inverter1 Type" # id: inverter1_type # register_type: holding # address: ${Felicity_Inv_Type} # 0xF800 # value_type: U_WORD # register_count: 1 # #- platform: modbus_controller # modbus_controller_id: modbus_device1 # name: "Inverter1 Sub Type" # register_type: holding # address: ${Felicity_Inv_SubType} # 0xF801 # value_type: U_WORD # register_count: 3 # #- platform: modbus_controller # modbus_controller_id: modbus_device1 # name: "Inverter1 CPU1 F/W Version" # register_type: holding # address: ${Felicity_Inv_CPU1_FW_Version} # 0xF80B # value_type: U_WORD # register_count: 1 # #- platform: modbus_controller # modbus_controller_id: modbus_device1 # name: "Inverter1 CPU2 F/W Version" # register_type: holding # address: ${Felicity_Inv_CPU2_FW_Version} # 0xF80C # value_type: U_WORD # register_count: 3 #- platform: modbus_controller # modbus_controller_id: modbus_device1 # name: "Inverter1 SettingDataSn" # register_type: holding # address: ${Felicity_Inv_SettingDataSn} # 0x1100 # value_type: U_WORD # register_count: 1 ## lambda: |- ## if (!isnan(id(inverter1_type).state)) { ## return x; // Update the sensor's value if the condition is true ## } else { ## return NAN; // Return NaN to skip updating if the condition is false ## } # #- platform: modbus_controller # modbus_controller_id: modbus_device1 # name: "Inverter1 Working Mode" # register_type: holding # address: ${Felicity_Inv_WorkingMode} # 0x1101 # value_type: U_WORD # register_count: 1 # #- platform: modbus_controller # modbus_controller_id: modbus_device1 # name: "Inverter1 Charge Mode" # register_type: holding # address: ${Felicity_Inv_BatteryChargingStage} # 0x1102 # value_type: U_WORD # register_count: 1 # #- platform: modbus_controller # modbus_controller_id: modbus_device1 # name: "Inverter1 Fault Code" # register_type: holding # address: ${Felicity_Inv_FaultCode} # 0x1103 # value_type: U_WORD # register_count: 1 # #- platform: modbus_controller # modbus_controller_id: modbus_device1 # name: "Inverter1 Power Flow" # register_type: holding # address: ${Felicity_Inv_PowerFlowMsg} # 0x1104 # value_type: U_WORD # register_count: 4 # #- platform: modbus_controller # modbus_controller_id: modbus_device1 # name: "Inverter1 Battery Voltage" # register_type: holding # address: ${Felicity_Inv_BatteryVoltage} # 0x1108 # value_type: U_WORD # register_count: 1 # #- platform: modbus_controller # modbus_controller_id: modbus_device1 # name: "Inverter1 Battery Current" # register_type: holding # address: ${Felicity_Inv_BatteryCurrent} # 0x1109 # value_type: S_WORD # register_count: 1 # #- platform: modbus_controller # modbus_controller_id: modbus_device1 # name: "Inverter1 BatteryPower" # register_type: holding # address: ${Felicity_Inv_BatteryPower} # 0x110A # value_type: S_WORD # register_count: 7 # #- platform: modbus_controller # modbus_controller_id: modbus_device1 # name: "Inverter1 AC Output Voltage" # register_type: holding # address: ${Felicity_Inv_ACOutputVoltage} # 0x1111 # value_type: U_WORD # register_count: 6 # #- platform: modbus_controller # modbus_controller_id: modbus_device1 # name: "Inverter1 AC Input Voltage" # register_type: holding # address: ${Felicity_Inv_ACInputVoltage} # 0x1117 # value_type: U_WORD # register_count: 2 # #- platform: modbus_controller # modbus_controller_id: modbus_device1 # name: "Inverter1 AC Input Frequency" # register_type: holding # address: ${Felicity_Inv_ACInputFrequency} # 0x1119 # value_type: U_WORD # register_count: 5 # #- platform: modbus_controller # modbus_controller_id: modbus_device1 # name: "Inverter1 AC Output Active Power" # register_type: holding # address: ${Felicity_Inv_ACOutputActivePower} # 0x111E # value_type: S_WORD # register_count: 1 # #- platform: modbus_controller # modbus_controller_id: modbus_device1 # name: "Inverter1 AC Output Apparent Power" # register_type: holding # address: ${Felicity_Inv_ACOutputApparentPower} # 0x111F # value_type: U_WORD # register_count: 1 # #- platform: modbus_controller # modbus_controller_id: modbus_device1 # name: "Inverter1 Load Percentage" # register_type: holding # address: ${Felicity_Inv_LoadPercentage} # 0x1120 # value_type: U_WORD # register_count: 6 # #- platform: modbus_controller # modbus_controller_id: modbus_device1 # name: "Inverter1 PV Input Voltage" # register_type: holding # address: ${Felicity_Inv_PVInputVoltage} # 0x1126 # value_type: U_WORD # register_count: 4 # #- platform: modbus_controller # modbus_controller_id: modbus_device1 # name: "Inverter1 PV Input Power" # register_type: holding # address: ${Felicity_Inv_PVInputPower} # 0x112A # value_type: S_WORD # register_count: 1 #- platform: modbus_controller # modbus_controller_id: modbus_device2 # name: "Inverter2 Type" # register_type: holding # address: ${Felicity_Inv_Type} # 0xF800 # value_type: U_WORD # register_count: 1 # #- platform: modbus_controller # modbus_controller_id: modbus_device2 # name: "Inverter2 Sub Type" # register_type: holding # address: ${Felicity_Inv_SubType} # 0xF801 # value_type: U_WORD # register_count: 1 #- platform: modbus_controller # modbus_controller_id: modbus_device2 # name: "Dummy" # register_type: holding # address: 0xF802 # value_type: U_WORD # register_count: 2 #- platform: modbus_controller # modbus_controller_id: modbus_device2 # name: "Inverter2 CPU1 F/W Version" # register_type: holding # address: ${Felicity_Inv_CPU1_FW_Version} # 0xF80B # value_type: U_WORD # register_count: 1 # #- platform: modbus_controller # modbus_controller_id: modbus_device2 # name: "Inverter2 CPU2 F/W Version" # register_type: holding # address: ${Felicity_Inv_CPU2_FW_Version} # 0xF80C # value_type: U_WORD # register_count: 3 #- platform: modbus_controller # modbus_controller_id: modbus_device2 # name: "Inverter2 SettingDataSn" # register_type: holding # address: ${Felicity_Inv_SettingDataSn} # 0x1100 # value_type: U_WORD # register_count: 1 # #- platform: modbus_controller # modbus_controller_id: modbus_device2 # name: "Inverter2 Working Mode" # register_type: holding # address: ${Felicity_Inv_WorkingMode} # 0x1101 # value_type: U_WORD # register_count: 1 # #- platform: modbus_controller # modbus_controller_id: modbus_device2 # name: "Inverter2 Charge Mode" # register_type: holding # address: ${Felicity_Inv_BatteryChargingStage} # 0x1102 # value_type: U_WORD # register_count: 1 # #- platform: modbus_controller # modbus_controller_id: modbus_device2 # name: "Inverter2 Fault Code" # register_type: holding # address: ${Felicity_Inv_FaultCode} # 0x1103 # value_type: U_WORD # register_count: 1 # #- platform: modbus_controller # modbus_controller_id: modbus_device2 # name: "Inverter2 Power Flow" # register_type: holding # address: ${Felicity_Inv_PowerFlowMsg} # 0x1104 # value_type: U_WORD # register_count: 4 # #- platform: modbus_controller # modbus_controller_id: modbus_device2 # name: "Inverter2 Battery Voltage" # register_type: holding # address: ${Felicity_Inv_BatteryVoltage} # 0x1108 # value_type: U_WORD # register_count: 1 # #- platform: modbus_controller # modbus_controller_id: modbus_device2 # name: "Inverter2 Battery Current" # register_type: holding # address: ${Felicity_Inv_BatteryCurrent} # 0x1109 # value_type: S_WORD # register_count: 1 # #- platform: modbus_controller # modbus_controller_id: modbus_device2 # name: "Inverter2 BatteryPower" # register_type: holding # address: ${Felicity_Inv_BatteryPower} # 0x110A # value_type: S_WORD # register_count: 7 # #- platform: modbus_controller # modbus_controller_id: modbus_device2 # name: "Inverter2 AC Output Voltage" # register_type: holding # address: ${Felicity_Inv_ACOutputVoltage} # 0x1111 # value_type: U_WORD # register_count: 6 # #- platform: modbus_controller # modbus_controller_id: modbus_device2 # name: "Inverter2 AC Input Voltage" # register_type: holding # address: ${Felicity_Inv_ACInputVoltage} # 0x1117 # value_type: U_WORD # register_count: 2 # #- platform: modbus_controller # modbus_controller_id: modbus_device2 # name: "Inverter2 AC Input Frequency" # register_type: holding # address: ${Felicity_Inv_ACInputFrequency} # 0x1119 # value_type: U_WORD # register_count: 5 # #- platform: modbus_controller # modbus_controller_id: modbus_device2 # name: "Inverter2 AC Output Active Power" # register_type: holding # address: ${Felicity_Inv_ACOutputActivePower} # 0x111E # value_type: S_WORD # register_count: 1 # #- platform: modbus_controller # modbus_controller_id: modbus_device2 # name: "Inverter2 AC Output Apparent Power" # register_type: holding # address: ${Felicity_Inv_ACOutputApparentPower} # 0x111F # value_type: U_WORD # register_count: 1 # #- platform: modbus_controller # modbus_controller_id: modbus_device2 # name: "Inverter2 Load Percentage" # register_type: holding # address: ${Felicity_Inv_LoadPercentage} # 0x1120 # value_type: U_WORD # register_count: 6 # #- platform: modbus_controller # modbus_controller_id: modbus_device2 # name: "Inverter2 PV Input Voltage" # register_type: holding # address: ${Felicity_Inv_PVInputVoltage} # 0x1126 # value_type: U_WORD # register_count: 4 # #- platform: modbus_controller # modbus_controller_id: modbus_device2 # name: "Inverter2 PV Input Power" # register_type: holding # address: ${Felicity_Inv_PVInputPower} # 0x112A # value_type: S_WORD # register_count: 1