Skip to content

Commit 0f9e686

Browse files
authored
Merge pull request #433 from benderl/ui-fixes
UI fixes
2 parents db0f4dc + 959568b commit 0f9e686

File tree

9 files changed

+831
-830
lines changed

9 files changed

+831
-830
lines changed

jsconfig.json

+1
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
{}

package-lock.json

+540-445
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

package.json

+27-27
Original file line numberDiff line numberDiff line change
@@ -12,52 +12,52 @@
1212
"build-prod": "vite build --out-dir=/var/www/html/openWB/web/settings --emptyOutDir"
1313
},
1414
"dependencies": {
15-
"@fortawesome/fontawesome-svg-core": "^6.2.1",
16-
"@fortawesome/free-brands-svg-icons": "^6.2.1",
17-
"@fortawesome/free-regular-svg-icons": "^6.2.1",
18-
"@fortawesome/free-solid-svg-icons": "^6.2.1",
19-
"@fortawesome/vue-fontawesome": "^3.0.2",
20-
"@popperjs/core": "^2.11.6",
21-
"axios": "^1.6.2",
15+
"@fortawesome/fontawesome-svg-core": "^6.5.1",
16+
"@fortawesome/free-brands-svg-icons": "^6.5.1",
17+
"@fortawesome/free-regular-svg-icons": "^6.5.1",
18+
"@fortawesome/free-solid-svg-icons": "^6.5.1",
19+
"@fortawesome/vue-fontawesome": "^3.0.6",
20+
"@popperjs/core": "^2.11.8",
21+
"axios": "^1.6.8",
2222
"bootstrap": "^4.6.2",
2323
"browserify": "^17.0.0",
2424
"buffer": "^6.0.3",
25-
"chart.js": "^4.2.1",
26-
"chartjs-adapter-luxon": "^1.3.0",
25+
"chart.js": "^4.4.2",
26+
"chartjs-adapter-luxon": "^1.3.1",
2727
"chartjs-plugin-zoom": "^2.0.1",
28-
"core-js": "^3.26.1",
28+
"core-js": "^3.36.1",
2929
"crypto-browserify": "^3.12.0",
3030
"hammerjs": "^2.0.8",
31-
"jquery": "^3.6.3",
31+
"jquery": "^3.7.1",
3232
"lodash": "^4.17.21",
33-
"luxon": "^3.3.0",
34-
"mqtt": "^4.3.7",
33+
"luxon": "^3.4.4",
34+
"mqtt": "^4.3.8",
3535
"popper.js": "^1.16.1",
3636
"stream-browserify": "^3.0.0",
37-
"url": "^0.11.0",
37+
"url": "^0.11.3",
3838
"urlsafe-base64": "^1.0.0",
39-
"vue": "^3.2.45",
39+
"vue": "^3.4.21",
4040
"vue-axios": "^3.5.2",
41-
"vue-chartjs": "^5.2.0",
42-
"vue-router": "^4.1.6",
43-
"vue3-table-lite": "^1.3.0",
41+
"vue-chartjs": "^5.3.0",
42+
"vue-router": "^4.3.0",
43+
"vue3-table-lite": "^1.3.9",
4444
"vuedraggable": "^4.1.0",
4545
"vuex": "^4.1.0"
4646
},
4747
"devDependencies": {
48-
"@rushstack/eslint-patch": "^1.1.4",
49-
"@vitejs/plugin-vue": "^4.0.0",
48+
"@rushstack/eslint-patch": "^1.7.2",
49+
"@vitejs/plugin-vue": "^4.6.2",
5050
"@vue/eslint-config-prettier": "^9.0.0",
51-
"@vue/test-utils": "^2.2.6",
52-
"eslint": "^8.30.0",
53-
"eslint-plugin-vue": "^9.3.0",
51+
"@vue/test-utils": "^2.4.4",
52+
"eslint": "^8.57.0",
53+
"eslint-plugin-vue": "^9.24.0",
5454
"jsdom": "^24.0.0",
55-
"postcss": "^8.4.31",
56-
"postcss-preset-env": "^9.3.0",
55+
"postcss": "^8.4.38",
56+
"postcss-preset-env": "^9.5.3",
5757
"prettier": "^3.2.5",
5858
"rollup-plugin-node-polyfills": "^0.2.1",
59-
"vite": "^4.0.4",
59+
"vite": "^4.5.3",
6060
"vite-plugin-node-polyfills": "^0.9.0",
61-
"vitest": "^0.32.0"
61+
"vitest": "^0.32.4"
6262
}
6363
}
+113
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,113 @@
1+
<template>
2+
<openwb-base-card
3+
:title="title"
4+
class="log-card mt-3"
5+
:collapsible="true"
6+
:collapsed="true"
7+
>
8+
<template #actions>
9+
<openwb-base-avatar
10+
class="bg-success clickable"
11+
@click.stop="loadLog(logFile)"
12+
>
13+
<font-awesome-icon
14+
fixed-width
15+
:class="loading ? 'fa-spin-pulse' : ''"
16+
:icon="
17+
loading ? ['fas', 'spinner'] : ['fas', 'file-download']
18+
"
19+
/>
20+
</openwb-base-avatar>
21+
</template>
22+
<pre class="log-data mb-0">{{ logData }}</pre>
23+
</openwb-base-card>
24+
</template>
25+
26+
<script>
27+
import { library } from "@fortawesome/fontawesome-svg-core";
28+
import {
29+
faFileDownload as fasFileDownload,
30+
faSpinner as fasSpinner,
31+
} from "@fortawesome/free-solid-svg-icons";
32+
import { FontAwesomeIcon } from "@fortawesome/vue-fontawesome";
33+
34+
library.add(fasFileDownload, fasSpinner);
35+
36+
export default {
37+
name: "OpenwbLogCard",
38+
components: {
39+
FontAwesomeIcon,
40+
},
41+
props: {
42+
title: {
43+
type: String,
44+
required: true,
45+
},
46+
logFile: {
47+
type: String,
48+
required: true,
49+
},
50+
},
51+
data() {
52+
return {
53+
logData: "-- noch nicht geladen --",
54+
loading: false,
55+
};
56+
},
57+
methods: {
58+
async getFilePromise(myFile, ignore404 = false) {
59+
return this.axios
60+
.get(location.protocol + "//" + location.host + myFile)
61+
.then((response) => {
62+
return response.data;
63+
})
64+
.catch((error) => {
65+
if (error.response) {
66+
// The request was made and the server responded with a status code
67+
// that falls out of the range of 2xx
68+
if (error.response.status == 404 && ignore404) {
69+
// ignore a 404 if requested, used for rotated log files which may not exist yet
70+
return "";
71+
}
72+
return (
73+
"A 404 is expected if running node.js dev server!\n" +
74+
error.response.status +
75+
" " +
76+
error.response.statusText +
77+
": " +
78+
error.response.request.responseURL
79+
);
80+
} else if (error.request) {
81+
// The request was made but no response was received
82+
// `error.request` is an instance of XMLHttpRequest in the browser and an instance of
83+
// http.ClientRequest in node.js
84+
return error.request;
85+
} else {
86+
// Something happened in setting up the request that triggered an Error
87+
return error.message;
88+
}
89+
});
90+
},
91+
loadLog(fileName) {
92+
this.logData = "wird aktualisiert...";
93+
this.loading = true;
94+
var logContents = "";
95+
this.getFilePromise(fileName + ".1", true).then((result) => {
96+
logContents = result;
97+
this.getFilePromise(fileName).then((result) => {
98+
logContents += result;
99+
this.logData = logContents;
100+
this.loading = false;
101+
});
102+
});
103+
},
104+
},
105+
};
106+
</script>
107+
108+
<style scoped>
109+
.log-data {
110+
max-height: 70vh;
111+
overflow-y: scroll;
112+
}
113+
</style>

src/components/devices/fronius/counter_sm.vue

+42-10
Original file line numberDiff line numberDiff line change
@@ -4,16 +4,6 @@
44
Einstellungen für Fronius SmartMeter
55
<span class="small">(Modul: {{ $options.name }})</span>
66
</openwb-base-heading>
7-
<openwb-base-number-input
8-
title="Meter ID"
9-
required
10-
min="0"
11-
max="65535"
12-
:model-value="configuration.meter_id"
13-
@update:model-value="
14-
updateConfiguration($event, 'configuration.meter_id')
15-
"
16-
/>
177
<openwb-base-select-input
188
title="Kompatibilitätsmodus"
199
notSelected="Bitte auswählen"
@@ -36,6 +26,34 @@
3626
andere Variante ausprobieren.
3727
</template>
3828
</openwb-base-select-input>
29+
<openwb-base-number-input
30+
title="Meter ID"
31+
required
32+
min="0"
33+
max="65535"
34+
:model-value="configuration.meter_id"
35+
@update:model-value="
36+
updateConfiguration($event, 'configuration.meter_id')
37+
"
38+
>
39+
<template #help>
40+
Die Meter ID des SmartMeters. Diese ist normalerweise 1. Bei
41+
mehreren SmartMetern im System kann es notwendig sein, die Meter
42+
ID zu ändern. Zur Ermittlung kann der folgende Link verwendet
43+
werden. Die Meter ID kann den zurückgegebenen JSON Daten
44+
entnommen werden.
45+
<a
46+
:href="meterRealtimeUrl"
47+
target="_blank"
48+
rel="noopener noreferrer"
49+
>
50+
{{ meterRealtimeUrl }} </a
51+
><br />
52+
Im Abschnitt "Body" -> "Data" werden die installierten
53+
SmartMeter mit aktuellen Messwerten angezeigt. Die Meter ID ist
54+
die Zahl vor dem Doppelpunkt und den zugehörigen Messwerten.
55+
</template>
56+
</openwb-base-number-input>
3957
</div>
4058
</template>
4159

@@ -48,6 +66,20 @@ export default {
4866
deviceId: { default: undefined },
4967
componentId: { required: true },
5068
},
69+
computed: {
70+
meterRealtimeUrl: {
71+
get() {
72+
return `http://${this.deviceIpAddress}/solar_api/v1/GetMeterRealtimeData.cgi?Scope=System`;
73+
},
74+
},
75+
deviceIpAddress: {
76+
get() {
77+
return this.$store.state.mqtt[
78+
`openWB/system/device/${this.deviceId}/config`
79+
]?.configuration.ip_address;
80+
},
81+
},
82+
},
5183
methods: {
5284
updateConfiguration(event, path = undefined) {
5385
this.$emit("update:configuration", { value: event, object: path });

src/components/devices/fronius/inverter_secondary.vue

+32-1
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,24 @@
1111
@update:model-value="
1212
updateConfiguration($event, 'configuration.id')
1313
"
14-
/>
14+
>
15+
<template #help>
16+
Die ID des sekundären Wechselrichters. Diese ist für jede
17+
Installation individuell und muss ermittelt werden. Dafür kann
18+
der folgende Link verwendet werden. Die ID kann den
19+
zurückgegebenen JSON entnommen werden.
20+
<a
21+
:href="powerFlowUrl"
22+
target="_blank"
23+
rel="noopener noreferrer"
24+
>
25+
{{ powerFlowUrl }} </a
26+
><br />
27+
Im Abschnitt "Body" -> "Data" -> "SecondaryMeters" werden die
28+
installierten Zähler angezeigt. Die ID ist die Zahl vor dem
29+
Doppelpunkt und den zugehörigen Daten.
30+
</template>
31+
</openwb-base-number-input>
1532
</div>
1633
</template>
1734

@@ -24,6 +41,20 @@ export default {
2441
deviceId: { default: undefined },
2542
componentId: { required: true },
2643
},
44+
computed: {
45+
powerFlowUrl: {
46+
get() {
47+
return `http://${this.deviceIpAddress}/solar_api/v1/GetPowerFlowRealtimeData.fcgi?Scope=System`;
48+
},
49+
},
50+
deviceIpAddress: {
51+
get() {
52+
return this.$store.state.mqtt[
53+
`openWB/system/device/${this.deviceId}/config`
54+
]?.configuration.ip_address;
55+
},
56+
},
57+
},
2758
methods: {
2859
updateConfiguration(event, path = undefined) {
2960
this.$emit("update:configuration", { value: event, object: path });

0 commit comments

Comments
 (0)