Shelly plus 1PM / Auswertung über node red / influx / Grafana

  • Hallo zusammen,

    Kurz zu meinem Setup:
    Ich habe 5 Shellies (plus1PM sowie 2.5) im Einsatz, welche per MQTT mit meinem Mosquitto Server kommunizieren; Die Daten lasse ich von node red abholen und in eine influxdb pro Gerät schreiben. In Grafana kann ich dann die Daten der einzelnen Shellies auswerten und visualisieren - das funktioniert ohne Probleme.


    ABER

    Ich spiele mich jetzt schon seit einer gefühlten Ewigkeit damit die Verbrauchsdaten meiner Shellies über alle Datenbanken hinweg zu summieren um eben den Gesamtverbrauch / die aktuelle Gesamtleistung visualisieren zu können. Ich habe mnittlerweile sogar eine eigene Datenbank "Gesamt" wo ich mir mit node red die "(a)power" und "(a)energy" Werte über node red hinschreiben lasse - aber ich bekomm das einfach nicht gebacken. Die Werte aus der db "Gesamt" sind immer komplett unterschiedlich zu der manuell errechneten Summe der Einzelwerte -irgendwie hab ich da einen Denkfehler drinnen und fall über die Berechnung bzw. die inflxQL Abfrage zur Summierung.

    Also habe ich versucht die aktuelle Gesamtleistung zu visualisieren indem ich in einem Graphen die "(a)power" Werte der einzelnen db´s abfrage - scheitere aber daran die Werte in Grafana summieren zu lassen. Auch mit Ransformationen hab ich da nix hinbekommen, weil da dann irgendwelche Fantasie-Werte angezeigt werden.

    Mir ist klar dass es sich hier um ein Layer-8 Problem handelt - aber vielleicht hat ja wer von euch einen Tipp wie ich das umsetzen könnte...

    LG, Walter

  • Ich nutze fast den gleichen weg und dann in Grafana über die Transformation Reduce Total die Einzelwerte aufsummiert.

    Evlt. hast du nicht überall die exakt gleichen Zeitstempel. Über MQTT kommen die Werte mehr oder weniger beliebig übertragen, sobald sie sich ändern. Würde Immer den letzten Wert in Nodered zwischenspeichern und die Werte dann alle x Sekunden über einen JOIN Node in der InfluxDB speichern. Dadurch haben alle Werte den gleichen Zeit Stempel und können leicht addiert werden.

    Sonst gibt es wohl Möglichkeiten bei der Abfrage die Zeit Stempel über Zeit Fenster zu glätten aber das macht es komplizierter.

    VG

  • Hi,

    das mit den Zeitstempeln hab ich mir auch schon gedacht - hier schickt jedes Gerät zu unterschiedlichen Zeitpunkten die Messages.

    Wie hast du das mit dem zwischenspeichern gelöst? Ich hab für ein paar Berechnungen mit functions die Werte vom mqtt als variable abgespeichert - aber hier ist mir nicht klar wie ich es machen soll dass die Werte zB. 5 Minuten summiert zwischengespeichert werden und nur alle 5 Minuten in die db geschrieben werden.

    Hast du vielleicht einen Beispiel-Flow für das zwischenspeichern bzw. die Join Node? Stehe erst am Anfang mit node red und bin da noch nicht so bewandert 😎

    LG,

    Walter

  • Ich nutze noch IOBroker mit einem MQTT Client, hier steht dann immer der letzte übertragene Wert. Die aktuelle Leistung schreibe ich alle 2sec und den Verbrauch alle 5min.

    Der Inhalt kann nicht angezeigt werden, da Sie keine Berechtigung haben, diesen Inhalt zu sehen.

    Mit dem Funktionsnode wähle ich aenergy und setzte ein Topic. Der JoinNode fast dann nach den Topics die Werte in einer Nachricht zusammen.

    Aufsummieren macht Influx, mit difference gib es den unterschied zwischen den Zählerwerten. Mit Window kannst dann sagen z.B. auf einen Tag aufsummieren.

    from(bucket: "nrdb")

    |> range(start: -1d)

    |> filter(fn: (r) => r["_measurement"] == "Solarpower")|> filter(fn: (r) =>  r["_field"] == "SVTC" or r["_field"] == "SMTC")

    |> difference(nonNegative: true)

    |> aggregateWindow(    every: 1d,    fn: sum )

    Dann in Grafana über die Transformation Reduce Total die Einzelwerte aufsummiert.

  • Dieses Thema enthält 2 weitere Beiträge, die nur für registrierte Benutzer sichtbar sind.