Information ausblenden
Willkommen im Forum für alle Datenbanken! Registriere Dich kostenlos und diskutiere über DBs wie Mysql, MariaDB, Oracle, Sql-Server, Postgres, Access uvm

Projekt PV-Monitor - Addieren von Daten aus zwei Wechselrichtern

Dieses Thema im Forum "MySQL und MariaDB" wurde erstellt von Draci009, 4 April 2020.

  1. Draci009

    Draci009 Benutzer

    Hallo Zusammen,

    bevor ich auf mein konkretes "Problem" komme, hier eine kurze Einleitung damit es nicht nur eine abstrakte Fragestellung ist, sondern Ihr etwas besser versteht wie das "Drum-Herum" so ist. Für die, die das nicht lesen wollen, gern auch gleich bis nach den Sternchen *** scrollen ;-)

    Ich betreibe schon seit einigen Jahren eine Photovoltaik-Anlage auf dem Dach. Im Keller hängen zwei SMA Wechselrichter an der Wand die ohne Probleme ihre Dienste verrichten. Beide haben eine Bluetooth Schnittstelle. Ich hatte schon vor längerem mal vor, hier mir einen PV-Monitor zu basteln, jedoch nie wirklich Zeit dazu gefunden. Jetzt in der Lockdown Zeit habe ich endlich mal die Zeit gefunden das Thema in Angriff zu nehmen.

    Kurz um Aufbau:
    2x SMA Wechselrichter
    RaspberryPi 3 mit Raspbian, MariaDB, phpMyAdmin und Grafana (zur grafischen Anzeige)
    Ebenso SBFspot welches die Daten im 5 Min. Takt aus den beiden Wechselrichtern holt und in eine MariaDB Datenbank schreibt.
    Die Tabelle(n) - aktuell habe ich nur auf einer Tabelle eine Abfrage aus Grafana - werden entsprechend per SQL Abfrage angesprochen und visualisiert.

    Soweit funktioniert das auch alles ganz gut ich ich bin ehrlich gesagt schon sehr froh dass ich soweit gekommen bin da ich keine tieferen Kenntnisse über DBs oder überhaupt Programmierung usw. habe. Aber das Internet, YouTube und Forenbeiträge machen es möglich, dass auch "Amateure" was vernünftiges zusammen bekommen.

    ***********************************************
    Jetzt aber zu meinem eigentlichen SQL Problem.
    Die Tabelle in denen die Werte der beiden Wechselrichter aller 5 Min. eingetragen werden sieht so aus:
    Spalte 1 "TimeStamp", Spalte 2 "SerialNo_Wechselrichter", Spalte 3 "Power" .... es gibt noch ein paar mehr Spalten.

    Daten darin schauen dann (vereinfacht) so aus:
    15:00 01 50
    15:00 02 50
    15:05 01 51
    15:05 02 51
    15:10 01 55
    15:10 02 55
    usw.

    In Grafana kann ich sehr einfach zwei Graphen per SQL füttern, der eine zeigt mir die Daten vom Wechselrichter mit der Seriennummer 01 an und der andere die Daten mit der Seriennummer 02.

    Was ich aber möchte, ist, dass die Werte in der Spalte Power summiert werden und zwar nur für jeden jeweiligen TimeStamp. Sprich, herauskommen sollte eine Tabelle oder Ansicht die so aussieht:
    15:00 100
    15:05 102
    15:10 110
    usw.

    Ich befürchte nun, dass dies nicht so ohne weiteres möglich ist, zumindest habe ich keinen Befehl oder Abfrage gefunden die sowas realisiert. Ich denke, da braucht's etwas komplexeres ... oder ich hab einfach nicht gut genug recherchiert.

    Meine Idee wäre nun, aus der einen Tabelle, zwei Views zu erstellen wo eben jeweils nur einer der beiden Wechselrichter zu sehen ist. Diese beiden Views müsste man dann wieder verbinden zu einem (oder Tabelle) wo die Wechselrichter SerialNummern nicht in Zeilen drin sind sondern in Spalten. Also so in etwa:
    Timestamp, SerialNo_WR1, Power_1, SerialNo_WR2, Power_2
    Dann könnte man wohl die beiden Zeilenwerte Power_1 und Power_2 pro Timestamp addieren und in eine Spalte Power_Total schreiben.

    Hmmm ... ich hoffe das war verständlich ausgedrückt und Ihr könnt mir hier ein paar Tips geben wie ich da weiterkomme. Ins geheime hoffe ich ja noch, dass es gar keinen komplexen SQL Code bedarf ;-)

    Schönen Samstag Euch allen noch und bleibt Gesund!

    Viele Grüße,
    Robert

    P.S: Bei Bedarf könnte ich auch Screenshots von phpMyAdmin oder Grafana liefern falls das was bringt.
     
  2. akretschmer

    akretschmer Datenbank-Guru

    das geht sogar sehr einfach: mit Window-Funktionen, die abgehangene Versionen von MySQL aber nicht können.
     
  3. Draci009

    Draci009 Benutzer

    Hallo,

    Danke für die Info.
    Heißt das nun aber, dass es für dieses Problem gar keine Lösung mittels SQL gibt?

    Viele Grüße,
    Robert
     
  4. akretschmer

    akretschmer Datenbank-Guru

    ich sagte doch, das geht mit SQL. Vereinfachtes Beispiel, t steht für TIME, s für SENSOR:

    Code:
    test=*# select * from m;
     t | s | wert
    ---+---+------
     1 | 1 |   10
     1 | 2 |   12
     2 | 1 |    5
     2 | 2 |    7
     3 | 1 |   11
     3 | 2 |   33
    (6 rows)
    
    test=*# select t, s, wert, sum(wert) over (partition by s order by t) from m order by t,s;
     t | s | wert | sum
    ---+---+------+-----
     1 | 1 |   10 |  10
     1 | 2 |   12 |  12
     2 | 1 |    5 |  15
     2 | 2 |    7 |  19
     3 | 1 |   11 |  26
     3 | 2 |   33 |  52
    (6 rows)
    
    In der sum-Spalte hast das nach sensor aufsummiert. Voll easy, reines SQL.
     
  5. Draci009

    Draci009 Benutzer

    Hallo,

    ok, ich war von Deiner ersten Antwort etwas verwirrt weil Du geschrieben hats, dass "die abgehangene Versionen von MySQL aber nicht können."
    Danke für Deine zweite Antwort, es ist allerdings noch nicht das was ich suche.
    Um mal bei Deinem Beispiel zu bleiben:

    t | s | wert | sum
    ---+---+------+-----
    1 | 1 | 10 | 10
    1 | 2 | 12 | 12
    2 | 1 | 5 | 15
    2 | 2 | 7 | 19
    3 | 1 | 11 | 26
    3 | 2 | 33 | 52
    (6 rows)

    Als Summe bräuchte ich jeweils den Wert von t1 s1 (oben 10) und den Wert von t1 s2 (oben 12) also 22.
    Und dann weiter die Summe von den Wert von t2 s1 (oben 5) und den Wert von t2 s2 (oben 7) also 12 usw.

    Ist das auch so einfach zu lösen?

    VG
    Robert
     
  6. akretschmer

    akretschmer Datenbank-Guru

    klar:

    Code:
    test=*# select t, s, wert, sum(wert) over (partition by t order by t) from m order by t,s;
     t | s | wert | sum
    ---+---+------+-----
     1 | 1 |   10 |  22
     1 | 2 |   12 |  22
     2 | 1 |    5 |  12
     2 | 2 |    7 |  12
     3 | 1 |   11 |  44
     3 | 2 |   33 |  44
    (6 rows)
    
    
     
  7. Draci009

    Draci009 Benutzer

    Hallo, Danke schon mal für die Hilfe. Habe es bisher noch nicht ausprobieren können, werde es aber demnächst probieren.

    VG
    Robert
     
  8. Draci009

    Draci009 Benutzer

    Hallo,

    vergessen noch zu antworten. Die letzte Lösung funktioniert. Vielen Dank dafür.

    VG
    Robert
     
    akretschmer gefällt das.
Die Seite wird geladen...

Diese Seite empfehlen

  1. Diese Seite verwendet Cookies. Wenn du dich weiterhin auf dieser Seite aufhältst, akzeptierst du unseren Einsatz von Cookies.
    Information ausblenden