DBRep: Ergebnis von diffValue Abfrage ist NULL

Begonnen von PeterJH, 13 März 2022, 18:46:04

Vorheriges Thema - Nächstes Thema

PeterJH

Hallo zusammen,

ich habe eine Auswertung meiner PV-Anlage auf Basis von des Wiki Beitrags https://wiki.fhem.de/wiki/Datenbankgest%C3%BCtzte_Erstellung_der_Energiebilanz_einer_SMA_PV-Anlage_mit_%C3%9Cberschusseinspeisung erstellt.

Vor kurzem habe ich die Datenbank von MySQL 5.7 auf Mariadb 10.6.7 migriert.

Die SUM Abfragen für Einspeisung und Bezug funktionieren nach wie vor korrekt.

DBRep Abfragen mit "diffValue" liefern seither immer das Ergebnis 0.
Im Anhang ist eine debug Log-Ausgabe einer aktuellen Abfrage.

Diverse Recherchen haben leider kein Ergebnis gebracht.

Ich hoffe ihr könnt mir hier weiterhelfen.

Grüße
Peter

DS_Starter

Hallo Peter,

ich kann dir zwar nicht wirklich helfen, aber kann dir mitteilen dass mit meiner Version MariaDB 10.1.48 kein Problem erkennbar ist.
Im Anhang das Log zum Vergleich.

Es ist auch nicht davon auszugehen, dass es zwischen Version  10.1.48 und 10.6.7 ein dramatischer Unterschied existiert.
Ich weiß, das hilft dir jetzt nicht unbedingt. Aber mehr fällt mir aktuell nicht ein.

Grüße,
Heiko
Proxmox+Debian+MariaDB, PV: SMA, Victron MPII+Pylontech+CerboGX
Maintainer: SSCam, SSChatBot, SSCal, SSFile, DbLog/DbRep, Log2Syslog, SolarForecast,Watches, Dashboard, PylonLowVoltage
Kaffeekasse: https://www.paypal.me/HMaaz
Contrib: https://svn.fhem.de/trac/browser/trunk/fhem/contrib/DS_Starter

PeterJH

Hallo Heiko,

danke für die schnelle Antwort.

Dein log ist eine gute Referenz und zeigt dass die Differenzberechnung bei mir offensichtlich nicht läuft.
Da muss ich wohl mal genauer in das MariaDB Change Log o.ä. schauen, evtl. reagiert die DB Engine in der aktuellen Version nicht exakt wie vorher.

Grüße
Peter

DS_Starter

Du kannst zum Test auch mal im DbRep ein "set ... sqlCmd" ausführen mit:


set @V:= 0, @diff:= 0, @diffTotal:= 0, @RB:= 1;
SELECT TIMESTAMP,VALUE, if(VALUE-@V < 0 OR @RB = 1 , @diff:= 0, @diff:= VALUE-@V ) as DIFF, @V:= VALUE as VALUEBEFORE, @RB:= '0' as RBIT  FROM history where ( DEVICE = 'PV_WR1' ) AND ( READING = 'etoday' ) AND TIMESTAMP >= '2022-03-13 00:00:00' AND TIMESTAMP <= '2022-03-13 23:59:59' ORDER BY TIMESTAMP;


Wenn du das Attribut sqlResultFormat = table gesetzt hast, sollte eine solche Tabelle erstellt werden:


TIMESTAMP               VALUE   DIFF  VALUEBEFORE  RBIT
2022-03-13 05:58:58 0       0       0       0
2022-03-13 06:40:33 0.001 0.001 0.001 0
2022-03-13 06:42:35 0.002 0.001 0.002 0
2022-03-13 06:44:37 0.003 0.001 0.003 0
2022-03-13 06:46:39 0.004 0.001 0.004 0
2022-03-13 06:48:41 0.005 0.001 0.005 0
2022-03-13 06:49:42 0.006 0.001 0.006 0
2022-03-13 06:50:43 0.007 0.001 0.007 0
2022-03-13 06:52:45 0.008 0.001 0.008 0
......


Wenn die Spalte DIFF dann nicht gefüllt sein sollte, hat deine MariaDB mit dem @RB:= 1 in der ersten Zeile ein Problem.
Proxmox+Debian+MariaDB, PV: SMA, Victron MPII+Pylontech+CerboGX
Maintainer: SSCam, SSChatBot, SSCal, SSFile, DbLog/DbRep, Log2Syslog, SolarForecast,Watches, Dashboard, PylonLowVoltage
Kaffeekasse: https://www.paypal.me/HMaaz
Contrib: https://svn.fhem.de/trac/browser/trunk/fhem/contrib/DS_Starter

PeterJH

Wenn ich in FHEM vorgehe wie von Dir beschrieben steht in der Spalte DIFF immer 0.

Nach entfernen von @RB:= 1 im "set" gibt die Spalte DIFF die Differenz zum vorherigen Wert aus.

Wenn ich das ganze direkt auf der Datenbank mache bekomme ich folgendes:
Fall 1 (mit dem set Kommando):
MariaDB [Fhem_PV_Log]> set @V:= 0, @diff:= 0, @diffTotal:= 0, @RB:= 1;                                                        Query OK, 0 rows affected (0.000 sec)

MariaDB [Fhem_PV_Log]> SELECT TIMESTAMP,VALUE, if(VALUE-@V < 0 OR @RB = 1 , @diff:= 0, @diff:= VALUE-@V ) as DIFF, @V:= VALUE as VALUEBEFORE, @RB:= '0' as RBIT FROM history where ( DEVICE = 'PV_WR1' ) AND ( READING = 'etoday' ) AND TIMESTAMP >= '2022-03-13 00:00:00' AND TIMESTAMP <= '2022-03-13 23:59:59' ORDER BY TIMESTAMP;
+---------------------+--------+------+-------------+------+
| TIMESTAMP           | VALUE  | DIFF | VALUEBEFORE | RBIT |
+---------------------+--------+------+-------------+------+
| 2022-03-13 05:56:04 | 0      |    0 | 0           | 0    |
| 2022-03-13 06:48:54 | 0.002  |    0 | 0.002       | 0    |
| 2022-03-13 06:51:25 | 0.004  |    0 | 0.004       | 0    |
| 2022-03-13 06:53:56 | 0.006  |    0 | 0.006       | 0    |
| 2022-03-13 06:56:27 | 0.01   |    0 | 0.01        | 0    |
| 2022-03-13 06:58:58 | 0.015  |    0 | 0.015       | 0    |
| 2022-03-13 07:01:29 | 0.022  |    0 | 0.022       | 0    |
| 2022-03-13 07:04:00 | 0.03   |    0 | 0.03        | 0    |
| 2022-03-13 07:06:31 | 0.043  |    0 | 0.043       | 0    |
| 2022-03-13 07:09:02 | 0.057  |    0 | 0.057       | 0    |
| 2022-03-13 07:11:33 | 0.075  |    0 | 0.075       | 0    |
| 2022-03-13 07:14:04 | 0.096  |    0 | 0.096       | 0    |
.....


Fall 2 (nur das SELECT):
MariaDB [Fhem_PV_Log]> SELECT TIMESTAMP,VALUE, if(VALUE-@V < 0 OR @RB = 1 , @diff:= 0, @diff:= VALUE-@V ) as DIFF, @V:= VALUE as VALUEBEFORE, @RB:= '0' as RBIT FROM history where ( DEVICE = 'PV_WR1' ) AND ( READING = 'etoday' ) AND TIMESTAMP >= '2022-03-13 00:00:00' AND TIMESTAMP <= '2022-03-13 23:59:59' ORDER BY TIMESTAMP;
+---------------------+--------+-----------------------+-------------+------+
| TIMESTAMP           | VALUE  | DIFF                  | VALUEBEFORE | RBIT |
+---------------------+--------+-----------------------+-------------+------+
| 2022-03-13 05:56:04 | 0      |                     0 | 0           | 0    |
| 2022-03-13 06:48:54 | 0.002  |                 0.002 | 0.002       | 0    |
| 2022-03-13 06:51:25 | 0.004  |                 0.002 | 0.004       | 0    |
| 2022-03-13 06:53:56 | 0.006  |                 0.002 | 0.006       | 0    |
| 2022-03-13 06:56:27 | 0.01   |                 0.004 | 0.01        | 0    |
| 2022-03-13 06:58:58 | 0.015  |  0.004999999999999999 | 0.015       | 0    |
| 2022-03-13 07:01:29 | 0.022  |  0.006999999999999999 | 0.022       | 0    |
| 2022-03-13 07:04:00 | 0.03   |                 0.008 | 0.03        | 0    |
| 2022-03-13 07:06:31 | 0.043  |  0.012999999999999998 | 0.043       | 0    |
| 2022-03-13 07:09:02 | 0.057  |  0.014000000000000005 | 0.057       | 0    |
| 2022-03-13 07:11:33 | 0.075  |  0.017999999999999995 | 0.075       | 0    |
| 2022-03-13 07:14:04 | 0.096  |  0.021000000000000005 | 0.096       | 0    |
.....


Wenn ich die Variablen in der Datenbank (Kommandozeile) abfrage haben sie den erwarteten Wert.

DS_Starter

#5
Verstehe ich nicht. Weglassen ist keine Option. In dem speziellen Fall ist das ok, aber im Normalfall werden Schleifen durchlaufen.
Zu Beginn jeder Schleife muß das Resetbit @RB gesetzt werden damit ein definierter Anfangszustand sichergestellt wird.

Vielleicht hilft es die Reihenfolge der Parameter mal zu ändern:

set @V:= 0, @diff:= 0, @RB:= 1, @diffTotal:= 0;
Proxmox+Debian+MariaDB, PV: SMA, Victron MPII+Pylontech+CerboGX
Maintainer: SSCam, SSChatBot, SSCal, SSFile, DbLog/DbRep, Log2Syslog, SolarForecast,Watches, Dashboard, PylonLowVoltage
Kaffeekasse: https://www.paypal.me/HMaaz
Contrib: https://svn.fhem.de/trac/browser/trunk/fhem/contrib/DS_Starter

PeterJH

Die Änderung der Reihenfolge hat leider nichts gebracht.
Ich habe auch RB umbenannt um Kollisionen mit Internas auszuschließen.

Auf einer "Spielmaschine" (Windows) habe ich mich durch die verschiedenen MariaDB Versionen gearbeitet.
Ich habe nach jeder Installation den aktuellen Dump meiner Live-Datenbak eingespielt, von der Seite also identische Verhältnisse.

Bis einschließlich 10.5.15 war alles OK, nach dem Wechsel auf 10.6.7 trat das DIFF Problem auf.
Es liegt also offensichtlich an der MariaDB Version.
Vielleicht finde ich ja etwas in den Release Notes bzgl. lokalen Variablen, würde mich allerdings wundern wenn sich hier etwas geändert hätte.

DS_Starter

Ja liegt mit Sicherheit an der MariaDB Version sonst würde es ja bei mir und vielen anderen auch nicht funktionieren.  ;)
Vllt. liegt ein Bug in der MariaDB Version vor. Möglich wär es, evtl. ein Bug Report öffnen ?

LG
Proxmox+Debian+MariaDB, PV: SMA, Victron MPII+Pylontech+CerboGX
Maintainer: SSCam, SSChatBot, SSCal, SSFile, DbLog/DbRep, Log2Syslog, SolarForecast,Watches, Dashboard, PylonLowVoltage
Kaffeekasse: https://www.paypal.me/HMaaz
Contrib: https://svn.fhem.de/trac/browser/trunk/fhem/contrib/DS_Starter