From bf827e8f706a413281ecc03346364054237950ab Mon Sep 17 00:00:00 2001 From: Brett-S-OWB Date: Thu, 8 Oct 2026 15:41:47 +0200 Subject: [PATCH 1/4] get consumers in order --- .../koala/source/src/stores/mqtt-store.ts | 15 ++++++++------- 1 file changed, 8 insertions(+), 7 deletions(-) diff --git a/packages/modules/web_themes/koala/source/src/stores/mqtt-store.ts b/packages/modules/web_themes/koala/source/src/stores/mqtt-store.ts index bead3414f1..c9023c4816 100644 --- a/packages/modules/web_themes/koala/source/src/stores/mqtt-store.ts +++ b/packages/modules/web_themes/koala/source/src/stores/mqtt-store.ts @@ -3706,18 +3706,19 @@ export const useMqttStore = defineStore('mqtt', () => { ////////////////////////////// consumer data //////////////////////////////// /** - * Get a list of all consumers. + * Get a list of all consumers in the order of the hierarchy. * @returns Consumer[] */ const consumerList = computed(() => { const modules = getWildcardValues.value('openWB/consumer/+/module'); - return Object.keys(modules) - .map((key) => { - const id = parseInt(key.split('/')[2]); - const module = modules[key] as ConsumerModule | undefined; + return getObjectIds.value('consumer') + .filter((id) => `openWB/consumer/${id}/module` in modules) + .map((id) => { + const module = modules[`openWB/consumer/${id}/module`] as + | ConsumerModule + | undefined; return { id, name: module?.name ?? `Verbraucher ${id}` }; - }) - .sort((a, b) => a.id - b.id); + }); }); /** From a76a7e033b4ad1e19950c60fb1120d22ada17246 Mon Sep 17 00:00:00 2001 From: Brett-S-OWB Date: Thu, 8 Oct 2026 15:43:05 +0200 Subject: [PATCH 2/4] formatting --- .../koala/source/src/stores/mqtt-store.ts | 25 ++++++++----------- 1 file changed, 10 insertions(+), 15 deletions(-) diff --git a/packages/modules/web_themes/koala/source/src/stores/mqtt-store.ts b/packages/modules/web_themes/koala/source/src/stores/mqtt-store.ts index c9023c4816..acf2e27c6a 100644 --- a/packages/modules/web_themes/koala/source/src/stores/mqtt-store.ts +++ b/packages/modules/web_themes/koala/source/src/stores/mqtt-store.ts @@ -1409,7 +1409,7 @@ export const useMqttStore = defineStore('mqtt', () => { return dcMaxCurrent === undefined ? undefined : convertDcCurrentToPower(dcMaxCurrent); - }); + }); /** * Get or set the charge point connected vehicle instant charging DC power identified by the charge point id @@ -3711,12 +3711,12 @@ export const useMqttStore = defineStore('mqtt', () => { */ const consumerList = computed(() => { const modules = getWildcardValues.value('openWB/consumer/+/module'); - return getObjectIds.value('consumer') + return getObjectIds + .value('consumer') .filter((id) => `openWB/consumer/${id}/module` in modules) .map((id) => { const module = modules[`openWB/consumer/${id}/module`] as - | ConsumerModule - | undefined; + ConsumerModule | undefined; return { id, name: module?.name ?? `Verbraucher ${id}` }; }); }); @@ -3790,8 +3790,7 @@ export const useMqttStore = defineStore('mqtt', () => { const consumerSumPower = computed(() => { return (returnType: string = 'textValue') => { const power = getValue.value('openWB/consumer/get/power') as - | number - | undefined; + number | undefined; const valueObject = getValueObject.value(power); if (Object.hasOwn(valueObject, returnType)) { return valueObject[returnType as keyof ValueObject]; @@ -3841,8 +3840,7 @@ export const useMqttStore = defineStore('mqtt', () => { const consumerOnTime = computed(() => { return (consumerId: number): number | undefined => { return getValue.value(`openWB/consumer/${consumerId}/set/on_time`) as - | number - | undefined; + number | undefined; }; }); @@ -3891,8 +3889,7 @@ export const useMqttStore = defineStore('mqtt', () => { const consumerStateStr = computed(() => { return (consumerId: number): string | undefined => { return getValue.value(`openWB/consumer/${consumerId}/get/state_str`) as - | string - | undefined; + string | undefined; }; }); @@ -3921,8 +3918,7 @@ export const useMqttStore = defineStore('mqtt', () => { const consumerFaultStr = computed(() => { return (consumerId: number): string | undefined => { return getValue.value(`openWB/consumer/${consumerId}/get/fault_str`) as - | string - | undefined; + string | undefined; }; }); @@ -3934,8 +3930,7 @@ export const useMqttStore = defineStore('mqtt', () => { const consumerUsageType = computed(() => { return (consumerId: number): ConsumerUsageType | undefined => { return getValue.value(`openWB/consumer/${consumerId}/usage`, 'type') as - | ConsumerUsageType - | undefined; + ConsumerUsageType | undefined; }; }); @@ -4350,7 +4345,7 @@ export const useMqttStore = defineStore('mqtt', () => { ); }); - /** + /** * Get the hybrid inverter/battery pairs. A battery is treated as "hybrid" * when it is a direct child of an inverter in the component hierarchy * The pairing is needed for the flow calculation - (Sankey Chart). From fd44fb964166a5f5a054b5839c77962ab775bdeb Mon Sep 17 00:00:00 2001 From: Brett-S-OWB Date: Fri, 9 Oct 2026 09:07:32 +0200 Subject: [PATCH 3/4] add comment consumer module check --- .../modules/web_themes/koala/source/src/stores/mqtt-store.ts | 1 + 1 file changed, 1 insertion(+) diff --git a/packages/modules/web_themes/koala/source/src/stores/mqtt-store.ts b/packages/modules/web_themes/koala/source/src/stores/mqtt-store.ts index acf2e27c6a..3506acdef1 100644 --- a/packages/modules/web_themes/koala/source/src/stores/mqtt-store.ts +++ b/packages/modules/web_themes/koala/source/src/stores/mqtt-store.ts @@ -3713,6 +3713,7 @@ export const useMqttStore = defineStore('mqtt', () => { const modules = getWildcardValues.value('openWB/consumer/+/module'); return getObjectIds .value('consumer') + // user management: module topic is only received if access is allowed .filter((id) => `openWB/consumer/${id}/module` in modules) .map((id) => { const module = modules[`openWB/consumer/${id}/module`] as From e0662d52b097dc6decab4712fbdabd07bb2b2692 Mon Sep 17 00:00:00 2001 From: Brett-S-OWB Date: Fri, 9 Oct 2026 11:04:35 +0200 Subject: [PATCH 4/4] add consumer access --- .../koala/source/src/stores/mqtt-store.ts | 16 ++++++++++++++-- 1 file changed, 14 insertions(+), 2 deletions(-) diff --git a/packages/modules/web_themes/koala/source/src/stores/mqtt-store.ts b/packages/modules/web_themes/koala/source/src/stores/mqtt-store.ts index 3506acdef1..443400c0d1 100644 --- a/packages/modules/web_themes/koala/source/src/stores/mqtt-store.ts +++ b/packages/modules/web_themes/koala/source/src/stores/mqtt-store.ts @@ -3713,8 +3713,7 @@ export const useMqttStore = defineStore('mqtt', () => { const modules = getWildcardValues.value('openWB/consumer/+/module'); return getObjectIds .value('consumer') - // user management: module topic is only received if access is allowed - .filter((id) => `openWB/consumer/${id}/module` in modules) + .filter((id) => accessConsumerAllowed.value(id)) .map((id) => { const module = modules[`openWB/consumer/${id}/module`] as ConsumerModule | undefined; @@ -3722,6 +3721,18 @@ export const useMqttStore = defineStore('mqtt', () => { }); }); + /** + * Check if access to a specific consumer is allowed + * @param consumerId + * @returns boolean + */ + const accessConsumerAllowed = computed(() => { + return (consumerId: number) => { + const modules = getWildcardValues.value('openWB/consumer/+/module'); + return `openWB/consumer/${consumerId}/module` in modules; + }; + }); + /** * Get the consumer ids * @returns number[] @@ -4710,6 +4721,7 @@ export const useMqttStore = defineStore('mqtt', () => { batteryColor, // Consumer data consumerList, + accessConsumerAllowed, consumerIds, consumerName, consumerColor,