Skip to content

VolkerK62: noName PV&Batterie, SolarLog, DaheimLaden Smart 22kW, Ioniq 5, Wärmepumpe, diverse Shellys

VolkerK62 edited this page Mar 20, 2024 · 5 revisions

Der Anfang

Zu Testzwecken habe ich Anfang 2022 evcc auf dem Windowsrechner installiert und configure ausgeführt.

Es hat nicht lange gedauert, evcc wurde für gut befunden und ein Raspberry musste her. Mein erster Kontakt zur Linux-Welt.

Meine noName PV-Komponenten sind an ein SolarLog angeschlossen. Sehr schnell habe ich festgestellt, dass das SolarLog als GridMeter nicht zu gebrauchen ist. Also musste ein IR-Lesekopf her, der mittlerweile durch einen Shelly 3EM ersetzt wurde, da dieser auch die Phasenströme messen kann.

Auto konnte nun mit Sonnenstrom geladen werden.

Doch so ganz zufrieden war ich noch nicht ... die Batterie fehlte noch.

Batterie; die Herausforderung

Meine Hausbatterie ist ein geschlossenes System. Ich habe lediglich Zugriff auf eine Webseite des Herstellers. Also musste ich etwas tricksen, um diese in evcc implementieren zu können. Die Lade-/Entladeleistung wird lokal mit Hilfe eines Shelly EM (Stromzange) gemessen. Der Soc war dann meine erste (und einzige) Programmiererfahrung. Ein Script fragt alle 15 Minuten die Webseite ab und holt dort den aktuellen Soc. Zuerst wurde dieser in einer Datei gepseichert, mittlerweile nutze ich dafür MQTT.

Die Wallbox

Eigentlich ist die Firma DaheimLaden "schuld", dass ich bei evcc gelandet bin. Auf der Suche nach einer lieferbaren Wallbox (durch das KfW-Programm war das schwierig) bin ich bei DaheimLaden gelandet. Dort wurde mit der Anbindung an evcc geworben. So fing alles an.

Die Installation der Wallbox war für den Elektriker ein Graus. "Da muss man Ösen biegen." Durch einen Tipp vom DaheimLaden Support habe ich gleich einen Lasttrennschalter installieren lassen. Damit kann ich jetzt ganz bequem zwischen 1p und 3p umschalten.

Ansonsten war die Einbindung in evcc völlig problemlos. Die Box ist per Netzwerkkabel verbunden (WLAN wäre auch möglich). Seit einer Firmwareanpassung ist sogar die lokale Steuerung per Modbus möglich.

Das Auto

Eigentlich hat alles von Anfang an funktioniert, lediglich die Erkennung beim Anstecken nicht. Es stellte sich heraus, dass beim Ioniq 5 in Bluelink der Status B (verbunden, aber nicht ladend) nicht übertragen wird. Das wurde dann dadurch gelöst, dass die geöffnete Ladeklappe als Erkennungsmerkmal genutzt wird.

PV-Laden

Meine Anlage hat "nur" 7,5 kWp. Aus dem Grund lade ich überwiegend 1p. Das Auto kann 1p bis zu 32A laden. Da passt optimal zur 22kW Wallbox. So kann ich mit bis zu 20A@1p (Schieflastgrenze) Überschuss laden. Viel mehr habe ich im Normalfall (wenn auch die Batterie geladen wird) auch gar nicht übrig.

Erweiterungen

Brauchwasser-Wärmepumpe

Meine Wärmepumpe hat einen SmartGrid Kontakt zur Erhöhung der Solltemperatur. Dieser Kontakt wird mit einem Shelly1 geschaltet. Die Temperatur hole ich mit NodeRed per API aus meinem Heizungssystem (Windhager). Um im Sommer die Schaltvorgänge etwas zu entzerren, damit nicht beim jedem Grad Abkühlung wieder neu gestartet wird, habe ich eine 5 Grad Hysterese eingebaut.

E-Bike Ladestation

Das Ladegerät ist in der Garage an einer Schaltsteckdose angeschlossen. Zuerst hatte ich dort einen Shelly PlugS. Es kam aber immer wieder zu Fehlern, weil der WLAN Empfang ziemlich dünn ist. Deshalb wurde diese durch eine Fritz-Dect Steckdose ersetzt. Um den Soc vom Fahrrad bequem nach evcc zu bekommen nutze ich die Smartphone App "Http Shortcut" und schicke den Soc per API an evcc.

"Spielereien"

Angeregt durch die tolle Erfassung der Ladevorgänge habe ich Waschmaschine und Trockner mit einem Shelly Plug (ohne S) ausgestattet. Die Ladepunkte stehen immer auf "schnell" und erfassen so jede Benutzung. Ebenso wird der normale autarke Betrieb der Wärmepumpe zu statistischen Zwecken erfasst. Da hier die Wassertemperatur nicht wichtig ist, lasse ich mir die Außentemperatur anzeigen.

externe Erweiterungen

Da ich von Programmierung und Scripten keine Ahnung haben (die Batterieaktion hat Wochen gedauert) bin ich mittlerweile ein Fan von NodeRed geworden. Ich habe mir für diverse UseCases externe Steuerungen gebaut, die evcc mittels API genau so "manipulieren", wie es gewünscht ist. Da meine Batterie nicht unter 20% entladen wird, nutze ich verschiedene prioritySoc Werte (zwischen 0 und 20) um die externen Steuerungen zu aktivieren/deaktivieren.

Beispiele:

  • Meine Wallbox müsste per RFID freigegeben werden. Um das zu vermeiden "beobachtet" NodeRed den enabled Zustand des Loadpoint und startet bzw. stoppt die Wallbox per direktem Modbus-Kommando (gut das es modbusproxy gibt).
  • Einen Modus um im Frühjahr und Herbst möglichst keine Einspeisung zu haben und gleichzeitig die Batterie priorisiert zu laden.
  • Einen Modus um am Nachmittag mit Hilfe der Batterie und ohne Netzbezug die Restsonne zu nutzen. Wobei hier nicht bufferSoc das Ausschalten bestimmt, sondern der Netzbezug.
  • Einen Modus um im Winter bevorzugt das Auto mit Sonne und Netzbezug zu laden.

Meine Config

network:
  schema: http
  host: evcc.local
  port: 7070

interval: 5s

sponsortoken: *** 

telemetry: true

log: debug
levels:
  #site: trace
  #lp-1: info
  #lp-2: info
  #lp-3: info
  #lp-4: info
  #daheimladen-mb: trace
  #hyundai: trace
  #main: trace
  #cache: trace
  #db: trace
  #http: trace
  #influx: trace
  #mqtt: trace
  #proxy-5200: trace
  #gsi: trace
  
########################################################################
meters:
- name: grid
  type: movingaverage
  decay: 0.33
  meter:
    type: template
    template: shelly-3em
    usage: grid
    host: 192.168.***.***

- name: pv
  type: movingaverage
  decay: 0.33
  meter:
    type: template
    template: solarlog
    usage: pv
    host: 192.168.***.***
    port: 502

- name: battery
  type: movingaverage
  decay: 0.33
  meter:
    type: custom
    power:
      ##Shelly EM Stromzange 2
      source: http
      uri: http://192.168.***.***/emeter/1
      jq: if .pf==0 then .power else .power / (.pf | fabs) end
    soc:
      source: mqtt
      topic: Haus/Bat_SoC
      timeout: 60m
    capacity: 7.5

- name: aux
  type: custom
  power:
    source: mqtt
    topic: Haus/aux_pwr
    timeout: 25h

########################################################################
chargers:
- name: wallbox
  type: template
  template: daheimladen-mb
  host: localhost
  port: 5200

- name: E-Bikes
  type: template
  template: fritzdect
  uri: http://fritz.box
  user: ***
  password: ***
  ain: ***
  standbypower: 10
  integrateddevice: true
  icon: bike

- name: WP_SG
  type: template
  template: shelly
  ##Shelly 1 für SG-Kontakt
  host: 192.168.***.***
  standbypower: -1
  integrateddevice: true
  heating: true
  icon: waterheater
 
- name: WP_autark
  type: template
  template: shelly
  ##Shelly EM für Fake-Kontakt
  host: 192.168.***.***
  channel: 0
  standbypower: 10
  integrateddevice: true
  heating: true
  icon: generic
  
- name: Waschen
  type: template
  template: shelly
  host: 192.168.***.***
  standbypower: 1
  integrateddevice: true
  icon: generic
  
- name: Trocknen
  type: template
  template: shelly
  host: 192.168.***.***
  standbypower: 1
  integrateddevice: true
  icon: generic
  
########################################################################
vehicles:
- name: auto
  type: template
  template: hyundai
  title: (T)Raumschiff
  user: ***
  password: ***
  language: de
  icon: car
  capacity: 72.6
  mode: pv
  maxcurrent: 20
    
- name: offline
  type: template
  template: offline
  title: ohne Bluelink
  icon: car
  capacity: 72.6
  mode: off
  maxcurrent: 16
    
- name: bike
  type: custom
  title: E-Bikes
  icon: bike
  capacity: 0.625
  soc:
    source: mqtt
    topic: evcc/vehicles/bike/minSoc
    timeout: 2500h
    
- name: WasserSG
  type: custom
  title: WasserSG
  icon: waterheater
  capacity: 11 # 300 Liter x 100 Grad x 1,16Wh / 3 (COP) = 11kWh  
  soc:
    source: mqtt
    topic: Haus/Wasser
    timeout: 60m
 
- name: WasserWP
  type: custom
  title: WasserWP
  icon: generic
  capacity: 11
  soc:
    source: mqtt
    topic: Haus/Temp_out2
    timeout: 60m
     
- name: Waschen
  type: custom
  title: Waschmaschine
  icon: generic
  capacity: 5
  soc:
    source: const
    value: 0.1
      
- name: Trocknen
  type: custom
  title: Trockner
  icon: generic
  capacity: 5
  soc:
    source: const
    value: 0.1
    
########################################################################
loadpoints:
- title: Carport
  charger: wallbox
  mode: off
  phases: 3
  mincurrent: 6
  maxcurrent: 32
  priority: 0
  soc:
    estimate: true
    poll:
      mode: always
      interval: 300m
#  enable: 
#    threshold: 0
#    delay: 1m
#  disable: 
#    threshold: 0
#    delay: 3m
#  guardduration: 5m

- title: Garage
  charger: E-Bikes
  vehicle: bike
  phases: 1
  mincurrent: 0.75
  maxcurrent: 0.75
  priority: 5
  soc:
    estimate: true
  enable:
    delay: 30s
  disable:
    delay: 5m
  guardduration: 5m

- title: WP SG+
  charger: WP_SG
  vehicle: WasserSG
  phases: 1
  mincurrent: 2
  maxcurrent: 3
  priority: 10
  soc:
    estimate: false
  enable:
    threshold: 0
    delay: 2m
  disable: 
    threshold: 0
    delay: 10m
  guardduration: 30m

- title: WP -Anzeige-
  charger: WP_autark
  vehicle: WasserWP
  phases: 1
  soc:
    estimate: false
  
- title: Waschen -Anzeige-
  charger: Waschen
  vehicle: Waschen
  phases: 1
  soc:
    estimate: true
  
- title: Trocknen -Anzeige-
  charger: Trocknen
  vehicle: Trocknen
  phases: 1
  soc:
    estimate: true

########################################################################
site:
- title: Haus
  meters:
    grid: grid
    pv: pv
    battery: battery
    aux: aux
  residualpower: 100
  
########################################################################
tariffs:
  currency: EUR
  grid:
    type: custom #fixed #custom
    price: #0.354
      source: mqtt
      topic: Haus/Preis_Bezug
      timeout: 25h

  feedin:
    type: fixed
    price: 0.1095
      
  co2:
    type: grünstromindex
    zip: ***

########################################################################
messaging:
  services:
  - type: ntfy
    uri: https://ntfy.sh/***
  events:
    start:
      title: Start {{.title}}
      msg: |
        {{ if eq .title "Carport" }} Start um {{printf `(%02d:%02d)` now.Hour now.Minute}} {{- end }}
        {{ if eq .title "Garage" }} Start um {{printf `(%02d:%02d)` now.Hour now.Minute}} {{- end }} 
        {{ if eq .title "WP -Anzeige-" }} Start um {{printf `(%02d:%02d)` now.Hour now.Minute}} {{- end }} 
    stop:
      title: Stop {{.title}}
      msg: |
        {{ if eq .title "Carport" }} Stop um {{printf `(%02d:%02d)` now.Hour now.Minute}} {{- end }}
        {{ if eq .title "Garage" }} Stop um {{printf `(%02d:%02d)` now.Hour now.Minute}} {{- end }} 
        {{ if eq .title "WP -Anzeige-" }} Stop um {{printf `(%02d:%02d)` now.Hour now.Minute}} {{- end }} 

########################################################################
influx:
  url: http://localhost:8086
  database: evcc

mqtt:
  broker: localhost:1883
  topic: evcc

modbusproxy:
- port: 5200
  uri: 192.168.***.***:502

########################################################################