chargery-bms-logger/gui/qml/OverviewTiles.qml
2020-04-03 23:05:30 +02:00

214 lines
5.3 KiB
QML

import QtQuick 1.1
import com.victron.velib 1.0
import "utils.js" as Utils
OverviewPage {
id: root
property string solarchargerPrefix: "com.victronenergy.solarcharger.ttyO2"
property string batteryPrefix: "com.victronenergy.battery.ttyO4"
property string chargeryBMSPrefix: "com.victronenergy.battery.ttyUSB0"
title: qsTr("Overview")
function remainingTime(time, returninfinite) {
if (!time) {
if (returninfinite == 1) {
return "Infinite";
} else {
return "--";
}
}
var secs = Math.round(time)
var days = Math.floor(secs / 86400);
var hours = Math.floor((secs - (days * 86400)) / 3600);
var minutes = Math.floor((secs - (hours * 3600)) / 60);
var seconds = Math.floor(secs - (minutes * 60));
if (days > 0)
return qsTr("%1d %2h").arg(days).arg(hours);
if (hours)
return qsTr("%1h %2m").arg(hours).arg(minutes);
if (minutes)
return qsTr("%1m %2s").arg(minutes).arg(seconds);
return qsTr("%1s").arg(seconds);
}
function formatTime(minutes)
{
if (minutes === undefined)
return "--:--"
return Math.floor(minutes / 60) + ":" + Utils.pad(minutes % 60, 2)
}
Column {
Rectangle {
id: overviewRectangle
width: 480
height: 28
color: "#4789d0"
Timer {
id: wallClock
running: true
repeat: true
interval: 1000
triggeredOnStart: true
onTriggered: time = Qt.formatDateTime(new Date(), "hh:mm:ss")
property string time
}
MbTextDescriptionTOBO {
anchors {
left: overviewRectangle.left; leftMargin: 8
verticalCenter: parent.verticalCenter
}
text: "Overview"
}
Text {
anchors {
right: overviewRectangle.right; rightMargin: 8
verticalCenter: parent.verticalCenter
}
color: "#ffffff"
font.pointSize: 18
font.bold: true
text: wallClock.time
}
}
Rectangle {
id: batteryRectangle
width: 480
height: 70
color: "#2cc36b"
VBusItem {
id: batteryTimeToGo
bind: Utils.path(batteryPrefix, "/TimeToGo")
}
VBusItem {
id: batteryTimeLastFullCharge
bind: Utils.path(batteryPrefix, "/History/TimeSinceLastFullCharge")
}
MbItemRowTOBO {
id: batterySoc
description: qsTr("Used|Soc|Time")
values: [
MbTextBlock { item.bind: Utils.path(batteryPrefix, "/ConsumedAmphours"); width: 90; height: 25 },
MbTextBlock { item.bind: Utils.path(batteryPrefix, "/Soc"); item.unit: "%"; item.decimals: 1; width: 90; height: 25 },
MbTextBlock { item.text: remainingTime(batteryTimeToGo.value, 1); width: 90; height: 25 }
]
}
MbItemRowTOBO {
id: batteryLoad
anchors.top: batterySoc.bottom
description: qsTr("Battery Usage")
values: [
MbTextBlock { item.bind: Utils.path(batteryPrefix, "/Dc/0/Voltage"); width: 90; height: 25 },
MbTextBlock { item.bind: Utils.path(batteryPrefix, "/Dc/0/Current"); width: 90; height: 25 },
MbTextBlock { item.bind: Utils.path(batteryPrefix, "/Dc/0/Power"); width: 90; height: 25 }
]
}
}
Rectangle {
id: pvRectangle
width: 480
height: 105
color: "#FF2D2D"
MbItemRowTOBO {
id : pvStateDisplay
description: qsTr("State|Max V|W")
SystemState {
id: pvState
bind: Utils.path(solarchargerPrefix, "/State")
}
values: [
MbTextBlock { item.text: pvState.text; width: 90; height: 25 },
MbTextBlock { item.bind: Utils.path(solarchargerPrefix, "/History/Daily/0/MaxPvVoltage"); item.decimals: 2; item.unit: "V"; width: 90; height: 25 },
MbTextBlock { item.bind: Utils.path(solarchargerPrefix, "/History/Daily/0/MaxPower"); item.unit: "W"; width: 90; height: 25 }
]
}
MbItemRowTOBO {
id : pvDisplay
anchors.top: pvStateDisplay.bottom
description: qsTr("Panels")
values: [
MbTextBlock { item.bind: Utils.path(solarchargerPrefix, "/Pv/V"); width: 90; visible: true; height: 25 },
MbTextBlock { item.bind: Utils.path(solarchargerPrefix, "/Pv/I"); width: 90; visible: true; height: 25 },
MbTextBlock { item.bind: Utils.path(solarchargerPrefix, "/Yield/Power"); width: 90; height: 25 }
]
}
MbItemRowTOBO {
id : pvBattery
anchors.top: pvDisplay.bottom
description: qsTr("Battery Charge")
values: [
MbTextBlock { item.bind: Utils.path(solarchargerPrefix, "/Dc/0/Voltage"); width: 90; height: 25 },
MbTextBlock { item.bind: Utils.path(solarchargerPrefix, "/Dc/0/Current"); width: 90; height: 25 }
]
}
}
Rectangle {
id: bmsRectangle
width: 480
height: 75
color: "#404040"
MbItemRowTOBO {
id : bmsCellView1
description: qsTr("Cells Min|Max|Diff")
values: [
MbTextBlock { item.bind: Utils.path(chargeryBMSPrefix, "/Voltages/Min"); width: 90; height: 25 },
MbTextBlock { item.bind: Utils.path(chargeryBMSPrefix, "/Voltages/Max"); width: 90; height: 25 },
MbTextBlock { item.bind: Utils.path(chargeryBMSPrefix, "/Voltages/Diff"); width: 90; height: 25 }
]
}
MbItemRowTOBO {
id : bmsCellView2
anchors.top: bmsCellView1.bottom
description: qsTr("Current|Temp")
values: [
MbTextBlock { item.bind: Utils.path(chargeryBMSPrefix, "/Info/Current"); width: 90; height: 25 },
MbTextBlock { item.bind: Utils.path(chargeryBMSPrefix, "/Info/Temp/Sensor1"); width: 90; height: 25 },
MbTextBlock { item.bind: Utils.path(chargeryBMSPrefix, "/Info/Temp/Sensor2"); width: 90; height: 25 }
]
}
}
}
}