No, I added a widget as usual (Ihope) via + on the overview page. But to be sure sending also page code:
config:
label: Overview
blocks:
- component: oh-block
config: {}
slots:
default:
- component: oh-grid-row
config: {}
slots:
default: []
- component: oh-grid-row
config: {}
slots:
default: []
- component: oh-grid-row
config: {}
slots:
default:
- component: oh-grid-col
config: {}
slots:
default:
- component: widget:PV_widget_by_ALDA
config:
Grid_L1: ModbusDataGridL1820_ValueasNumber
complete_L1: Spotreba
pv_leistung: ModbusPVPower850_ValueasNumber
batterieleistung: ModbusData_ValueasNumber
batterylevel: BatterySOC_ValueasNumber
Grid_L2: ModbusDataGridL2821_ValueasNumber
Grid_L3: ModbusDataGridL3822_ValueasNumber
- component: oh-grid-col
config: {}
slots:
default: []
- component: oh-grid-col
config: {}
slots:
default: []
- component: oh-grid-row
config: {}
slots:
default:
- component: oh-grid-col
config: {}
slots:
default: []
- component: oh-grid-row
config: {}
slots:
default:
- component: oh-grid-col
config: {}
slots:
default:
- component: oh-label-card
config:
item: ModbusDatarelay1806_ValueasSwitch
title: BOJLER
footer: 1=OFF / 0=ON
- component: oh-grid-col
config: {}
slots:
default:
- component: oh-toggle-card
config:
item: shelly11921680123_Napajeni
title: Prodlužovačka
- component: oh-grid-col
config: {}
slots:
default:
- component: oh-label-card
config:
title: RELÉ 2
item: Relay_2_status
- component: oh-grid-row
config: {}
slots:
default:
- component: oh-grid-col
config: {}
slots:
default:
- component: oh-label-card
config:
trendItem: real_kuch
action: analyzer
actionAnalyzerItems:
- real_kuch
title: TEPLOTA KUCHYŇ
item: real_kuch
- component: oh-grid-col
config: {}
slots:
default:
- component: oh-label-card
config:
trendItem: real_oby_ter
action: analyzer
actionAnalyzerItems:
- real_oby_ter
title: TEPLOTA OBYVÁK T
item: real_oby_ter
- component: oh-grid-col
config: {}
slots:
default:
- component: oh-label-card
config:
trendItem: real_oby_l_o
action: analyzer
actionAnalyzerItems:
- real_oby_l_o
title: TEPLOTA OBYVÁK LO
item: real_oby_l_o
- component: oh-grid-row
config: {}
slots:
default:
- component: oh-grid-col
config: {}
slots:
default:
- component: oh-label-card
config:
trendItem: real_prac_ul
action: analyzer
actionAnalyzerItems:
- real_prac_ul
title: TEPLOTA PRACOVNA UL
item: real_prac_ul
- component: oh-grid-col
config: {}
slots:
default:
- component: oh-label-card
config:
trendItem: real_pok_jach
action: analyzer
actionAnalyzerItems:
- real_pok_jach
title: TEPLOTA POK JÁCHYM
item: real_pok_jach
- component: oh-grid-col
config: {}
slots:
default:
- component: oh-label-card
config:
trendItem: real_loz
action: analyzer
actionAnalyzerItems:
- real_loz
title: TEPLOTA LOŽNICE
item: real_loz
- component: oh-grid-row
config: {}
slots:
default:
- component: oh-grid-col
config: {}
slots:
default:
- component: oh-label-card
config:
trendItem: real_pok_jak
action: analyzer
actionAnalyzerItems:
- real_pok_jak
title: TEPLOTA POK JAKUB
item: real_pok_jak
- component: oh-grid-col
config: {}
slots:
default:
- component: oh-label-card
config:
trendItem: real_pok_host
action: analyzer
actionAnalyzerItems:
- real_pok_host
title: TEPLOTA POK HOSTÉ
item: real_pok_host
- component: oh-grid-col
config: {}
slots:
default:
- component: oh-label-card
config:
trendItem: real_prac_krk
action: analyzer
actionAnalyzerItems:
- real_prac_krk
title: TEPLOTA PRACOVNA KRK
item: real_prac_krk
- component: oh-grid-row
config: {}
slots:
default:
- component: oh-grid-col
config: {}
slots:
default:
- component: oh-label-card
config:
trendItem: real_oby_o_s
action: analyzer
actionAnalyzerItems:
- real_oby_o_s
title: TEPLOTA OBYVÁK OS
item: real_oby_o_s
- component: oh-grid-col
config: {}
slots:
default:
- component: oh-label-card
config:
trendItem: real_oby_p_o
action: analyzer
actionAnalyzerItems:
- real_oby_p_o
title: TEPLOTA OBYVÁK PO
item: real_oby_p_o
- component: oh-grid-col
config: {}
slots:
default: []
- component: oh-grid-row
config: {}
slots:
default: []
masonry: []
grid: null
canvas: null
and here is a widget code (source is SMA widget):
uid: PV_widget_by_ALDA
tags: []
props:
parameters:
- context: item
label: Grid L1
name: Grid_L1
required: true
type: TEXT
- context: item
label: Grid L2
name: Grid_L2
required: true
type: TEXT
- context: item
label: Grid L3
name: Grid_L3
required: true
type: TEXT
- context: item
label: Complete consumption L1
name: complete_L1
required: true
type: TEXT
- context: item
label: PV Production
name: pv_leistung
required: true
type: TEXT
- context: item
label: Battery Power
name: batterieleistung
required: true
type: TEXT
- context: item
label: Batterie SOC
name: batterylevel
required: true
type: TEXT
parameterGroups: []
timestamp: Oct 8, 2022, 6:07:48 AM
component: f7-card
config:
style:
noShadow: false
padding: 0px
border-radius: var(--f7-card-expandable-border-radius)
box-shadow: 5px 5px 10px 1px rgba(0,0,0,0.1)
background-color: "=props.bgcolor ? props.bgcolor : ''"
height: 460px
margin-left: 5px
margin-right: 5px
slots:
content:
- component: f7-block
config:
style:
--f7-theme-color: var(--f7-text-color)
display: flex
padding: 0
slots:
default:
- component: f7-col
config:
style:
align-items: center
display: flex
flex-direction: column
slots:
default:
- component: f7-block
config:
style:
align-items: center
display: flex
flex-direction: column
height: 120px
justify-content: center
margin-top: 0
width: 120px
- component: f7-block
config:
style:
align-items: center
display: flex
flex-direction: column
height: 120px
justify-content: center
margin-top: 0
width: 120px
slots:
default:
- component: oh-icon
config:
action: navigate
actionPage: page:page_6951b7703d
height: 110px
icon: sma_grid_2
- component: Label
config:
style:
color: '=(Number.parseFloat(items[props.Grid_L1].state.split(" ")[0]) >= 0) ? "red" : "green"'
font-size: 25px
font-weight: bold
margin-top: -10px
text-align: center
width: 100px
text: = items[props.Grid_L1].state + ' ᵂ'
- component: f7-block
config:
style:
align-items: center
display: flex
flex-direction: column
height: 120px
justify-content: center
margin-top: 0
width: 120px
slots:
default:
- component: Label
config:
style:
font-size: 15px
font-weight: bold
margin-top: 50px
text-align: center
width: 100px
text: = items[props.Grid_L2].state + ' ᵂ'
- component: Label
config:
style:
font-size: 15px
font-weight: bold
margin-top: 0px
text-align: center
width: 100px
text: = items[props.Grid_L3].state + ' ᵂ'
- component: f7-col
config:
style:
align-items: center
display: flex
flex-direction: column
flex-grow: 1
slots:
default:
- component: f7-block
config:
style:
align-items: center
display: flex
flex-direction: column
height: 120px
justify-content: center
margin-top: 0
width: 120px
slots:
default:
- component: Label
config:
style:
font-size: 25px
font-weight: bold
text-align: center
width: 100px
text: =Math.round(items[props.pv_leistung].state) + ' ᵂ'
- component: oh-icon
config:
action: navigate
actionPage: page:page_6951b7703d
height: 110px
icon: sma_pv_2
style:
margin-top: -20px
- component: f7-block
config:
style:
display: flex
justify-content: center
margin: 0
padding: 0
width: 100%
slots:
default:
- component: f7-row
config:
preserveAspectRatio: xMidYMid slice
style:
height: auto
width: auto
tag: svg
viewBox: 0 0 100 100
xmlns: http://www.w3.org/2000/svg
slots:
default:
- component: f7-row
config:
d: M60 -5 v10 c0 30 10 35 30 35 h20
fill: none
id: path1
stroke: rgba(100, 150, 200, 0.8)
stroke-width: 2
tag: path
vector-effect: non-scaling-stroke
visible: '=(Number.parseFloat(items[props.batterieleistung].state.split(" ")[0]) > 50) ? true : false'
- component: f7-row
config:
fill: rgba(100, 150, 200, 0.8)
r: 6
style:
stroke-width: 4
tag: circle
vector-effect: non-scaling-stroke
visible: '=(Number.parseFloat(items[props.batterieleistung].state.split(" ")[0]) > 50) ? true : false'
slots:
default:
- component: f7-row
config:
calcMode: linear
dur: 4s
repeatCount: indefinite
tag: animateMotion
slots:
default:
- component: f7-row
config:
tag: mpath
xlink:href: "#path1"
- component: f7-row
config:
d: M40 -5 v10 c0 40 -10 35 -30 35 h-20
fill: none
id: path2
stroke: rgba(100, 150, 200, 0.8)
stroke-width: 2
tag: path
vector-effect: non-scaling-stroke
visible: '=(Number.parseFloat(items[props.Grid_L1].state.split(" ")[0]) < -50) ? true : false'
- component: f7-row
config:
fill: rgba(100, 150, 200, 0.8)
r: 6
strokeWidth: 10
tag: circle
vectorEffect: non-scaling-stroke
visible: '=(Number.parseFloat(items[props.Grid_L1].state.split(" ")[0]) < -50) ? true : false'
slots:
default:
- component: f7-row
config:
calcMode: linear
dur: 4s
repeatCount: indefinite
tag: animateMotion
slots:
default:
- component: f7-row
config:
tag: mpath
xlink:href: "#path2"
- component: f7-row
config:
d: M50, 0 v100
fill: none
id: path3
stroke: rgba(100, 150, 200, 0.8)
stroke-width: 2
tag: path
vector-effect: non-scaling-stroke
visible: '=(Number.parseFloat(items[props.pv_leistung].state.split(" ")[0]) > 0 ) ? true : false'
- component: f7-row
config:
fill: rgba(100, 150, 200, 0.8)
r: 6
strokeWidth: 10
tag: circle
vectorEffect: non-scaling-stroke
visible: '=(Number.parseFloat(items[props.pv_leistung].state.split(" ")[0]) > 0 ) ? true : false'
slots:
default:
- component: f7-row
config:
calcMode: linear
dur: 4s
repeatCount: indefinite
tag: animateMotion
slots:
default:
- component: f7-row
config:
tag: mpath
xlink:href: "#path3"
- component: f7-row
config:
d: M-5 50 l10 0 c40 0 35 10 35 50 l 0 20
fill: none
id: path4
stroke: rgba(100, 150, 200, 0.8)
stroke-width: 2
tag: path
vector-effect: non-scaling-stroke
visible: '=(Number.parseFloat(items[props.Grid_L1].state.split(" ")[0]) > 50) ? true : false'
- component: f7-row
config:
fill: rgba(100, 150, 200, 0.8)
r: 6
strokeWidth: 10
tag: circle
vectorEffect: non-scaling-stroke
visible: '=(Number.parseFloat(items[props.Grid_L1].state.split(" ")[0]) > 50) ? true : false'
slots:
default:
- component: f7-row
config:
calcMode: linear
dur: 4s
repeatCount: indefinite
tag: animateMotion
slots:
default:
- component: f7-row
config:
tag: mpath
xlink:href: "#path4"
- component: f7-row
config:
d: M 105 50 l -10 0 c -40 0 -35 10 -35 50 l 0 20
fill: none
id: path5
stroke: rgba(100, 150, 200, 0.8)
stroke-width: 2
tag: path
vector-effect: non-scaling-stroke
visible: '=(Number.parseFloat(items[props.batterieleistung].state.split(" ")[0]) < -50) ? true : false'
- component: f7-row
config:
fill: rgba(100, 150, 200, 0.8)
r: 6
strokeWidth: 10
tag: circle
vectorEffect: non-scaling-stroke
visible: '=(Number.parseFloat(items[props.batterieleistung].state.split(" ")[0]) < -50) ? true : false'
slots:
default:
- component: f7-row
config:
calcMode: linear
dur: 4s
repeatCount: indefinite
tag: animateMotion
slots:
default:
- component: f7-row
config:
tag: mpath
xlink:href: "#path5"
- component: f7-block
config:
style:
align-items: center
display: flex
flex-direction: column
height: 120px
justify-content: center
margin-top: -10px
width: 120px
slots:
default:
- component: oh-icon
config:
action: navigate
actionPage: page:page_6951b7703d
color: orange
height: 110px
icon: sma_consumption_2
- component: Label
config:
style:
font-size: 25px
font-weight: bold
margin-top: -10px
text-align: center
width: 120px
text: =items[props.complete_L1].state + ' ᵂ'
- component: f7-col
config:
style:
align-items: center
display: flex
flex-direction: column
slots:
default:
- component: f7-block
config:
style:
align-items: center
display: flex
flex-direction: column
height: 120px
justify-content: center
margin-top: 0px
width: 120px
- component: f7-block
config:
style:
align-items: center
display: flex
flex-direction: column
height: 120px
justify-content: center
margin-top: 0px
width: 120px
slots:
default:
- component: oh-link
config:
iconColor: red
iconF7: battery_0
iconSize: 33px
style:
font-size: 25px
font-weight: bold
white-space: nowrap
text: =items[props.batterylevel].state
visible: '=(Number.parseFloat(items[props.batterylevel].state.split(" ")[0]) < 35) ? true : false'
- component: oh-link
config:
iconColor: orange
iconF7: battery_25
iconSize: 33px
style:
font-size: 25px
font-weight: bold
white-space: nowrap
text: =items[props.batterylevel].state
visible: '=(Number.parseFloat(items[props.batterylevel].state.split(" ")[0]) >= 35 && Number.parseFloat(items[props.batterylevel].state.split(" ")[0]) < 75) ? true : false'
- component: oh-link
config:
iconColor: green
iconF7: battery_100
iconSize: 33px
style:
font-size: 25px
font-weight: bold
white-space: nowrap
text: =items[props.batterylevel].state
visible: '=(Number.parseFloat(items[props.batterylevel].state.split(" ")[0]) >= 75) ? true : false'
- component: oh-icon
config:
action: navigate
actionPage: page:page_6951b7703d
height: 110px
icon: sma_battery_2
style:
margin-top: -20px
- component: Label
config:
style:
color: '=(Number.parseFloat(items[props.batterieleistung].state.split(" ")[0]) <= 0) ? "red" : "green"'
font-size: 25px
font-weight: bold
margin-top: -10px
text-align: center
white-space: nowrap
width: 100px
text: =Math.abs(Number.parseFloat(items[props.batterieleistung].state.split(" ")[0])) + ' ᵂ'
visible: true
- component: f7-block
config:
style:
align-items: center
display: flex
flex-direction: column
height: 120px
justify-content: center
margin-top: 0px
width: 120px
thank you