Growatt - RS485TTL - ESP8266 - ESPHome

kleiner Schelm

Active member
Hallo,
ich habe einen Growatt MIC 2000. Der Soll über ESP8266 und der TTL Schnittstelle von Growatt in Home Assistant.
Es gibt im Internet sehr viele Anleitungen. Meist die wo der ShineWiFi Stick mit ner ESP Software geflasht wird. Dann gibts noch ne Firmware, die man flashen kann.

Der ShineWiFi Stick steckt im USB Port vom Growatt. Ich will aber an die RS485TTL Schnittstelle. Da hab ich auch was gefunden, bekomme das aber nicht zum laufen.

Verdrahtung RS485 Schnitstelle.pngRS485 zu ESP8266 Verdrahtung.png
Ich habe den TTL Adapter mit den grünen Klemmen für A und B.
Iwo im Internet stand, dass man 3,3V als Spannungsversorgung nehmen soll, 5V führt zu problemen. Ich nutze ein 5V Netzteil zum versorgen des esp8266. der TTL Adapter wird vom esp8266 mit 3,3 V versorgt.
Verdrahtet habe ich das wie Bild rechts unten, also RS485 Modul 2.

Die Frage ist, was programmiere ich in ESPHome ?
1. Was gebe ich am besten für eine Hardware vor ? also board: xyz ?
2. welche Pins (RS485 Kommunikation) muss ich für welche Hardware nutzen ?
muss ich direkt die TX und RX Pins nutzen ? Weil ich auch eine Konfig gefunden habe, da schreibt einer, die TX und RX Pins würden nicht funktionieren.
Er nutzt statt dessen D5 und D6.
3. Welche Baut Rate muss ich nehmen ? Ich gehe von 9600 aus.
In einigen Beispielen ist 115200 gesetzt. Die schliessen das aber auch an den USB Port an. Vielleicht ist die Baut Rate dort höher zu setzen.
4. Ich habe GPIO0 für die Steuerung des Datenflusses genommen. (flow_control_pin: GPIO0)


YAML:
substitutions:
  devicename: "growatt"
  friendly_name: "growatt"
  fixed_ip: "192.168.111.111"

# packages:
#   common: !include includes/common.yaml

esphome:
  name: "${devicename}"
  friendly_name: "${friendly_name}"

esp8266:
  #  board: d1_mini
  board: esp01_1m                    # <-------------  was gebe ich am besten für eine hardware vor ?

debug:
  update_interval: 5s

logger:
 level: DEBUG
 baud_rate: 0  

# Enable Home Assistant API
api:
  encryption:
    key: "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"

ota:
  - platform: esphome
    password: "xxxxxxxxxxxxxxxxxxxxxxxxxxx"

wifi:
  ssid: !secret wifi_ssid
  password: !secret wifi_password
  manual_ip:
    static_ip: 192.168.111.11
    gateway: 192.168.111.1
    subnet: 255.255.255.0
    dns1: 192.168.111.1

  # Enable fallback hotspot (captive portal) in case wifi connection fails
  ap:
    ssid: "growatt Fallback Hotspot"
    password: "xxxxxxxxxxxxxx"

web_server: # creates a web server where you can access all this stuff without home assistant (good for debugging or working headless (no HA))
  port: 80
  include_internal: true
  ota: true

time:
  - platform: homeassistant
    id: homeassistant_time

uart:
  id: mod_bus
  # tx_pin: D5                          # werkte niet op de standaard TX en RX pins (die schijnen al bezet te zijn)
  # rx_pin: D6                          # Funktioniert nicht mit den standardmäßigen TX- und RX-Pins (die Stifte müssen alle angeschlossen sein)
  baud_rate: 9600
  tx_pin: TX                   # GIPO1       aus der Anleitung ESPHome - Modbus Forum
  rx_pin: RX                   # GIPO3       <----  ist das so korrekt ? 
  # baud_rate: 115200

modbus:
  id: modbus1
  uart_id: mod_bus
  flow_control_pin: GPIO0         # <--- hier wird wohl der Datenfluss rein und raus gesteuert, also die umschaltung

modbus_controller:
  - id: growatt
    address: 0x1
    modbus_id: modbus1
    setup_priority: -10

switch:
  - platform: modbus_controller
    name: "${devicename} OnOff"
    address: 0
    register_type: holding

output:
# Blue Led
  - id: light_bl
    platform: gpio
    pin: GPIO16   # D0        # GPIO16
# Green Led
  - id: light_gr
    platform: gpio
    pin: GPIO14   # D5        # GPIO14
# Red Led
  - id: light_rd
    platform: gpio
    pin: GPIO12   # D6        # GPIO12

number:
  - platform: modbus_controller
    name: "${devicename} Max Output Power"
    address: 3
    value_type: U_WORD
    min_value: 0
    max_value: 100
    entity_category: config

select:
  - platform: modbus_controller
    id: powermode
    name: "${devicename} Power Mode"
    address: 121
    value_type: U_WORD
    optionsmap:
      "600": 6                  # MIC600
      "750": 7                  # MIC750
      "1000": 10                # MIC1000
      "1500": 15                # MIC1500
      "2000": 20                # MIC2000
    entity_category: config

Im Code sind meine Versuche auskommentiert. Es geht bis jetzt nicht.

Am TTL Adapter brennt dauerhaft eine rote LED.

Ich kann nen log von ESPHome hier rein stellen. Mir selbst sagt der Log zu wenig, ich kann das nicht wirklich zu Störungsbehebung nutzen.

Hat jemand ein Test Code, mit dem ich einfach nur sehen kann, dass die kommunikation mit der Growatt TTL485 funktioniert ?

kann ich den ESP8266 mittels USB Kabel an den Growatt USB Port anschliessen ? Dann geht das ja nicht wirklich über TTL485. Dafür könnte ich was fertiges aus dem Internet ausprobieren.
 
Ich habs jetzt. Ich lasse den Code oben drin, vielleicht kanns ja jemand gebrauchen.

Ich bin auf diesen Thread gestossen:
https://www.photovoltaikforum.com/thread/219277-growatt-sph-monitoring-mit-esphome/

Habe dann auch einen ESP32 genommen. Mittlerweile hab ich auch wo gelesen, dass ein ESP8266 keine Verbindung zu RS485 kann, jedenfalls nicht so einfach über die Tx und Rx Pins.

Ich habe den code überarbeitet, beim original Code werden zwei unterschiedliche Growatt Wechselrichter abgefragt. Bei mir ist jetzt nur noch der Mic 2000 drin.

Die Verdrahtung ist wie oben bei Bild RS485 Modul 2. zu beachten ist:
tx_pin: GPIO18 -> DI
rx_pin: GPIO19 -> RO
flow_control_pin: GPIO21 -> DE+ RE gebrückt


YAML:
esphome:
  name: growat32
  friendly_name: growat32

esp32:
  board: esp32dev
  framework:
    type: arduino

# Enable logging
logger:

# Enable Home Assistant API
api:
  encryption:
    key: "6lmxxxxxxxxxxxxxxxxxc1FlUeB70="

ota:
  - platform: esphome
    password: "ef8xxxxxxxxxxxxxxxxxx61a55d37"

wifi:
  ssid: !secret wifi_ssid
  password: !secret wifi_password
  manual_ip:
    static_ip: 192.168.111.111
    gateway: 192.168.111.1
    subnet: 255.255.255.0
    dns1: 192.168.111.1

  # Enable fallback hotspot (captive portal) in case wifi connection fails
  ap:
    ssid: "Growat32 Fallback Hotspot"
    password: "TWSKjxvZ0DQv"

captive_portal:

time:
  - platform: homeassistant
    id: homeassistant_time


# uart für Growatt MIC
uart:
  - id: modbus_uart_mic
    #baud_rate: 115200
    baud_rate: 9600
    tx_pin: GPIO18
    rx_pin: GPIO19
 

modbus:
  - id: modbus_mic1
    flow_control_pin: GPIO21
    uart_id: modbus_uart_mic

modbus_controller:
  - id: modbus_growatt_mic
    ## the Modbus device adds
    address: 0x1
    modbus_id: modbus_mic1
    setup_priority: -10
    update_interval: 5000ms

text_sensor:
  - platform: wifi_info
    ip_address:
      name: IP Address
    ssid:
      name: Connected SSID
    bssid:
      name: Connected BSSID
    mac_address:
      name: Mac Wifi Address
  
  - platform: template
    name: Uptime Human Readable
    id: uptime_human
    icon: mdi:clock-start
    update_interval: 10s

  - platform: version
    name: "ESPHome Version"

  - platform: modbus_controller
    modbus_controller_id: modbus_growatt_mic
    name: "Growatt MIC Firmware Version"
    address: 9
    register_count: 3
    register_type: holding
    #internal: true
    entity_category: diagnostic

  - platform: template
    name: "Growatt MIC Status"
    icon: mdi:eye
    entity_category: diagnostic
    lambda: |-
      if (id(status).state == 1) {
        return {"Normal"};
      } else if (id(status).state == 0)  {
        return {"Waiting"};
      } else {
        return {"Fault!"};
      }
# ------------------------------------------------------------------------------------#
sensor:

# ------------------------------------------------------------------------------------
  - platform: modbus_controller
    modbus_controller_id: modbus_growatt_mic
    name: "Growatt MIC status"
    address: 0
    register_type: "read"
    internal: true
    id: status

  - platform: modbus_controller
    modbus_controller_id: modbus_growatt_mic
    name: "Growatt MIC DcPower"
    address: 3005 #5
    register_type: "read"
    unit_of_measurement: W
    device_class: power
    icon: mdi:flash
    value_type: U_DWORD
    accuracy_decimals: 1
    filters:
    - multiply: 0.1
  
  - platform: modbus_controller
    modbus_controller_id: modbus_growatt_mic
    name: "Growatt MIC DcVoltage"
    address: 3003 #3
    register_type: "read"
    unit_of_measurement: V
    device_class: voltage
    icon: mdi:flash
    value_type: U_WORD
    accuracy_decimals: 1
    filters:
    - multiply: 0.1
  
  - platform: modbus_controller
    modbus_controller_id: modbus_growatt_mic
    name: "Growatt MIC DcInputCurrent"
    address: 3004 #4
    register_type: "read"
    unit_of_measurement: A
    device_class: current
    icon: mdi:flash
    value_type: U_WORD
    accuracy_decimals: 1
    filters:
    - multiply: 0.1

  - platform: modbus_controller
    modbus_controller_id: modbus_growatt_mic
    name: "Growatt MIC AcPower"
    address: 3023 #40
    register_type: "read"
    unit_of_measurement: W
    device_class: power
    icon: mdi:flash
    value_type: U_DWORD
    accuracy_decimals: 1
    filters:
    - multiply: 0.1

  - platform: modbus_controller
    modbus_controller_id: modbus_growatt_mic
    name: "Growatt MIC AcFrequency"
    address: 3025 #37
    register_type: "read"
    unit_of_measurement: Hz
    icon: mdi:flash
    value_type: U_WORD
    accuracy_decimals: 1
    filters:
    - multiply: 0.01
 
  - platform: modbus_controller
    modbus_controller_id: modbus_growatt_mic
    name: "Growatt MIC AcVoltage"
    address: 3026 #38
    register_type: "read"
    unit_of_measurement: V
    device_class: voltage
    icon: mdi:flash
    value_type: U_WORD
    accuracy_decimals: 1
    filters:
    - multiply: 0.1
 
  - platform: modbus_controller
    modbus_controller_id: modbus_growatt_mic
    name: "Growatt MIC AcOutputCurrent"
    address: 3027 #39
    register_type: "read"
    unit_of_measurement: A
    device_class: current
    icon: mdi:flash
    value_type: U_WORD
    accuracy_decimals: 1
    filters:
    - multiply: 0.1
 
  - platform: modbus_controller
    modbus_controller_id: modbus_growatt_mic
    name: "Growatt MIC AcPowerVA"
    address: 3028 #40
    register_type: "read"
    unit_of_measurement: VA
    icon: mdi:flash
    value_type: U_DWORD
    accuracy_decimals: 1
    filters:
    - multiply: 0.1
  
  - platform: modbus_controller
    modbus_controller_id: modbus_growatt_mic
    name: "Growatt MIC EnergyToday"
    address: 3049 #53
    register_type: "read"
    unit_of_measurement: kWh
    device_class: energy
    icon: mdi:flash
    value_type: U_DWORD
    accuracy_decimals: 1
    filters:
    - multiply: 0.1
  
  - platform: modbus_controller
    modbus_controller_id: modbus_growatt_mic
    name: "Growatt MIC EnergyTotal"
    address: 3051 #55
    register_type: "read"
    unit_of_measurement: kWh
    state_class: total_increasing
    device_class: energy
    icon: mdi:flash
    value_type: U_DWORD
    accuracy_decimals: 1
    filters:
    - multiply: 0.1

  
  - platform: modbus_controller
    modbus_controller_id: modbus_growatt_mic
    name: "Growatt MIC Temperature"
    address: 3093
    register_type: "read"
    unit_of_measurement: C
    device_class: temperature
    icon: mdi:thermometer
    value_type: U_WORD
    accuracy_decimals: 1
    filters:
    - multiply: 0.1

select:
  - platform: modbus_controller
    id: powermode
    modbus_controller_id: modbus_growatt_mic
    name: "Growatt MIC Power Mode"
    address: 121
    value_type: U_WORD
    optionsmap:
      "600": 6
      "750": 7
      "1000": 10
      "1500": 15
      "2000": 20
    entity_category: config

switch:
  - platform: modbus_controller
    modbus_controller_id: modbus_growatt_mic
    name: "Growatt MIC OnOff"
    address: 0
    register_type: holding
    bitmask: 1

  - platform: modbus_controller
    modbus_controller_id: modbus_growatt_mic
    name: "Growatt MIC Tracking Mode"
    address: 124
    register_type: holding
    bitmask: 1


  
number:
  - platform: modbus_controller
    modbus_controller_id: modbus_growatt_mic
    name: "Growatt MIC Max Output Power"
    address: 3
    value_type: U_WORD
    min_value: 0
    max_value: 100
    entity_category: config
 
Zuletzt bearbeitet:
Gerade weils mich sehr viel zeit gekostet hat, das hin zu bekommen, stelle ich das zur verfügung. Ich wollte auch nicht den originalen shine wifi stick umflashen, weil ich nix gefunden habe, dass man das wieder auf die alte originale firmware bekommen kann. Da der growatt ne rs485 schnittstelle hat, war es naheliegend, das darüber zu machen. Esp8266 und esp32 habe ich auf vorrat gebunkert.
Das war nicht einfach, weil ich direkt an die ttl schnittstelle gehe, nicht was auf den shine wifi stick flashe, der ja über den usb anschluss geht. Der esp8266 zickt böse rum, wenns um ttl 485 geht. Ich glaube, dass das iwie auch funktioniert, wenn man dem ding gut zuredet. Gibt ja auch Anleitungen dafür. Aber leider auch viel verschiedene esp8266 hardware, die sich marginal unterscheiden, aber gerade für diese Anwendung wichtig ist. Das ist mit esp32 wesentlich einfacher.
Ich bekomme viel hilfe, gebe was zurück, wenn ich kleines licht machen kann.
 

Zurzeit aktive Besucher

Keine Mitglieder online.

Letzte Anleitungen

Statistik des Forums

Themen
6.671
Beiträge
64.016
Mitglieder
6.929
Neuestes Mitglied
Ernst57
Zurück
Oben