Modbus Register für Fronius Symo 20.0-3-M

Moin aus dem sonnigen Norden,

ich würde gerne beim Symo 20.0-3-M die Spannung / Stromstärke / Leistung vom MPPT1 und MPPT2 via Modbus TCP auswerten. Leider sind die Werte nicht korrekt. Für mich ist das absolutes Neuland. Vielleicht hat jemand einen Tipp, was ich ändern sollte.

modbus:
  - name: "Symo Gen24 10.0 Plus"
    type: tcp
    host: "10.0.9.51"  # IP-Adresse des Symo Gen24 10.0 Plus Wechselrichters
    port: 502
    delay: 5
    timeout: 5
    sensors:
      - name: "Symo Gen24 10.0 Plus Einspeiselimit"
        slave: 1
        address: 40290  # Register für die Einspeiselimitierung
        input_type: holding
        unit_of_measurement: "%"
        data_type: uint16  # oder float, je nach Gerät und Modbus-Dokumentation
        scan_interval: 10
  - name: "Fronius Symo 20.0-3-M"
    type: tcp
    host: "10.0.9.52"  # IP-Adresse des Fronius Wechselrichters
    port: 502
    delay: 5
    timeout: 5
    sensors:
      - name: "Symo20 DC Strom MPPT1"
        slave: 1
        address: 40263  # Adresse für DC Strom (2_DCA) bei float
        input_type: holding
        unit_of_measurement: "A"
        data_type: int16
        scan_interval: 10

      - name: "Symo20 DC Spannung MPPT1"
        slave: 1
        address: 40264  # Adresse für DC Spannung (2_DCV)
        input_type: holding
        unit_of_measurement: "V"
        data_type: int16
        scan_interval: 10

      - name: "Symo20 DC Leistung MPPT1"
        slave: 1
        address: 40265  # Adresse für DC Leistung (2_DCW)
        input_type: holding
        unit_of_measurement: "W"
        data_type: int16
        scan_interval: 10

      - name: "Symo20 DC Strom MPPT2"
        slave: 1
        address: 40266  # Adresse für DC Strom des zweiten Eingangs, falls vorhanden
        input_type: holding
        unit_of_measurement: "A"
        data_type: int16
        scan_interval: 10

      - name: "Symo20 DC Spannung MPPT2"
        slave: 1
        address: 40267  # Adresse für DC Spannung des zweiten Eingangs, falls vorhanden
        input_type: holding
        unit_of_measurement: "V"
        data_type: int16
        scan_interval: 10

      - name: "Symo20 DC Leistung MPPT2"
        slave: 1
        address: 40268  # Adresse für DC Leistung des zweiten Eingangs, falls vorhanden
        input_type: holding
        unit_of_measurement: "W"
        data_type: int16
        scan_interval: 10
        
      - name: "Symo 20 Einspeiselimit"
        slave: 1
        address: 40290  # Register für die Einspeiselimitierung (anpassen, falls erforderlich)
        input_type: holding
        unit_of_measurement: "%"
        data_type: uint16  # Ändere dies ggf. in float, wenn erforderlich
        scan_interval: 10

Sind die Datentypen korrekt? Prüfe die mal mit der Docu

Ich habe sie auf uint16 geändert, allerdings sind scheinbar die Register falsch. Wie gesagt, für mich ist das absolutes Neuland. Ich habe bislang das hier gefunden:
MPPT

Verstehe ich das richtig, dass die Startadresse 40253 ist, dann kommen noch 40 dazu für den 2_DCA? Also müsste das Register dann 40293 sein für die Stromstärke? Das habe ich versucht, allerdings nur 0-Werte erhalten

Es wundert mich etwas das du so ganz ohne die üblichen “Scaling Faktoren” auskommst.

Was hast du am Wechselrichter bei Modbus eingestellt ? int+ sf?`

Falls ja wäre der Strom vom MPPT1 wohl eher auf Adresse
40272 und dessen Scaling Faktor auf 40255

Sprich den für dich realistischen Wert bekommst du dann mittels Template in der form
40262 * 10 ** 40255 (auf deutsch) Grundwert * 10 hoch Skalierungsfaktor.

oder als beispiel
der Wert an Adress 40262 ist 62480, der an Addresse 40255 ist -4
==> 62480*10^-4 = 5.2186 A

Ohaaaa, das ist ja nicht mal so einfach.

Woher nimmst du die Adresse 40272 und den dazu gehörigen Scaling Faktor 40255?

Den Rest glaube ich soweit verstanden zu haben.

Und noch eine Frage dazu. Würde es hilfreich sein, auf “float” umzustellen? Wäre das einfacher?

Die Registernummern sind halt andere, das mit den scaling_factoren ist immer so bei Fronius, darum wirst du nicht umhin kommen.
Hab den Offset jetzt grad nicht im Kopf.

Wobei du schreibst oben Symo 20 und hast ein Dokument bzw. YAML vom Gen24 10 … .das könnte beim 20er natürlich anders sein hab ich jetzt nicht geschaut, glaub es aber kaum denn auch Fronius folgt der sunssf Spezifikation.

Das eine bezieht sich auf den Gen24 10.0 (wollte dort die Drosselung auslesen), die weiteren Werte auf den Symo 20.0. Ich versuche mich da mal weiter reinzulesen.

Ist 10^-4 nichts anderes als das Komma 4 Stellen nach links zu schieben? Müsste das Ergebnis bei 6248010^-4 nicht 6,2480 sein?

Zuletzt habe ich das mit scale: 0.0001 umgesetzt. Allerdings sind die Werte = die Register falsch. Hat jemand die richtigen für MPPT1 und MPPT2 jeweils für DC Spannung, Strom und Leistung bei einem Symo 20?

:crayon:by HarryP: Zusammenführung Doppelpost (bei Änderungen oder hinzufügen von Inhalten bitte die „Bearbeitungsfunktion“ anstatt „Antworten“ zu nutzen)

Ja

Ja hatte ich auch bis ich im Fronius dokument dann über folgenden Hinweis gestolpert bin.

A_SF = auto scaled on A, AphA, AphV, AphC und ja normalerweise sind SFs laut SunSpac statisch, aber wie oft bestätigt sich das es Ausnahmen von der Regel gibt. Deshalb rechne ich dann eher weniger gern im Kopf und baue eine scale ein wenn ich den Wert ohnehin aus einem Register entnehmen kann der im Register steht ist logischerweise in jedem Fall der Richtige.
Beim Schreiben in das Register müsste ich sonst auch wiederum dran denken das ich den Wert den ich schreiben will skalieren muss.

Sollte du deine PM nicht gelesen haben, im Fronius Dokument 42.0410.2649.pdf, betitelt ‘Fronius GEN24 Modbus TCP & RTU’ findest du den Link http://www.fronius.com/QR-link/0024 und bekommst ne ZIP mit den diversen Exceltapeten aller Register und aller WR.
Die Register der SYMOs sind aber immer identisch was halt auch der SunSpec konform ist. (Und wie schon gesagt Fronius zählt Register von 1-x, Home Assistant von 0-x, du musst also in Home Assistant immer 1s abziehen.

1 „Gefällt mir“

Ich wollte mich einmal bedanken für die tolle Hilfe. Es läuft jetzt soweit alles, war allerdings ein sehr weiter Weg für mich.

Feststellen musste ich, dass es in der Statistik / Diagrammen immer Spitzen gab, die wohl von einer Umstellung des Scale Factors kamen. Die Werte waren um den Faktor 10 oder sogar 100 verschoben (z.B. ca. 60.000W). Ich habe nun noch eine Bedingung reingeschrieben, die unrealistische Werte rausfiltern soll. Das Ergebnis teile ich gerne für andere, die vielleicht das gleiche Problem hatten:

modbus:
        
  - name: "Fronius Symo 20.0-3-M"
    type: tcp
    host: "10.0.9.52"  # IP-Adresse des Fronius Symo 20 Wechselrichters
    port: 502
    delay: 5
    timeout: 5
    sensors:
      - name: "Symo20 DCA_SF"
        slave: 1
        address: 40255  # Skalierungsfaktor für Strom
        input_type: holding
        unit_of_measurement: ""
        data_type: int16
        scan_interval: 10

      - name: "Symo20 DCV_SF"
        slave: 1
        address: 40256  # Skalierungsfaktor für Spannung
        input_type: holding
        unit_of_measurement: ""
        data_type: int16
        scan_interval: 10

      - name: "Symo20 DCW_SF"
        slave: 1
        address: 40257  # Skalierungsfaktor für Leistung
        input_type: holding
        unit_of_measurement: ""
        data_type: int16
        scan_interval: 10    

      - name: "Symo20 DC Strom MPPT1 RAW"
        slave: 1
        address: 40272  # 40272 Adresse für DC Strom (2_DCA) 
        input_type: holding
        unit_of_measurement: "A"
        data_type: uint16
        scan_interval: 10

      - name: "Symo20 DC Spannung MPPT1 RAW"
        slave: 1
        address: 40273  # 40273 Adresse für DC Spannung (2_DCV)
        input_type: holding
        unit_of_measurement: "V"
        data_type: uint16
        scan_interval: 10

      - name: "Symo20 DC Leistung MPPT1 RAW"
        slave: 1
        address: 40274  # 40274 Adresse für DC Leistung (2_DCW)
        input_type: holding
        unit_of_measurement: "W"
        data_type: uint16
        scan_interval: 10

      - name: "Symo20 DC Strom MPPT2 RAW"
        slave: 1
        address: 40292  # 40292 Adresse für DC Strom des zweiten Eingangs
        input_type: holding
        unit_of_measurement: "A"
        data_type: uint16
        scan_interval: 10


      - name: "Symo20 DC Spannung MPPT2 RAW"
        slave: 1
        address: 40293  # 40293 Adresse für DC Spannung des zweiten Eingangs
        input_type: holding
        unit_of_measurement: "V"
        data_type: uint16
        scan_interval: 10

      - name: "Symo20 DC Leistung MPPT2 RAW"
        slave: 1
        address: 40294  # 40294 Adresse für DC Leistung des zweiten Eingangs
        input_type: holding
        unit_of_measurement: "W"
        data_type: uint16
        scan_interval: 10
template:
  - sensor:
      - name: "Symo20 DC Strom MPPT1"
        unique_id: symo20_dc_strom_mppt1
        unit_of_measurement: "A"
        state_class: measurement
        device_class: current
        state: >
          {% set raw_value = states('sensor.symo20_dc_strom_mppt1_raw') | float(0) %}
          {% set scale_factor = states('sensor.symo20_dca_sf') | float(0) %}
          {% set current = raw_value * (10 ** scale_factor) %}
          {% if current > 30 or current < 0 %}
            unavailable
          {% else %}
            {{ current }}
          {% endif %}

      - name: "Symo20 DC Spannung MPPT1"
        unique_id: symo20_dc_spannung_mppt1
        unit_of_measurement: "V"
        state_class: measurement
        device_class: voltage
        state: >
          {% set raw_value = states('sensor.symo20_dc_spannung_mppt1_raw') | float(0) %}
          {% set scale_factor = states('sensor.symo20_dcv_sf') | float(0) %}
          {% set voltage = raw_value * (10 ** scale_factor) %}
          {% if voltage > 1000 or voltage < 0 %}
            unavailable
          {% else %}
            {{ voltage }}
          {% endif %}

      - name: "Symo20 DC Leistung MPPT1"
        unique_id: symo20_dc_leistung_mppt1
        unit_of_measurement: "W"
        state_class: measurement
        device_class: power
        state: >
          {% set raw_value = states('sensor.symo20_dc_leistung_mppt1_raw') | float(0) %}
          {% set scale_factor = states('sensor.symo20_dcw_sf') | float(0) %}
          {% set power = raw_value * (10 ** scale_factor) %}
          {% if power > 20000 or power < 0 %}
            unavailable
          {% else %}
            {{ power }}
          {% endif %}

      - name: "Symo20 DC Strom MPPT2"
        unique_id: symo20_dc_strom_mppt2
        unit_of_measurement: "A"
        state_class: measurement
        device_class: current
        state: >
          {% set raw_value = states('sensor.symo20_dc_strom_mppt2_raw') | float(0) %}
          {% set scale_factor = states('sensor.symo20_dca_sf') | float(0) %}
          {% set current = raw_value * (10 ** scale_factor) %}
          {% if current > 30 or current < 0 %}
            unavailable
          {% else %}
            {{ current }}
          {% endif %}

      - name: "Symo20 DC Spannung MPPT2"
        unique_id: symo20_dc_spannung_mppt2
        unit_of_measurement: "V"
        state_class: measurement
        device_class: voltage
        state: >
          {% set raw_value = states('sensor.symo20_dc_spannung_mppt2_raw') | float(0) %}
          {% set scale_factor = states('sensor.symo20_dcv_sf') | float(0) %}
          {% set voltage = raw_value * (10 ** scale_factor) %}
          {% if voltage > 1000 or voltage < 0 %}
            unavailable
          {% else %}
            {{ voltage }}
          {% endif %}

      - name: "Symo20 DC Leistung MPPT2"
        unique_id: symo20_dc_leistung_mppt2
        unit_of_measurement: "W"
        state_class: measurement
        device_class: power
        state: >
          {% set raw_value = states('sensor.symo20_dc_leistung_mppt2_raw') | float(0) %}
          {% set scale_factor = states('sensor.symo20_dcw_sf') | float(0) %}
          {% set power = raw_value * (10 ** scale_factor) %}
          {% if power > 20000 or power < 0 %}
            unavailable
          {% else %}
            {{ power }}
          {% endif %}

Ich hab mich heute mit dem gleichen Thema befasst, der Thread passt gerade perfekt :slight_smile: Ich bin noch recht neu in HAS, ich habe mich an der Modbus Geschichte vorher mit IP Symcon versucht.
Ich hab mir dein Lösung einfach mal kopiert, das war dann auch gleichzeitig mein erster Versuch mit Templates.
Aber irgendwas funktioniert noch nicht richtig. Aus dem Template raus müssten jetzt doch eigentlich Sensor Entitäten angelegt werden, die erscheinen aber nicht. Ich sehe nur die “Raw” Entitäten, die kommen ja aber aus der Modbus Konfiguration. Was könnte hier schief laufen? YAML Konfiguration ist erfolgreich geprüft und HAS neu gestartet.

Viele Grüße

Wenn du die Lösung kopiert hast
dann hast du 2 Abschnitte kopiert.
Die mit
modbus:
[ … ]
und auch die mit
template:
[ … ]
und in letzterer wird auch aus den raw Werten mit dem jeweiligen scaling factor dann der lesbare Wert.

oder?

Du könntest eine fixen scale_factor auch direkt in den modbus sensoren eintragen, allerdings hat das 2 Nachteile.

  1. kann ein scale faktor auch dynamisch sein, und im modbus kannst du nur statische Skalierungsfaktoren eingeben.
  2. kann es ja sein das du ein Register auch mal beschreiben willst, da ist es natürlich schön wenn man den echten Registerwert unskaliert kennt, und damit arbeitetn, da muss man dann beim Schreiben von Registern nicht erneut dran dran denken das man vor dem Schreiben wiederum skalieren müsste

Update:

Es liegt wohl daran wie ich das template in die configuration.yaml eingebunden habe. Wenn ich das komplette template hier direkt einfüge funktionert es. Es scheint also an dem !include_dir_merge zu liegen. Ich habe jetzt die template yaml direkt mit !include eingebunden und jetzt funktioniert es.

Genau, ich habe modbus und template in die configuration ergänzt:

modbus: !include modbus.yaml
template: !include_dir_merge_named templates/

Dann modbus.yaml erstellt mit ein paar Anpassungen der Namen auf Symo08

  - name: "Fronius Symo 8.0-3-M"
    type: tcp
    host: "192.168.0.5"  # IP-Adresse des Fronius Symo 20 Wechselrichters
    port: 502
    delay: 5
    timeout: 5
    sensors:
      - name: "Symo08 DCA_SF"
        slave: 1
        address: 40255  # Skalierungsfaktor für Strom
        input_type: holding
        unit_of_measurement: ""
        data_type: int16
        scan_interval: 10

      - name: "Symo08 DCV_SF"
        slave: 1
        address: 40256  # Skalierungsfaktor für Spannung
        input_type: holding
        unit_of_measurement: ""
        data_type: int16
        scan_interval: 10

      - name: "Symo08 DCW_SF"
        slave: 1
        address: 40257  # Skalierungsfaktor für Leistung
        input_type: holding
        unit_of_measurement: ""
        data_type: int16
        scan_interval: 10    

      - name: "Symo08 DC Strom MPPT1 RAW"
        slave: 1
        address: 40272  # 40272 Adresse für DC Strom (2_DCA) 
        input_type: holding
        unit_of_measurement: "A"
        data_type: uint16
        scan_interval: 10

      - name: "Symo08 DC Spannung MPPT1 RAW"
        slave: 1
        address: 40273  # 40273 Adresse für DC Spannung (2_DCV)
        input_type: holding
        unit_of_measurement: "V"
        data_type: uint16
        scan_interval: 10

      - name: "Symo08 DC Leistung MPPT1 RAW"
        slave: 1
        address: 40274  # 40274 Adresse für DC Leistung (2_DCW)
        input_type: holding
        unit_of_measurement: "W"
        data_type: uint16
        scan_interval: 10

      - name: "Symo08 DC Strom MPPT2 RAW"
        slave: 1
        address: 40292  # 40292 Adresse für DC Strom des zweiten Eingangs
        input_type: holding
        unit_of_measurement: "A"
        data_type: uint16
        scan_interval: 10


      - name: "Symo08 DC Spannung MPPT2 RAW"
        slave: 1
        address: 40293  # 40293 Adresse für DC Spannung des zweiten Eingangs
        input_type: holding
        unit_of_measurement: "V"
        data_type: uint16
        scan_interval: 10

      - name: "Symo08 DC Leistung MPPT2 RAW"
        slave: 1
        address: 40294  # 40294 Adresse für DC Leistung des zweiten Eingangs
        input_type: holding
        unit_of_measurement: "W"
        data_type: uint16
        scan_interval: 10

Dann eine template_fronius.yaml im Ordner /templates erstellt. Hier habe ich auch Namen angepasst und statt “unavailable” schreibe ich “0” auf die states bei der Skalierung.

  - sensor:
      - name: "Symo08 DC Strom MPPT1"
        unique_id: symo08_dc_strom_mppt1
        unit_of_measurement: "A"
        state_class: measurement
        device_class: current
        state: >
          {% set raw_value = states('sensor.symo08_dc_strom_mppt1_raw') | float(0) %}
          {% set scale_factor = states('sensor.symo08_dca_sf') | float(0) %}
          {% set current = raw_value * (10 ** scale_factor) %}
          {% if current > 30 or current < 0 %}
            0
          {% else %}
            {{ current }}
          {% endif %}

      - name: "Symo08 DC Spannung MPPT1"
        unique_id: symo08_dc_spannung_mppt1
        unit_of_measurement: "V"
        state_class: measurement
        device_class: voltage
        state: >
          {% set raw_value = states('sensor.symo08_dc_spannung_mppt1_raw') | float(0) %}
          {% set scale_factor = states('sensor.symo08_dcv_sf') | float(0) %}
          {% set voltage = raw_value * (10 ** scale_factor) %}
          {% if voltage > 1000 or voltage < 0 %}
            0
          {% else %}
            {{ voltage }}
          {% endif %}

      - name: "Symo08 DC Leistung MPPT1"
        unique_id: symo08_dc_leistung_mppt1
        unit_of_measurement: "W"
        state_class: measurement
        device_class: power
        state: >
          {% set raw_value = states('sensor.symo08_dc_leistung_mppt1_raw') | float(0) %}
          {% set scale_factor = states('sensor.symo08_dcw_sf') | float(0) %}
          {% set power = raw_value * (10 ** scale_factor) %}
          {% if power > 20000 or power < 0 %}
            0
          {% else %}
            {{ power }}
          {% endif %}

      - name: "Symo08 DC Strom MPPT2"
        unique_id: symo08_dc_strom_mppt2
        unit_of_measurement: "A"
        state_class: measurement
        device_class: current
        state: >
          {% set raw_value = states('sensor.symo08_dc_strom_mppt2_raw') | float(0) %}
          {% set scale_factor = states('sensor.symo08_dca_sf') | float(0) %}
          {% set current = raw_value * (10 ** scale_factor) %}
          {% if current > 30 or current < 0 %}
            0
          {% else %}
            {{ current }}
          {% endif %}

      - name: "Symo08 DC Spannung MPPT2"
        unique_id: symo08_dc_spannung_mppt2
        unit_of_measurement: "V"
        state_class: measurement
        device_class: voltage
        state: >
          {% set raw_value = states('sensor.symo08_dc_spannung_mppt2_raw') | float(0) %}
          {% set scale_factor = states('sensor.symo08_dcv_sf') | float(0) %}
          {% set voltage = raw_value * (10 ** scale_factor) %}
          {% if voltage > 1000 or voltage < 0 %}
            0
          {% else %}
            {{ voltage }}
          {% endif %}

      - name: "Symo08 DC Leistung MPPT2"
        unique_id: symo08_dc_leistung_mppt2
        unit_of_measurement: "W"
        state_class: measurement
        device_class: power
        state: >
          {% set raw_value = states('sensor.symo08_dc_leistung_mppt2_raw') | float(0) %}
          {% set scale_factor = states('sensor.symo08_dcw_sf') | float(0) %}
          {% set power = raw_value * (10 ** scale_factor) %}
          {% if power > 20000 or power < 0 %}
            0
          {% else %}
            {{ power }}
          {% endif %}

Es werden aber nur folgende Entitäten erstellt:

Also ich hab gerade mal Teile des Templates geprüft im Template Editor. Vom Prinzip funktioniert es, es werden tatsächlich nur die Sensoren aus dem Template nicht angelegt.

:crayon:by HarryP: Zusammenführung Doppelpost (bei Änderungen oder hinzufügen von Inhalten bitte die „Bearbeitungsfunktion“ anstatt „Antworten“ zu nutzen)

Guten Morgen,

habt ihr schon eine Lösung für die Peaks wenn die Scale-Faktoren umgestellt werden? Ich habe teilweise für einen kurzen Moment 60.000W Erzeugung. Diese Spitzen würde ich ja super gerne raushaben wollen. Ich habe schon versucht mit einem Filter zu arbeiten, aber damit habe ich es nur geschafft, solche unrealistischen Werte rauszubekommen. Wenn durch die Skalierung nach Sonnenuntergang ein Wert von z.B. 600W errechnet wird, dann würde dieser tatsächlich auftauchen…

Hier zwei Beispiele:


Moin zusammen,

bislang hat ja noch niemand verraten, dass es auch einfacher geht. Deswegen wollte ich das mal kurz loswerden.

Durch Zufall bin ich auf die Sunspec Integration gestoßen und konnte dort alle drei Wechselrichter einrichten und bekomme korrekte Werte gezeigt.

Das Laden kann man aber nicht mit modbus steuern Gen 24 Plus 10.o mit BYD Batterie.

Die Register nehmen keine Befehle an. Deine Tabelle war sehr hilfreich. Danke!

Den Satz versteh ich nicht. Mal kurz überlegt und probiert … also hier geht’s noch wie schon seite Jahren .. wäre ja auch total doof wenn nicht, dann müsste ich ja wieder vom Fronius die unsägliche Laderegelung benutzen.

WR auf Int+SF einstellt und modbus aktiviert.
Und die modbus Integration in HA installiert.

Entwicklerwerkzeige>Aktionen
Server und hub sind immer gleich.
Server ist ne 1 (kleiner 1 geht ja nicht) und Hub ist der Name den du beim Installieren der modbus Integration gewählt hast. also der Name der zur IP deines WR gehört.
Adresse halt die richtige Adresse die du beschreiben willst, Doku gibt’s bei Fronius
Und wert ja nu ein gültiger Wert.

Da es grad nach Sonnenuntergang ist du und ja im SolarWEB bestimmt sehen kannst das deine Batterie gerade entladen wird.

Adresse: 40348 (genannt storctl_mod) und Wert mal auf 2 (Entladen einfrieren, Laden egal)
Adresse: 40355 (genannt outWRte) und Wert mal auf 0 (also nix Entladen)
Da eingefroren sollte dir solarweb nach den 2 Aktionen mit etwas Verzögerung anzeigen das nix mehr entladen wird. Schrecklich.
Und weil das über Nacht blöd ist, stellen wir das schnell wieder zurück mit:
Adresse: 40348 und Wert 0, damit der Fronius sich wieder ums Laden und Entladen kümmert. also weder das Laden noch das Entladen von dir eingefroren ist.

Und siehe da obwohl outWRte noch auf 0W steht entlädt der Speicher so du denn was verbrauchst und was im Speicher ist. Wäre ja auch sonst blöd.

Und diese Dinge die du in Entwicklerwerkzeuge>Aktionen machen kannst, kannst du dir natürlich auch in irgendwelche Schieberegler, Buttons, scripte, Automationen oder sonst was basteln.

Wenn du mit einem Fronius das Laden & Entladen steuern willst dann solltest du erstmal dieses Bild verinnerlichen.

Und wenn das begriffen hast (es gibt dazu auch Doku von Fronius) dann klappt es auch. Du musst verstehen das es nicht nur positive charge limitis gibt’s zum Laden (also von der PV) sondern ein negatives discharge Limit ist halt am Ende auch ne art doppelte Verneinung denn negative entladen bezeichnet man üblicherweise auch als laden. :slight_smile:

Es gibt dazu Doku von Fronius wie zu inWRte und outWRte in welchen Grenzen setzen musst damit das passiert was du möchtest und ganz wichtig ist dabei auch immer den storctl_mod richtig zu setzen.

1 „Gefällt mir“

Mein liebe:r justone,

ganz herzlichen Dank für diese ausführliche Antwort!

Was habe ich getan?
chatGPT um Hilfe gebeten: diese Entität hat mir die modbus Integration für die YAML Configuration geschrieben. Soweit so gut. Über “Register schreiben” in HA habe ich versucht, unterschiedliche Adressen zu erreichen. War ja auch immer ein grüner Haken. Write Befehle haben nicht funktioniert nur read Befehle. Das habe ich mit mbpoll überprüft.
Main Ansinnen war eine Nachtautomation zu erstellen, die unter 15% und unter einem Wert pro kWh zwischen 00:00 und 06:00 Uhr anspringt und die Batterie lädt.

In Fronius habe ich die Kommunikation modbus aktiviert mit Int+SF und Steuerung erlauben.
Beim besten Willen habe ich keine DoKu von Fronius gefunden.

Da es nicht funktioniert hat, habe ich YAML config wieder bereinigt.

In Fronius habe ich den neuen Energiekosten-Manager aktiviert und dem Gerät mitgeteilt. dass zwischen 04:00 und 06:00 Uhr geladen werden darf.

Ich habe recht überhaupt keinen Plan, wie ich jetzt weiter vorgehen soll.

HA 2025.09.3 - alle Fronius Produkte sind auf dem neuesten Software Stand.
Fronius WR Gen 24 10.0 + BYD Battery PACK HV 10,4 kW.

Könntest Du mir weiterhelfen?

Ja KI ist ne tolle Sache, wenn man sich mit YAML auskennt erkennt man auch direkt an welchen Stelle die falsch abgebogen ist, dann korrigiert man die und schon klappt es.
Dazu müsste man aber ein wenig fit in YAML sein, das ne KI fehlerfreien Code liefert halte ich nach wie vor für ein Gerücht. Ja bei sehr einfachen Dingen klappt das aber wenns komplexer wird eher nicht.

Ok, also erstmal solltest du das “ganz hinten” anstellen, und zwar bis zu dem Punkt an dem du dir sicher bist das du Register mit den gewünschten Werten auch beschreiben kannst. Solange der Punkt nicht geklärt ist, ist es sinnbefreit sich Gedanken zu machen was man denn alles gerne tun würde wenn das funktoinieren würde.

Aber CharGPT hast du gefunden? Wie das?
Man tippt in google “fronius.com” ein und auf der Website auf der man landet “modbus” im Suchfeld und landet hier:
Search & Find - Fronius
Und verdampt wenn man das größte Download anklickt bekommt man eine ZIP Datei mit mehr als ner Handvoll EXCEL Dokumenten die alles auflisten.
Und sogar richtig bekannt so das man auch die für den Wechselrichter nehmen kann und die bei der dieser Wechselrichter auf INT&SF konfiguriert ist, als nimm das mit ROW (Rest Of World) und incl. Storage dann bist du richtig.

Was du jetzt wissen musst (und das ist nicht so direkt ersichtlich). Du kennst den Unterschied wie Menschen zählen, richtig? Der Handwerker zählt wenn er dir 4 Steckdosen verkauft von Steckdose1 bis 4. Der IT’ler zählt wenn er ne Schleife über 4 Objekte macht aber von 0 bis 3. Sind ja auch 4. Und das gilt es zu beachten, sprich steht in der Fronius Doku z.B.
Register 40349 wäre STorCtl_Mod … dann musst du in Home Assistant trotzdem mit Addresse 40348 arbeiten.

Als nächstes musst du verstehen wie du die Kombination aus storctl_mod, inwrte und outwrte benutzt und wozu.
Also wieder google ist dein freund und nach “fronius modbus inwrte und outwrte” suchen.
Du solltest unter anderem einen Treffer bekommen der mit “Modbus TCP und RDP” betitelt ist und in dem dann was von " Die Manipulation der Register InWRte , OutWRte und StorCtl_Mod führt zu. Änderungen des Batteriestatus in Fronius Solar.web, zum Beispiel „Erzwungene." steht.
Also draufgeklickt und das Dokument 42.0410.2649.pdf runtergeladen und dort mal in den Abschnitt “Basic Storage Control Model (124)” geschaut.

Viel Besser hätte man nun beides, a) die modbus Adressen und b) wie man sie nutzt nicht dokumentieren können denke ich mal.

Also, ja ich helfe gern, aber nicht in dem ich dir ne fertige Lösung poste, sondern in dem ich dir versuche zu erklären wie es funktiniert und was du tun musst. Wenn du damit leben kannst gut.

Versuche also bitte erstmal den Schritt von gestern.
Also ob du mit den Eintwicklerwerkzeuge>Aktion überhaupt ein Register schreiben kannst.
Wenn das klappt gehts weiter.
Und nachdem du gelernt hast wie google funktioniert also so das man nicht nur beim suchen endet sondern auch beim finden :slight_smile:
PS: und ja man findet 1000 andere Dinge, musst du mir nicht erzählen. ich hab’s eben auch nicht auf die ersten 3 Suchanfragen gefunden.

1 „Gefällt mir“

Das klappt natürlich nicht, weil ich die modbus Integration entfernt habe.

Dort habe ich allerhand Anleitungen gefunden und runtergeladen und gerade gelesen. Jetzt ist der Zeitpunkt, wo ich meine Bitte um Hilfe zurückziehe! Ich bin genau der Verkäufer der Dir 4 Klo’s verkauft: Und das verstehe ich gerade noch; Dreisatz und so …

In meinem langen Leben muss ich nur wissen, dass es digitale Assistenten gibt, die’s nicht drauf haben. Und, dass Du IT beherrscht und ich verkaufen kann.

An dieser Stelle hier breche ich ab und nutze einfach den Energiekosten - Assistenten von Fronius, den ich zwar schon eingeschaltet hatte; aber durch Deinen Ansatz habe ich eine Anleitung dafür gefunden.

Einen schönen Tag noch und danke für Deinen Auftrag.