Re: [vz-users] Absolute Zählerstände mit Peaks

2023-03-20 Diskussionsfäden Daniel Lauckner
Hallo,


am Montag, 20. März 2023 um 13:32 hat René W geschrieben:
> Ein Schuss ins Blaue: Könntest du die Werte per SML abfragen?

Das wäre der erste mir bekannte Zähler der beide Protokolle unterstützt...


mfg Daniel



Re: [vz-users] Aggregation (minute) schlägt fehl

2023-03-20 Diskussionsfäden René W
Ich hatte „damals“ auch schon diese nervige Meldung:
https://demo.volkszaehler.org/pipermail/volkszaehler-users/2019-June/013374.html

Vielleicht sind dort ja noch ein paar Hinweise. Ich selber nutze VZ nicht
mehr dafür.

Gruß René

Michael Hartmann  schrieb am Mo. 20. März 2023 um
15:03:

> Hallo Christian,
>
>
>
> ich hatte erst an negative Werte gedacht und keine um den
> „Ausstiegszeitpunkt“ gefunden. Das scheidet aber auch aus, da sich die
> Werte im Zähler befinden und somit keine Division durch Null hervorrufen
> können.
>
>
>
> Was mich irritiert ist das nach Löschen der aggregierten Daten deren
> Neuerstellung fehlerfrei durchläuft.
>
>
>
> Kann jemand aus der Fehlermeldung erkennen um welchen Kanal (Channel_ID)
> es gehen könnte?
>
>
>
> Grüße
>
>
>
> Micha
>
>
>
> *Von:* volkszaehler-users [mailto:
> volkszaehler-users-boun...@demo.volkszaehler.org] *Im Auftrag von *Christian
> Lange
> *Gesendet:* Montag, 20. März 2023 11:29
> *An:* volkszaehler-users@demo.volkszaehler.org
> *Betreff:* Re: [vz-users] Aggregation (minute) schlägt fehl
>
>
>
> Hi Micha,
>
> ich hab leider keine Ahnung, wie die Datenbank aussieht (ich nutze selbst
> eine andere), aber der Fehler sagt aus, dass eine Division durch 0
> vorliegt.
>
> Die einzige Zeile in der SQL Query, die mir da ins Auge sticht ist diese
> hier:
>
> > COALESCE( SUM(agg.val_by_time) / (MAX(agg.timestamp) -
> MIN(agg.prev_timestamp)),
>
> Das Maximum des Timestamps minus dem Minimum des vorherigen Timestamps aus
> der (on the fly) erzeugten "agg" Tabelle sind zusammen 0. Daher klappt die
> Division und damit die SQL Query nicht. Die Daten stammen (soweit ich das
> sehen kann) aus der "data" Tabelle. Vielleicht fällt dir ja da etwas auf in
> den Daten bei den Timestamps. Den Rest überlasse ich den Experten, die das
> Tool so im Einsatz haben ;)
>
> Viel Erfolg,
> Christian
>
>
>
>
>
> Am 20.03.2023 um 10:37 schrieb Michael Hartmann:
>
> Hallo,
>
>
>
> ich hole das hier noch einmal vor, da es ziemliche nervt.
>
>
>
> Via cronjob lasse ich alle 10min eine Aggregation auf die Minute laufen.
> Bereits vor einigen Wochen ist diese dann plötzlich mit der folgenden
> Fehlermeldung ausgestiegen:
>
>
>
> In AbstractMySQLDriver.php line 128:
>
>
>
>   An exception occurred while executing 'REPLACE INTO aggregate
> (channel_id,
>
>   type, timestamp, value, count) SELECT channel_id, ? AS type,
> MAX(agg.timest
>
>   amp) AS timestamp, COALESCE( SUM(agg.val_by_time) / (MAX(agg.timestamp)
> - M
>
>   IN(agg.prev_timestamp)), AVG(agg.value)) AS value, COUNT(agg.value) AS
> coun
>
>   t FROM ( SELECT channel_id, timestamp, value, value * (timestamp -
> @prev_ti
>
>   mestamp) AS val_by_time, COALESCE(@prev_timestamp, 0) AS prev_timestamp,
> @p
>
>   rev_timestamp := timestamp FROM data CROSS JOIN (SELECT @prev_timestamp
> :=
>
>   UNIX_TIMESTAMP(DATE_ADD(FROM_UNIXTIME(MAX(timestamp) / 1000, "%Y-%m-%d
> %H:%
>
>   i:00"), INTERVAL 1 minute)) * 1000 FROM aggregate WHERE type = ? AND
> aggreg
>
>   ate.channel_id = ?) AS vars WHERE channel_id = ? AND timestamp >=
> IFNULL((S
>
>   ELECT UNIX_TIMESTAMP(DATE_ADD(FROM_UNIXTIME(MAX(timestamp) / 1000,
> "%Y-%m-%
>
>   d %H:%i:00"), INTERVAL 1 minute)) * 1000 FROM aggregate WHERE type = ?
> AND
>
>   aggregate.channel_id = ? ), 0) AND timestamp <
> UNIX_TIMESTAMP(DATE_FORMAT(N
>
>   OW(), "%Y-%m-%d %H:%i:00")) * 1000 ) AS agg GROUP BY channel_id,
> YEAR(FROM_
>
>   UNIXTIME(timestamp/1000)), DAYOFYEAR(FROM_UNIXTIME(timestamp/1000)),
> HOUR(F
>
>   ROM_UNIXTIME(timestamp/1000)), MINUTE(FROM_UNIXTIME(timestamp/1000))'
> with
>
>   params [1, 1, "3", "3", 1, "3"]:
>
>
>
>   SQLSTATE[22012]: Division by zero: 1365 Division by 0
>
>
>
>
>
> In Exception.php line 18:
>
>
>
>   SQLSTATE[22012]: Division by zero: 1365 Division by 0
>
>
>
>
>
> In PDOStatement.php line 117:
>
>
>
>   SQLSTATE[22012]: Division by zero: 1365 Division by 0
>
>
>
> Die Aggregation auf Stunde und Tag bereitet (bisher) keine Probleme.
>
>
>
> Beim letzten Mal hatte ich die Aggregationstabelle gelöscht und neu
> aufgebaut. Nach einigen Wochen kommt der Fehler nun wieder.
>
>
>
> Kann mir jemand erklären wo das Problem liegt? Die Fehlermeldung kann ich
> nicht interpretieren.
>
>
>
> Viele Grüße
>
>
>
> Micha
>
>


Re: [vz-users] Aggregation (minute) schlägt fehl

2023-03-20 Diskussionsfäden Michael Hartmann
Hallo Christian,

 

ich hatte erst an negative Werte gedacht und keine um den „Ausstiegszeitpunkt“ 
gefunden. Das scheidet aber auch aus, da sich die Werte im Zähler befinden und 
somit keine Division durch Null hervorrufen können.

 

Was mich irritiert ist das nach Löschen der aggregierten Daten deren 
Neuerstellung fehlerfrei durchläuft.

 

Kann jemand aus der Fehlermeldung erkennen um welchen Kanal (Channel_ID) es 
gehen könnte?

 

Grüße

 

Micha

 

Von: volkszaehler-users 
[mailto:volkszaehler-users-boun...@demo.volkszaehler.org] Im Auftrag von 
Christian Lange
Gesendet: Montag, 20. März 2023 11:29
An: volkszaehler-users@demo.volkszaehler.org
Betreff: Re: [vz-users] Aggregation (minute) schlägt fehl

 

Hi Micha, 

ich hab leider keine Ahnung, wie die Datenbank aussieht (ich nutze selbst eine 
andere), aber der Fehler sagt aus, dass eine Division durch 0 vorliegt. 

Die einzige Zeile in der SQL Query, die mir da ins Auge sticht ist diese hier:

> COALESCE( SUM(agg.val_by_time) / (MAX(agg.timestamp) - 
> MIN(agg.prev_timestamp)), 

Das Maximum des Timestamps minus dem Minimum des vorherigen Timestamps aus der 
(on the fly) erzeugten "agg" Tabelle sind zusammen 0. Daher klappt die Division 
und damit die SQL Query nicht. Die Daten stammen (soweit ich das sehen kann) 
aus der "data" Tabelle. Vielleicht fällt dir ja da etwas auf in den Daten bei 
den Timestamps. Den Rest überlasse ich den Experten, die das Tool so im Einsatz 
haben ;)

Viel Erfolg,
Christian 

 

 

Am 20.03.2023 um 10:37 schrieb Michael Hartmann:

Hallo,

 

ich hole das hier noch einmal vor, da es ziemliche nervt.

 

Via cronjob lasse ich alle 10min eine Aggregation auf die Minute laufen. 
Bereits vor einigen Wochen ist diese dann plötzlich mit der folgenden 
Fehlermeldung ausgestiegen:

 

In AbstractMySQLDriver.php line 128:

 

  An exception occurred while executing 'REPLACE INTO aggregate (channel_id,

  type, timestamp, value, count) SELECT channel_id, ? AS type, MAX(agg.timest

  amp) AS timestamp, COALESCE( SUM(agg.val_by_time) / (MAX(agg.timestamp) - M

  IN(agg.prev_timestamp)), AVG(agg.value)) AS value, COUNT(agg.value) AS coun

  t FROM ( SELECT channel_id, timestamp, value, value * (timestamp - @prev_ti

  mestamp) AS val_by_time, COALESCE(@prev_timestamp, 0) AS prev_timestamp, @p

  rev_timestamp := timestamp FROM data CROSS JOIN (SELECT @prev_timestamp :=

  UNIX_TIMESTAMP(DATE_ADD(FROM_UNIXTIME(MAX(timestamp) / 1000, "%Y-%m-%d %H:%

  i:00"), INTERVAL 1 minute)) * 1000 FROM aggregate WHERE type = ? AND aggreg

  ate.channel_id = ?) AS vars WHERE channel_id = ? AND timestamp >= IFNULL((S

  ELECT UNIX_TIMESTAMP(DATE_ADD(FROM_UNIXTIME(MAX(timestamp) / 1000, "%Y-%m-%

  d %H:%i:00"), INTERVAL 1 minute)) * 1000 FROM aggregate WHERE type = ? AND

  aggregate.channel_id = ? ), 0) AND timestamp < UNIX_TIMESTAMP(DATE_FORMAT(N

  OW(), "%Y-%m-%d %H:%i:00")) * 1000 ) AS agg GROUP BY channel_id, YEAR(FROM_

  UNIXTIME(timestamp/1000)), DAYOFYEAR(FROM_UNIXTIME(timestamp/1000)), HOUR(F

  ROM_UNIXTIME(timestamp/1000)), MINUTE(FROM_UNIXTIME(timestamp/1000))' with

  params [1, 1, "3", "3", 1, "3"]:

 

  SQLSTATE[22012]: Division by zero: 1365 Division by 0

 

 

In Exception.php line 18:

 

  SQLSTATE[22012]: Division by zero: 1365 Division by 0

 

 

In PDOStatement.php line 117:

 

  SQLSTATE[22012]: Division by zero: 1365 Division by 0

 

Die Aggregation auf Stunde und Tag bereitet (bisher) keine Probleme.

 

Beim letzten Mal hatte ich die Aggregationstabelle gelöscht und neu aufgebaut. 
Nach einigen Wochen kommt der Fehler nun wieder.

 

Kann mir jemand erklären wo das Problem liegt? Die Fehlermeldung kann ich nicht 
interpretieren.

 

Viele Grüße

 

Micha



Re: [vz-users] Absolute Zählerstände mit Peaks

2023-03-20 Diskussionsfäden Christian Lange
Moin René, im Datenblatt zum Zähler finde ich nur Angaben zu d0. Ist 
also leider nichts mit SML :(


Am 20.03.2023 um 13:32 schrieb René W:
Ein Schuss ins Blaue: Könntest du die Werte per SML abfragen? Ich 
meine, da werden doch weniger Daten übertragen. Kann aber auch sein, 
dass ich völlig daneben liege.


Am Mo., 20. März 2023 um 12:04 Uhr schrieb Christian Lange 
:


Hi Frank,

ja, das sind die Stände, wie sie in der DB stehen. In den Logs
sehe ich auch nur 2 Nachkommastellen und auch der Zähler selbst
zeigt nur zwei Stellen an. Scheint also einfach am Zähler zu liegen.

Das Auslesen dauert aber tatsächlich recht lange, weil eine
Vielzahl von Daten abgefragt werden. Nicht nur ein Haufen OBIS
Codes sondern auch noch ein Haufen Vorwertzählerstände. Wie ich
die loswerde muss ich wohl mit dem Hersteller mal klären ...

Das sieht dann für einen einzigen Code so aus:
[Mar 20 10:38:27][d0]   Parsed reading (OBIS code=2.8.0,
value=000149.98, unit=kWh)
[Mar 20 10:38:27][d0]   Parsed reading (OBIS code=2.8.0*01,
value=00.00, unit=kWh)
[Mar 20 10:38:27][d0]   Parsed reading (OBIS code=2.8.0*00,
value=00.00, unit=kWh)
[Mar 20 10:38:27][d0]   Parsed reading (OBIS code=2.8.0*99,
value=00.00, unit=kWh)
[Mar 20 10:38:27][d0]   Parsed reading (OBIS code=2.8.0*98,
value=00.00, unit=kWh)
[Mar 20 10:38:27][d0]   Parsed reading (OBIS code=2.8.0*97,
value=00.00, unit=kWh)
[Mar 20 10:38:27][d0]   Parsed reading (OBIS code=2.8.0*96,
value=00.00, unit=kWh)
[Mar 20 10:38:28][d0]   Parsed reading (OBIS code=2.8.0*95,
value=00.00, unit=kWh)
[Mar 20 10:38:28][d0]   Parsed reading (OBIS code=2.8.0*94,
value=00.00, unit=kWh)
[Mar 20 10:38:28][d0]   Parsed reading (OBIS code=2.8.0*93,
value=00.00, unit=kWh)
[Mar 20 10:38:28][d0]   Parsed reading (OBIS code=2.8.0*92,
value=00.00, unit=kWh)
[Mar 20 10:38:28][d0]   Parsed reading (OBIS code=2.8.0*91,
value=00.00, unit=kWh)
[Mar 20 10:38:28][d0]   Parsed reading (OBIS code=2.8.0*90,
value=00.00, unit=kWh)
[Mar 20 10:38:28][d0]   Parsed reading (OBIS code=2.8.0*89,
value=00.00, unit=kWh)
[Mar 20 10:38:28][d0]   Parsed reading (OBIS code=2.8.0*88,
value=00.00, unit=kWh)
[Mar 20 10:38:28][d0]   Parsed reading (OBIS code=2.8.0*87,
value=00.00, unit=kWh)

Korrigiert habe ich jetzt die Position der Leseköpfe nochmal, aber
ich erwarte da keine Wunder :/ Bleibt also wohl nur das manuelle
korrigieren, nachdem die Daten in der DB gelandet sind.

Vielen Dank aber in jedem Fall für die Tips!

Christian


Am 17.03.2023 um 21:11 schrieb Frank Richter:

Hallo Christian,

aggmode: max ist schon richtig für Zählerstände, alles andere
verfälscht nur das Ergebnis.

Zu deinem Screenshot: sind das die Zählerstände so wie sie in der
DB stehen? Dann würde ich am ehesten einen Übertragungsfehler
vermuten. D0 bringt ja leider keine Checksumme oder ähnliches
mit, um diese auszusortieren. Hast du versucht die Positionierung
des Lesekopfs zu optimieren?
Liefert der Zähler nur 2 Dezimalstellen, oder sind die abgeschnitten?

Grüße
Frank

Christian Lange  schrieb am Fr., 17. März
2023, 14:57:

Ahoi,

die 20s stammen vom Debuggen. Vielleicht war da auch der
Flaschenhals. Ich kann das ja nochmal messen und berichten,
wie lange es dauert bis sich in den Logs ein "parsed Value"
findet.

Wieder was gelernt mit dem inexistenten Intervall ;) Bleibt
die Frage nach dem sinnvollen Aggmode :/

Die Timestamps enden auf 0, weil ich die Query für's bessere
Vergleichen/Lesen dahingehend gebaut habe (timestamp DIV
60*60). Real sind die Werte andere.

Viele Grüße,
Christian
Am 17.03.2023 um 14:51 schrieb Frank Richter:

20 s dauert einmal Auslesen? Puh, das ist lang.

Ohne interval sollte er das einfach in Dauerschleife machen.

Warum enden deine Timestamps glatt auf :00?

Grüße
Frank

Christian Lange  schrieb am Fr., 17. März
2023, 13:02:

Hi Frank,

das mit der Aggregation war gestern Abend auch schon
mein Gedanke. Ich bin jetzt mal mit aggTime: 60 und
Interval: 30 ins Rennen gegangen. Das reine Auslesen
dauert knapp unter 20s - 30s Intervall sollte also
passen. Die Anzahl der Ausreißer ist auch geringer
geworden. Es gibt sie aber weiterhin. Der AggMode ist
aktuell "max" - das dürfte aber auch eigentlich nichts
bringen - wenn innerhalb des Aggregationszeitraumes ein
fehlerhafter Wert ausgelesen wird, dann ist der i.d.R. =
dem Max Wert und wird also reported.

Zu deinem Vorschlag, mit dem Intervall zu spielen: Wie
bekomme ich 

Re: [vz-users] Hohe CPU Last > mysql

2023-03-20 Diskussionsfäden basti

Hallo,

hohe last kann so ziemlich alles bedeuten und auf viele Ursachen haben:

- Schreibt das System in den swap?
- Hat es I.O. Wait?
- verbraucht ein Prozess / mehere Prozesse die ganze cpu?

Interessant im top sind diese Zeilen:

top - 08:56:54 up 12 min,  1 user,  load average: 0,95, 0,97, 0,67

%CPU(s):  1,5 us,  1,0 sy,  0,0 ni, 97,3 id,  0,2 wa,  0,0 hi,  0,0 si, 
0,0 st


Aber Ungeachtet dessen halte ich eine SD-Karte nicht für das Richtige 
Medium für eine Datenbank.


- Auf Grund Ihrer Bauweise habe die bescheidene Schreibperformance
- begrenze Schreibleistung
- schlechte I/O Performance

- Wie schnell geht so ein Ding kaputt?
- Wie wichtig sind dir die Daten?

Grüße
Sebastian

On 20.03.23 07:02, w...@gmx.at wrote:

Hallo,

mein RaspberryPi (3B+) zeigt unter „top“ eine hohe CPU Last von user 
mysql an. Auch fällt regelmäßig MQTT aus. Könnte das damit 
zusammenhängen und woher kommt das?


Danke

Markus



Re: [vz-users] Absolute Zählerstände mit Peaks

2023-03-20 Diskussionsfäden René W
Ein Schuss ins Blaue: Könntest du die Werte per SML abfragen? Ich meine, da
werden doch weniger Daten übertragen. Kann aber auch sein, dass ich völlig
daneben liege.

Am Mo., 20. März 2023 um 12:04 Uhr schrieb Christian Lange <
brln...@gmail.com>:

> Hi Frank,
>
> ja, das sind die Stände, wie sie in der DB stehen. In den Logs sehe ich
> auch nur 2 Nachkommastellen und auch der Zähler selbst zeigt nur zwei
> Stellen an. Scheint also einfach am Zähler zu liegen.
>
> Das Auslesen dauert aber tatsächlich recht lange, weil eine Vielzahl von
> Daten abgefragt werden. Nicht nur ein Haufen OBIS Codes sondern auch noch
> ein Haufen Vorwertzählerstände. Wie ich die loswerde muss ich wohl mit dem
> Hersteller mal klären ...
>
> Das sieht dann für einen einzigen Code so aus:
> [Mar 20 10:38:27][d0]   Parsed reading (OBIS code=2.8.0, value=000149.98,
> unit=kWh)
> [Mar 20 10:38:27][d0]   Parsed reading (OBIS code=2.8.0*01,
> value=00.00, unit=kWh)
> [Mar 20 10:38:27][d0]   Parsed reading (OBIS code=2.8.0*00,
> value=00.00, unit=kWh)
> [Mar 20 10:38:27][d0]   Parsed reading (OBIS code=2.8.0*99,
> value=00.00, unit=kWh)
> [Mar 20 10:38:27][d0]   Parsed reading (OBIS code=2.8.0*98,
> value=00.00, unit=kWh)
> [Mar 20 10:38:27][d0]   Parsed reading (OBIS code=2.8.0*97,
> value=00.00, unit=kWh)
> [Mar 20 10:38:27][d0]   Parsed reading (OBIS code=2.8.0*96,
> value=00.00, unit=kWh)
> [Mar 20 10:38:28][d0]   Parsed reading (OBIS code=2.8.0*95,
> value=00.00, unit=kWh)
> [Mar 20 10:38:28][d0]   Parsed reading (OBIS code=2.8.0*94,
> value=00.00, unit=kWh)
> [Mar 20 10:38:28][d0]   Parsed reading (OBIS code=2.8.0*93,
> value=00.00, unit=kWh)
> [Mar 20 10:38:28][d0]   Parsed reading (OBIS code=2.8.0*92,
> value=00.00, unit=kWh)
> [Mar 20 10:38:28][d0]   Parsed reading (OBIS code=2.8.0*91,
> value=00.00, unit=kWh)
> [Mar 20 10:38:28][d0]   Parsed reading (OBIS code=2.8.0*90,
> value=00.00, unit=kWh)
> [Mar 20 10:38:28][d0]   Parsed reading (OBIS code=2.8.0*89,
> value=00.00, unit=kWh)
> [Mar 20 10:38:28][d0]   Parsed reading (OBIS code=2.8.0*88,
> value=00.00, unit=kWh)
> [Mar 20 10:38:28][d0]   Parsed reading (OBIS code=2.8.0*87,
> value=00.00, unit=kWh)
>
> Korrigiert habe ich jetzt die Position der Leseköpfe nochmal, aber ich
> erwarte da keine Wunder :/ Bleibt also wohl nur das manuelle korrigieren,
> nachdem die Daten in der DB gelandet sind.
>
> Vielen Dank aber in jedem Fall für die Tips!
>
> Christian
>
>
> Am 17.03.2023 um 21:11 schrieb Frank Richter:
>
> Hallo Christian,
>
> aggmode: max ist schon richtig für Zählerstände, alles andere verfälscht
> nur das Ergebnis.
>
> Zu deinem Screenshot: sind das die Zählerstände so wie sie in der DB
> stehen? Dann würde ich am ehesten einen Übertragungsfehler vermuten. D0
> bringt ja leider keine Checksumme oder ähnliches mit, um diese
> auszusortieren. Hast du versucht die Positionierung des Lesekopfs zu
> optimieren?
> Liefert der Zähler nur 2 Dezimalstellen, oder sind die abgeschnitten?
>
> Grüße
> Frank
>
> Christian Lange  schrieb am Fr., 17. März 2023, 14:57:
>
>> Ahoi,
>>
>> die 20s stammen vom Debuggen. Vielleicht war da auch der Flaschenhals.
>> Ich kann das ja nochmal messen und berichten, wie lange es dauert bis sich
>> in den Logs ein "parsed Value" findet.
>>
>> Wieder was gelernt mit dem inexistenten Intervall ;) Bleibt die Frage
>> nach dem sinnvollen Aggmode :/
>>
>> Die Timestamps enden auf 0, weil ich die Query für's bessere
>> Vergleichen/Lesen dahingehend gebaut habe (timestamp DIV 60*60). Real sind
>> die Werte andere.
>> Viele Grüße,
>> Christian
>> Am 17.03.2023 um 14:51 schrieb Frank Richter:
>>
>> 20 s dauert einmal Auslesen? Puh, das ist lang.
>>
>> Ohne interval sollte er das einfach in Dauerschleife machen.
>>
>> Warum enden deine Timestamps glatt auf :00?
>>
>> Grüße
>> Frank
>>
>> Christian Lange  schrieb am Fr., 17. März 2023, 13:02:
>>
>>> Hi Frank,
>>>
>>> das mit der Aggregation war gestern Abend auch schon mein Gedanke. Ich
>>> bin jetzt mal mit aggTime: 60 und Interval: 30 ins Rennen gegangen. Das
>>> reine Auslesen dauert knapp unter 20s - 30s Intervall sollte also passen.
>>> Die Anzahl der Ausreißer ist auch geringer geworden. Es gibt sie aber
>>> weiterhin. Der AggMode ist aktuell "max" - das dürfte aber auch eigentlich
>>> nichts bringen - wenn innerhalb des Aggregationszeitraumes ein fehlerhafter
>>> Wert ausgelesen wird, dann ist der i.d.R. = dem Max Wert und wird also
>>> reported.
>>>
>>> Zu deinem Vorschlag, mit dem Intervall zu spielen: Wie bekomme ich den
>>> Pull Zähler zum reden, wenn ich kein Intervall angebe?
>>> Hier mal ein Beispiel - um 23:24:00 ist der ermittelte Wert weit höher
>>> als vorher und(!) nachher. Ich brauche also irgendeine Möglichkeit diesen
>>> Fehler zu korrigieren. Für's menschliche Auge easy - für eine elegante
>>> softwarelösung nicht ganz so trivial ;)
>>>
>>> Ideen sind willkommen :))
>>>
>>> Viele Grüße,
>>> Christian
>>> Am 17.03.2023 um 00:10 

Re: [vz-users] Absolute Zählerstände mit Peaks

2023-03-20 Diskussionsfäden Christian Lange

Hi Frank,

ja, das sind die Stände, wie sie in der DB stehen. In den Logs sehe ich 
auch nur 2 Nachkommastellen und auch der Zähler selbst zeigt nur zwei 
Stellen an. Scheint also einfach am Zähler zu liegen.


Das Auslesen dauert aber tatsächlich recht lange, weil eine Vielzahl von 
Daten abgefragt werden. Nicht nur ein Haufen OBIS Codes sondern auch 
noch ein Haufen Vorwertzählerstände. Wie ich die loswerde muss ich wohl 
mit dem Hersteller mal klären ...


Das sieht dann für einen einzigen Code so aus:
[Mar 20 10:38:27][d0]   Parsed reading (OBIS code=2.8.0, 
value=000149.98, unit=kWh)
[Mar 20 10:38:27][d0]   Parsed reading (OBIS code=2.8.0*01, 
value=00.00, unit=kWh)
[Mar 20 10:38:27][d0]   Parsed reading (OBIS code=2.8.0*00, 
value=00.00, unit=kWh)
[Mar 20 10:38:27][d0]   Parsed reading (OBIS code=2.8.0*99, 
value=00.00, unit=kWh)
[Mar 20 10:38:27][d0]   Parsed reading (OBIS code=2.8.0*98, 
value=00.00, unit=kWh)
[Mar 20 10:38:27][d0]   Parsed reading (OBIS code=2.8.0*97, 
value=00.00, unit=kWh)
[Mar 20 10:38:27][d0]   Parsed reading (OBIS code=2.8.0*96, 
value=00.00, unit=kWh)
[Mar 20 10:38:28][d0]   Parsed reading (OBIS code=2.8.0*95, 
value=00.00, unit=kWh)
[Mar 20 10:38:28][d0]   Parsed reading (OBIS code=2.8.0*94, 
value=00.00, unit=kWh)
[Mar 20 10:38:28][d0]   Parsed reading (OBIS code=2.8.0*93, 
value=00.00, unit=kWh)
[Mar 20 10:38:28][d0]   Parsed reading (OBIS code=2.8.0*92, 
value=00.00, unit=kWh)
[Mar 20 10:38:28][d0]   Parsed reading (OBIS code=2.8.0*91, 
value=00.00, unit=kWh)
[Mar 20 10:38:28][d0]   Parsed reading (OBIS code=2.8.0*90, 
value=00.00, unit=kWh)
[Mar 20 10:38:28][d0]   Parsed reading (OBIS code=2.8.0*89, 
value=00.00, unit=kWh)
[Mar 20 10:38:28][d0]   Parsed reading (OBIS code=2.8.0*88, 
value=00.00, unit=kWh)
[Mar 20 10:38:28][d0]   Parsed reading (OBIS code=2.8.0*87, 
value=00.00, unit=kWh)


Korrigiert habe ich jetzt die Position der Leseköpfe nochmal, aber ich 
erwarte da keine Wunder :/ Bleibt also wohl nur das manuelle 
korrigieren, nachdem die Daten in der DB gelandet sind.


Vielen Dank aber in jedem Fall für die Tips!

Christian


Am 17.03.2023 um 21:11 schrieb Frank Richter:

Hallo Christian,

aggmode: max ist schon richtig für Zählerstände, alles andere 
verfälscht nur das Ergebnis.


Zu deinem Screenshot: sind das die Zählerstände so wie sie in der DB 
stehen? Dann würde ich am ehesten einen Übertragungsfehler vermuten. 
D0 bringt ja leider keine Checksumme oder ähnliches mit, um diese 
auszusortieren. Hast du versucht die Positionierung des Lesekopfs zu 
optimieren?

Liefert der Zähler nur 2 Dezimalstellen, oder sind die abgeschnitten?

Grüße
Frank

Christian Lange  schrieb am Fr., 17. März 2023, 14:57:

Ahoi,

die 20s stammen vom Debuggen. Vielleicht war da auch der
Flaschenhals. Ich kann das ja nochmal messen und berichten, wie
lange es dauert bis sich in den Logs ein "parsed Value" findet.

Wieder was gelernt mit dem inexistenten Intervall ;) Bleibt die
Frage nach dem sinnvollen Aggmode :/

Die Timestamps enden auf 0, weil ich die Query für's bessere
Vergleichen/Lesen dahingehend gebaut habe (timestamp DIV 60*60).
Real sind die Werte andere.

Viele Grüße,
Christian
Am 17.03.2023 um 14:51 schrieb Frank Richter:

20 s dauert einmal Auslesen? Puh, das ist lang.

Ohne interval sollte er das einfach in Dauerschleife machen.

Warum enden deine Timestamps glatt auf :00?

Grüße
Frank

Christian Lange  schrieb am Fr., 17. März
2023, 13:02:

Hi Frank,

das mit der Aggregation war gestern Abend auch schon mein
Gedanke. Ich bin jetzt mal mit aggTime: 60 und Interval: 30
ins Rennen gegangen. Das reine Auslesen dauert knapp unter
20s - 30s Intervall sollte also passen. Die Anzahl der
Ausreißer ist auch geringer geworden. Es gibt sie aber
weiterhin. Der AggMode ist aktuell "max" - das dürfte aber
auch eigentlich nichts bringen - wenn innerhalb des
Aggregationszeitraumes ein fehlerhafter Wert ausgelesen wird,
dann ist der i.d.R. = dem Max Wert und wird also reported.

Zu deinem Vorschlag, mit dem Intervall zu spielen: Wie
bekomme ich den Pull Zähler zum reden, wenn ich kein
Intervall angebe?

Hier mal ein Beispiel - um 23:24:00 ist der ermittelte Wert
weit höher als vorher und(!) nachher. Ich brauche also
irgendeine Möglichkeit diesen Fehler zu korrigieren. Für's
menschliche Auge easy - für eine elegante softwarelösung
nicht ganz so trivial ;)

Ideen sind willkommen :))

Viele Grüße,
Christian

Am 17.03.2023 um 00:10 schrieb Frank Richter:

Hallo Christian,

denke das liegt am fixen Intervall. Manchmal erwischst du
den Zählerstand wenn er frisch umgesprungen ist, und
manchmal liegt er schon ein paar Sekunden an bis er gelesen

Re: [vz-users] Aggregation (minute) schlägt fehl

2023-03-20 Diskussionsfäden Christian Lange

Hi Micha,

ich hab leider keine Ahnung, wie die Datenbank aussieht (ich nutze 
selbst eine andere), aber der Fehler sagt aus, dass eine Division durch 
0 vorliegt.


Die einzige Zeile in der SQL Query, die mir da ins Auge sticht ist diese 
hier:


> COALESCE( SUM(agg.val_by_time) / (MAX(agg.timestamp) - 
MIN(agg.prev_timestamp)),


Das Maximum des Timestamps minus dem Minimum des vorherigen Timestamps 
aus der (on the fly) erzeugten "agg" Tabelle sind zusammen 0. Daher 
klappt die Division und damit die SQL Query nicht. Die Daten stammen 
(soweit ich das sehen kann) aus der "data" Tabelle. Vielleicht fällt dir 
ja da etwas auf in den Daten bei den Timestamps. Den Rest überlasse ich 
den Experten, die das Tool so im Einsatz haben ;)


Viel Erfolg,
Christian



Am 20.03.2023 um 10:37 schrieb Michael Hartmann:


Hallo,

ich hole das hier noch einmal vor, da es ziemliche nervt.

Via cronjob lasse ich alle 10min eine Aggregation auf die Minute 
laufen. Bereits vor einigen Wochen ist diese dann plötzlich mit der 
folgenden Fehlermeldung ausgestiegen:


In AbstractMySQLDriver.php line 128:

  An exception occurred while executing 'REPLACE INTO aggregate 
(channel_id,


  type, timestamp, value, count) SELECT channel_id, ? AS type, 
MAX(agg.timest


  amp) AS timestamp, COALESCE( SUM(agg.val_by_time) / 
(MAX(agg.timestamp) - M


IN(agg.prev_timestamp)), AVG(agg.value)) AS value, COUNT(agg.value) AS 
coun


  t FROM ( SELECT channel_id, timestamp, value, value * (timestamp - 
@prev_ti


  mestamp) AS val_by_time, COALESCE(@prev_timestamp, 0) AS 
prev_timestamp, @p


  rev_timestamp := timestamp FROM data CROSS JOIN (SELECT 
@prev_timestamp :=


UNIX_TIMESTAMP(DATE_ADD(FROM_UNIXTIME(MAX(timestamp) / 1000, "%Y-%m-%d 
%H:%


  i:00"), INTERVAL 1 minute)) * 1000 FROM aggregate WHERE type = ? AND 
aggreg


  ate.channel_id = ?) AS vars WHERE channel_id = ? AND timestamp >= 
IFNULL((S


  ELECT UNIX_TIMESTAMP(DATE_ADD(FROM_UNIXTIME(MAX(timestamp) / 1000, 
"%Y-%m-%


  d %H:%i:00"), INTERVAL 1 minute)) * 1000 FROM aggregate WHERE type = 
? AND


aggregate.channel_id = ? ), 0) AND timestamp < 
UNIX_TIMESTAMP(DATE_FORMAT(N


  OW(), "%Y-%m-%d %H:%i:00")) * 1000 ) AS agg GROUP BY channel_id, 
YEAR(FROM_


UNIXTIME(timestamp/1000)), DAYOFYEAR(FROM_UNIXTIME(timestamp/1000)), 
HOUR(F


ROM_UNIXTIME(timestamp/1000)), MINUTE(FROM_UNIXTIME(timestamp/1000))' with

  params [1, 1, "3", "3", 1, "3"]:

  SQLSTATE[22012]: Division by zero: 1365 Division by 0

In Exception.php line 18:

  SQLSTATE[22012]: Division by zero: 1365 Division by 0

In PDOStatement.php line 117:

  SQLSTATE[22012]: Division by zero: 1365 Division by 0

Die Aggregation auf Stunde und Tag bereitet (bisher) keine Probleme.

Beim letzten Mal hatte ich die Aggregationstabelle gelöscht und neu 
aufgebaut. Nach einigen Wochen kommt der Fehler nun wieder.


Kann mir jemand erklären wo das Problem liegt? Die Fehlermeldung kann 
ich nicht interpretieren.


Viele Grüße

Micha


[vz-users] Aggregation (minute) schlägt fehl

2023-03-20 Diskussionsfäden Michael Hartmann
Hallo,

 

ich hole das hier noch einmal vor, da es ziemliche nervt.

 

Via cronjob lasse ich alle 10min eine Aggregation auf die Minute laufen.
Bereits vor einigen Wochen ist diese dann plötzlich mit der folgenden
Fehlermeldung ausgestiegen:

 

In AbstractMySQLDriver.php line 128:

 

  An exception occurred while executing 'REPLACE INTO aggregate (channel_id,

  type, timestamp, value, count) SELECT channel_id, ? AS type,
MAX(agg.timest

  amp) AS timestamp, COALESCE( SUM(agg.val_by_time) / (MAX(agg.timestamp) -
M

  IN(agg.prev_timestamp)), AVG(agg.value)) AS value, COUNT(agg.value) AS
coun

  t FROM ( SELECT channel_id, timestamp, value, value * (timestamp -
@prev_ti

  mestamp) AS val_by_time, COALESCE(@prev_timestamp, 0) AS prev_timestamp,
@p

  rev_timestamp := timestamp FROM data CROSS JOIN (SELECT @prev_timestamp :=

  UNIX_TIMESTAMP(DATE_ADD(FROM_UNIXTIME(MAX(timestamp) / 1000, "%Y-%m-%d
%H:%

  i:00"), INTERVAL 1 minute)) * 1000 FROM aggregate WHERE type = ? AND
aggreg

  ate.channel_id = ?) AS vars WHERE channel_id = ? AND timestamp >=
IFNULL((S

  ELECT UNIX_TIMESTAMP(DATE_ADD(FROM_UNIXTIME(MAX(timestamp) / 1000,
"%Y-%m-%

  d %H:%i:00"), INTERVAL 1 minute)) * 1000 FROM aggregate WHERE type = ? AND

  aggregate.channel_id = ? ), 0) AND timestamp <
UNIX_TIMESTAMP(DATE_FORMAT(N

  OW(), "%Y-%m-%d %H:%i:00")) * 1000 ) AS agg GROUP BY channel_id,
YEAR(FROM_

  UNIXTIME(timestamp/1000)), DAYOFYEAR(FROM_UNIXTIME(timestamp/1000)),
HOUR(F

  ROM_UNIXTIME(timestamp/1000)), MINUTE(FROM_UNIXTIME(timestamp/1000))' with

  params [1, 1, "3", "3", 1, "3"]:

 

  SQLSTATE[22012]: Division by zero: 1365 Division by 0

 

 

In Exception.php line 18:

 

  SQLSTATE[22012]: Division by zero: 1365 Division by 0

 

 

In PDOStatement.php line 117:

 

  SQLSTATE[22012]: Division by zero: 1365 Division by 0

 

Die Aggregation auf Stunde und Tag bereitet (bisher) keine Probleme.

 

Beim letzten Mal hatte ich die Aggregationstabelle gelöscht und neu
aufgebaut. Nach einigen Wochen kommt der Fehler nun wieder.

 

Kann mir jemand erklären wo das Problem liegt? Die Fehlermeldung kann ich
nicht interpretieren.

 

Viele Grüße

 

Micha



[vz-users] Hohe CPU Last > mysql

2023-03-20 Diskussionsfäden wall
Hallo,

 

mein RaspberryPi (3B+) zeigt unter „top“ eine hohe CPU Last von user mysql
an. Auch fällt regelmäßig MQTT aus. Könnte das damit zusammenhängen und
woher kommt das?

 

Danke

Markus