Ich habe das ganze Thema HomeAssistant mit SMA Tripower 25000TL + SHM2.0 + SBS + BYD Speicher mal durchgespielt und kann ich gerne ein paar Hinweise und Tipps geben:
1. Netzwerk
Es ist unerläßlich das Euer SMA Setup an sich einwandfrei funktioniert: Im Sunnyportal müsst ihr alles sehen, die Werte aktuell sein und und und. Auch hier gilt der hier im Forum einfache aber wirksame Trick: kein WLAN nutzen, sondern alle(!, WR, SBS, SHM2.0 ALLE) SMA Komponenten mit einem Billo 10€ Netzwerk Switch zusammen verkabeln und dann ein Kabel zu Eurem Router. Ich erkläre gerne den Netzwerkern unter Euch warum man das IGMP Snooping L3 auf herkömmlichen Switche nutzen kann oder nicht oder nur teilweise oder welche Einstellungen man dort machen kann, für die meisten von Euch (gehe ich mal von aus) ist das vollkommen unnötig sich mit dem Switchen auseinander zu setzen. (Trust me: Ich mache das beruflich -.- )
2. Sunny Explorer
Habt ihr kein Installlateuer Passwort-> Abbruch, ihr seit raus. Organisiert es euch, sonst könnt ihr es gleich knicken.
3. Sunny Explorer ohne Installateuer Passwort:
Schaut das Modbus TCP mit dem Port 502 aktiviert ist, sollte default AUS sein, daher braucht ihr das Passwort oder müsst den guten Mann/Frau wiederkommen lassen.
4. Der Test
Ich meine ich hätte für Windows dieses Tool hier genutzt: https://www.modbustools.com/ Installieren, IP Adresse Eures WR/SBS eingeben und schauen ob ihr Daten für ein Register bekommt, sehen Daten komisch aus, kann das erstmal "okay" sein, aber wichtig ist das ihr dort schon Daten seht.
5. Lets get this Party started:
HomeAssistant und Modbus ist gute alte Handarbeit und yaml Datei bearbeiten, am einfachsten direkt in die configuration.yaml eintragen, hier mal meine Config:
modbus:
- name: BoyStorageModbus
type: tcp
host: 192.168.xxx.yyy
port: 502
sensors:
- name: BatterieEntladung
unit_of_measurement: W
slave: 3
count: 2
address: 31395
data_type: int32
- name: BatterieLadung
unit_of_measurement: W
slave: 3
count: 2
address: 31393
data_type: int32
- name: BatterieLadezustand
unit_of_measurement: percent
slave: 3
count: 2
address: 30845
data_type: int32
- name: BatterieTemperatur
unit_of_measurement: °C
slave: 3
count: 2
precision: 1
scale: 0.1
address: 30849
data_type: int32
- name: BatterieSpannung
unit_of_measurement: V
slave: 3
count: 2
precision: 2
scale: 0.01
address: 30851
data_type: int32
- name: TripowerModbus
type: tcp
host: 192.168.xxx.zzz
port: 502
sensors:
- name: Tripower_Innentemperatur
unit_of_measurement: °C
slave: 3
count: 2
precision: 1
scale: 0.1
address: 30953
data_type: int32
min_value: 0
- name: Tripower_Innenraumtemperatur
unit_of_measurement: °C
slave: 3
count: 2
precision: 1
scale: 0.1
address: 34113
data_type: int32
min_value: 0
- name: Erzeugung_Tag_kwh
unit_of_measurement: kWh
slave: 3
count: 2
address: 30537
state_class : total_increasing
data_type: int32
- name: Tripower_DC_Leistung_Gesamt
unit_of_measurement: W
slave: 3
count: 2
address: 30775
data_type: int32
- name: Netzfrequenz
unit_of_measurement: Hz
slave: 3
count: 2
precision: 2
scale: 0.01
address: 30803
data_type: int32
- name: Tripower_DC_Spannung_Ost
unit_of_measurement: V
slave: 3
count: 2
precision: 2
scale: 0.01
address: 30771
data_type: int32
- name: Tripower_DC_Strom_Ost
unit_of_measurement: A
slave: 3
count: 2
precision: 2
scale: 0.001
address: 30769
data_type: int32
- name: Tripower_DC_Leistung_Ost
unit_of_measurement: W
slave: 3
count: 2
address: 30773
data_type: int32
- name: Tripower_DC_Spannung_West
unit_of_measurement: V
slave: 3
count: 2
precision: 2
scale: 0.01
address: 30959
data_type: int32
- name: Tripower_DC_Strom_West
unit_of_measurement: A
slave: 3
count: 2
precision: 2
scale: 0.001
address: 30957
data_type: int32
- name: Tripower_DC_Leistung_West
unit_of_measurement: W
slave: 3
count: 2
address: 30961
data_type: int32
Alles anzeigen
Wie hier schon beschrieben gibt es dann noch tonnenweise andere Register die man auslesen kann. Ich beschränke mich hier rein auf LESEN.
6. Der not so fun Part - SMA Werte
Nun, SMA hat sich gedacht: hey wäre ja ne geile Idee wenn keine Spannung oder Strom oder Leistung oder Temperatur anliegt ... wie wäre es das ich dann einfach den maximalen negativen Wert sende den der Register erlaubt? Klingt komisch, ist aber so, d.h. wenn abends der WR ausgeht, habt ihr eine "Leistung" von -214.000.000 W oder sowas. Das macht an einigen Stellen ja irgendwie auch Sinn, sieht aber unschön aus. Aber HomeAssistant to the Rescue: Template Sensoren. Ich nehme den Wert den der WR mit sendet und schaue: hey bist du über 0, cool dann ist der neu erstellte Sensor Wert gleich dem gemeldeten Wert. Ist der Wert unter 0 ist der neu erstellte Sensor Wert 0. Meine Config dazu (auch in der configuration.yaml)
template:
- sensor:
# SMA Tripower Umrechnungen
- name: tripower_dc_spannung_ost_converted
unit_of_measurement: "V"
state_class: measurement
device_class: voltage
state: >
{% if states('sensor.tripower_dc_spannung_ost') | float(0) >= 0 %}
{% set spannung_ost = states('sensor.tripower_dc_spannung_ost') | float(0) %}
{% else %}
{% set spannung_ost = 0 %}
{% endif %}
{{ spannung_ost }}
- name: tripower_dc_spannung_west_converted
unit_of_measurement: "V"
state_class: measurement
device_class: voltage
state: >
{% if states('sensor.tripower_dc_spannung_west') | float(0) >= 0 %}
{% set spannung_west = states('sensor.tripower_dc_spannung_west') | float(0) %}
{% else %}
{% set spannung_west = 0 %}
{% endif %}
{{ spannung_west }}
- name: tripower_dc_leistung_gesamt_converted
unit_of_measurement: "W"
state_class: measurement
device_class: power
state: >
{% if states('sensor.tripower_dc_leistung_gesamt') | float(0) >= 0 %}
{% set leistung_gesamt = states('sensor.tripower_dc_leistung_gesamt') | float(0) %}
{% else %}
{% set leistung_gesamt = 0 %}
{% endif %}
{{ leistung_gesamt }}
- name: tripower_dc_leistung_ost_converted
unit_of_measurement: "W"
state_class: measurement
device_class: power
state: >
{% if states('sensor.tripower_dc_leistung_ost') | float(0) >= 0 %}
{% set leistung_ost = states('sensor.tripower_dc_leistung_ost') | float(0) %}
{% else %}
{% set leistung_ost = 0 %}
{% endif %}
{{ leistung_ost }}
- name: tripower_dc_leistung_west_converted
unit_of_measurement: "W"
state_class: measurement
device_class: power
state: >
{% if states('sensor.tripower_dc_leistung_west') | float(0) >= 0 %}
{% set leistung_west = states('sensor.tripower_dc_leistung_west') | float(0) %}
{% else %}
{% set leistung_west = 0 %}
{% endif %}
{{ leistung_west }}
- name: tripower_dc_strom_ost_converted
unit_of_measurement: "A"
state_class: measurement
device_class: current
state: >
{% if states('sensor.tripower_dc_strom_ost') | float(0) >= 0 %}
{% set strom_ost = states('sensor.tripower_dc_strom_ost') | float(0) %}
{% else %}
{% set strom_ost = 0 %}
{% endif %}
{{ strom_ost }}
- name: tripower_dc_strom_west_converted
unit_of_measurement: "A"
state_class: measurement
device_class: current
state: >
{% if states('sensor.tripower_dc_strom_west') | float(0) >= 0 %}
{% set strom_west = states('sensor.tripower_dc_strom_west') | float(0) %}
{% else %}
{% set strom_west = 0 %}
{% endif %}
{{ strom_west }}
- name: tripower_innentemperatur_converted
unit_of_measurement: "°C"
state_class: measurement
device_class: temperature
state: >
{% if states('sensor.tripower_innentemperatur') | float(0) >= 0 %}
{% set tripower_innentemp = states('sensor.tripower_innentemperatur') | float(0) %}
{% else %}
{% set tripower_innentemp = 0 %}
{% endif %}
{{ tripower_innentemp }}
Alles anzeigen