GROWATT NOAH 2000 Erfahrungen?

Das ist natürlich eine eigene Automation. Ab 11:00 würd der Soc geprüft und sobald Soc über 20 geht es auf 10 über 25 dann auf 15. Am Abend stoppt dann die Entladung bei 15.
Bei mir hier ist es zur Zeit Morgens oft Recht neblig, daher die Recht große Reserve.

Sorry, aber ich kann mir da irgendwie nix sinnvolles draus herleiten, was das bezweckt. Vielleicht erkenne ich es auch nur nicht.

Hier noch die Automation die den MinSoc wieder nach oben holt.

alias: NOAH 2000 Min SOC Nachmittag
description: ""
triggers:
  - trigger: numeric_state
    entity_id:
      - sensor.noah_2000_soc
    above: 21
  - trigger: state
    entity_id:
      - sensor.noah_2000_soc
conditions:
  - condition: numeric_state
    entity_id: number.noah_2000_discharge_limit
    below: 15
  - condition: or
    conditions:
      - condition: and
        conditions:
          - condition: time
            after: "09:30:00"
            before: "20:00:00"
          - condition: numeric_state
            entity_id: sensor.noah_2000_soc
            above: 16
          - condition: template
            value_template: >-
              {{ (int(states('number.noah_2000_discharge_limit'),default=15) <
              10 and int(states('sensor.noah_2000_soc'),default=15) > 16) or 

              (int(states('number.noah_2000_discharge_limit'),default=15) > 10
              and int(states('sensor.noah_2000_soc'),default=15) > 21) }} 
      - condition: sun
        after: sunset
actions:
  - action: number.set_value
    metadata: {}
    target:
      entity_id: number.noah_2000_discharge_limit
    data:
      value: >-
        {% if int(states('number.noah_2000_discharge_limit'),default=15) < 10 %}
        {{ 10 }}  {% else %} {{ 15 }} {% endif %}
  - delay:
      hours: 0
      minutes: 1
      seconds: 30
    enabled: true
  - if:
      - condition: numeric_state
        entity_id: number.noah_2000_discharge_limit
        below: 15
    then:
      - action: number.set_value
        metadata: {}
        target:
          entity_id: number.noah_2000_discharge_limit
        data:
          value: " {% if int(states('number.noah_2000_discharge_limit'),default=15) < 10 %} {{     10 }}  {% else %} {{ 15 }} {% endif %}"
        enabled: true
mode: single

Die eigentliche Verbrauchssteuerung kann ich in aktueller Version auch gern noch mal Posten.
Die besteht aus einem Templatesensor und einer weiteren Automation.
Der Templatesensor berücksichtigt Verbrauch, PV Leistung, Vorhersage Ertrag. Ist aber vielleicht eher etwas für einen eigenen Thread.. oder auch PN

Ich schon :smiley: darum ist es ja so wie es ist..
Aber im Ernst, in erster Linie entschärft es das irrewitzige Verhalten beim Heizen. Wenn er heizt macht er normal gar nichts, also bis 5 Grad gar nichts, bis er die 11 Grad erreicht hat seltsame Sachen.
Mit meiner Soc Änderung entlädt er die Reserve. Ab einer PV Leistung über 75 Watt heizt er nebenbei, die zusätzlichen 5 % die er danach aufladen würde entfallen damit auch. In Summe arbeitet er in der knappen Stunde die das minimal dauert also sinnvoll, statt gar nicht.
In den über 2 Monaten wo ich das so in Betrieb habe hat sich das für mich bewährt. Andere müssen das ja nicht übernehmen.

Selbst wenn er nicht heizen muss im Sommer, starte ich mit fast leeren Speicher in den Tag, ohne Risiko einer Tiefentladung.

Servus,

ich hab den APsystems EZ1-M dran.

Was macht er davor unter 75 Watt?

Was macht er in dieser Stunde, Laden, oder Bypass ?
Sorry, aber ich erkenne es einfach nicht, was da jetzt besser ist.

Sorry. Das musst du dir schon selbst beantworten.

Ich zitiere mal von einem GitHub Projekt welches auch mit dem Thema Solar beschäftigt ist:

If you don't have the willingness to tinker and learn... TURN BACK!

Ich teile gern, aber nur mit interessierten Personen. Auf Diskussionen habe ich keine Lust. Wie schon oben geschrieben, probieren, wenn es funktioniert dann Freuen und bestenfalls Danke sagen und wenn nicht löschen und fertig!

Tut mir Leid, ich wollte nicht dagegen diskutieren. Ich wollte eigentlich nur verstehen was das Script genau macht.
Aber egal.

Das hatte ich doch zur genüge beantwortet und so schwer zu lesen ist es ja auch nicht. Jedenfalls wenn man sich mit Ha auskennt. Hoffe es hilft wenigstens anderen.

Ist die Growatt API bei euch auch hinüber? Kann mich an der App nicht einloggen.

Und kann man über die Website irgendwie einstellen was er einspeisen soll? Steht bei mir gerade auf 200 Watt und die Sonne scheint … sehr ärgerlich.

Bei mir geht die App

Die haben mal wieder meine IP geblockt …

Selbe auch bei mir :confused:

Ich habe gerade eine neue Firmware (08.09.05.4008) bekommen. Mal sehen, was da Schoenes drin steckt :slight_smile:

Update: Sorry, da hatte sich wohl nur die App "verschluckt". Die Version gibt es anscheinend schon laenger.

An die Leute die 4 Paneele an dem Noah2000 hängen haben. Habt ihr diese Parallel oder in Reihe dran?

Die Automatisierung der Verbrauchssteuerung würde mich sehr interessieren! Wenn es nicht zu viel mühe macht lass sie mir bitte einmal zukommen!

Nur parallel! Reihe geht nicht

1 „Gefällt mir“

Moin,
nachdem ich gestern das erste mal den "negativen" Effekt des herunterdrosseln der PV-Module bei vollem Akku erlebt habe und heute morgen die Automationen von @entre13 erfolgreich testen konnte, wäre ich ebenfalls an der Verbrauchssteuerung interessiert.
Ich habe generell eine hohe Grundlast. Daher Zielsetzung den Akku nur laden wenn mehr als 800W erzeugt, bzw. der aktuelle Verbrauch kleiner als aktueller Verbrauch (geht wohl den meisten so).

Hallo ihr 2, da ich im Moment wenig Zeit haben würde ich euch zuerst mal ins photovoltaik Forum (Noah Nulleinspeisung) schicken, dort hatte ich am 6. Februar eine Vorversion ( #163 ) gepostet. Der Nick dort ist ein anderer, aber dahinter ist die gleiche Person :slight_smile:

Inzwischen habe ich einiges erweitert / korrigiert aber im Groben sind dort schon mal einige Sachen beschrieben, warum und wie.. Wichtigste Änderungen sind seitdem Forecast auswerten und auf meine Bedürfnisse zurechtrechnen und (wohl das wichtigste) PV + Verbrauch mit Statistiksensoren (Mittelwert PV 15min und Minimalwert Verbrauch 4 Minuten) zu glätten, da nicht bekannt ist wie viele Schreibzyklen der Noah verkraftet.

Komme frühestens am WE dazu, nochmal einen relativ sinnvollen Post zu verfassen.
Durchdachte Fragen dazu ferne per PN.

Ergänzung, warum ist die ganze Berechnung in einem Template Sensor? --> Ganz einfach weil so der Code im Template Editor viel leichter zu testen ist, wie in einer Automation

Sensor ohne Erklärung!!

{% set h = now().hour %}
{% set m = now().month %}
{% set wr_max = 500 %}
{% set wr_min = 75 %}

{## weather factor calculate ##}
{%- set ns = namespace() %}
{%- set ns.forecast_factor = 1 %}
{% for state in states.weather %}
  {% if state.state == "partlycloudy" %} {% set ns.forecast_factor = 0.8 %} 
  {% elif state.state == "sunny" %} {% set ns.forecast_factor = 0.9 %}
  {% else %} {% set ns.forecast_factor = 0.6 %}
  {%- endif %}
{%- endfor %}
{% set forecast_factor = ns.forecast_factor %}
{## location factor calculate shadow, clouds add fog not in the wheater forecast ##}
{% if( m >= 11 or m <=2) and (h <= 10 or h >= 15) %} {% set location_factor = 0.15 %} {% else %} {% set location_factor = 0 %} {% endif %}
{% set forecast_factor = (forecast_factor - location_factor) | round(2, 'ceil') %}
{## solar forcast with forecast_factor, normally solar forecast is up to *2 to high on my location ##}
{% set forecast = ((float(states('sensor.energy_production_today_2'),default=0) + float(states('sensor.energy_production_today_3'),default=0) + float(states('sensor.energy_production_today_4'),default=0)) * forecast_factor) | round(1) %}

{% set soc = int(states('sensor.noah_2000_soc'),default=15) %}
{% set socR = soc - int(states('number.noah_2000_discharge_limit'),default=15) %}
{% set pvp = int(states('sensor.statistical_characteristic_noah_2000_solar_power'),default=0) %}
{## "round" the pv power down, reserve for loading the batterie ##}
{% set pvp_calc = int(((pvp - 35) / 50) | round(0, 'floor') * 50) | round(0, 'floor')  %}
{## move the consumption calculation up, thats for losses by the inverter and because i don't have a complete consumption measurement ##}
{% if( m > 11 or m <=2) and (h < 9 or h >= 14) or (soc < 50 and pvp_calc < 650)  %} {% set offset = 50 %} {% else %} {% set offset = 100 %} {% endif %}
{% set consumption = int((int(states('sensor.statistical_characteristic_leistung_summe'),default=150) + 20 | round(0, 'floor')) / 50) | round(0, 'floor')  * 50 + offset %}
{% set consumption_calc = consumption + int(states('input_number.noah_2000_verbrauchsoffset')) | round(0, 'floor') %}
{% set pvpOver = pvp_calc - consumption_calc %}
{% if pvp >= 800 and socR >= 15 %} {% set consumption_calc = consumption_calc + 50 %} {% endif %}
{% if consumption_calc > wr_max %} {% set consumption_calc = wr_max %} {% elif consumption_calc < wr_min %} {% set consumption_calc = wr_min %} {% endif %}
{% set output_calc = consumption_calc %}

{## use the forecast to set the max output, after soc > 30 dont use this ##}
{% if (forecast < 1 and soc < 30) %}  {% set wr_max = wr_min %} {% endif %}
{% if (forecast >= 1 and forecast <= 1.5 and soc < 30) %}  {% set wr_max = 100 %} {% endif %}
{% if (forecast > 1.5 and forecast <= 2 and soc < 30) %}  {% set wr_max = 150 %} {% endif %}
{## use the pvp_calc to set the max output before 14:00 and soc < 30, if we reach the soc > 30 we dont need this ##}
{% if pvp_calc < wr_max and h < 14 and soc < 30 %} {% set wr_max = pvp_calc %} {% endif %}

{## set output by use the variables defined up ##}
{% if (soc < 95 and (pvpOver >= 75 or (socR > 10 and soc > 30))) %} {% set output_calc = output_calc %}
{% elif soc >= 99 %} {% set output_calc = 600 %}
{% elif soc >= 95 and pvpOver >= 80 and h <= 16 %} {% set output_calc = int(int( (pvp * 0.85) | round(0, 'floor') / 50) * 50)  %}
{% elif soc >= 98 and pvpOver > 30 and h <= 20 %} {% set output_calc = int(int( (pvp * 0.95) | round(0, 'floor') / 50) * 50) %}
{% elif (soc >= 75 and pvpOver >= 50) %} {% set output_calc = output_calc %}
{% elif soc <= 30 and pvp > 0 and pvp <= 110 %} {% set output_calc = 75 %}
{% elif soc <= 30 and pvp > 0 and pvp > 120 and pvp <= 200 %} {% set output_calc = 100 %}
{% elif soc <= 30 and pvp > 0 and pvp > 200 and pvp <= 450 %} {% set output_calc = 150 %}
{% elif h >= 13 and h <= 22 and socR > 1 %} {% set output_calc = output_calc %}
{% elif h >= 15 and socR <= 1 %} {% set output_calc = 100 %}
{% else %} {% set output_calc = 75 %}
{% endif %}
{## check if output between wr_min and wr_max ##}
{% if output_calc > wr_max %} {% set output_calc = wr_max %} {% endif %}
{% if output_calc < wr_min %} {% set output_calc = wr_min %} {% endif %}

{{ output_calc }}

Verbrauchsoffset braucht ihr wahrscheinlich nicht Solar Forecast habt ihr bestimmt nur einen _1 am Ende die beiden Statistik Sensoren hatte ich schon erwähnt.

Automation zur Übernahme auf den NOAH MQTT

alles als Arbeitsstand zu verstehen...

alias: NOAH 2000 Output Power steuern
description: über YAML Template Berechnung in NOAH 2000 Output Sensor
triggers:
  - trigger: state
    entity_id:
      - sensor.noah_output_sensor
  - trigger: state
    entity_id:
      - sensor.noah_2000_solar_power
  - trigger: state
    entity_id:
      - sensor.noah_2000_soc
conditions:
  - condition: or
    conditions:
      - condition: template
        value_template: >-
          {{states('number.noah_2000_system_output_power') | float(0) <
          states('sensor.noah_output_sensor') | float(0)}}
      - condition: template
        value_template: >-
          {{states('number.noah_2000_system_output_power') | float(0) >
          states('sensor.noah_output_sensor') | float(0)}}
    enabled: false
  - condition: state
    entity_id: binary_sensor.noah_2000_heating
    state: "off"
  - condition: state
    entity_id: binary_sensor.noah_2000_connectivity
    state: "on"
  - condition: template
    value_template: >-
      {{states('sensor.noah_2000_soc') | float(0)  >=
      states('number.noah_2000_discharge_limit') | float(0)  + 0 }}
  - condition: not
    conditions:
      - condition: template
        value_template: >-
          {{states('number.noah_2000_system_output_power') | float(0) ==
          states('sensor.noah_output_sensor') | float(0)}}

          ##{{(states('number.noah_2000_system_output_power') | float(0) >
          states('sensor.noah_output_sensor') | float(0) + 25) or
          (states('number.noah_2000_system_output_power') | float(0) <
          states('sensor.noah_output_sensor') | float(0) - 25)}}
  - condition: template
    value_template: >-
      {{(states('number.noah_2000_system_output_power') | float(0) >
      states('sensor.noah_output_sensor') | float(0) + 15) or
      (states('number.noah_2000_system_output_power') | float(0) <
      states('sensor.noah_output_sensor') | float(0) - 15)}}
actions:
  - action: number.set_value
    metadata: {}
    target:
      entity_id: number.noah_2000_system_output_power
    data:
      value: "{{ states('sensor.noah_output_sensor') | float(0) }}"
  - delay:
      hours: 0
      minutes: 0
      seconds: 20
  - condition: template
    value_template: " {{states('number.noah_2000_system_output_power') | float(0) != states('sensor.noah_output_sensor') | float(0)}}"
  - action: number.set_value
    metadata: {}
    target:
      entity_id: number.noah_2000_system_output_power
    data:
      value: "{{ states('sensor.noah_output_sensor') | float(0) }}"
    enabled: true
  - delay:
      hours: 0
      minutes: 0
      seconds: 20
    enabled: true
mode: single

Das war meine Mittagspause :slight_smile:

2 „Gefällt mir“

Hallo @entre13, vielen Dank für dein Feedback. Hast du ggf. mal einen Link. Konnte den "NOAH Nulleinspeisung" thread bisher nicht finden.