uid: widget_heatpump tags: - v1.7 props: parameters: - context: item description: Heatpump group label: Heatpump group name: heatpump required: false type: TEXT - context: item description: Item with room temperature label: Room Temperature name: roomTemp required: false type: TEXT - context: item description: Item with outside temperature label: Outside Temperature name: outTemp required: false type: TEXT - context: item description: Item with Brine Pump Speed (percentage) label: Brine Pump name: brinePump required: false type: TEXT - context: item description: Item with Brine In (return to heatpump, usualy warm side) label: Brine In name: brineIn required: false type: TEXT - context: item description: Item with Brine Out (leaving heatpump, usualy cold side) label: Brine Out name: brineOut required: false type: TEXT - context: item description: Item with Supply Pump Speed (percentage) label: Supply Pump name: supplyPump required: false type: TEXT - context: item description: Item with Supply In (return to heatpump, usualy cold side) label: Supply In name: supplyIn required: false type: TEXT - context: item description: Item with Supply Out (leaving heatpump, usualy warm side) label: Supply Out name: supplyOut required: false type: TEXT - context: item description: Item with boiler temperature label: Boiler Temperature name: boilerWaterTemp required: false type: TEXT - context: item description: Item with ground label: Ground Temperature name: groundTemp required: false type: TEXT - context: item description: Item with (corrected) brine temp label: Brine Temperature name: brineTemp required: false type: TEXT - context: item description: Item with (filtered) heat temp label: Heat Temperature name: heatTemp required: false type: TEXT - context: item description: Item with (filtered) boiler temp label: Boiler Temperature name: boilerTemp required: false type: TEXT - context: item description: Item with derived heatpump mode (0-5) label: Heatpump mode name: mode required: false type: TEXT parameterGroups: [] timestamp: Sep 23, 2023, 12:26:44 PM component: f7-card config: key: = "heatpump" + items.timertick_hour.state slots: default: - component: f7-badge config: bgColor: rgba(0,0,0,0.0) style: background-image: url(/static/nibe-ground.png) background-size: 300px border-radius: 12px height: 185px left: 20px position: absolute top: 100px width: 267px - component: f7-badge config: bgColor: rgba(0,0,0,0.0) style: background-image: url(/static/nibe-house.png) background-size: 220px border-radius: 12px height: 220px left: 42px position: absolute top: 5px width: 220px - component: f7-badge config: bgColor: rgba(0,0,0,0.0) style: background-image: url(/static/nibe-heatpump.png) background-size: 28px border-radius: 0px height: 50px left: 210px position: absolute top: 152px width: 28px visible: true - component: f7-badge config: bgColor: rgba(0,0,0,0.0) style: background-image: url(/static/nibe-boiler.png) background-size: 28px border-radius: 0px height: 20px left: 210px position: absolute top: 104px width: 28px - component: f7-icon config: comment: window icon f7: "= items[props.mode==null ? props.heatpump+'_Mode' : props.mode].state==0 ? 'pause_fill' : items[props.mode==null ? props.heatpump+'_Mode' : props.mode].state==1 ? 'flame_fill' : items[props.mode==null ? props.heatpump+'_Mode' : props.mode].state==2 ? 'flame' : items[props.mode==null ? props.heatpump+'_Mode' : props.mode].state==3 ? 'drop_fill' : 'snow' " size: 27px style: color: rgb(78,103,105) left: 164px position: absolute top: 69px - component: f7-badge config: bgColor: rgba(0,0,0,0.0) style: background-image: "= items[props.mode==null ? props.heatpump+'_Mode' : props.mode].state==1 || items[props.mode==null ? props.heatpump+'_Mode' : props.mode].state==2 ? 'url(/static/nibe-supply-heat.png)' : items[props.mode==null ? props.heatpump+'_Mode' : props.mode].state==4 ? 'url(/static/nibe-supply-cool.png)' : 'url(/static/nibe-supply-off.png)' " background-size: 111px border-radius: 0px comment: room exchanger height: 29px left: 90px position: absolute top: 175px width: 111px visible: true - component: f7-badge config: bgColor: rgba(0,0,0,0.0) style: background-image: "=items[props.brinePump==null ? props.heatpump+'_EP14GP2BrinePumpSpeed' : props.brinePump].state=='0' ? 'url(/static/nibe-brine-off.png)' : Number.parseFloat(items[props.brineIn==null ? props.heatpump+'_EB100EP14BT10BrineinTemperature' : props.brineIn].state) - Number.parseFloat(items[props.brineOut==null ? props.heatpump+'_EB100EP14BT11BrineoutTemperature' : props.brineOut].state) <=1 ? 'url(/static/nibe-brine-cool.png)' : 'url(/static/nibe-brine-heat.png)' " background-size: 44px border-radius: 0px comment: brine exchanger height: 77px left: 203px position: absolute top: 205px width: 44px visible: true - component: f7-badge config: bgColor: rgba(0,0,0,0.0) style: background-image: "=items[props.mode==null ? props.heatpump+'_Mode' : props.mode].state==3 ? 'url(/static/nibe-boiler-heat.png)' : 'url(/static/nibe-boiler-off.png)' " background-image1: "= items[props.supplyPump==null ? props.heatpump+'_SupplyPumpSpeedEP14' : props.supplyPump].state!='0' && Number.parseFloat(items[props.supplyOut==null ? props.heatpump+'_BT2SupplyTempS1' : props.supplyOut].state.split(' ')[0])>= 50 ? 'url(/static/nibe-boiler-heat.png)' : 'url(/static/nibe-boiler-off.png)' " background-size: 35px border-radius: 0px comment: boiler exchanger height: 28px left: 207px position: absolute top: 124px width: 34px visible: true - component: Label config: style: --f7-card-bg-color: rgba(0,0,0,0.0) --f7-card-box-shadow: none color: white font-size: 18px left: 150px position: absolute text-align: center top: 110px width: 50px text: "= Number.parseFloat(items[props.roomTemp==null ? props.heatpump+'_BT50RoomTempS1' : props.roomTemp].state).toFixed(1)" - component: oh-link config: action: popover popoverOpen: ='.outside.info' style: --f7-card-bg-color: rgba(0,0,0,0.0) --f7-card-box-shadow: none color: gray font-size: 18px left: 20px position: absolute top: 10px text: "= Number.parseFloat(items[props.outTemp==null ? props.heatpump+'_BT1OutdoorTemperature' : props.outTemp].state).toFixed(1)" - component: Label config: style: --f7-card-bg-color: rgba(0,0,0,0.0) --f7-card-box-shadow: none color: rgb(60,40,5) font-size: 18px left: 105px position: absolute top: 255px text: "= (Number.parseFloat(items[props.groundTemp==null ? props.heatpump+'_Ground_Temp' : props.groundTemp].state)).toFixed(1)" - component: Label config: comment: left heat style: --f7-card-bg-color: rgba(0,0,0,0.0) --f7-card-box-shadow: none color: "= items[props.mode==null ? props.heatpump+'_Mode' : props.mode].state==1 || items[props.mode==null ? props.heatpump+'_Mode' : props.mode].state==2 ? 'red' : items[props.mode==null ? props.heatpump+'_Mode' : props.mode].state==4 ? 'blue' : 'rgb(95,99,49)' " left: 95px position: absolute top: 178px text: "= items[props.mode==null ? props.heatpump+'_Mode' : props.mode].state==1 || items[props.mode==null ? props.heatpump+'_Mode' : props.mode].state==2 ? Math.max(Number.parseFloat(items[props.supplyIn==null ? props.heatpump+'_EB100EP14BT3ReturnTemp' : props.supplyIn].state),Number.parseFloat(items[props.supplyOut==null ? props.heatpump+'_BT2SupplyTempS1' : props.supplyOut].state.split(' ')[0])).toFixed(1) : items[props.mode==null ? props.heatpump+'_Mode' : props.mode].state==4 ? Math.min(Number.parseFloat(items[props.supplyIn==null ? props.heatpump+'_EB100EP14BT3ReturnTemp' : props.supplyIn].state),Number.parseFloat(items[props.supplyOut==null ? props.heatpump+'_BT2SupplyTempS1' : props.supplyOut].state.split(' ')[0])).toFixed(1) : '' " - component: oh-link config: action: popover comment: middle heat popoverOpen: ='.heat.info' style: --f7-card-bg-color: rgba(0,0,0,0.0) --f7-card-box-shadow: none color: "= items[props.mode==null ? props.heatpump+'_Mode' : props.mode].state==1 || items[props.mode==null ? props.heatpump+'_Mode' : props.mode].state==2 ? 'red' : items[props.mode==null ? props.heatpump+'_Mode' : props.mode].state==4 ? 'blue' : 'rgb(95,99,49)' " left: 125px position: absolute text-align: center top: 178px width: 40px text: "=items[props.mode==null ? props.heatpump+'_Mode' : props.mode].state==1 || items[props.mode==null ? props.heatpump+'_Mode' : props.mode].state==2 || items[props.mode==null ? props.heatpump+'_Mode' : props.mode].state==4 ? Math.round(items[props.supplyPump==null ? props.heatpump+'_SupplyPumpSpeedEP14' : props.supplyPump].state.split('%')[0]*100)+'%' : 'OFF' " - component: Label config: comment: right heat style: --f7-card-bg-color: rgba(0,0,0,0.0) --f7-card-box-shadow: none color: "= items[props.mode==null ? props.heatpump+'_Mode' : props.mode].state==1 || items[props.mode==null ? props.heatpump+'_Mode' : props.mode].state==2 ? 'blue' : items[props.mode==null ? props.heatpump+'_Mode' : props.mode].state==4 ? 'red' : 'rgb(95,99,49)' " left: 161px position: absolute text-align: right top: 178px width: 35px text: "= items[props.mode==null ? props.heatpump+'_Mode' : props.mode].state==1 || items[props.mode==null ? props.heatpump+'_Mode' : props.mode].state==2 ? Math.min(Number.parseFloat(items[props.supplyIn==null ? props.heatpump+'_EB100EP14BT3ReturnTemp' : props.supplyIn].state),Number.parseFloat(items[props.supplyOut==null ? props.heatpump+'_BT2SupplyTempS1' : props.supplyOut].state.split(' ')[0])).toFixed(1) : items[props.mode==null ? props.heatpump+'_Mode' : props.mode].state==4 ? Math.max(Number.parseFloat(items[props.supplyIn==null ? props.heatpump+'_EB100EP14BT3ReturnTemp' : props.supplyIn].state),Number.parseFloat(items[props.supplyOut==null ? props.heatpump+'_BT2SupplyTempS1' : props.supplyOut].state.split(' ')[0])).toFixed(1) : '' " - component: Label config: comment: top brine style: --f7-card-bg-color: rgba(0,0,0,0.0) --f7-card-box-shadow: none color: "=items[props.mode==null ? props.heatpump+'_Mode' : props.mode].state==1 || items[props.mode==null ? props.heatpump+'_Mode' : props.mode].state==3 ? 'blue' : items[props.mode==null ? props.heatpump+'_Mode' : props.mode].state==4 ? 'red' : 'rgb(64,66,33)' " left: 199px position: absolute text-align: center top: 210px width: 50px text: "=items[props.mode==null ? props.heatpump+'_Mode' : props.mode].state==1 || items[props.mode==null ? props.heatpump+'_Mode' : props.mode].state==3 ? Math.min( Number.parseFloat(items[props.brineOut==null ? props.heatpump+'_EB100EP14BT11BrineoutTemperature' : props.brineOut].state),Number.parseFloat(items[props.brineIn==null ? props.heatpump+'_EB100EP14BT10BrineinTemperature' : props.brineIn].state)).toFixed(1) : items[props.mode==null ? props.heatpump+'_Mode' : props.mode].state==4 ? Math.max( Number.parseFloat(items[props.brineOut==null ? props.heatpump+'_EB100EP14BT11BrineoutTemperature' : props.brineOut].state),Number.parseFloat(items[props.brineIn==null ? props.heatpump+'_EB100EP14BT10BrineinTemperature' : props.brineIn].state)).toFixed(1) : '' " - component: oh-link config: action: popover comment: middle brine popoverOpen: ='.brine.info' style: --f7-card-bg-color: rgba(0,0,0,0.0) --f7-card-box-shadow: none color: "=items[props.mode==null ? props.heatpump+'_Mode' : props.mode].state==1 || items[props.mode==null ? props.heatpump+'_Mode' : props.mode].state==3 ? 'red' : items[props.mode==null ? props.heatpump+'_Mode' : props.mode].state==4 ? 'blue' : 'rgb(64,66,33)' " left: 199px position: absolute text-align: center top: 230px width: 50px text: "=items[props.brinePump==null ? props.heatpump+'_EP14GP2BrinePumpSpeed' : props.brinePump].state=='0' ? 'OFF' : Math.round(items[props.brinePump==null ? props.heatpump+'_EP14GP2BrinePumpSpeed' : props.brinePump].state.split('%')[0]*100)+'%' " - component: Label config: comment: lower brine style: --f7-card-bg-color: rgba(0,0,0,0.0) --f7-card-box-shadow: none color: "=items[props.mode==null ? props.heatpump+'_Mode' : props.mode].state==1 || items[props.mode==null ? props.heatpump+'_Mode' : props.mode].state==3 ? 'red' : items[props.mode==null ? props.heatpump+'_Mode' : props.mode].state==4 ? 'blue' : 'rgb(64,66,33)' " left: 199px position: absolute text-align: center top: 255px width: 50px text: "=items[props.mode==null ? props.heatpump+'_Mode' : props.mode].state==1 || items[props.mode==null ? props.heatpump+'_Mode' : props.mode].state==3 ? Math.max( Number.parseFloat(items[props.brineOut==null ? props.heatpump+'_EB100EP14BT11BrineoutTemperature' : props.brineOut].state),Number.parseFloat(items[props.brineIn==null ? props.heatpump+'_EB100EP14BT10BrineinTemperature' : props.brineIn].state)).toFixed(1) : items[props.mode==null ? props.heatpump+'_Mode' : props.mode].state==4 ? Math.min( Number.parseFloat(items[props.brineOut==null ? props.heatpump+'_EB100EP14BT11BrineoutTemperature' : props.brineOut].state),Number.parseFloat(items[props.brineIn==null ? props.heatpump+'_EB100EP14BT10BrineinTemperature' : props.brineIn].state)).toFixed(1) : '' " - component: Label config: style: --f7-card-bg-color: rgba(0,0,0,0.0) --f7-card-box-shadow: none color: black left: 212px position: absolute top: 104px text: "= Number.parseFloat(items[props.boilerWaterTemp==null ? props.heatpump+'_BT7HWTop' : props.boilerWaterTemp].state).toFixed(1)" - component: oh-link config: action: popover comment: boiler heating popoverOpen: ='.boiler.info' style: --f7-card-bg-color: rgba(0,0,0,0.0) --f7-card-box-shadow: none color: "=items[props.mode==null ? props.heatpump+'_Mode' : props.mode].state==3 ? 'red' : 'rgb(64,66,33)' " left: 199px position: absolute text-align: center top: 126px width: 50px text: "=items[props.mode==null ? props.heatpump+'_Mode' : props.mode].state==3 ? Number.parseFloat(items[props.supplyOut==null ? props.heatpump+'_BT2SupplyTempS1' : props.supplyOut].state.split(' ')[0]).toFixed(1) : 'OFF'" - component: oh-button config: action: popover iconColor1: "=rgb(64,66,33) " iconF7: info_circle iconSize: 20px popoverOpen: ='.heatpump.info' style: color: rgb(64,66,33) left: 202px position: absolute top: 156px - component: f7-popover config: class: = 'heatpump info' style: --f7-popover-bg-color: rgb(50,50,25) slots: default: - component: f7-list config: simpleList: true style: background-color: rgb(64,66,33) border: none color: gray marginx: 5px 5px overflow: hidden padding: 5px 5px xsmallInset: true slots: default: - component: oh-list-item config: style: border-style: none height: 15px margin: 0px 0px padding: 5px 2px title: "= 'boiler : '+items.NibeF1145_Boiler_Min.state+ ' min/day'" - component: oh-list-item config: style: height: 15px padding: 5px 2px title: "= 'heating : '+items.NibeF1145_Heat_Min.state+ ' min/day'" - component: oh-list-item config: style: height: 15px padding: 5px 2px title: "= 'passive : '+items.NibeF1145_Passive_Min.state+ ' min/day'" - component: oh-list-item config: style: height: 15px padding: 5px 2px title: "= 'cooling : '+items.NibeF1145_Cool_Min.state+ ' min/day'" - component: oh-list-item config: style: height: 15px padding: 5px 2px title: "= 'power : '+Math.round(items.NibeF1145_Boiler_Min.state*1950/60+ items.NibeF1145_Heat_Min.state*1350/60+items.NibeF1145_Passive_Min.state*30/60) + ' W/day'" - component: f7-popover config: class: = 'brine info' style: --f7-popover-bg-color: rgb(50,50,25) slots: default: - component: oh-chart config: height: 150px options: backgroundColor: transparent period: D periodVisible: false stylesheet: > .oh-chart { padding: 0px!important; inset: 0px!important; margin: 0px!important; } width1: 400px slots: grid: - component: oh-chart-grid config: height: 67% left: 35px right: 10px top: 25px series: - component: oh-time-series config: areaStyle1: {} item: "= props.brineTemp==null ? props.heatpump+'_Brine_Temp' : props.brineTemp" itemStyle: color: rgb(50, 200, 50) name: Temperature type: line title: - component: oh-chart-title config: fontSize: 10px left: center show: true style: font-size: 10px subtext: Brine temperature top: -10px tooltip: - component: oh-chart-tooltip config: trigger: axis xAxis: - component: oh-time-axis config: axisLabel: show: true boundaryGap: false gridIndex: 0 splitNumber: 3 type: time yAxis: - component: oh-value-axis config: axisLabel: formatter: "{value}C" show: true axisTick: inside: true boundaryGap: - 0% - 0% gridIndex: 0 scale: false splitLine: true type: value - component: f7-popover config: class: = 'heat info' style: --f7-popover-bg-color: rgb(50,50,25) slots: default: - component: oh-chart config: height: 150px options: backgroundColor: transparent period: D periodVisible: false stylesheet: > .oh-chart { padding: 0px!important; inset: 0px!important; margin: 0px!important; } width1: 400px slots: grid: - component: oh-chart-grid config: height: 67% left: 35px right: 10px top: 25px series: - component: oh-time-series config: areaStyle1: {} item: "= props.heatTemp==null ? props.heatpump+'_Heat_Temp' : props.heatTemp" itemStyle: color: rgb(50, 200, 50) name: Temperature type: line title: - component: oh-chart-title config: fontSize: 10px left: center show: true style: font-size: 10px subtext: Heating temperature top: -10px tooltip: - component: oh-chart-tooltip config: trigger: axis xAxis: - component: oh-time-axis config: axisLabel: show: true boundaryGap: false gridIndex: 0 splitNumber: 3 type: time yAxis: - component: oh-value-axis config: axisLabel: formatter: "{value}C" show: true axisTick: inside: true boundaryGap: - 0% - 0% gridIndex: 0 scale: false splitLine: true type: value - component: f7-popover config: class: = 'boiler info' style: --f7-popover-bg-color: rgb(50,50,25) slots: default: - component: oh-chart config: height: 150px options: backgroundColor: transparent period: D periodVisible: false stylesheet: > .oh-chart { padding: 0px!important; inset: 0px!important; margin: 0px!important; } width1: 400px slots: grid: - component: oh-chart-grid config: height: 67% left: 35px right: 10px top: 25px series: - component: oh-time-series config: areaStyle1: {} item: "= props.boilerTemp==null ? props.heatpump+'_Boiler_Temp' : props.boilerTemp" itemStyle: color: rgb(50, 200, 50) name: Temperature type: line title: - component: oh-chart-title config: fontSize: 10px left: center show: true style: font-size: 10px subtext: Boiler heating top: -10px tooltip: - component: oh-chart-tooltip config: trigger: axis xAxis: - component: oh-time-axis config: axisLabel: show: true boundaryGap: false gridIndex: 0 splitNumber: 3 type: time yAxis: - component: oh-value-axis config: axisLabel: formatter: "{value}C" show: true axisTick: inside: true boundaryGap: - 0% - 0% gridIndex: 0 scale: false splitLine: true type: value - component: f7-popover config: class: = 'outside info' style: --f7-popover-bg-color: rgb(50,50,25) slots: default: - component: oh-chart config: height: 150px options: backgroundColor: transparent period: D periodVisible: false stylesheet: > .oh-chart { padding: 0px!important; inset: 0px!important; margin: 0px!important; } width1: 400px slots: grid: - component: oh-chart-grid config: height: 67% left: 35px right: 10px top: 25px series: - component: oh-time-series config: areaStyle1: {} item: "=props.outTemp==null ? props.heatpump+'_BT1OutdoorTemperature' : props.outTemp" itemStyle: color: rgb(50, 200, 50) name: Temperature type: line title: - component: oh-chart-title config: fontSize: 10px left: center show: true style: font-size: 10px subtext: Outside temperature top: -10px tooltip: - component: oh-chart-tooltip config: trigger: axis xAxis: - component: oh-time-axis config: axisLabel: show: true boundaryGap: false gridIndex: 0 splitNumber: 3 type: time yAxis: - component: oh-value-axis config: axisLabel: formatter: "{value}C" show: true axisTick: inside: true boundaryGap: - 0% - 0% gridIndex: 0 scale: false splitLine: true type: value