Hallo,
ich möchte gerne meine Senec PV Anlage in HA integrieren.
Hat das schon Mal jemand gemacht?
Es gibt wohl mehrere Addons?
Welches soll ich nehmen?
Meine PV Anlage ist von 2024 / 2025.
Vielen Dank
Hallo,
ich möchte gerne meine Senec PV Anlage in HA integrieren.
Hat das schon Mal jemand gemacht?
Es gibt wohl mehrere Addons?
Welches soll ich nehmen?
Meine PV Anlage ist von 2024 / 2025.
Vielen Dank
Hallo vished,
ich habe seit 2023 eine Anlage mit Senec Home V3 Hybrid Duo am Laufen und diese seit etwa drei Monaten in HA eingebunden.
Ich verwende die „SENEC.Home V2.x/V3/V4 System“ Integration aus dem HACS. Davon verwende ich zwei Konfigs: Einmal die WEBAPI für die Langzeitwerte und den intern verbauten WR.
Klappt bisher problemlos.
Anleitung bin der Zugehörigen auf Github gefolgt: Link
Grüße, Marc
Perfekt - danke.
Das hat geklappt.
Wie sieht das bei dir im Energie Dashboard aus?
Die Entitäten habe ich nicht 100 % die gleichen, wie in der Doku?
Bei mir sieht das so aus, hab ich gerade schnell eingerichtet.
Sieht bei dir aus, als wärst du im Konfig-Screen. Oben links über den Pfeil zurück komme man in die Dashboardansicht.
Doch, hatte das für das Energy Dashboard aber nur mal schnell eingerichtet und der Punkt hat gefehlt.
Hallo,
habe auch einen Senec Speicher über die „SENEC.Home V2.x/V3/V4 System“ in HA eingebunden. Habe mir eigene Diagramme mit Hilfe von Plotly erstellt, bzw. abgekupfert. Vielleicht könnt ihr das gebrauchen.
type: custom:plotly-graph
entities:
- entity: sensor.direktverbrauch
filters:
- map_y_numbers: Math.round(Number(y))
name: Direktverbrauch
type: scatter
mode: lines
statistic: mean
period: auto
fillcolor: rgba(202,217,125,1)
stackgroup: b
line:
shape: spline
color: "#CAD97D"
width: 0
- entity: sensor.akku_entladung
filters:
- map_y_numbers: Math.round(Number(y))
name: Akku Entladung
type: scatter
mode: lines
stackgroup: b
statistic: mean
period: auto
fillcolor: rgba(108,155,196,1)
line:
shape: spline
color: "#6C9BC4"
width: 0
- entity: sensor.netzbezug
filters:
- map_y_numbers: Math.round(Number(y))
- filter: y>0
name: Netzbezug
type: scatter
mode: lines
statistic: mean
period: auto
fillcolor: rgba(238,122,6,1)
stackgroup: b
line:
shape: spline
color: "#EE7A06"
width: 0
- entity: sensor.akku_beladung
filters:
- map_y_numbers: Math.round(Number(y))
name: Akku Beladung
type: scatter
mode: lines
statistic: mean
period: auto
fillcolor: rgba(170,225,252,1)
stackgroup: b
line:
shape: spline
color: "#AAE1FC"
width: 0
- entity: sensor.netzeinspeisung
filters:
- map_y_numbers: Math.round(Number(y))
- filter: y>0
name: Netzeinspeisung
type: scatter
mode: lines
statistic: mean
period: auto
fillcolor: rgba(205,92,92,1)
stackgroup: b
line:
shape: spline
color: "#CD5C5C"
width: 0
- entity: sensor.verbrauch
filters:
- map_y_numbers: Math.round(Number(y))
name: Verbrauch
show_value: false
type: scatter
mode: lines
statistic: mean
period: auto
line:
shape: spline
width: 1
color: "#0C0B0B"
- entity: sensor.senec_webapi_acculevel_now
type: scatter
mode: lines
statistic: max
period: auto
line:
shape: hv
width: 0.7
color: "#7032FF"
filters:
- filter: y>0
- map_y_numbers: Math.round(Number(y))
name: $ex `Akku Füllstand ${ys.at(-1)}%`
- entity: sensor.verbrauch
filters:
- map_y_numbers: Math.round(Number(y))
type: indicator
mode: number
value: $ex ys.at(-1)
bgcolor: white
title:
text: Verbrauch
font:
size: 10
color: black
weight: 1000
number:
suffix: W
valueformat: ","
font:
size: 10
color: black
weight: 1000
domain:
x:
- 0
- 0.1
"y":
- 0.99
- 1
- entity: sensor.netzbezug
filters:
- map_y_numbers: Math.round(Number(y))
type: indicator
mode: number
value: $ex ys.at(-1)
bgcolor: white
title:
text: Netzbezug
font:
size: 10
color: "#EE7A06"
weight: 1000
number:
suffix: W
valueformat: ","
font:
size: 10
color: "#EE7A06"
weight: 1000
domain:
x:
- 0.15
- 0.25
"y":
- 0.99
- 1
- entity: sensor.erzeugung
filters:
- map_y_numbers: Math.round(Number(y))
type: indicator
mode: number
value: $ex ys.at(-1)
bgcolor: white
title:
text: Erzeugung
font:
size: 10
color: null
weight: 1000
number:
suffix: W
valueformat: ","
font:
size: 10
color: null
weight: 1000
domain:
x:
- 0.25
- 0.4
"y":
- 0.99
- 1
- entity: sensor.direktverbrauch
filters:
- map_y_numbers: Math.round(Number(y))
type: indicator
mode: number
value: $ex ys.at(-1)
bgcolor: white
title:
text: Direktverbrauch
font:
size: 10
color: green
weight: 1000
number:
suffix: W
valueformat: ","
font:
size: 10
color: green
weight: 1000
domain:
x:
- 0.4
- 0.55
"y":
- 0.99
- 1
- entity: sensor.netzeinspeisung
filters:
- map_y_numbers: Math.round(Number(y))
type: indicator
mode: number
value: $ex ys.at(-1)
bgcolor: white
title:
text: Netzeinspeisung
font:
size: 10
color: "#CD5C5C"
weight: 1000
number:
suffix: W
valueformat: ","
font:
size: 10
color: "#CD5C5C"
weight: 1000
domain:
x:
- 0.55
- 0.7
"y":
- 0.99
- 1
- entity: sensor.akku_beladung
filters:
- map_y_numbers: Math.round(Number(y))
type: indicator
mode: number
value: $ex ys.at(-1)
bgcolor: white
title:
text: Beladung
font:
size: 10
color: "#6C9BC4"
weight: 1000
number:
suffix: W
valueformat: ","
font:
size: 10
color: "#6C9BC4"
weight: 1000
domain:
x:
- 0.7
- 0.85
"y":
- 0.99
- 1
- entity: sensor.akku_entladung
filters:
- map_y_numbers: Math.round(Number(y))
type: indicator
mode: number
value: $ex ys.at(-1)
bgcolor: white
title:
text: Entladung
font:
size: 10
color: "#0066CC"
weight: 1000
number:
suffix: W
valueformat: ","
font:
size: 10
color: "#0066CC"
weight: 1000
domain:
x:
- 0.85
- 0.999
"y":
- 0.99
- 1
card_mod:
style: |
ha-card {
border-width: 0px;
}
title: Verbrauchsdiagramm
layout:
legend:
"y": -0.25
x: 0.02
paper_bgcolor: rgba(0,0,0,0)
plot_bgcolor: rgba(0,0,0,0)
margin:
t: 25
height: 550
xaxis:
rangeselector:
"y": 1.15
buttons:
- count: 6
step: hour
- count: 1
step: day
- count: 7
step: day
- count: 10
step: day
gridcolor: rgba(238,235,235,0.5)
showgrid: false
showspikes: true
linecolor: "#fff"
spikethickness: 2
spikedash: dot
spikecolor: "#999999"
spikemode: across
yaxis:
minallowed: 0
showgrid: true
gridcolor: rgba(238,235,235,0.6)
linecolor: null
title:
font:
size: 11
text: W
tickfont:
size: 10
side: left
yaxis2:
minallowed: 0
showgrid: false
gridcolor: rgba(238,235,235,0.6)
linecolor: null
linewidth: 0
range:
- 0
- 101
title:
font:
size: 8
color: "#7032FF"
text: "%"
tickfont:
size: 8
color: "#7032FF"
side: right
hours_to_show: 24
refresh_interval: 5
view_layout:
grid-area: view2
place-items: center
place-content: center
align-items: center
background: "#fff"
autorange_after_scroll: true
defaults:
yaxes:
fixedrange: true
zusätzlich habe ich noch analog zum Senec-Chart 2 Balkendiagramme für tägliche und monatliche Verbräuche erstellt, eine Kombination ist mir noch nicht gelungen, ich arbeite daran.
type: custom:plotly-graph
defaults:
yaxes:
fixedrange: true
entity:
period: day
type: bar
statistic: state
texttemplate: "%{y:.1f}"
textposition: auto
entities:
- entity: sensor.direktverbrauch_tag
name: Direktverbrauch
visible: true
yaxis: y3
marker:
color: "#CAD97D"
opacity: 0.5
filters:
- filter: i>0 && i < xs.length - 1
- fn: |
({ys,xs,hass}) => ({
xs: [...xs, new Date().setHours(5,0,0)],
ys: [...ys, hass.states['sensor.direktverbrauch_tag'].state],
})
- force_numeric
time_offset: 5h
- entity: sensor.direktverbrauch_tag
name: Direkti // !!nur zur Berechnung!!
internal: true
visible: legendonly
marker:
color: magenta
opacity: 2
filters:
- filter: i>0 && i < xs.length - 1
- fn: |
({ys,xs,hass}) => ({
xs: [...xs, new Date().setHours(5,0,0)],
ys: [...ys, hass.states['sensor.direktverbrauch_tag'].state],
})
- force_numeric
- store_var: dir
- entity: sensor.erzeugung_tag
name: Erzeugung
marker:
color: "#4169E1"
opacity: 2
filters:
- filter: i>0 && i < xs.length - 1
- fn: |
({ys,xs,hass}) => ({
xs: [...xs, new Date().setHours(-5,0,0)],
ys: [...ys, hass.states['sensor.erzeugung_tag'].state],
})
- store_var: erz
time_offset: "-5h"
- entity: sensor.akku_entladung_tag
name: Akku Entladung
marker:
color: "#6C9BC4"
opacity: 2
filters:
- filter: i>0 && i < xs.length - 1
- fn: |
({ys,xs,hass}) => ({
xs: [...xs, new Date().setHours(-5,0,0)],
ys: [...ys, hass.states['sensor.akku_entladung_tag'].state],
})
- force_numeric
time_offset: "-5h"
- entity: sensor.akku_entladung_tag
name: Akku Entladung
internal: true
marker:
color: "#6C9BC4"
opacity: 2
filters:
- filter: i>0 && i < xs.length - 1
- fn: |
({ys,xs,hass}) => ({
xs: [...xs, new Date().setHours(0,0,0)],
ys: [...ys, hass.states['sensor.akku_entladung_tag'].state],
})
- force_numeric
- store_var: entl
- entity: sensor.netzbezug_tag
name: Netzbezug
marker:
color: "#EE7A06"
opacity: 0.9
filters:
- filter: i>0 && i < xs.length - 1
- fn: |
({ys,xs,hass}) => ({
xs: [...xs, new Date().setHours(-5,0,0)],
ys: [...ys, hass.states['sensor.netzbezug_tag'].state],
})
time_offset: "-5h"
- entity: sensor.verbrauch_tag
name: Verbrauch // !!nur zur Berechnung!!
internal: true
marker:
color: "#428c75"
opacity: 2
filters:
- filter: i>0 && i < xs.length - 1
- fn: |
({ys,xs,hass}) => ({
xs: [...xs, new Date().setHours(5,0,0)],
ys: [...ys, hass.states['sensor.verbrauch_tag'].state],
})
- force_numeric
- store_var: verb
- entity: sensor.verbrauch_tag
name: Verbrauch
marker:
color: "#428c75"
opacity: 1
filters:
- filter: i>0 && i < xs.length - 1
- fn: |
({ys,xs,hass}) => ({
xs: [...xs, new Date().setHours(5,0,0)],
ys: [...ys, hass.states['sensor.verbrauch_tag'].state],
})
- force_numeric
time_offset: 5h
- entity: sensor.akku_beladung_tag
name: Akku Beladung
marker:
color: "#AAE1FC"
opacity: 2
filters:
- filter: i>0 && i < xs.length - 1
- fn: |
({ys,xs,hass}) => ({
xs: [...xs, new Date().setHours(5,0,0)],
ys: [...ys, hass.states['sensor.akku_beladung_tag'].state],
})
time_offset: 5h
- entity: sensor.netzeinspeisung_tag
name: Netzeinspeisung
marker:
color: rgba(205,92,92,1)
opacity: 2
filters:
- filter: i>0 && i < xs.length - 1
- fn: |
({ys,xs,hass}) => ({
xs: [...xs, new Date().setHours(5,0,0)],
ys: [...ys, hass.states['sensor.netzeinspeisung_tag'].state],
})
time_offset: 5h
- entity: ""
name: Autarkie
type: scatter
stackgroup: 0
fillcolor: rgba(202,217,125,0)
mode: lines+markers
line:
shape: hv
width: 0.5
color: null
dash: dot
filters:
- load_var: dir
- filter: i>=0
- map_y_numbers: (((y+vars.entl.ys[i])/vars.verb.ys[i])*100).toFixed(1)
unit_of_measurement: "%"
marker:
color: |-
$ex ys.map(y => {
let value = parseFloat(y);
return value > 90 ?"darkgreen" :
value > 60 ? "MidnightBlue" :
value > 3 ? "red" :
value > 2 ? "orange" :
value > 1 ? "darkblue" :
value > 0.5 ? "blue" : "green";
})
- entity: ""
name: ""
type: bar
showlegend: false
texttemplate: null // !!Abstandhalter für 1. Balken!!
hoverinfo: name
marker:
color: transparent
opacity: 0.1
yaxis: y3
filters:
- load_var: erz
- filter: i>=0
- map_y_numbers: (y/1000).toFixed(0)
unit_of_measurement: kWh
time_offset: "-5h"
layout:
paper_bgcolor: rgba(0,0,0,0)
plot_bgcolor: rgba(0,0,0,0)
barmode: stack
bargap: 0.2
uniformtext:
minsize: 10
mode: show
modebar:
orientation: v
remove: zoom
margin:
t: 25
l: 50
r: 60
height: 500
legend:
"y": -0.25
x: 0.02
xaxis:
rangeselector:
"y": 1.15
buttons:
- count: 1
step: day
- count: 7
step: day
- count: 10
step: day
- count: 30
step: day
gridcolor: rgba(238,235,235,0.3)
autorange: true
showgrid: true
linewidth: 0
linecolor: null
nticks: 7
tickformat: |-
%d %b
%Y
yaxis:
visible: true
autorange: true
yaxis2:
side: right
range:
- 0
- 101
yaxis3:
visible: false
side: left
matches: "y"
hours_to_show: 7d
refresh_interval: 5
title: Energiedaten täglich
view_layout:
position: main
hierfür werden noch zusätzlich Verbrauchhelfer benötigt.
Monatlich:
Code:
type: custom:plotly-graph
defaults:
yaxes:
fixedrange: true
entity:
period: month
type: bar
unit_of_measurement: kWh
statistic: state
texttemplate: "%{y:.1f}"
textposition: auto
entities:
- entity: sensor.direktverbrauch_kwh
name: Direktverbrauch
textposition: inside
visible: true
yaxis: y3
marker:
color: "#CAD97D"
opacity: 0.5
filters:
- filter: i>=0
- delta
- force_numeric
time_offset: 120h
- entity: sensor.direktverbrauch_kwh
name: Direktverbrauch
internal: true
yaxis: y3
marker:
color: "#CAD97D"
opacity: 0.5
filters:
- filter: i>=0
- delta
- force_numeric
- store_var: dir
- entity: sensor.senec_webapi_powergenerated_total
name: Erzeugung
marker:
color: "#4169E1"
opacity: 2
filters:
- filter: i>=0
- delta
- store_var: erz
time_offset: "-120h"
- entity: sensor.senec_webapi_accuimport_total
name: Akku Entladung
marker:
color: "#6C9BC4"
opacity: 2
filters:
- filter: i>=0
- delta
- force_numeric
- store_var: entl
time_offset: "-120h"
- entity: sensor.senec_webapi_gridimport_total
name: Netzbezug
marker:
color: "#EE7A06"
opacity: 0.9
filters:
- filter: i>=0
- delta
time_offset: "-120h"
- entity: sensor.senec_webapi_consumption_total
name: Verbrauch // nur zur Berechnung
internal: true
marker:
color: "#428c75"
opacity: 2
filters:
- filter: i>=0
- delta
- force_numeric
- store_var: verb
- entity: sensor.senec_webapi_consumption_total
name: Verbrauch
marker:
color: "#428c75"
opacity: 2
filters:
- filter: i>=0
- delta
- force_numeric
time_offset: 120h
- entity: sensor.senec_webapi_accuexport_total
name: Akku Beladung
marker:
color: "#AAE1FC"
opacity: 2
filters:
- filter: i>=0
- delta
time_offset: 120h
- entity: sensor.senec_webapi_gridexport_total
name: Netzeinspeisung
marker:
color: rgba(205,92,92,1)
opacity: 2
filters:
- filter: i>=0
- delta
time_offset: 120h
- entity: ""
name: Autarkie
type: scatter
stackgroup: 0
fillcolor: rgba(202,217,125,0)
mode: lines+markers
line:
shape: hv
width: 0.5
color: null
dash: dot
filters:
- load_var: dir
- filter: i>=0
- map_y_numbers: (((y+vars.entl.ys[i+1])/vars.verb.ys[i+1])*100).toFixed(1)
unit_of_measurement: "%"
time_offset: "-120h"
marker:
color: |-
$ex ys.map(y => {
let value = parseFloat(y);
return value > 50 ?"green" :
value > 4 ? "red" :
value > 3 ? "darkorange" :
value > 2 ? "orange" :
value > 1 ? "darkblue" :
value > 0.5 ? "blue" : "green";
})
- entity: ""
name: ddd
type: bar
texttemplate: null
showlegend: false
hoverinfo: name
marker:
color: null
opacity: 0.7
yaxis: y3
filters:
- load_var: erz
- filter: i>=0
- map_y_numbers: (y/10000).toFixed(0)
unit_of_measurement: kWh
time_offset: "-120h"
layout:
paper_bgcolor: rgba(0,0,0,0)
plot_bgcolor: rgba(0,0,0,0)
barmode: stack
bargap: 0.1
bargroupgap: 0
uniformtext:
minsize: 10
mode: show
modebar:
orientation: v
remove: zoom
margin:
t: 25
l: 50
r: 60
height: 500
legend:
"y": -0.25
x: 0.02
xaxis:
rangeselector:
"y": 1.15
buttons:
- count: 3
step: month
- count: 6
step: month
- count: 12
step: month
gridcolor: rgba(238,235,235,0.3)
autorange: true
showgrid: true
linewidth: 0
linecolor: null
nticks: 6
tickformat: |-
%b
%Y
xaxis2:
visible: false
matches: x
yaxis:
side: left
visible: true
yaxis2:
range:
- 0
- 100
yaxis3:
visible: false
side: left
matches: "y"
hours_to_show: 6M
refresh_interval: 5
title: Energiedaten monatlich
view_layout:
position: main
modebar:
orientation: h
remove: pan
gerne weiter verbessern oder abkupfern oder nachfragen, das Forum lebt davon.
Gruß Hans