SOLAX: tasmota oder ESPHome auf ESP8266 und ESP32 flashen

Könntest du die bitte mal einstellen? Dann kann ich den SUN2000 ggf. noch in das Victron Universum integrieren :slight_smile:

Warum der Solax nicht antwortetet ist aus der Ferne schwierig zu beantworten.

Folgend Punkte könntet ihr prüfen:

  • Serial Port auf dem ESP ggf. durch logger belegt?

  • Baudrate korrekt (würde ich mal auf 9600 setzen)?

  • Modbus RTU im Solax eingeschaltet (der SUN2000 hat zwei Modbus-Ports, ggf. ist das beim Solax auch so, da dann den korrekten Port nehmen)?

  • Mal mit einer Modbus-Adresse (z.B. Serialnummer) probieren ob wenigstens ein Telegramm kommt?

  • Korrekte Unit-Number im Modbus konfiguriert (bei dir war das ja die 1)?

  • Ich musste A+ auf A+ und B- auf B- klemmen (hab das gleiche RS485 Module wie du)

Bei ESP-Home dann in die Logs schauen. Wenn das Serial-Logging abgeschaltet ist kannst du die Logs mit esphome logs <deine.yaml> abrufen.

Hier mal ein Schnipsel mit meiner Modbus-Konfiguration für den Sun2000

substitutions:
device_name: "huwaei-sun2000-3680"
esphome:
name: ${device_name}
esp8266:
board: d1_mini
# Enable logging
logger:
baud_rate: 0 # disable serial logger
# hardware_uart: UART0_SWAP
api: !include _api.yaml
ota: !include _ota.yaml
wifi: !include _wifi.yaml
switch:
- platform: restart
name: "Restart"
uart:
baud_rate: 9600
data_bits: 8
id: mod_bus
parity: NONE
rx_buffer_size: 1024
rx_pin: GPIO03
stop_bits: 1
tx_pin: GPIO01
modbus:
id: modbus1
modbus_controller:
- id: huawei_inverter
address: 150
modbus_id: modbus1
setup_priority: -10
command_throttle: 750ms
update_interval: 15s
text_sensor:
# Range 30000 - 30035
- name: "Huawei inverter model"
icon: "mdi:information"
platform: modbus_controller
modbus_controller_id: huawei_inverter
register_type: holding
address: 30000
register_count: 15
response_size: 30
skip_updates: 100
- name: "Huawei inverter SN"
icon: "mdi:information"
platform: modbus_controller
modbus_controller_id: huawei_inverter
register_type: holding
address: 30015
register_count: 10
response_size: 20
skip_updates: 100
# Inverter status string
- name: "Huawei inverter status"
platform: template
id: inverter_status_string
icon: "mdi:information"
sensor:
- name: "Huawei inverter device status code"
icon: "mdi:information"
platform: modbus_controller
modbus_controller_id: huawei_inverter
register_type: holding
address: 32089
value_type: U_WORD
on_value:
- text_sensor.template.publish:
id: inverter_status_string
state: !lambda |-
int code = (int)x;
switch (code) {
case 0x0000:
return {"Standby: initializing"};
case 0x0001:
return {"Standby: detecting insulation resistance"};
case 0x0002:
return {"Standby: detecting irradiation"};
case 0x0003:
return {"Standby: grid detecting"};
case 0x0100:
return {"Starting"};
case 0x0200:
return {"On-grid (Off-grid mode: running)"};
case 0x0201:
return {"Grid connection: power limited (Off-grid mode: running: power limited)"};
case 0x0202:
return {"Grid connection: self-derating (Off-grid mode: running: self-derating"};
case 0x0203:
return {"Off-grid Running"};
case 0x0300:
return {"Shutdown: fault"};
case 0x0301:
return {"Shutdown: command"};
case 0x0302:
return {"Shutdown: OVGR"};
case 0x0303:
return {"Shutdown: communication disconnected"};
case 0x0304:
return {"Shutdown: power limited"};
case 0x0305:
return {"Shutdown: manual startup required"};
case 0x0306:
return {"Shutdown: DC switches disconnected"};
case 0x0307:
return {"Shutdown: rapid cutoff"};
case 0x0308:
return {"Shutdown: input underpower"};
case 0x0401:
return {"Grid scheduling: cosφ-P curve"};
case 0x0402:
return {"Grid scheduling: Q-U curve"};
case 0x0403:
return {"Grid scheduling: PF-U curve"};
case 0x0404:
return {"Grid scheduling: dry contact"};
case 0x0405:
return {"Grid scheduling: Q-P curve"};
case 0x0500:
return {"Spot-check ready"};
case 0x0501:
return {"Spot-checking"};
case 0x0600:
return {"Inspecting"};
case 0x0700:
return {"AFCI self check"};
case 0x0800:
return {"I-V scanning"};
case 0x0900:
return {"DC input detection"};
case 0x0A00:
return {"Running: off-grid charging"};
case 0xA000:
return {"Standby: no irradiation"};
default:
return {"Unknown state code"};
}
...