Automation für Überschussladen

mbecher

New member
Hallo zusammen,

ich arbeite schon eine geraume Zeit mit HA. Leider komme ich gerade nicht weiter.
Ich würde gern Überschussladen für das Auto nutzen.
Folgende Konstellation:
2 Huawei-Wechselrichter - in HA eingebunden über ModBus
dazu gehört ein SmartMeter und die Batterie - beides auch in HA eingebunden über ModBus des WR
Die Wallbox (Vestel) ist aktuell nicht in HA einbindbar.
Das Auto (Tesla) ist in HA eingebunden.
Manuell kann ich das Ganze steuern.
Wenn genug Strom da ist, schalte ich den Ladestrom beim Tesla ein und erhöhe diesen.
Ist der Bezug aus dem Netz zu hoch oder muss noch Strom in die Batterie, minimiere ich den Ladestrom oder schalte diesen aus.

Jetzt würde ich das gern automatisieren.
Ja es gibt EVCC auch als Integration.

Meine Integrationen funktionieren derzeit sehr gut. Mit EVCC muss ich das Ganze über einen Proxy lösen. Da weiß ich nicht, ob das fehlerfrei danach wieder geht.

Jetzt war meine Idee:

Ist der Ladestecker "eingesteckt" und ist die Stromeinspeisung größer 1000W, schalte den Ladestrom um 1 Ampere hoch. Das Ganze sollte er prüfen von Sonnenaufgang bis -untergang und alle 30 Sekunden.

Hier im Forum habe ich einen Beitrag gefunden, der sowas ähnliches macht.
https://forum.heimnetz.de/threads/a...-wechselrichter-bei-zu-viel-einspeisung.2991/
Aber kriege es nicht hin diesen Eintrag auf meine Anforderung umzubauen.

Kann jemand helfen?

Viele Grüße
 
Tja, da dieser Beitrag von mir ist und die Automatisierung bei mir läuft, bin ich dann wohl dein Ansprechpartner.
Wir sollten uns mal die Rahmenbedingungen ansehen. Woraus triggern wir (Auslöser) und was muß als Bedingung beachtet werden.
Da Du alle 30 Sekunden prüfen willst, wäre das unser Auslöser.
Code:
description: ""
mode: single
trigger:
  - platform: time_pattern
    minutes: /30
condition: []
action: []
Diese Automatisierung würde alle 30 Minuten aufgerufen.
Als Bedingung mußt Du dann noch einfügen
- wenn Ladestecker eingesteckt
- wenn Einspeisung > 1000 Watt
- wenn Zeit zwischen Sonnenaufgang und Sonnenuntergang.

Letzteres kann man eventuell weglassen, weil die Einspeisung nach Sonnenuntergang ja nicht > 1000 Watt sein kann und vor Sonnenaufgang auch nicht wieder sein wird.

Jetzt brauchst Du noch einen Aktion zweig, der den Ladestrom erhöht oder verringert.
Taucht die Frage auf, wieviel Überschuss kann es maximal geben und wieviel Ladestrom willst Du maximal frei schalten.
Am Sinnvollsten wäre hier vermutlich eine Berechnung.
Ladestrom = Überschuss / 1000
Bei 1000 Watt Überschuss haste 1A Ladestrom, bei 2000 Watt Überschuss haste 2 A Ladestrom und halt auch alle beliebigen Werte dazwischen.

Ist es das, was Du dir Vorstellst ?
 
Hallo,

den ersten Teil hatte ich auch schon wie Du beschrieben hast zusammengebaut.
Code:
alias: Tesla Ladestrom anpassen
description: ""

trigger:
  # Alle 30 Sekunden prüfen, ob Einspeisung vorliegt
  - platform: time_pattern
    seconds: /30

Bei den Bedingungen und Aktionen habe ich eher die Probleme.

Code:
action:
  - if:
  # wenn mehr als 1000 Watt eingespeist werden, dann...
      - type: is_power
        conditions: device
        device_id:
        entity_id:
        domain: sensor
        above: 1000
    then:
      # erhöhen des Ladestroms um 1 Ampere
      - service: number.set_value
        data:
          value: "{{ states('sensor('number.charging_amps')|int }}"
        target:
          entity_id:
        enabled: true
  - if:
  # wenn mehr als 500 Watt aus dem Stromnetz bezogen werden, dann...
      - type: is_power
        conditions: device
        device_id:
        entity_id:
        domain: sensor
        above: 500
    then:
      # verringern des Ladestroms um 1 Ampere
      - service: number.set_value
        data:
          value: "{{ states('sensor('number.charging_amps')|int }}"
        target:
          entity_id:
        enabled: true
mode: single

Hier denke ich sind noch einige Fehler drin.
- Was muss bei type stehen bzw. was wird hier definiert?
- device id und Entity id habe ich z. B. bei dem Ladestrom nicht.
1711660227542.png- Wie muss ich den neuen Wert bilden hinter Value?
Hier die Daten, die ich verwenden kann:
- Ladestecker - binary_sensor.charger (on=eingesteckt)
- aktueller Stromverbrauch - sensor.power_meter_active_power_2 (-20=20W Strombezug, 150=150W Stromeinspeisung)
- Ladestrom - number.charging_amps
 
Bei TYPE willst Du doch wissen, wie die Einspeisung ins öffentliche Netz ist. Also mehr als 1000 Watt Einspeisung oder mehr als 500 Watt Bezug aus dem öffentlichen Netz. Also muß da eine Entität rein, die das Messen kann. Smartmeter oder ähnliches.

Device_ID und Entity_id werden doch automatisch gesetzt, wenn Du eine Entität auswählst.
Wenn Du also auf "Auslöser hinzufügen" klickst,, hast Du ja die Wahl zwischen "Gerät, Entität, Zeit und Ort oder Andere Auslöser"
Hier auf ENTITÄT klicken, bitte nicht auf Gerät.
Dann hast Du ja die Wahl, ob "Nummerischer Zustand" oder "Zustand" genutzt werden soll. Hier ja Numerischer Zustand, da wir ja einen Wert abfragen wollen.
Bei Entität dann dein SmartMeter oder womit Du deinen Stromverbrauch misst, auswählen.
Bei "Oberhalb-Modus" dann in der Zeile über die 1000 eintragen. Das wars

Beim Ladestrom brauchst Du auch keine Entität. "number.charging_amps" ist die Entität.

Code:
alias: Tesla Ladestrom anpassen
description: ""
trigger:
  - platform: time_pattern
    seconds: /30
action:
  - if:
      - type: is_power
        conditions: device
        device_id: wird vergeben
        entity_id: sensor.power_meter_active_power_2
        domain: sensor
        above: 1000
    then:
      - service: number.set_value
        data:
          value: "{{ states('sensor('number.charging_amps')|int + 1}}"
        target:
          entity_id: number.charging_amps
        enabled: true
  - if:
      - type: is_power
        conditions: device
        device_id: wird vergeben
        entity_id: sensor.power_meter_active_power_2
        domain: sensor
        under: -500
    then:
      - service: number.set_value
        data:
          value: "{{ states('sensor('number.charging_amps')|int - 1}}"
        target:
          entity_id: number.charging_amps
        enabled: true
mode: single
condition:
  - condition: state
    entity_id: binary_sensor.charger
    state: "on"

Ich kann das jetzt nicht testen, aber so in etwa stelle ich mir das vor.
Und wie gesagt. Wenn Du im visuellen Editor die richtige Entität auswählt, wird auch die device_id automatisch gesetzt.
 
Habe das jetzt so nachgebaut.
Code:
alias: Tesla Ladestrom anpassen
description: ""
trigger:
  - platform: time_pattern
    seconds: /30
condition:
  - condition: state
    entity_id: binary_sensor.charger
    state: "on"
action:
  - if:
      - type: is_power
        condition: device
        device_id: af72f070a4c451b1dd6222ec46defec0
        entity_id: 664e51c8f72502ba9df95298f7569a1a
        domain: sensor
        above: 1000
    then:
      - service: number.set_value
        data:
          value: "2"
        target:
          entity_id: number.charging_amps
        enabled: true
mode: single

Leider hat er ein Problem bei setzen des Wertes. Wenn ich an der Stelle einen festen Wert einschreibe, bringt er keine Fehlermeldung. Wenn ich den Passus ersetze durch
Code:
{{ states('sensor('number.charging_amps')|int + 1}}

bringt er folgenden Fehlermeldung.
Message malformed: template value should be a string for dictionary value @ data['action'][0]['then'][0]['data']
 
- type: is_power
condition: device
device_id: af72f070a4c451b1dd6222ec46defec0
entity_id: 664e51c8f72502ba9df95298f7569a1a
domain: sensor
above: 1000
Du sollst ENTITÄTEN nutzen, nicht Geräte. Die Zahlen sagen einem nichts.
Leider hat er ein Problem bei setzen des Wertes. Wenn ich an der Stelle einen festen Wert einschreibe, bringt er keine Fehlermeldung. Wenn ich den Passus ersetze durch
Code:
{{ states('sensor('number.charging_amps')|int + 1}}

bringt er folgenden Fehlermeldung.
Message malformed: template value should be a string for dictionary value @ data['action'][0]['then'][0]['data']
Sagt der Text ja. STRING erwartet, dein INT macht aber nun mal eine Zahl daraus.
Ich fürchte nur, das zum berechnen des "-1" INT nötig ist und danach daraus wieder STRING gemacht werden muß.
Wie das genau geht, puh, bin ich momentan ein wenig überfragt. Vielleicht kann da ein anderer mal einspringen.
 
Habe eine Lösung gebaut. Ist zwar bestimmt nicht die effektivste Variante im Code, funktioniert aber.
Code:
alias: Tesla Ladestrom anpassen (Überschussladen)
description: >-
  Passt den Ladestrom beim Tesla an, wenn das Fahrzeug zu Hause und die Sonne
  aufgegangen ist. Dazu wird alle 30 Sekunden geprüft ob der Einspeisestrom über
  1000 Watt, der Bezugsstrom unter -500Watt oder der Entladestrom der Batterie
  über 1000 Watt liegt. Liegt der Wert über 1000 Watt bei der Einspeisung wird
  der Ladestrom um 1 Ampere erhöht. Liegt er unter -500 Watt bei dem Strombezug
  oder über 1000 Watt beim Entladestrom der Batterie wird er um 1 Ampere
  verringert.
trigger:
  - platform: time_pattern
    seconds: "30"
condition:
  - condition: and
    conditions:
      - condition: sun
        after: sunrise
        before: sunset
      - condition: zone
        entity_id: device_tracker.location_tracker
        zone: zone.grundstuck
      - condition: state
        entity_id: binary_sensor.charger
        state: "on"
      - condition: state
        entity_id: switch.charger
        state: "on"
action:
  - if:
      - type: is_power
        condition: device
        device_id: af72f070a4c451b1dd6222ec46defec0
        entity_id: 664e51c8f72502ba9df95298f7569a1a
        domain: sensor
        above: 1000
    then:
      - choose:
          - conditions:
              - condition: numeric_state
                entity_id: number.charging_amps
                above: 0
                below: 2
            sequence:
              - service: number.set_value
                metadata: {}
                data:
                  value: "2"
                target:
                  entity_id: number.charging_amps
          - conditions:
              - condition: numeric_state
                entity_id: number.charging_amps
                above: 1
                below: 3
            sequence:
              - service: number.set_value
                metadata: {}
                data:
                  value: "3"
                target:
                  entity_id: number.charging_amps
          - conditions:
              - condition: numeric_state
                entity_id: number.charging_amps
                above: 2
                below: 4
            sequence:
              - service: number.set_value
                metadata: {}
                data:
                  value: "4"
                target:
                  entity_id: number.charging_amps
          - conditions:
              - condition: numeric_state
                entity_id: number.charging_amps
                above: 3
                below: 5
            sequence:
              - service: number.set_value
                metadata: {}
                data:
                  value: "5"
                target:
                  entity_id: number.charging_amps
          - conditions:
              - condition: numeric_state
                entity_id: number.charging_amps
                above: 4
                below: 6
            sequence:
              - service: number.set_value
                metadata: {}
                data:
                  value: "6"
                target:
                  entity_id: number.charging_amps
          - conditions:
              - condition: numeric_state
                entity_id: number.charging_amps
                above: 5
                below: 7
            sequence:
              - service: number.set_value
                metadata: {}
                data:
                  value: "7"
                target:
                  entity_id: number.charging_amps
          - conditions:
              - condition: numeric_state
                entity_id: number.charging_amps
                above: 6
                below: 8
            sequence:
              - service: number.set_value
                metadata: {}
                data:
                  value: "8"
                target:
                  entity_id: number.charging_amps
          - conditions:
              - condition: numeric_state
                entity_id: number.charging_amps
                above: 7
                below: 9
            sequence:
              - service: number.set_value
                metadata: {}
                data:
                  value: "9"
                target:
                  entity_id: number.charging_amps
          - conditions:
              - condition: numeric_state
                entity_id: number.charging_amps
                above: 8
                below: 10
            sequence:
              - service: number.set_value
                metadata: {}
                data:
                  value: "10"
                target:
                  entity_id: number.charging_amps
          - conditions:
              - condition: numeric_state
                entity_id: number.charging_amps
                above: 9
                below: 11
            sequence:
              - service: number.set_value
                metadata: {}
                data:
                  value: "11"
                target:
                  entity_id: number.charging_amps
          - conditions:
              - condition: numeric_state
                entity_id: number.charging_amps
                above: 10
                below: 12
            sequence:
              - service: number.set_value
                metadata: {}
                data:
                  value: "12"
                target:
                  entity_id: number.charging_amps
          - conditions:
              - condition: numeric_state
                entity_id: number.charging_amps
                above: 11
                below: 13
            sequence:
              - service: number.set_value
                metadata: {}
                data:
                  value: "13"
                target:
                  entity_id: number.charging_amps
          - conditions:
              - condition: numeric_state
                entity_id: number.charging_amps
                above: 12
                below: 14
            sequence:
              - service: number.set_value
                metadata: {}
                data:
                  value: "14"
                target:
                  entity_id: number.charging_amps
          - conditions:
              - condition: numeric_state
                entity_id: number.charging_amps
                above: 13
                below: 15
            sequence:
              - service: number.set_value
                metadata: {}
                data:
                  value: "15"
                target:
                  entity_id: number.charging_amps
          - conditions:
              - condition: numeric_state
                entity_id: number.charging_amps
                above: 14
            sequence:
              - service: number.set_value
                metadata: {}
                data:
                  value: "16"
                target:
                  entity_id: number.charging_amps
    alias: Wenn die Stromeinspeisung über 100 Watt steigt, erhöhe den Ladestrom.
 .....
    alias: >-
      Wenn die Batterieentladung unter -1000 Watt fällt, verringere den
      Ladestrom.
mode: single

Im Trace sieht das dann so aus:
1712126154648.png

Vielleicht hat ja jemand ne Variante, die effektiver ist, was den Code angeht.
 
irgendwas in Richtung dann setze aktuellen Wert auf +/-1?
Ich verwende für Ertragsbasierte Sachen einen Helfer mit Durchschnittswert über x Minuten, oder wie fängst du ab das mal kurz die Sonne rauskommt/verschwindet?
 
Code:
then:
  # erhöhen des Ladestroms um 1 Ampere
  - service: number.set_value
    data:
      value: "{{ states('number.charging_amps')|int + 1}}"
    target:
      entity_id: number.charging_amps
    enabled: true

bringt den Fehler:
Message malformed: Unexpected value for condition: 'None'. Expected and, device, not, numeric_state, or, state, sun, template, time, trigger, zone @ data['action'][0]['if'][0]
 

Zurzeit aktive Besucher

Letzte Anleitungen

Statistik des Forums

Themen
4.530
Beiträge
46.436
Mitglieder
4.166
Neuestes Mitglied
xixaxoro
Zurück
Oben