diff --git a/packages/modules/web_themes/colors/source/src/assets/js/helpers.ts b/packages/modules/web_themes/colors/source/src/assets/js/helpers.ts index 0c4703ca7f..d7f7dd77e0 100755 --- a/packages/modules/web_themes/colors/source/src/assets/js/helpers.ts +++ b/packages/modules/web_themes/colors/source/src/assets/js/helpers.ts @@ -141,7 +141,10 @@ export function fgColor(colorname: string) { const root = document.documentElement const style = getComputedStyle(root) colorname = colorname.slice(4, -1) // remove 'var(...)' - const bgColor = style.getPropertyValue(colorname).trim() + let bgColor = style.getPropertyValue(colorname).trim() + if (bgColor.length === 4) { + bgColor = `#${bgColor[1]}${bgColor[1]}${bgColor[2]}${bgColor[2]}${bgColor[3]}${bgColor[3]}` // convert #RGB to #RRGGBB + } const r = parseInt(bgColor.slice(1, 3), 16) const g = parseInt(bgColor.slice(3, 5), 16) const b = parseInt(bgColor.slice(5, 7), 16) diff --git a/packages/modules/web_themes/colors/source/src/assets/js/mqttClient.ts b/packages/modules/web_themes/colors/source/src/assets/js/mqttClient.ts index ed91c43405..8419a156bc 100644 --- a/packages/modules/web_themes/colors/source/src/assets/js/mqttClient.ts +++ b/packages/modules/web_themes/colors/source/src/assets/js/mqttClient.ts @@ -17,7 +17,8 @@ const mqttConnection = { protocol: (location.protocol == 'https:' ? 'wss' : 'ws') as mqtt.MqttProtocol, connectTimeout: 4000, reconnectPeriod: 4000, - clean: false, + //clean: false, + resubscribe: true, clientId: Math.random() .toString(36) .replace(/[^a-z]+/g, '') diff --git a/packages/modules/web_themes/colors/source/src/assets/js/processMessages.ts b/packages/modules/web_themes/colors/source/src/assets/js/processMessages.ts index 42dfbdbfdb..a47a9635a3 100755 --- a/packages/modules/web_themes/colors/source/src/assets/js/processMessages.ts +++ b/packages/modules/web_themes/colors/source/src/assets/js/processMessages.ts @@ -307,6 +307,7 @@ function processSystemMessages(topic: string, message: string) { break case 'inverter': case 'inverter_secondary': + case 'external_inverter': if (!pvSystems.value.has(config.id)) { pvSystems.value.set(config.id, new PvSystem(config.id)) } diff --git a/packages/modules/web_themes/colors/source/src/assets/js/themeConfig.ts b/packages/modules/web_themes/colors/source/src/assets/js/themeConfig.ts index ad1aadc8ac..796d7dda5f 100644 --- a/packages/modules/web_themes/colors/source/src/assets/js/themeConfig.ts +++ b/packages/modules/web_themes/colors/source/src/assets/js/themeConfig.ts @@ -11,6 +11,7 @@ import { addShDevice, shDevices } from '@/components/smartHome/model' import { registry } from './model' import { updateServer } from './sendMessages' import { counters } from '@/components/counterList/model' +import { vehicles } from '@/components/chargePointList/model' export class Config { private _showRelativeArcs = false showTodayGraph = true @@ -48,6 +49,7 @@ export class Config { zoomGraph = false zoomedWidget = 1 countersToShow: number[] = [] + vehiclesWithSocToShow: number[] = [] priorities: Map = new Map() constructor() {} get showRelativeArcs() { @@ -405,6 +407,7 @@ export const infotext: { [key: string]: string } = { interface Preferences { hideSH?: string[] showCtr?: string[] + showSoc?: string[] showLG?: boolean displayM?: string stackO?: number @@ -441,6 +444,9 @@ function writeCookie() { prefs.showCtr = [...counters.values()] .filter((ctr) => ctr.showInGraph) .map((ctr) => ctr.id.toString()) + prefs.showSoc = Object.values(vehicles) + .filter((v) => v.showSoc) + .map((v) => v.id.toString()) prefs.showLG = globalConfig.graphPreference == 'live' prefs.stackO = globalConfig.usageStackOrder prefs.maxPow = globalConfig.maxPower @@ -479,6 +485,9 @@ function readCookie() { if (prefs.showCtr !== undefined) { globalConfig.countersToShow = prefs.showCtr.map((i) => +i) } + if (prefs.showSoc != undefined) { + globalConfig.vehiclesWithSocToShow = prefs.showSoc.map((i) => +i) + } if (prefs.showLG !== undefined) { globalConfig.setGraphPreference(prefs.showLG ? 'live' : 'today') } diff --git a/packages/modules/web_themes/colors/source/src/components/chargePointList/compactList/CompactListItem.vue b/packages/modules/web_themes/colors/source/src/components/chargePointList/compactList/CompactListItem.vue index 498a81a1c7..65e879f2a7 100755 --- a/packages/modules/web_themes/colors/source/src/components/chargePointList/compactList/CompactListItem.vue +++ b/packages/modules/web_themes/colors/source/src/components/chargePointList/compactList/CompactListItem.vue @@ -49,19 +49,19 @@ class="d-flex justify-content-center align-items-center vehiclestatus" > import { ref, computed } from 'vue' -import { chargePoints, type ChargeLimit, type ChargePoint } from '../model' +import { + chargePoints, + vehicles, + type ChargeLimit, + type ChargePoint, +} from '../model' import { chargemodes, globalConfig } from '@/assets/js/themeConfig' import { formatWatt, formatWattH } from '@/assets/js/helpers' import ChargeConfigPanel from '../cpConfig/ChargeConfigPanel.vue' diff --git a/packages/modules/web_themes/colors/source/src/components/chargePointList/cpConfig/ConfigPv.vue b/packages/modules/web_themes/colors/source/src/components/chargePointList/cpConfig/ConfigPv.vue index d820678972..047ddd8802 100755 --- a/packages/modules/web_themes/colors/source/src/components/chargePointList/cpConfig/ConfigPv.vue +++ b/packages/modules/web_themes/colors/source/src/components/chargePointList/cpConfig/ConfigPv.vue @@ -18,7 +18,7 @@ id="minCurrent" v-model="cp.pvMinCurrent" :min="6" - :max="32" + :max="16" :step="1" unit="A" /> @@ -66,7 +66,7 @@ v-model="cp.pvMinSocCurrent" class="grid-col-2" :min="6" - :max="32" + :max="16" :step="1" unit="A" /> diff --git a/packages/modules/web_themes/colors/source/src/components/chargePointList/model.ts b/packages/modules/web_themes/colors/source/src/components/chargePointList/model.ts index f041eaeeac..61686d6d45 100755 --- a/packages/modules/web_themes/colors/source/src/components/chargePointList/model.ts +++ b/packages/modules/web_themes/colors/source/src/components/chargePointList/model.ts @@ -6,7 +6,7 @@ import { type EnergyData, type PowerItem, } from '@/assets/js/types' -import { globalConfig } from '@/assets/js/themeConfig' +import { globalConfig, savePrefs } from '@/assets/js/themeConfig' import { getColor } from '@/assets/js/model' export class ChargePoint implements PowerItem { id: number @@ -392,6 +392,7 @@ export class Vehicle { private _chargeTemplateId = 0 isSocConfigured = false isSocManual = false + private _showSoc = true get chargeTemplateId() { return this._chargeTemplateId } @@ -427,6 +428,13 @@ export class Vehicle { (this.id != 0 || globalConfig.showStandardVehicle) ) } + get showSoc(): boolean { + return this._showSoc + } + set showSoc(b: boolean) { + this._showSoc = b + savePrefs() + } } export interface ConnectedVehicleConfig { average_consumption: number @@ -582,13 +590,15 @@ export const topVehicles = computed(() => { .filter( (cp) => vehicles[cp.connectedVehicle] && - vehicles[cp.connectedVehicle].isSocConfigured, + vehicles[cp.connectedVehicle].isSocConfigured && + vehicles[cp.connectedVehicle].showSoc, ) .map((cp) => cp.connectedVehicle) const otherVehicles = Object.values(vehicles).filter( (v) => v.visible && v.isSocConfigured && + v.showSoc && !connectedVehiclesWithSoc.includes(v.id), ) result = connectedVehiclesWithSoc diff --git a/packages/modules/web_themes/colors/source/src/components/chargePointList/processMessages.ts b/packages/modules/web_themes/colors/source/src/components/chargePointList/processMessages.ts index ace2e6f43b..ad083d9510 100755 --- a/packages/modules/web_themes/colors/source/src/components/chargePointList/processMessages.ts +++ b/packages/modules/web_themes/colors/source/src/components/chargePointList/processMessages.ts @@ -126,6 +126,7 @@ export function processVehicleMessages(topic: string, message: string) { const v = new Vehicle(index) vehicles[index] = v v.priority = globalConfig.priorities.get(index) ?? 0 + v.showSoc = globalConfig.vehiclesWithSocToShow.includes(index) // console.info('New vehicle created: ' + index) } if (topic.match(/^openwb\/vehicle\/[0-9]+\/name$/i)) { @@ -138,7 +139,7 @@ export function processVehicleMessages(topic: string, message: string) { vehicles[index].name = JSON.parse(message) } else if (topic.match(/^openwb\/vehicle\/[0-9]+\/get\/soc$/i)) { // set soc for cp - vehicles[index].soc = JSON.parse(message) + vehicles[index].soc = JSON.parse(message) ?? 0 } else if (topic.match(/^openwb\/vehicle\/[0-9]+\/get\/range$/i)) { if (isNaN(+message)) { vehicles[index].range = 0 diff --git a/packages/modules/web_themes/colors/source/src/components/consumerList/ConsumerDevice.vue b/packages/modules/web_themes/colors/source/src/components/consumerList/ConsumerDevice.vue index 4374d17ab6..a4564f732a 100644 --- a/packages/modules/web_themes/colors/source/src/components/consumerList/ConsumerDevice.vue +++ b/packages/modules/web_themes/colors/source/src/components/consumerList/ConsumerDevice.vue @@ -20,6 +20,11 @@