diff --git a/dashboard/app.js b/dashboard/app.js index e660148..5f3b4da 100644 --- a/dashboard/app.js +++ b/dashboard/app.js @@ -34,11 +34,12 @@ class DashboardApp { this.chargerColumns = [ { key: 'id', label: 'ID', hidden: true }, { key: 'name', label: 'Name' }, + { key: 'assignedCar', label: 'Car' }, + { key: 'energyManagerMode', label: 'Energy manager mode' }, { key: 'connected', label: 'Connected' }, + { key: 'status', label: 'Status' }, { key: 'chargingCurrent', label: 'Charging current' }, - { key: 'chargingAllowed', label: 'Charging allowed' }, { key: 'currentPower', label: 'Current power' }, - { key: 'pluggedIn', label: 'Plugged in' }, { key: 'version', label: 'Version' }, { key: 'sessionEnergy', label: 'Session energy' }, { key: 'temperature', label: 'Temperature' }, @@ -735,27 +736,42 @@ class DashboardApp { this.elements.chargerEmptyRow.classList.toggle('hidden', hasChargers); } + formatNumber(value, unit) { + if (!Number.isFinite(value)) + return '—'; + + const rounded = Number.parseFloat(value.toFixed(2)); + return unit ? `${rounded} ${unit}` : String(rounded); + } + formatChargerValue(key, value) { if (value === null || value === undefined || value === '') return '—'; - if ((key === 'currentPower' || key === 'sessionEnergy') && typeof value === 'number') { - if (!Number.isFinite(value)) - return '—'; - const unit = key === 'currentPower' ? 'kW' : 'kWh'; - if (key === 'currentPower') { - value = value / 1000; - return `${value.toFixed(2)} ${unit}`; - } + if (key === 'energyManagerMode') { + const modes = { + 0: 'Quick', + 1: 'Eco', + 2: 'Eco + Time' + }; + if (value in modes) + return modes[value]; + return Number.isFinite(value) ? `Unknown (${value})` : '—'; + } - return `${value.toFixed(2)} ${unit}`; + if ((key === 'currentPower' || key === 'sessionEnergy') && typeof value === 'number') { + const unit = key === 'currentPower' ? 'kW' : 'kWh'; + if (key === 'currentPower') + return this.formatNumber(value / 1000, unit); + + return this.formatNumber(value, unit); } if (typeof value === 'boolean') return value ? 'Yes' : 'No'; if (typeof value === 'number') - return Number.isFinite(value) ? String(value) : '—'; + return this.formatNumber(value); if (typeof value === 'string') return value; diff --git a/dashboard/index.html b/dashboard/index.html index 63c33de..0565a9e 100644 --- a/dashboard/index.html +++ b/dashboard/index.html @@ -240,7 +240,6 @@ display: flex; flex-direction: column; gap: 1.5rem; - max-width: 1100px; margin: 0 auto; width: 100%; flex: 1 1 auto; @@ -310,6 +309,7 @@ .table-wrapper { overflow-x: auto; + width: 100%; } table.chargers-table { @@ -625,11 +625,12 @@ Name + Car + Energy manager mode Connected + Status Charging current - Charging allowed Current power - Plugged in Version Session energy Temperature @@ -638,7 +639,7 @@ - No chargers loaded yet. + No chargers loaded yet. diff --git a/plugin/evdashengine.cpp b/plugin/evdashengine.cpp index efe0021..8ec50cc 100644 --- a/plugin/evdashengine.cpp +++ b/plugin/evdashengine.cpp @@ -410,6 +410,8 @@ QJsonObject EvDashEngine::packCharger(Thing *charger) const foreach (const QVariant &chargingInfoVariant, m_energyManagerClient->chargingInfos()) { QVariantMap chargingInfo = chargingInfoVariant.toMap(); if (chargingInfo.value("evChargerId").toUuid() == charger->id()) { + + // Set assigned car name if (chargingInfo.value("assignedCarId").toString().isEmpty()) { chargerObject.insert("assignedCar", ""); } else { @@ -420,9 +422,14 @@ QJsonObject EvDashEngine::packCharger(Thing *charger) const chargerObject.insert("assignedCar", ""); } } + + // Set energyManagerMode + chargerObject.insert("energyManagerMode", chargingInfo.value("chargingMode").toInt()); } } + + chargerObject.insert("connected", charger->stateValue("connected").toBool()); chargerObject.insert("status", charger->stateValue("status").toString()); chargerObject.insert("chargingCurrent", charger->stateValue("maxChargingCurrent").toDouble());