diff --git a/packages/modules/web_themes/colors/source/src/assets/css/style.css b/packages/modules/web_themes/colors/source/src/assets/css/style.css
index 832aaaa97c..7a3041d3f4 100644
--- a/packages/modules/web_themes/colors/source/src/assets/css/style.css
+++ b/packages/modules/web_themes/colors/source/src/assets/css/style.css
@@ -201,18 +201,12 @@ body>.container-fluid {
--color-ctr7: #c19a6b;
--color-ctr8: #987654;
--color-ctr9: #f4a460;
- /* consumers use a petrol color scheme */
- --color-consumers: #009696;
- --color-consumer1: #009696;
- --color-consumer2: #00b4cc;
- --color-consumer3: #008c9e;
- --color-consumer4: #00dffc;
- --color-consumer5: #00ffff;
-
+ --color-consumers: #f16913;
--font-normal: 1.4rem;
--font-large: 1.6rem;
--font-medium: 1.2rem;
--font-small: 1rem;
+ --font-smallbadge: 0.8rem;
--font-verysmall: 0.7rem;
--font-extralarge: 1.7rem;
--font-settings: 16px;
@@ -257,7 +251,7 @@ body>.container-fluid {
.theme-dark {
--color-bg: #333333;
--color-export: #b2df8a;
- --color-axis: #666666;
+ --color-axis: #999999;
--color-grid: black;
--color-menu: #999999;
--color-frame: #666666;
diff --git a/packages/modules/web_themes/colors/source/src/assets/js/model.ts b/packages/modules/web_themes/colors/source/src/assets/js/model.ts
index dd46f2a388..341658e67b 100644
--- a/packages/modules/web_themes/colors/source/src/assets/js/model.ts
+++ b/packages/modules/web_themes/colors/source/src/assets/js/model.ts
@@ -344,14 +344,6 @@ export const sourceSummary: { [key: string]: PowerItem } = reactive({
pv: createPowerItem('pv', PowerItemType.pvSummary),
batOut: createPowerItem('batOut', PowerItemType.batterySummary),
})
-/* export const usageSummary: { [key: string]: PowerItem } = reactive({
- evuOut: createPowerItem('evuOut', PowerItemType.counter),
- charging: createPowerItem('charging', PowerItemType.chargeSummary),
- devices: createPowerItem('devices', PowerItemType.deviceSummary),
- counters: createPowerItem('counters', PowerItemType.counterSummary),
- batIn: createPowerItem('batIn', PowerItemType.batterySummary),
- house: createPowerItem('house', PowerItemType.house),
-}) */
export const globalData = reactive(new GlobalData())
export const etPriceList = ref('')
export const energyMeterNeedsRedraw = ref(false)
diff --git a/packages/modules/web_themes/colors/source/src/components/NavigationBar.vue b/packages/modules/web_themes/colors/source/src/components/NavigationBar.vue
index 3ce17540ea..39faa02fe1 100755
--- a/packages/modules/web_themes/colors/source/src/components/NavigationBar.vue
+++ b/packages/modules/web_themes/colors/source/src/components/NavigationBar.vue
@@ -44,36 +44,17 @@
>
-
+
+ Einstellungen
+
@@ -81,6 +62,11 @@
+
+
+ Look & Feel
+
+
diff --git a/packages/modules/web_themes/colors/source/src/components/consumerList/ConsumerList.vue b/packages/modules/web_themes/colors/source/src/components/consumerList/ConsumerList.vue
index 80280c11dd..4b00971593 100644
--- a/packages/modules/web_themes/colors/source/src/components/consumerList/ConsumerList.vue
+++ b/packages/modules/web_themes/colors/source/src/components/consumerList/ConsumerList.vue
@@ -5,6 +5,9 @@
Verbraucher
+
+
diff --git a/packages/modules/web_themes/colors/source/src/components/consumerList/model.ts b/packages/modules/web_themes/colors/source/src/components/consumerList/model.ts
index 0712e2033f..62cce8463d 100644
--- a/packages/modules/web_themes/colors/source/src/components/consumerList/model.ts
+++ b/packages/modules/web_themes/colors/source/src/components/consumerList/model.ts
@@ -65,6 +65,9 @@ export class Consumer implements PowerItem {
showInList = true
priority = 0
usage: ConsumerUsage | null = null
+ statusText = ''
+ faultState = 0
+ faultText = ''
now: EnergyData = {
energy: 0,
energyPv: 0,
@@ -110,14 +113,12 @@ export class Consumer implements PowerItem {
export const consumers = reactive(new Map())
export function addConsumer(index: number, showInList = true) {
- const consumerColorCount = 5
+ const consumerColorCount = 9
if (!consumers.has(index)) {
consumers.set(index, new Consumer(index, showInList))
const dev = consumers.get(index)!
dev.color =
- 'var(--color-consumer' +
- (((consumers.size - 1) % consumerColorCount) + 1) +
- ')'
+ 'var(--color-sh' + (((consumers.size - 1) % consumerColorCount) + 1) + ')'
// console.log('Added consumer with index ' + index + ' and color ' + dev.color)
} else {
console.warn('Consumer with index ' + index + ' already exists.')
diff --git a/packages/modules/web_themes/colors/source/src/components/consumerList/processMessages.ts b/packages/modules/web_themes/colors/source/src/components/consumerList/processMessages.ts
index 3af92b1fc3..b97db227cd 100644
--- a/packages/modules/web_themes/colors/source/src/components/consumerList/processMessages.ts
+++ b/packages/modules/web_themes/colors/source/src/components/consumerList/processMessages.ts
@@ -48,6 +48,12 @@ function processConsumerDeviceMessages(topic: string, message: string) {
} catch (e) {
console.warn('Error parsing consumer usage data: ' + e)
}
+ } else if (topic.match(/^openWB\/consumer\/[0-9]+\/get\/state_str$/i)) {
+ dev.statusText = JSON.parse(message)
+ } else if (topic.match(/^openWB\/consumer\/[0-9]+\/get\/fault_state$/i)) {
+ dev.faultState = JSON.parse(message)
+ } else if (topic.match(/^openWB\/consumer\/[0-9]+\/get\/fault_str$/i)) {
+ dev.faultText = JSON.parse(message)
}
}
diff --git a/packages/modules/web_themes/colors/source/src/components/inverterList/IlInverter.vue b/packages/modules/web_themes/colors/source/src/components/inverterList/IlInverter.vue
index b3c5fe2aef..f5fb637a19 100755
--- a/packages/modules/web_themes/colors/source/src/components/inverterList/IlInverter.vue
+++ b/packages/modules/web_themes/colors/source/src/components/inverterList/IlInverter.vue
@@ -6,7 +6,10 @@
- {{ formatWatt(-props.inverter.power) }}
diff --git a/packages/modules/web_themes/colors/source/src/components/powerGraph/PgXAxis.vue b/packages/modules/web_themes/colors/source/src/components/powerGraph/PgXAxis.vue
index 45d020c037..ca4cf8ece7 100755
--- a/packages/modules/web_themes/colors/source/src/components/powerGraph/PgXAxis.vue
+++ b/packages/modules/web_themes/colors/source/src/components/powerGraph/PgXAxis.vue
@@ -109,7 +109,6 @@ const drawAxis1 = computed(() => {
axis
.selectAll('.tick > text')
- //.attr('color', 'var(--color-axis)')
.attr('fill', (d, i) =>
i >= 0 || graphData.graphMode == 'month' || graphData.graphMode == 'year'
? 'var(--color-axis)'
diff --git a/packages/modules/web_themes/colors/source/src/components/powerGraph/PowerGraph.vue b/packages/modules/web_themes/colors/source/src/components/powerGraph/PowerGraph.vue
index 2df44092d2..51ef2f8f47 100755
--- a/packages/modules/web_themes/colors/source/src/components/powerGraph/PowerGraph.vue
+++ b/packages/modules/web_themes/colors/source/src/components/powerGraph/PowerGraph.vue
@@ -2,6 +2,11 @@
{{ heading }}
+
@@ -28,7 +33,12 @@
-
+
+ {{ graphData.errors[0] }}
+ ({{ graphData.errors.length - 1 }} weitere Fehlermeldungen)
+
+
diff --git a/packages/modules/web_themes/colors/source/src/components/powerGraph/model.ts b/packages/modules/web_themes/colors/source/src/components/powerGraph/model.ts
index 09281bbf6a..fa6c42486a 100755
--- a/packages/modules/web_themes/colors/source/src/components/powerGraph/model.ts
+++ b/packages/modules/web_themes/colors/source/src/components/powerGraph/model.ts
@@ -62,6 +62,7 @@ export interface RawDayGraphDataItem {
export class GraphData {
data: GraphDataItem[] = []
private _graphMode = ''
+ errors: string[] = []
waitForData = true
get graphMode() {
@@ -112,7 +113,6 @@ export function setGraphData(d: GraphDataItem[]) {
} else {
graphData.data = d
graphData.waitForData = false
- console.log('graph data set')
}
}
// LIVE GRAPH
diff --git a/packages/modules/web_themes/colors/source/src/components/powerGraph/processDayGraphData.ts b/packages/modules/web_themes/colors/source/src/components/powerGraph/processDayGraphData.ts
index c64e88fb4d..9fe46a10ed 100755
--- a/packages/modules/web_themes/colors/source/src/components/powerGraph/processDayGraphData.ts
+++ b/packages/modules/web_themes/colors/source/src/components/powerGraph/processDayGraphData.ts
@@ -15,7 +15,7 @@ import { addCounter, Counter, counters } from '../counterList/model'
import { chargePoints } from '../chargePointList/model'
import { addConsumer, consumers } from '../consumerList/model'
import { PowerItemType, type PowerItem } from '@/assets/js/types'
-import { add } from '../mqttViewer/model'
+
// methods:
let gridCounters: string[] = []
// Process incoming day graph data
@@ -24,7 +24,9 @@ export function processDayGraphMessages(topic: string, message: string) {
entries: inputTable,
names: itemNames2,
totals: energyValues,
+ message: errorTextBlock,
} = JSON.parse(message)
+ graphData.errors = errorTextBlock.split('\n')
itemNames.value = new Map(Object.entries(itemNames2))
resetHistoricData()
gridCounters = []
diff --git a/packages/modules/web_themes/colors/source/src/components/powerMeter/PowerMeter.vue b/packages/modules/web_themes/colors/source/src/components/powerMeter/PowerMeter.vue
index 9fc48370e2..6bf2955b73 100755
--- a/packages/modules/web_themes/colors/source/src/components/powerMeter/PowerMeter.vue
+++ b/packages/modules/web_themes/colors/source/src/components/powerMeter/PowerMeter.vue
@@ -66,72 +66,40 @@
:config="globalConfig"
/>
-
+
-
-
+
schemes[valuesToDisplay.value.length - 1])
function labelCoordinates(item: number) {
return labelPositions[scheme.value[item]]
}
+// deliver the name, value and color to be used for the labels that show Soc and electricity price. This returns an array of 4 objects without labelCoordinates, which are added in the HTML part already
+const cornerLabels = computed(() => {
+ let result = []
+ // first label - Soc of topvehicles[0] if existing, otherwise empty
+ result.push({
+ text: topVehicles.value[0]
+ ? ` ${trimName(vehicles[topVehicles.value[0]]?.name ?? '')}: ${Math.round(vehicles[topVehicles.value[0]]?.soc ?? 0)}%`
+ : '',
+ color: 'var(--color-charging)',
+ })
+
+ // second label - Soc of topvehicles[1] if existing, otherwise empty
+ result.push({
+ text: topVehicles.value[1]
+ ? ` ${trimName(vehicles[topVehicles.value[1]]?.name ?? '')}: ${Math.round(vehicles[topVehicles.value[1]]?.soc ?? 0)}%`
+ : '',
+ color: 'var(--color-charging)',
+ })
+ // third label - Soc of the batteries if existing, otherwise Soc of topvehicles[2] if existing, otherwise empty
+ result.push({
+ text:
+ batteries.value.size > 0
+ ? ` Speicher: ${globalData.batterySoc}%`
+ : topVehicles.value[2]
+ ? ` ${trimName(vehicles[topVehicles.value[2]]?.name ?? '')}: ${Math.round(vehicles[topVehicles.value[2]]?.soc ?? 0)}%`
+ : '',
+ color:
+ batteries.value.size > 0
+ ? 'var(--color-battery)'
+ : 'var(--color-charging)',
+ })
+ // fourth label - Current electricity prices if configured, otherwise Soc of topvehicles[2] if batteries are existing, topvehicles[3], if no batteries are existing, otherwise empty
+ result.push({
+ text: etData.active
+ ? etData.etCurrentPriceString
+ : batteries.value.size > 0
+ ? topVehicles.value[2]
+ ? ` ${trimName(vehicles[topVehicles.value[2]]?.name ?? '')}: ${Math.round(vehicles[topVehicles.value[2]]?.soc ?? 0)}%`
+ : ''
+ : topVehicles.value[3]
+ ? ` ${trimName(vehicles[topVehicles.value[3]]?.name ?? '')}: ${Math.round(vehicles[topVehicles.value[3]]?.soc ?? 0)}%`
+ : '',
+ color: 'var(--color-charging)',
+ })
+
+ return result
+})
// methods
function trimName(name: string) {
diff --git a/packages/modules/web_themes/colors/source/src/components/shared/WbBadge.vue b/packages/modules/web_themes/colors/source/src/components/shared/WbBadge.vue
index 190e532c93..9159abf115 100644
--- a/packages/modules/web_themes/colors/source/src/components/shared/WbBadge.vue
+++ b/packages/modules/web_themes/colors/source/src/components/shared/WbBadge.vue
@@ -10,12 +10,14 @@ import { computed } from 'vue'
const props = defineProps<{
color?: string
bgcolor?: string
+ small?: boolean
}>()
const WbBadgestyle = computed(() => {
let result = {
color: props.color ?? 'var(--color-bg)',
'background-color': props.bgcolor ?? 'var(--color-menu)',
+ 'font-size': props.small ? 'var(--font-smallbadge)' : 'var(--font-small)',
}
return result
})
@@ -23,7 +25,6 @@ const WbBadgestyle = computed(() => {