evcc-io/templates/definition/meter/openems-modbus.yaml
2026-01-17 15:02:31 +01:00

226 lines
6.6 KiB
YAML

template: openems-modbus
products:
- brand: OpenEMS
description:
generic: Modbus-API
- brand: FENECON
description:
generic: Modbus-API
capabilities: ["battery-control"]
requirements:
description:
de: |
##### Lizenzhinweis:
Für FENECON FEMS Systeme ist für die aktive Batteriesteuerung eine kommerzielle Lizenz *FEMS App Modbus/TCP Schreibzugriff* erforderlich.
##### FEMS-Dokumentation:
- FEMS App Modbus/TCP Lesezugriff: [docs.fenecon.de](https://docs.fenecon.de/de/fems/fems-app/App_ModbusTCP_Lesezugriff.html)
- FEMS App Modbus/TCP Schreibzugriff: [docs.fenecon.de](https://docs.fenecon.de/de/fems/fems-app/App_ModbusTCP_Schreibzugriff.html)
##### OpenEMS-Dokumentation:
- OpenEMS Edge Api Modbus Controller: [openems.github.io](https://openems.github.io/openems.io/openems/latest/edge/controller.html#_api_modbus)
en: |
##### License notice:
For active battery control on FENECON FEMS systems, a commercial license (*FEMS App Modbus/TCP Write Access*) is required.
##### FEMS documentation:
- FEMS App Modbus/TCP Read Access: [docs.fenecon.de](https://docs.fenecon.de/en/fems/fems-app/App_ModbusTCP_Lesezugriff.html)
- FEMS App Modbus/TCP Write Access: [docs.fenecon.de](https://docs.fenecon.de/en/fems/fems-app/App_ModbusTCP_Schreibzugriff.html)
##### OpenEMS documentation:
- OpenEMS Edge Api Modbus Controller: [openems.github.io](https://openems.github.io/openems.io/openems/latest/edge/controller.html#_api_modbus)
params:
- name: usage
choice: ["grid", "pv", "battery"]
- name: modbus
choice: ["tcpip"]
default: "tcpip"
- name: grid_power_register
type: int
default: 315
description:
de: Modbus-Register für Netzleistung
en: Modbus register for grid power
help:
generic: GridActivePower (W)
usages: ["grid"]
advanced: true
- name: grid_energy_register
type: int
default: 359
description:
de: Modbus-Register für Netzbezug Energie
en: Modbus register for grid import energy
help:
generic: GridBuyActiveEnergy (Wh)
usages: ["grid"]
advanced: true
- name: pv_power_register
type: int
default: 327
description:
de: Modbus-Register für PV-Leistung
en: Modbus register for PV power
help:
generic: ProductionActivePower (W)
usages: ["pv"]
advanced: true
- name: pv_energy_register
type: int
default: 367
description:
de: Modbus-Register für PV-Energie
en: Modbus register for PV energy
help:
generic: ProductionActiveEnergy (Wh)
usages: ["pv"]
advanced: true
- name: maxacpower
- name: battery_power_register
type: int
default: 415
description:
de: Modbus-Register für Batterie-Leistung
en: Modbus register for battery power
help:
generic: EssDischargePower (W)
usages: ["battery"]
advanced: true
- name: battery_soc_register
type: int
default: 302
description:
de: Modbus-Register für Batteriestand
en: Modbus register for state of charge
help:
generic: SoC (%)
usages: ["battery"]
advanced: true
- name: battery_set_register
type: int
default: 710
description:
de: Modbus-Register für Ladeleistung
en: Modbus register for charge power
help:
generic: SetActivePowerLessOrEquals (W)
usages: ["battery"]
advanced: true
- name: battery
type: bool
default: false
description:
de: steuert Batterie Komponente
en: controls battery component
help:
de: aktive Batteriesteuerung (Modbus/TCP schreibend)
en: active battery control (Modbus/TCP Write Access)
usages: ["battery"]
- name: watchdog
type: duration
default: 60s
description:
de: Batteriesteuerung API-Timeout
en: battery control API timeout
usages: ["battery"]
advanced: true
- preset: battery-params
render: |
type: custom
{{- if eq .usage "grid" }}
power:
source: modbus
{{- include "modbus" . | indent 2 }}
register:
address: {{ .grid_power_register }} # GridActivePower (W)
type: input
encoding: float32
energy:
source: modbus
{{- include "modbus" . | indent 2 }}
register:
address: {{ .grid_energy_register }} # GridBuyActiveEnergy (Wh)
type: holding
encoding: float64
scale: 0.001 # Wh -> kWh
{{- end }}
{{- if eq .usage "pv" }}
power:
source: modbus
{{- include "modbus" . | indent 2 }}
register:
address: {{ .pv_power_register }} # ProductionActivePower (W)
type: input
encoding: float32
energy:
source: modbus
{{- include "modbus" . | indent 2 }}
register:
address: {{ .pv_energy_register }} # ProductionActiveEnergy (Wh)
type: holding
encoding: float64
scale: 0.001 # Wh -> kWh
maxacpower: {{ .maxacpower }} # W
{{- end }}
{{- if eq .usage "battery" }}
power:
source: modbus
{{- include "modbus" . | indent 2 }}
register:
address: {{ .battery_power_register }} # EssDischargePower (W)
type: input
encoding: float32
soc:
source: modbus
{{- include "modbus" . | indent 2 }}
register:
address: {{ .battery_soc_register }} # EssSoc (%)
type: input
encoding: uint16
{{- if .battery }}
batterymode:
source: watchdog
timeout: {{ .watchdog }} # re-write at timeout/2
reset: 1
set:
source: switch
switch:
- case: 1 # normal
set:
source: const
value: 0
set:
source: modbus
{{- include "modbus" . | indent 10 }}
register:
address: {{ .battery_set_register }} # SetActivePowerLessOrEquals (W)
type: writemultiple
encoding: float32
- case: 2 # hold
set:
source: const
value: 0
set:
source: modbus
{{- include "modbus" . | indent 10 }}
register:
address: {{ .battery_set_register }}
type: writemultiple
encoding: float32
- case: 3 # charge
set:
{{- if .maxchargepower }}
source: const
value: {{ mul .maxchargepower -1 }} # charge power is negative
set:
source: modbus
{{- include "modbus" . | indent 10 }}
register:
address: {{ .battery_set_register }}
type: writemultiple
encoding: float32
{{- else }}
source: error
error: ErrNotAvailable
{{- end }}
{{- end }}
{{- include "battery-params" . }}
{{- end }}