removed source/solar as a sudmodule
This commit is contained in:
parent
c19a547f58
commit
29cb34de15
1
.gitignore
vendored
1
.gitignore
vendored
@ -2,6 +2,7 @@
|
||||
# This is an example and may include too much for your use-case.
|
||||
# You can modify this file to suit your needs.
|
||||
/.esphome/
|
||||
.esphome/external_components
|
||||
/secrets.yaml
|
||||
/.esphome.bak/
|
||||
/fonts/
|
||||
|
||||
26
README.md
26
README.md
@ -1,14 +1,14 @@
|
||||
# ESPHome Config Folder
|
||||
|
||||
This folder contains configuration files for ESPHome devices. The `solar` directory is specifically used for managing solar-related ESPHome setups.
|
||||
|
||||
## Structure
|
||||
|
||||
- `source/solar/`: Contains source code files and related resources for solar projects.
|
||||
|
||||
## Usage
|
||||
|
||||
1. Place your ESPHome YAML configuration files in this directory.
|
||||
2. Use the ESPHome CLI or dashboard to validate and upload configurations to your devices.
|
||||
|
||||
# ESPHome Config Folder
|
||||
|
||||
This folder contains configuration files for ESPHome devices. The `solar` directory is specifically used for managing solar-related ESPHome setups.
|
||||
|
||||
## Structure
|
||||
|
||||
- `source/solar/`: Contains source code files and related resources for solar projects.
|
||||
|
||||
## Usage
|
||||
|
||||
1. Place your ESPHome YAML configuration files in this directory.
|
||||
2. Use the ESPHome CLI or dashboard to validate and upload configurations to your devices.
|
||||
|
||||
For more information, visit the [ESPHome documentation](https://esphome.io/).
|
||||
752
backup/sthome-ut3-bak.yaml
Normal file
752
backup/sthome-ut3-bak.yaml
Normal file
@ -0,0 +1,752 @@
|
||||
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
|
||||
|
||||
|
||||
|
||||
202
common/time.yaml
202
common/time.yaml
@ -1,102 +1,102 @@
|
||||
# https://community.home-assistant.io/t/display-manually-set-rtc-ds3231-time-in-esphome-sntp-sync-every-12-hours-need-help-with-web-interface/868801
|
||||
# miloit
|
||||
time:
|
||||
- platform: sntp
|
||||
id: sntp_time
|
||||
|
||||
|
||||
web_server:
|
||||
port: 80
|
||||
|
||||
custom_component:
|
||||
- lambda: |-
|
||||
class DS3231Component : public PollingComponent {
|
||||
public:
|
||||
DS3231Component(esphome::time::RealTimeClock *rtc) : PollingComponent(10000), rtc_(rtc) {}
|
||||
|
||||
void setup() override {
|
||||
if (!Wire.requestFrom(0x68, 1)) {
|
||||
ESP_LOGE("DS3231", "RTC not found at I2C address 0x68");
|
||||
return;
|
||||
}
|
||||
ESP_LOGI("DS3231", "RTC found at I2C address 0x68");
|
||||
|
||||
auto now = this->rtc_->now();
|
||||
if (now.is_valid()) {
|
||||
set_time(now.year, now.month, now.day_of_month, now.hour, now.minute, now.second, now.day_of_week);
|
||||
ESP_LOGI("DS3231", "RTC time set to %04d-%02d-%02d %02d:%02d:%02d",
|
||||
now.year, now.month, now.day_of_month, now.hour, now.minute, now.second);
|
||||
} else {
|
||||
ESP_LOGE("DS3231", "SNTP time is not valid; cannot set RTC");
|
||||
}
|
||||
}
|
||||
|
||||
void update() override {
|
||||
auto time = get_time();
|
||||
if (time.year > 0) {
|
||||
ESP_LOGI("DS3231", "Current RTC Time: %04d-%02d-%02d %02d:%02d:%02d",
|
||||
time.year, time.month, time.day, time.hour, time.minute, time.second);
|
||||
} else {
|
||||
ESP_LOGE("DS3231", "Failed to read time from RTC");
|
||||
}
|
||||
}
|
||||
|
||||
void set_time(int year, int month, int day, int hour, int minute, int second, int day_of_week) {
|
||||
Wire.beginTransmission(0x68);
|
||||
Wire.write(0); // Start at register 0
|
||||
Wire.write(dec_to_bcd(second)); // Seconds
|
||||
Wire.write(dec_to_bcd(minute)); // Minutes
|
||||
Wire.write(dec_to_bcd(hour)); // Hours
|
||||
Wire.write(dec_to_bcd(day_of_week)); // Day of the week
|
||||
Wire.write(dec_to_bcd(day)); // Day of the month
|
||||
Wire.write(dec_to_bcd(month)); // Month
|
||||
Wire.write(dec_to_bcd(year - 2000)); // Year
|
||||
Wire.endTransmission();
|
||||
}
|
||||
|
||||
struct Time {
|
||||
int year;
|
||||
int month;
|
||||
int day;
|
||||
int hour;
|
||||
int minute;
|
||||
int second;
|
||||
int day_of_week;
|
||||
};
|
||||
|
||||
Time get_time() {
|
||||
Wire.beginTransmission(0x68);
|
||||
Wire.write(0); // Start at register 0
|
||||
Wire.endTransmission();
|
||||
|
||||
if (Wire.requestFrom(0x68, 7) != 7) {
|
||||
ESP_LOGE("DS3231", "Failed to read time registers");
|
||||
return Time{0, 0, 0, 0, 0, 0, 0};
|
||||
}
|
||||
|
||||
uint8_t second = bcd_to_dec(Wire.read());
|
||||
uint8_t minute = bcd_to_dec(Wire.read());
|
||||
uint8_t hour = bcd_to_dec(Wire.read());
|
||||
uint8_t day_of_week = bcd_to_dec(Wire.read());
|
||||
uint8_t day = bcd_to_dec(Wire.read());
|
||||
uint8_t month = bcd_to_dec(Wire.read());
|
||||
uint16_t year = bcd_to_dec(Wire.read()) + 2000;
|
||||
|
||||
return Time{year, month, day, hour, minute, second, day_of_week};
|
||||
}
|
||||
|
||||
private:
|
||||
esphome::time::RealTimeClock *rtc_;
|
||||
|
||||
uint8_t dec_to_bcd(int val) {
|
||||
return ((val / 10 * 16) + (val % 10));
|
||||
}
|
||||
|
||||
int bcd_to_dec(uint8_t val) {
|
||||
return ((val / 16 * 10) + (val % 16));
|
||||
}
|
||||
};
|
||||
|
||||
auto my_rtc = new DS3231Component(id(sntp_time));
|
||||
App.register_component(my_rtc);
|
||||
# https://community.home-assistant.io/t/display-manually-set-rtc-ds3231-time-in-esphome-sntp-sync-every-12-hours-need-help-with-web-interface/868801
|
||||
# miloit
|
||||
time:
|
||||
- platform: sntp
|
||||
id: sntp_time
|
||||
|
||||
|
||||
web_server:
|
||||
port: 80
|
||||
|
||||
custom_component:
|
||||
- lambda: |-
|
||||
class DS3231Component : public PollingComponent {
|
||||
public:
|
||||
DS3231Component(esphome::time::RealTimeClock *rtc) : PollingComponent(10000), rtc_(rtc) {}
|
||||
|
||||
void setup() override {
|
||||
if (!Wire.requestFrom(0x68, 1)) {
|
||||
ESP_LOGE("DS3231", "RTC not found at I2C address 0x68");
|
||||
return;
|
||||
}
|
||||
ESP_LOGI("DS3231", "RTC found at I2C address 0x68");
|
||||
|
||||
auto now = this->rtc_->now();
|
||||
if (now.is_valid()) {
|
||||
set_time(now.year, now.month, now.day_of_month, now.hour, now.minute, now.second, now.day_of_week);
|
||||
ESP_LOGI("DS3231", "RTC time set to %04d-%02d-%02d %02d:%02d:%02d",
|
||||
now.year, now.month, now.day_of_month, now.hour, now.minute, now.second);
|
||||
} else {
|
||||
ESP_LOGE("DS3231", "SNTP time is not valid; cannot set RTC");
|
||||
}
|
||||
}
|
||||
|
||||
void update() override {
|
||||
auto time = get_time();
|
||||
if (time.year > 0) {
|
||||
ESP_LOGI("DS3231", "Current RTC Time: %04d-%02d-%02d %02d:%02d:%02d",
|
||||
time.year, time.month, time.day, time.hour, time.minute, time.second);
|
||||
} else {
|
||||
ESP_LOGE("DS3231", "Failed to read time from RTC");
|
||||
}
|
||||
}
|
||||
|
||||
void set_time(int year, int month, int day, int hour, int minute, int second, int day_of_week) {
|
||||
Wire.beginTransmission(0x68);
|
||||
Wire.write(0); // Start at register 0
|
||||
Wire.write(dec_to_bcd(second)); // Seconds
|
||||
Wire.write(dec_to_bcd(minute)); // Minutes
|
||||
Wire.write(dec_to_bcd(hour)); // Hours
|
||||
Wire.write(dec_to_bcd(day_of_week)); // Day of the week
|
||||
Wire.write(dec_to_bcd(day)); // Day of the month
|
||||
Wire.write(dec_to_bcd(month)); // Month
|
||||
Wire.write(dec_to_bcd(year - 2000)); // Year
|
||||
Wire.endTransmission();
|
||||
}
|
||||
|
||||
struct Time {
|
||||
int year;
|
||||
int month;
|
||||
int day;
|
||||
int hour;
|
||||
int minute;
|
||||
int second;
|
||||
int day_of_week;
|
||||
};
|
||||
|
||||
Time get_time() {
|
||||
Wire.beginTransmission(0x68);
|
||||
Wire.write(0); // Start at register 0
|
||||
Wire.endTransmission();
|
||||
|
||||
if (Wire.requestFrom(0x68, 7) != 7) {
|
||||
ESP_LOGE("DS3231", "Failed to read time registers");
|
||||
return Time{0, 0, 0, 0, 0, 0, 0};
|
||||
}
|
||||
|
||||
uint8_t second = bcd_to_dec(Wire.read());
|
||||
uint8_t minute = bcd_to_dec(Wire.read());
|
||||
uint8_t hour = bcd_to_dec(Wire.read());
|
||||
uint8_t day_of_week = bcd_to_dec(Wire.read());
|
||||
uint8_t day = bcd_to_dec(Wire.read());
|
||||
uint8_t month = bcd_to_dec(Wire.read());
|
||||
uint16_t year = bcd_to_dec(Wire.read()) + 2000;
|
||||
|
||||
return Time{year, month, day, hour, minute, second, day_of_week};
|
||||
}
|
||||
|
||||
private:
|
||||
esphome::time::RealTimeClock *rtc_;
|
||||
|
||||
uint8_t dec_to_bcd(int val) {
|
||||
return ((val / 10 * 16) + (val % 10));
|
||||
}
|
||||
|
||||
int bcd_to_dec(uint8_t val) {
|
||||
return ((val / 16 * 10) + (val % 16));
|
||||
}
|
||||
};
|
||||
|
||||
auto my_rtc = new DS3231Component(id(sntp_time));
|
||||
App.register_component(my_rtc);
|
||||
return {};
|
||||
@ -1,57 +1,57 @@
|
||||
# ESPHome config/components/ads131m08
|
||||
|
||||
This folder contains source code files and related resources for external ads131m08 component.
|
||||
|
||||
## Example .yaml config
|
||||
|
||||
---
|
||||
|
||||
```yaml
|
||||
external_components:
|
||||
- source:
|
||||
type: local
|
||||
path: components # Path relative to this YAML file
|
||||
components: [ ads131m08 ]
|
||||
|
||||
ads131m08:
|
||||
id: highres_adc
|
||||
cs_pin: GPIO5
|
||||
drdy_pin: GPIO10
|
||||
vref: 1.25
|
||||
|
||||
sensor:
|
||||
- platform: ads131m08
|
||||
ads_hub_id: highres_adc
|
||||
channel: 0
|
||||
name: "ADS Channel 0 Voltage"
|
||||
- platform: ads131m08
|
||||
ads_hub_id: highres_adc
|
||||
channel: 1
|
||||
name: "ADS Channel 1 Voltage"
|
||||
- platform: ads131m08
|
||||
ads_hub_id: highres_adc
|
||||
channel: 2
|
||||
name: "ADS Channel 2 Voltage"
|
||||
- platform: ads131m08
|
||||
ads_hub_id: highres_adc
|
||||
channel: 3
|
||||
name: "ADS Channel 3 Voltage"
|
||||
- platform: ads131m08
|
||||
ads_hub_id: highres_adc
|
||||
channel: 4
|
||||
name: "ADS Channel 4 Voltage"
|
||||
- platform: ads131m08
|
||||
ads_hub_id: highres_adc
|
||||
channel: 5
|
||||
name: "ADS Channel 5 Voltage"
|
||||
- platform: ads131m08
|
||||
ads_hub_id: highres_adc
|
||||
channel: 6
|
||||
name: "ADS Channel 6 Voltage"
|
||||
- platform: ads131m08
|
||||
ads_hub_id: highres_adc
|
||||
channel: 7
|
||||
name: "ADS Channel 7 Voltage"
|
||||
```
|
||||
|
||||
# ESPHome config/components/ads131m08
|
||||
|
||||
This folder contains source code files and related resources for external ads131m08 component.
|
||||
|
||||
## Example .yaml config
|
||||
|
||||
---
|
||||
|
||||
```yaml
|
||||
external_components:
|
||||
- source:
|
||||
type: local
|
||||
path: components # Path relative to this YAML file
|
||||
components: [ ads131m08 ]
|
||||
|
||||
ads131m08:
|
||||
id: highres_adc
|
||||
cs_pin: GPIO5
|
||||
drdy_pin: GPIO10
|
||||
vref: 1.25
|
||||
|
||||
sensor:
|
||||
- platform: ads131m08
|
||||
ads_hub_id: highres_adc
|
||||
channel: 0
|
||||
name: "ADS Channel 0 Voltage"
|
||||
- platform: ads131m08
|
||||
ads_hub_id: highres_adc
|
||||
channel: 1
|
||||
name: "ADS Channel 1 Voltage"
|
||||
- platform: ads131m08
|
||||
ads_hub_id: highres_adc
|
||||
channel: 2
|
||||
name: "ADS Channel 2 Voltage"
|
||||
- platform: ads131m08
|
||||
ads_hub_id: highres_adc
|
||||
channel: 3
|
||||
name: "ADS Channel 3 Voltage"
|
||||
- platform: ads131m08
|
||||
ads_hub_id: highres_adc
|
||||
channel: 4
|
||||
name: "ADS Channel 4 Voltage"
|
||||
- platform: ads131m08
|
||||
ads_hub_id: highres_adc
|
||||
channel: 5
|
||||
name: "ADS Channel 5 Voltage"
|
||||
- platform: ads131m08
|
||||
ads_hub_id: highres_adc
|
||||
channel: 6
|
||||
name: "ADS Channel 6 Voltage"
|
||||
- platform: ads131m08
|
||||
ads_hub_id: highres_adc
|
||||
channel: 7
|
||||
name: "ADS Channel 7 Voltage"
|
||||
```
|
||||
|
||||
For more information, visit the [ESPHome documentation](https://esphome.io/).
|
||||
@ -1,29 +1,29 @@
|
||||
import esphome.codegen as cg
|
||||
import esphome.config_validation as cv
|
||||
from esphome import pins
|
||||
from esphome.components import spi
|
||||
from esphome.const import (
|
||||
CONF_ID
|
||||
)
|
||||
|
||||
CONF_DRDY_PIN = "drdy_pin"
|
||||
CONF_REFERENCE_VOLTAGE = "reference_voltage"
|
||||
|
||||
DEPENDENCIES = ["spi"]
|
||||
ads131m08_ns = cg.esphome_ns.namespace("ads131m08")
|
||||
ADS131M08Hub = ads131m08_ns.class_("ADS131M08Hub", cg.Component, spi.SPIDevice)
|
||||
|
||||
CONFIG_SCHEMA = cv.Schema({
|
||||
cv.GenerateID(): cv.declare_id(ADS131M08Hub),
|
||||
cv.Required(CONF_DRDY_PIN): pins.internal_gpio_input_pin_schema,
|
||||
cv.Optional(CONF_REFERENCE_VOLTAGE, default=1.2): cv.float_range(min=1.1, max=1.3),
|
||||
}).extend(cv.COMPONENT_SCHEMA).extend(spi.spi_device_schema(cs_pin_required=True))
|
||||
|
||||
async def to_code(config):
|
||||
var = cg.new_Pvariable(config[CONF_ID])
|
||||
await cg.register_component(var, config)
|
||||
await spi.register_spi_device(var, config)
|
||||
drdy = await cg.gpio_pin_expression(config[CONF_DRDY_PIN])
|
||||
reference_voltage = config[CONF_REFERENCE_VOLTAGE]
|
||||
cg.add(var.set_reference_voltage(reference_voltage))
|
||||
cg.add(var.set_drdy_pin(drdy))
|
||||
import esphome.codegen as cg
|
||||
import esphome.config_validation as cv
|
||||
from esphome import pins
|
||||
from esphome.components import spi
|
||||
from esphome.const import (
|
||||
CONF_ID
|
||||
)
|
||||
|
||||
CONF_DRDY_PIN = "drdy_pin"
|
||||
CONF_REFERENCE_VOLTAGE = "reference_voltage"
|
||||
|
||||
DEPENDENCIES = ["spi"]
|
||||
ads131m08_ns = cg.esphome_ns.namespace("ads131m08")
|
||||
ADS131M08Hub = ads131m08_ns.class_("ADS131M08Hub", cg.Component, spi.SPIDevice)
|
||||
|
||||
CONFIG_SCHEMA = cv.Schema({
|
||||
cv.GenerateID(): cv.declare_id(ADS131M08Hub),
|
||||
cv.Required(CONF_DRDY_PIN): pins.internal_gpio_input_pin_schema,
|
||||
cv.Optional(CONF_REFERENCE_VOLTAGE, default=1.2): cv.float_range(min=1.1, max=1.3),
|
||||
}).extend(cv.COMPONENT_SCHEMA).extend(spi.spi_device_schema(cs_pin_required=True))
|
||||
|
||||
async def to_code(config):
|
||||
var = cg.new_Pvariable(config[CONF_ID])
|
||||
await cg.register_component(var, config)
|
||||
await spi.register_spi_device(var, config)
|
||||
drdy = await cg.gpio_pin_expression(config[CONF_DRDY_PIN])
|
||||
reference_voltage = config[CONF_REFERENCE_VOLTAGE]
|
||||
cg.add(var.set_reference_voltage(reference_voltage))
|
||||
cg.add(var.set_drdy_pin(drdy))
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
@ -1,34 +1,34 @@
|
||||
import esphome.codegen as cg
|
||||
import esphome.config_validation as cv
|
||||
from esphome.components import sensor
|
||||
from esphome.const import (
|
||||
CONF_ID, CONF_CHANNEL, STATE_CLASS_MEASUREMENT, DEVICE_CLASS_VOLTAGE, UNIT_VOLT, ICON_FLASH
|
||||
)
|
||||
from . import ADS131M08Hub, ads131m08_ns
|
||||
|
||||
AUTO_LOAD = [
|
||||
"sensor",
|
||||
]
|
||||
|
||||
CONF_ADS131M08_ID = "ads131m08_id"
|
||||
|
||||
ADS131M08Sensor = ads131m08_ns.class_("ADS131M08Sensor", sensor.Sensor, cg.Component)
|
||||
|
||||
CONFIG_SCHEMA = sensor.sensor_schema(
|
||||
unit_of_measurement=UNIT_VOLT,
|
||||
device_class=DEVICE_CLASS_VOLTAGE,
|
||||
icon=ICON_FLASH,
|
||||
state_class=STATE_CLASS_MEASUREMENT,
|
||||
).extend({
|
||||
cv.GenerateID(): cv.declare_id(ADS131M08Sensor),
|
||||
cv.Required(CONF_ADS131M08_ID): cv.use_id(ADS131M08Hub),
|
||||
cv.Required(CONF_CHANNEL): cv.int_range(min=0, max=7),
|
||||
}).extend(cv.COMPONENT_SCHEMA)
|
||||
|
||||
async def to_code(config):
|
||||
var = cg.new_Pvariable(config[CONF_ID])
|
||||
await cg.register_component(var, config)
|
||||
await sensor.register_sensor(var, config)
|
||||
|
||||
hub = await cg.get_variable(config[CONF_ADS131M08_ID])
|
||||
import esphome.codegen as cg
|
||||
import esphome.config_validation as cv
|
||||
from esphome.components import sensor
|
||||
from esphome.const import (
|
||||
CONF_ID, CONF_CHANNEL, STATE_CLASS_MEASUREMENT, DEVICE_CLASS_VOLTAGE, UNIT_VOLT, ICON_FLASH
|
||||
)
|
||||
from . import ADS131M08Hub, ads131m08_ns
|
||||
|
||||
AUTO_LOAD = [
|
||||
"sensor",
|
||||
]
|
||||
|
||||
CONF_ADS131M08_ID = "ads131m08_id"
|
||||
|
||||
ADS131M08Sensor = ads131m08_ns.class_("ADS131M08Sensor", sensor.Sensor, cg.Component)
|
||||
|
||||
CONFIG_SCHEMA = sensor.sensor_schema(
|
||||
unit_of_measurement=UNIT_VOLT,
|
||||
device_class=DEVICE_CLASS_VOLTAGE,
|
||||
icon=ICON_FLASH,
|
||||
state_class=STATE_CLASS_MEASUREMENT,
|
||||
).extend({
|
||||
cv.GenerateID(): cv.declare_id(ADS131M08Sensor),
|
||||
cv.Required(CONF_ADS131M08_ID): cv.use_id(ADS131M08Hub),
|
||||
cv.Required(CONF_CHANNEL): cv.int_range(min=0, max=7),
|
||||
}).extend(cv.COMPONENT_SCHEMA)
|
||||
|
||||
async def to_code(config):
|
||||
var = cg.new_Pvariable(config[CONF_ID])
|
||||
await cg.register_component(var, config)
|
||||
await sensor.register_sensor(var, config)
|
||||
|
||||
hub = await cg.get_variable(config[CONF_ADS131M08_ID])
|
||||
cg.add(hub.register_sensor(config[CONF_CHANNEL], var))
|
||||
@ -1,14 +1,14 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!-- Generator: Adobe Illustrator 26.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
|
||||
<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
|
||||
viewBox="0 0 24 24" style="enable-background:new 0 0 24 24;" xml:space="preserve">
|
||||
<style type="text/css">
|
||||
.st0{fill:#FF0000;}
|
||||
</style>
|
||||
<path class="st0" d="M17.7,11.2c-0.2-0.3-0.5-0.6-0.8-0.8c-0.7-0.6-1.4-1-2.1-1.7C13.3,7.3,13,4.8,13.9,3c-0.9,0.2-1.8,0.8-2.5,1.3
|
||||
c-2.6,2.1-3.6,5.7-2.4,8.9c0,0.1,0.1,0.2,0.1,0.3c0,0.2-0.1,0.4-0.3,0.5c-0.2,0.1-0.5,0-0.7-0.1C8.1,13.9,8,13.8,8,13.8
|
||||
c-1.1-1.4-1.3-3.5-0.6-5.1C5.8,10,4.9,12.3,5,14.5c0.1,0.5,0.1,1,0.3,1.5c0.1,0.6,0.4,1.2,0.7,1.7c1.1,1.7,2.9,3,5,3.2
|
||||
c2.1,0.3,4.4-0.1,6.1-1.6c1.8-1.7,2.5-4.3,1.5-6.6l-0.1-0.3C18.2,12,17.7,11.2,17.7,11.2 M14.5,17.5c-0.3,0.2-0.7,0.5-1.1,0.6
|
||||
c-1.1,0.4-2.2-0.2-2.9-0.8c1.2-0.3,1.9-1.2,2.1-2.1c0.2-0.8-0.1-1.5-0.3-2.2c-0.1-0.7-0.1-1.4,0.2-2.1c0.2,0.4,0.4,0.8,0.6,1.1
|
||||
c0.8,1,2,1.4,2.2,2.8c0,0.1,0.1,0.3,0.1,0.4C15.5,16,15.1,17,14.5,17.5L14.5,17.5z"/>
|
||||
</svg>
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!-- Generator: Adobe Illustrator 26.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
|
||||
<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
|
||||
viewBox="0 0 24 24" style="enable-background:new 0 0 24 24;" xml:space="preserve">
|
||||
<style type="text/css">
|
||||
.st0{fill:#FF0000;}
|
||||
</style>
|
||||
<path class="st0" d="M17.7,11.2c-0.2-0.3-0.5-0.6-0.8-0.8c-0.7-0.6-1.4-1-2.1-1.7C13.3,7.3,13,4.8,13.9,3c-0.9,0.2-1.8,0.8-2.5,1.3
|
||||
c-2.6,2.1-3.6,5.7-2.4,8.9c0,0.1,0.1,0.2,0.1,0.3c0,0.2-0.1,0.4-0.3,0.5c-0.2,0.1-0.5,0-0.7-0.1C8.1,13.9,8,13.8,8,13.8
|
||||
c-1.1-1.4-1.3-3.5-0.6-5.1C5.8,10,4.9,12.3,5,14.5c0.1,0.5,0.1,1,0.3,1.5c0.1,0.6,0.4,1.2,0.7,1.7c1.1,1.7,2.9,3,5,3.2
|
||||
c2.1,0.3,4.4-0.1,6.1-1.6c1.8-1.7,2.5-4.3,1.5-6.6l-0.1-0.3C18.2,12,17.7,11.2,17.7,11.2 M14.5,17.5c-0.3,0.2-0.7,0.5-1.1,0.6
|
||||
c-1.1,0.4-2.2-0.2-2.9-0.8c1.2-0.3,1.9-1.2,2.1-2.1c0.2-0.8-0.1-1.5-0.3-2.2c-0.1-0.7-0.1-1.4,0.2-2.1c0.2,0.4,0.4,0.8,0.6,1.1
|
||||
c0.8,1,2,1.4,2.2,2.8c0,0.1,0.1,0.3,0.1,0.4C15.5,16,15.1,17,14.5,17.5L14.5,17.5z"/>
|
||||
</svg>
|
||||
|
||||
|
Before Width: | Height: | Size: 1.1 KiB After Width: | Height: | Size: 1.1 KiB |
838
sthome-ut3.yaml
838
sthome-ut3.yaml
@ -1,6 +1,5 @@
|
||||
packages:
|
||||
- !include common/wifi.yaml
|
||||
- !include common/felicityinverter.yaml
|
||||
|
||||
substitutions:
|
||||
name: sthome-ut3
|
||||
@ -9,30 +8,25 @@ substitutions:
|
||||
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
|
||||
|
||||
includes:
|
||||
- source # copies folder with files to relevant to be included in esphome compile
|
||||
- <source/solar/cb_frame.h> # angle brackets ensure file is included above globals in main.cpp. Make sure to use include GUARDS in the file to prevent double inclusion
|
||||
- <source/solar/cbf_store.h>
|
||||
- <source/solar/cbf_pylon.h>
|
||||
- <source/solar/cbf_store_pylon.h>
|
||||
- <source/solar/cbf_sthome.h>
|
||||
- <source/solar/cbf_store_sthome.h>
|
||||
- <source/solar/cbf_cache.h>
|
||||
|
||||
globals:
|
||||
- id: geyser_relay_status
|
||||
type: bool
|
||||
restore_value: yes
|
||||
initial_value: 'false'
|
||||
|
||||
|
||||
debug:
|
||||
update_interval: 10s
|
||||
|
||||
esp32:
|
||||
board: nodemcu-32s #esp32dev
|
||||
framework:
|
||||
@ -67,34 +61,8 @@ wifi:
|
||||
|
||||
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, ' ');
|
||||
#preferences:
|
||||
# flash_write_interval: 30s
|
||||
|
||||
sun:
|
||||
id: sun_sensor
|
||||
@ -103,650 +71,154 @@ sun:
|
||||
|
||||
time:
|
||||
- platform: homeassistant
|
||||
id: time_source
|
||||
|
||||
text_sensor:
|
||||
- platform: debug
|
||||
device:
|
||||
name: "Device Info"
|
||||
reset_reason:
|
||||
name: "Reset Reason"
|
||||
|
||||
# human readable update text sensor from sensor:uptime
|
||||
- platform: template
|
||||
name: Uptime
|
||||
id: uptime_human
|
||||
icon: mdi:clock-start
|
||||
update_interval: 10s
|
||||
|
||||
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
|
||||
- platform: gpio
|
||||
pin:
|
||||
number: GPIO16
|
||||
inverted: true
|
||||
id: relay1
|
||||
name: "Floodlights Backyard"
|
||||
icon: "mdi:light-flood-down"
|
||||
restore_mode: RESTORE_DEFAULT_OFF
|
||||
# the backyard floodlight auto turns off in 4min 14 sec. So we need to switch relay off just before or at this time
|
||||
# TODO: remove or extend auto turn off to >= 10min
|
||||
on_turn_on:
|
||||
- delay: 250s
|
||||
- switch.turn_off: relay1
|
||||
|
||||
# - id: modbus2
|
||||
# uart_id: inv_uart2
|
||||
# #flow_control_pin: GPIO27
|
||||
# send_wait_time: 1200ms #250ms
|
||||
# disable_crc: false
|
||||
# role: server
|
||||
- platform: gpio
|
||||
pin:
|
||||
number: GPIO17
|
||||
inverted: true
|
||||
id: relay2
|
||||
name: "Relay 2"
|
||||
icon: "mdi:run-fast"
|
||||
restore_mode: RESTORE_DEFAULT_OFF
|
||||
on_turn_on:
|
||||
- delay: 1000ms
|
||||
- switch.turn_off: relay2
|
||||
|
||||
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
|
||||
- platform: gpio
|
||||
pin:
|
||||
number: GPIO18
|
||||
inverted: true
|
||||
id: relay3
|
||||
name: "Relay 3"
|
||||
icon: "mdi:run-fast"
|
||||
restore_mode: RESTORE_DEFAULT_OFF
|
||||
on_turn_on:
|
||||
- delay: 1000ms
|
||||
- switch.turn_off: relay3
|
||||
|
||||
- platform: gpio
|
||||
pin:
|
||||
number: GPIO19
|
||||
inverted: true
|
||||
id: relay4
|
||||
name: "Alarm Zone 4"
|
||||
icon: "mdi:alarm-light-outline"
|
||||
restore_mode: RESTORE_DEFAULT_OFF
|
||||
on_turn_on:
|
||||
- if:
|
||||
condition:
|
||||
- lambda: |-
|
||||
double sun_elevation = id(sun_sensor).elevation();
|
||||
return (sun_elevation <= -6); // -6° = civil twilight, -12° = nautical twilight, -18° = astronomical twilight
|
||||
#- sun.is_below_horizon:
|
||||
then:
|
||||
- switch.turn_on: relay1
|
||||
- if:
|
||||
condition:
|
||||
- binary_sensor.is_on: floodlight_test
|
||||
then:
|
||||
- switch.turn_on: relay1
|
||||
- delay: 30s
|
||||
- switch.turn_off: relay4
|
||||
|
||||
- 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
|
||||
# define DIGITAL_D1 04
|
||||
binary_sensor:
|
||||
- platform: gpio
|
||||
# device_class: light
|
||||
id: floodlight_test
|
||||
pin:
|
||||
number: GPIO04
|
||||
mode:
|
||||
input: true
|
||||
pullup: true
|
||||
filters:
|
||||
- delayed_off: 100ms
|
||||
name: "Floodlights Test Mode"
|
||||
icon: "mdi:lightbulb-on-outline"
|
||||
|
||||
sensor:
|
||||
- platform: adc
|
||||
pin: 35
|
||||
name: "Alarm Signal"
|
||||
id: alarm_signal
|
||||
update_interval: 2000ms
|
||||
attenuation: 12db
|
||||
sampling_mode: avg
|
||||
filters:
|
||||
- lambda:
|
||||
if (x >= 3.11) {
|
||||
return x * 1.60256;
|
||||
} else if (x <= 0.25) {
|
||||
return 0;
|
||||
} else {
|
||||
return x * 1.51;
|
||||
}
|
||||
on_value:
|
||||
then:
|
||||
# switch on floodlights
|
||||
lambda: |-
|
||||
if (id(alarm_signal).state > 1.5) {
|
||||
id(relay1).turn_on();
|
||||
}
|
||||
|
||||
#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
|
||||
|
||||
|
||||
|
||||
# human readable uptime sensor output to the text sensor above
|
||||
- platform: uptime
|
||||
name: Uptime in Days
|
||||
id: uptime_sensor_days
|
||||
update_interval: 10s
|
||||
on_raw_value:
|
||||
then:
|
||||
- text_sensor.template.publish:
|
||||
id: uptime_human
|
||||
state: !lambda |-
|
||||
int seconds = round(id(uptime_sensor_days).raw_state);
|
||||
int days = seconds / (24 * 3600);
|
||||
seconds = seconds % (24 * 3600);
|
||||
int hours = seconds / 3600;
|
||||
seconds = seconds % 3600;
|
||||
int minutes = seconds / 60;
|
||||
seconds = seconds % 60;
|
||||
auto days_str = std::to_string(days);
|
||||
auto hours_str = std::to_string(hours);
|
||||
auto minutes_str = std::to_string(minutes);
|
||||
auto seconds_str = std::to_string(seconds);
|
||||
return (
|
||||
(days ? days_str + "d " : "") +
|
||||
(hours ? hours_str + "h " : "") +
|
||||
(minutes ? minutes_str + "m " : "") +
|
||||
(seconds_str + "s")
|
||||
).c_str();
|
||||
Loading…
Reference in New Issue
Block a user