Diagramme - Kumulierte Werte pro Tag / Woche / Monat / Jahr anzeigen

Hallo :slight_smile:

Ich möchte eine Funktionalität für Diagramme vorschlagen.

Der konkreteste Anwendungsfall, den ich im Kopf habe, betrifft den Strom- oder Wasserverbrauch.

Derzeit erfasst ein Sensor alle Werte in Echtzeit und überträgt sie an Gladys, die sie in der Datenbank speichert, um das Diagramm zu generieren.

Allerdings wird, wenn man das Diagramm nach Tagen, Wochen, Monaten usw. anzeigt, derzeit ein Durchschnitt der in Echtzeit gesendeten Werte angezeigt.

Der Zweck meines Vorschlags wäre, dass man bei der Konfiguration eines Diagramms eine Option (aktivierbar oder nicht) hat, um die Summe der Werte über einen konfigurierten Zeitraum (Tage/Woche/Monat/Jahr) anzuzeigen.

Damit könnte man für ein Diagramm, das auf „Summe pro Woche“ konfiguriert ist, den gesamten Wochenverbrauch im Diagramm anzeigen und nicht mehr den Durchschnitt der Echtzeitwerte.

Ich weiß nicht, ob das sehr klar ist ^^

Vielen Dank im Voraus, falls es umsetzbar ist :wink:

Für mich ist deine Anfrage sehr klar :slight_smile: denn ich habe denselben Fall wie du mit meinem Stromverbrauch/Stromerzeugung.
Allerdings habe ich keine Ahnung, wie das gemacht werden könnte, denn das erscheint mir komplex: Ich nehme an, man müsste die Verbrauchsdaten in relativ kurzen Abständen (alle Minuten?) abrufen, um dann die Berechnung durchzuführen und sie über 24 Stunden, dann über die Woche, dann über den Monat zu summieren… wenn das machbar ist, wäre das super, aber ich habe Angst, dass es eine Datenfabrik wird!

Trotzdem würde ich diese Funktion sehr gerne haben, ich stimme dafür! :wink:

Das kommt drauf an, denn in meinem Fall ist der Verbrauch, den ich messe, bereits in kWh.

Ich muss nur alle 30 Minuten eine Messung durchführen und erhalte die in den letzten 30 Minuten verbrauchten kWh, dann setze ich meinen Zähler zurück und wiederhole den Vorgang.

Dieses Prinzip funktioniert also genauso, wenn du alle Minuten oder alle 24 Stunden eine Messung durchführst.

PS: Ich habe bereits eine Idee, wie man das mit MQTT / Node-Red aufbauen kann, ich werde das testen und dir Bescheid sagen.

Gern geschehen!

@guim31 Ich habe es geschafft, genau das zu tun, was ich wollte!

Sobald ich Zeit habe, erkläre ich dir alles das :smiley:

Super das! Ich bin sehr interessiert! :wink:

Dann habe ich in Gladys so etwas Ähnliches wie in meiner Solaredge-App (Solarpanels), das ich aber nicht über die API abrufen kann! :slight_smile:

@guim31

Um los kWh-Werte direkt in Node-Red abzurufen, musst du zunächst die gemessenen Werte abrufen

Sobald du diesen Wert hast, werden wir ihn über eine JS-Funktion in einer Node-Red-Datenbank speichern

Danach musst du den Wert so oft wie möglich aktualisieren. (In meinem Fall wird alle 0,01 kWh aktualisiert)

Der Teil zum Abrufen der Daten von deinem Messgerät ist damit abgeschlossen.

Jetzt geht es zu Gladys, hier musst du 1 MQTT-Gerät erstellen (In meinem Fall « Wechselrichter »)

In meinem Gerät habe ich 2 Funktionen erstellt:

Typ: Unbekannt
Name: Update 10 Min
Min: 0
Max: 1
Ist das ein Sensor?: Deaktiviert
(Diese Funktion ermöglicht es Gladys, Node-Red anzuweisen, eine Funktion zu aktivieren, die wir später erstellen werden)


Typ: Verbrauchte Energie
Name: Verbrauchte Energie (10 Min)
Min:0
Max: 100000
Ist das ein Sensor?: Aktiviert
(Diese Funktion ermöglicht es, Werte von Node-Red zu Gladys zu senden)




Jetzt, wo wir unsere 2 MQTT-Funktionen haben, erstellen wir unsere Funktion in Node-Red

Links ist die Funktion « Update 10 Min » mit dem Gladys-Topic « MQTT zum Abhören »
Rechts ist die Funktion « Verbrauchte Energie (10 Min) » mit dem Gladys-Topic « MQTT zum Veröffentlichen »

Wir haben eine JS-Funktion in der Mitte

//Wir überprüfen, ob die globale Variable existiert oder nicht
if(global.get("Energie10Min") === undefined)
{
    //Wenn sie nicht existiert, erstellen wir sie mit dem letzten gemessenen Wert (um unsere erste Messung zu initialisieren)
    global.set("Energie10Min", global.get("NewEnergie"));
}

//Wir berechnen die Differenz zwischen dem letzten gemessenen Wert und dem neuen und runden auf 2 Dezimalstellen
msg.payload = (global.get("NewEnergie") - global.get("Energie10Min")).toFixed(2);

//Wir speichern den neuen Wert als letzten gemessenen Wert
global.set("Energie10Min", global.get("NewEnergie"));

return msg;

Jetzt bleibt nur noch die Auslöse-Szene in Gladys zu erstellen

Wenn du mehrere Intervalle möchtest, musst du einfach 2 neue MQTT-Funktionen in deinem Modul erstellen und diesen Teil von Node-Red duplizieren


Dabei alle Informationen außer den Namen der Variablen « NewEnergie » in der JS-Funktion ändern, da dies dein automatisch aktualisierter Wert in der ersten erstellten JS-Funktion ist

Jetzt kannst du deine Werte in den Gladys-Grafiken anzeigen
/!\ Der erste in Gladys empfangene Wert wird 0 sein, du musst auf die zweite Messung warten, um die Messwerte zu erhalten

Ich habe auf meiner Seite die folgenden Messungen erstellt:
10 Min
30 Min
1 Stunde
1 Tag
1 Woche
1 Monat
1 Jahr

Und hier sind die Ergebnisse für
10 Min

30 Min

1 Stunde

Lass es mich wissen, wenn es nicht alles klar ist :wink:

das sieht auf 24 Stunden ganz nett aus, wenn man alles gleichzeitig anzeigt ^^

Die Nachfrage nach Gladys ohne NodeRed erscheint mir ebenfalls sehr sinnvoll, ich habe denselben Bedarf :blush:

Hallo @Checconio :slight_smile:

Ich habe diese Möglichkeit hier entwickelt:

Ich denke, das deckt den Bedarf ab!

Hallo :slight_smile:

Danke für die Information, das ermöglicht tatsächlich viele Möglichkeiten!

Diese Neuerung ist in Gladys Assistant 4.58 verfügbar: