Teil 5: Verwenden der SQL-Daten in Diagrammen bzw. im VIS-2
Der Hauptzweck der Datenhistorisierung liegt natürlich in der grafischen bzw. tabellarischen Darstellung, um daraus mögliche Entscheidungen abzuleiten, etwa wo setzte ich beim Börsenstrompreis mein Bezugslimit.
Eine einfache Möglichkeit zur grafischen Darstellung bieten die DIAGRAMME. Man wählt als Datenquellen die gewünschten SQL-Historisierungspunkte, stellt noch ein paar Dinge ein und … fertig.
[image: 1770367644381-664a0f95-2fc3-48ae-babe-1a8ffafab1ad-image.png]
Um das Ganze im VIS-2 anzuzeigen, nimmt man dort das Widget „Basic -IFrame“ und gibt bei Allgemein – Quelle den Link aus den Diagrammen an.
[image: 1770367662940-281a33d1-fcdc-49bb-a3d9-c0fb7ea8ecd1-image.png]
So kann man sich ein VIS-2-View nur für Diagramme bauen, bei der die gewünschte Art des Diagrammes angetippt wird:
[image: 1770367682322-9328d9e4-3448-4e5a-8c92-8eeec3f2b52c-image.png]
Die tabellarischen Darstellung im VIS-2 geschieht mit dem Widget „Basic Table“, bei dem man einen separaten Datenpunkt (Table Object ID) mit JSON-Daten befüllt. Dieses Beispiel zeigt Tages-, Monats- und Jahreswerte einer Strombilanz untereinander.
[image: 1770367711812-00a9e22f-d74a-43e7-982f-0e35c37db84a-image.png]
Die Datenpunkte dazu:
{
"alias.0.Diagrammdaten.StrombilanzJahre": {
"common": {
"name": "StrombilanzJahre",
"desc": "Manuell erzeugt",
"role": "state",
"type": "json",
"read": true,
"write": true,
"alias": {
"id": "javascript.0.variables.j006"
}
},
"type": "state",
"native": {},
"_id": "alias.0.Diagrammdaten.StrombilanzJahre",
"acl": {
"object": 1636,
"state": 1636,
"owner": "system.user.admin",
"ownerGroup": "system.group.administrator"
},
"val": "",
"from": "system.adapter.admin.0",
"user": "system.user.admin",
"ts": 1768340995710,
"ack": false
},
"alias.0.Diagrammdaten.StrombilanzMonate": {
"common": {
"name": "StrombilanzMonate",
"desc": "Manuell erzeugt",
"role": "state",
"type": "json",
"read": true,
"write": true,
"alias": {
"id": "javascript.0.variables.j005"
}
},
"type": "state",
"native": {},
"_id": "alias.0.Diagrammdaten.StrombilanzMonate",
"acl": {
"object": 1636,
"state": 1636,
"owner": "system.user.admin",
"ownerGroup": "system.group.administrator"
},
"val": "",
"from": "system.adapter.admin.0",
"user": "system.user.admin",
"ts": 1768340995710,
"ack": false
},
"alias.0.Diagrammdaten.StrombilanzTage": {
"common": {
"name": "StrombilanzTage",
"desc": "Manuell erzeugt",
"role": "state",
"type": "json",
"read": true,
"write": true,
"alias": {
"id": "javascript.0.variables.j004"
}
},
"type": "state",
"native": {},
"_id": "alias.0.Diagrammdaten.StrombilanzTage",
"acl": {
"object": 1636,
"state": 1636,
"owner": "system.user.admin",
"ownerGroup": "system.group.administrator"
},
"val": "",
"from": "system.adapter.admin.0",
"user": "system.user.admin",
"ts": 1768340995710,
"ack": false
}
}
Mit einem Javascript werden die Datenpunkte zeitgesteuert befüllt.
strSQL = "SELECT DATE_FORMAT (tag, '%Y-%m-%d') AS Tag, " +
"ROUND(SUM(pv) / 1000.0,1) AS PV, " +
"ROUND(AVG(akku)) AS Hausakku, " +
"ROUND(SUM(haus) / 1000.0,1) AS Haus, " +
"ROUND(SUM(eauto) / 1000.0,1) AS eAuto, " +
"ROUND(SUM(gen) / 1000.0,1) AS Gen, " +
"ROUND(SUM(nots) / 1000.0,1) AS Nots, " +
"ROUND(SUM(gesamt) / 1000.0,1) AS gesamt, " +
"ROUND(COUNT(autark)) AS autark " +
"FROM iobroker.tagesstatistik " +
"GROUP BY DATE_FORMAT (tag, '%Y-%m-%d') " +
"ORDER BY DATE_FORMAT (tag, '%Y-%m-%d') desc;";
sendTo('sql.0', 'query', strSQL, function (result) {
if (result.error) {
console.error(result.error);
} else {
MyTrigger (idStrombilanzTage,JSON.stringify(result.result));
}
});
--------------------------- Voila , das war die ganze Zauberei ---------------------------
Anregungen, Fragen etc. bitte hier anhängen.