[vz-users] Schaltspiel- und Betriebsstundenzähler - Konzept gesucht

Christian Wulff christianwulff at gmx.de
Sat May 5 20:13:28 CEST 2018


…..lief leider nicht soooo lange. Fehlermeldung:

 

Performing 'full' aggregation on 'day' level.

 

 

  [Doctrine\DBAL\Exception\DriverException]

  An exception occurred while executing 'REPLACE INTO aggregate (channel_id, type, timestamp, value, count) SELECT channel_id, ? AS type, MAX(agg.timestamp)

  AS timestamp, COALESCE( SUM(agg.val_by_time) / (MAX(agg.timestamp) - MIN(agg.prev_timestamp)), AVG(agg.value)) AS value, COUNT(agg.value) AS count FROM ( S

  ELECT channel_id, timestamp, value, value * (timestamp - @prev_timestamp) AS val_by_time, GREATEST(0, IF(@prev_timestamp = NULL, NULL, @prev_timestamp)) AS

   prev_timestamp, @prev_timestamp := timestamp FROM data CROSS JOIN (SELECT @prev_timestamp := NULL) AS vars WHERE channel_id = ? AND timestamp < UNIX_TIMES

  TAMP(DATE_FORMAT(NOW(), "%Y-%m-%d")) * 1000 ORDER BY timestamp ) AS agg GROUP BY channel_id, YEAR(FROM_UNIXTIME(timestamp/1000)), DAYOFYEAR(FROM_UNIXTIME(t

  imestamp/1000))' with params [3, "15"]:

  SQLSTATE[HY000]: General error: 126 Incorrect key file for table '/tmp/#sql_49e_1.MYI'; try to repair it

 

 

 

  [Doctrine\DBAL\Driver\PDOException]

 SQLSTATE[HY000]: General error: 126 Incorrect key file for table '/tmp/#sql_49e_1.MYI'; try to repair it

 

 

 

  [PDOException]

  SQLSTATE[HY000]: General error: 126 Incorrect key file for table '/tmp/#sql_49e_1.MYI'; try to repair it

 

 

run [-l|--level LEVEL] [-m|--mode MODE] [-p|--period PERIOD] [--] [<uuid>]...

 

 

Was muss ich nun tun?

 

Lieben Gruß,

Chris

 

 

 

Von: Christian Wulff [mailto:christianwulff at gmx.de] 
Gesendet: Samstag, 5. Mai 2018 20:04
An: 'volkszaehler.org - users'
Betreff: Re: [vz-users] Schaltspiel- und Betriebsstundenzähler - Konzept gesucht

 

Moin,

 

alles klaro, läuft jetzt mit:

 

php /var/www/volkszaehler.org/misc/tools/aggregate.php run -m full -l day -l hour

 

Vielen Dank!

 

….mal sehen wie lange es dauert….

 

Lieben Gruß,

Chris

 

Von: Frank Richter [mailto:frank.richter83 at gmail.com] 
Gesendet: Samstag, 5. Mai 2018 19:53
An: volkszaehler.org - users
Betreff: Re: [vz-users] Schaltspiel- und Betriebsstundenzähler - Konzept gesucht

Frank Richter <frank.richter83 at gmail.com>

Und lass -l minute erstmal weg, das bringt nicht viel und dauert ewig.

 

Am 5. Mai 2018 um 19:48 schrieb Christian Wulff <christianwulff at gmx.de>:

Moin,

 

ich muss nochmal an dieser Stelle einhaken.

 

Vor der Aktivierung der Aggregation sah die Antwort der Abfrage http://IP-ADRESSE/middleware.php/capabilities/database.json? so aus:

{"version":"0.3","capabilities":{"database":{"data_rows":30461209,"data_size":2664267776,"aggregation_enabled":0}}}

 

Ich habe jetzt die Aggregation aktiviert.

 

Nach der Aktivierung der Aggregation sah die Antwort der Abfrage http://IP-ADRESSE/middleware.php/capabilities/database.json? so aus:

{"version":"0.3","capabilities":{"database":{"data_rows":30087708,"data_size":2674753536,"aggregation_enabled":1,"aggregation_rows":0,"aggregation_size":49152,"aggregation_ratio":0}}}

 

Soweit so gut.

 

Allerdings kann ich die Aggregation nicht starten.

Ich habe folgenden Befehl aus dem Wiki probiert:

php /var/www/volkszaehler.org/bin/aggregate run -m full -l day -l hour -l minute

 

Antwort:

Could not open input file: /var/www/volkszaehler.org/bin/aggregate

 

Das Problem ist, dass es in dem Ordner /var/www/volkszaehler.org/ keinen Ordner „bin“ gibt.

 

Nun weiß ich nicht mehr weiter.

Wer weiß da Rat?

 

Danke und lieben Gruß,

Chris

 

 

 

 

 

 

 

 

Von: Frank Richter [mailto:frank.richter83 at gmail.com] 
Gesendet: Mittwoch, 2. Mai 2018 22:02
An: volkszaehler.org - users

Betreff: Re: [vz-users] Schaltspiel- und Betriebsstundenzähler - Konzept gesucht

 

Hi Christian,

 

bei deinen lahmen Antwortzeiten hast du sicher keine Aggregation aktiviert, oder? Bitte mal überprüfen (aggregation in der volkszaehler.conf.php und Cronjobs für regelmäßige Aktualisierung der Tabelle aggregate).

 

Zählerstände sind sicherlich schicker, aber auch schwieriger in der Handhabung: soll der ESP den laufenden Absolutwert speichern?

 

Gruß

Frank

 

Christian Wulff <christianwulff at gmx.de> schrieb am Mi., 2. Mai 2018 21:49:

Moin,

 

ja, mit S0 Impulsen geht das, klar. Aber grottenlahm.

Ich habe zum Beispiel einen Wasserzähler, der seit Oktober 2016 (sind ja nur 1,5 Jahre, also noch nicht soooo viel) bis heute 458733 Datensätze geloggt hat.

 

Wenn ich mit der VZ App v9.7 den Wasserzähler abfrage, dann addiert er glatte 46 Sekunden lang alle S0 Impulse zusammen, bis das Ergebnis kommt. Das ist mir zu langsam.

Wenn ich in die Datenbank schauen würde und den letzten Wert abfrage, und dieser die Information enthält die ich suche, (nämlich zum Beispiel 613390,5L) dann dauert die Abfrage des Wertes nur Millisekunden.

Übrigens dauert es 38 Sekunden, wenn ich die aktuell 458733 Datensätze des Wasserzählers in der Administration der Datenbank folgendermaßen abfrage:

SELECT * FROM `data` WHERE channel_id = '16'

Is ja auch kein Wunder, dass es dauert bis man ein paar hunderttausend Datensätze abgefragt und aufaddiert hat.

Aber warum muss man denn ein paar hunderttausend Werte abfragen und aufaddieren, wenn man anstatt dummen S0 Bits auch die wirkliche Anzahl der Impulse speichern kann?

Statt hundertausende Daten abfragen und addieren zu müssen, reicht dann die Abfrage von einem einzigen Datensatz.

Will man einen Bereich wissen muss man nur zwei Datensätze abfragen und die Differenz bilden.

Das geht dann logischerweise Faktor mehrere hunderttausendfach schneller

Und genau das ist der Grund ,warum ich von S0 Impulse nix halte und sie so oft wie möglich versuche zu vermeiden.

 

Ich schaue per http Abfrage über JSON über die API der Middleware in die Datenbank.

(Ich habe mir ein eigenes Hardwarefrontend gebaut.

Das besteht aus einem ESP8266 und einem 2,8“ 320x200 Display für insgesamt 20 Euro.

Das geht dann immer mit der Beleuchtung im Gäste WC an, fragt die Daten über WLAN ab und stellt sie dar.

Leider hatte ich noch keine Zeit dies zum Nachbauen zu dokumentieren L

Die nächste Stufe in 4“ mit 480x320 liegt hier vor mir, muss ich nur Zeit für haben)

 

Warum ich das über einen ESP8266 machen will?

Weil ich schon 2 Stück ESP8266 laufen habe, die über WLAN Daten an den Volkszähler senden.

1x drei Drehzahlen von der kontrollierten BE- und Entlüftung meiner Wärmepumpe. Da musste ich selber die Software schreiben bis das klappte.

1x mit 15 Stück DS18b20 Temperatursensoren. Da konnte ich als Software eine gepimpte Version von ESP Easy Mega nehmen.

Und weil ich keine Kabelverbindung (außer der Stromleitung) zum Carport liegen habe, aber selbiges locker in WLAN Reichweite liegt.

Die galvanische Trennung auf der Signalebene ist sicherlich auch nicht schlecht. Wer weiß schon was sich da draußen für böse Spannungen rumtreiben, die meinen Raspi ärgern wollen.

 

Den letzten Datensatz per http Request abzufragen ist sehr einfach:

192.168.178.xx/middleware.php/data/xxxxx--UUID--xxxxx.json?from=now

Die Antwort ist ein JSON mit dem letzten timestamp und dem letzten Wert.

 

Nun nochmal zu meinen Fragestellungen:

1.            Hat schon mal jemand eine Betriebsstunden- und/oder Schaltspielerfassung mit einem Volkszähler realisiert? Wenn ja, wie?

2.            Wie stellt man die Betriebsstunden im Frontend dar? Wie sieht das aus? „Betriebsstundenzähler (Impulse)“ und „Betriebsstundenzähler (Zählerstand)“ gibt es ja, aber dann gibt es noch einen „Betriebsstundenzähler“. Was ist das?

3.            Wie stellt ich die Schaltspiele dar? Als Ventil? Welche Daten braucht das Ventil? „1“ für „high“ und „0“ für „low“? Ist das irgendwo dokumentiert?

4.            Der Bewegungsmelder schaltet ja auch den ESP8266 mit ein und aus. Die Bootverzögerung kann ich ignorieren oder mal messen und dann als konstanten Wert zu jeder Messung dazu addieren.

Aber wie schaffe ich es, dass der ESP8266 das Abschalten registriert und dann noch den Wert an die Datenbank sendet?

 

Hat vielleicht jemand ein paar gute Ideen wie man das umsetzen kann?

 

Danke und liebe Grüße,

Chris

 

Von: Rupert Schöttler [mailto:rupert.schoettler at gmx.de] 
Gesendet: Dienstag, 1. Mai 2018 12:46
An: volkszaehler-users at demo.volkszaehler.org
Betreff: Re: [vz-users] Schaltspiel- und Betriebsstundenzähler - Konzept gesucht

 

Hallo Christian,

 

Am 30.04.2018 um 10:52 schrieb Christian Wulff:

ich bin auf der Suche nach einem Konzept für folgende Fragestellung: 

 

Ich möchte die Schaltspiele und Betriebsstunden einer Bewegungsmelder-gesteuerten Beleuchtung über WLAN mit dem Volkszähler erfassen.

 

Die Schaltspiele möchte ich dabei nicht als S0 Impulse, sondern als Zahl gespeichert haben. Das heißt folgendermaßen: 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, ........

Hintergrund ist, dass man so auf den ersten Blick in die Datenbank die Schaltspiele ablesen kann, und nicht bei einer Abfrage mühsam alle Impulse aufaddieren muss. (Hab ich nämlich schon bei anderen Kanälen in der Datenbank und dauert mir bei der späteren Abfrage leider zu lange).


Ich meine, dass das mit S0-Impulsen schon gut geht: Jedes Einschalten (Wechsel 0 -> 1) erzeugt einen Impuls, den Du mit vzlogger registrieren kannst. Die Auflösung ist 1. In der Grafik des VZ bzw. der Tabelle darunter bekommst Du dann als "Verbrauch" die Anzahl Schaltspiele im ausgewählten Zeitraum. Ok, 100% so wie Du Dir das vorstellst, ist es nicht. Aber das Aufaddieren ist m.E. nicht "mühsam", wie Du schreibst. 
Das wäre der 1. Kanal zum Mitzählen. 

Bei den "Betriebsstunden" sollen die "Betriebssekunden" aufaddiert werden. Diese können variieren, weil der Bewegungsmelder innerhalb seiner Timerlaufzeit mehrfach ausgelöst werden kann, oder das Licht auch manuell angeschaltet werden kann.

Das heißt folgendermaßen (Beispiel pro Schaltspiel 55 Sekunden, kann aber auch variieren): 55, 110 , 165, 220, 652, 707, 762, 817, 1254, 1309, .....

Auch hier der gleiche Grund: Bei ersten Blick in die Datenbank möchte ich die Betriebsstunden in Sekunden auslesen.


Hierzu würde ich einen 2. Kanal einrichten, der auf dasselbe 1 / 0-Signal reagiert. Ich habe eine Photodiode, die registriert, ob im Keller Licht an ist, und das an einen GPIO des Pi gibt. Der Kanal ist ein allgemeiner "Sensor" mit Einheit "Ein" und Stil "states". Hier sehe ich z.B. in der Tabelle, dass das Licht im Durchschnitt eines Tages "0,037 Ein" war. Gut, das müsste ich in Stunden umrechnen. Vermutlich geht es mit dem Kanaltyp "Betriebsstundensensor" viel einfacher, ich habe damit aber keine Erfahrung.

Ich gebe zu, meine Lösungsvorschläge ignorieren Deinen Wunsch, "beim ersten Blick in die DB" die Info zu bekommen. Ich kann den aber auch nicht wirklich nachvollziehen: Wie würdest Du "in die DB" hineinschauen? Per SQL? Auch dann muss, nach Tausenden Schaltspielen, die je 1 Datensatz erzeugt haben, der richtige =letzte herausgesucht werden. Geht das schneller als ein COUNT oder SUM? Ich habe eine analoge Wasseruhr als S0-Zähler eingerichtet, die hat nach 4 Monaten rd. 226.000 Datensätze in die DB gepumpt. Eine Grafik über diesen Zeitraum aufzubauen dauert ein paar Sekunden, liefert mir aber neben dem Gesamtverbrauch auch den zeitlichen Verlauf. Würde ich diese Daten verdichten gemäß https://wiki.volkszaehler.org/howto/datenmengen, würde es vermutlich noch deutlich schneller gehen.

Direkt auf der DB (phpMyAdmin) geht's auch nicht viel schneller:

Zeige Datensätze 0 -  0 (1 insgesamt, Die Abfrage dauerte 3.7392 Sekunden.)

SELECT count(*), Sum(value) FROM `data` WHERE channel_id=12
225887    736725    

(Da fällt mir auf: 736.725 Impulse bei 60 Imp/l sind 12.278,75 l. Die Tabelle sagt 12,2 m³ -- kann das Teil nicht richtig runden??)

Brauchst Du bessere Performance, für die es sich lohnt, die Standardkonzepte zu verbiegen?

Als Hardware dachte ich an einen ESP8266. Damit habe ich bereits einige Projekte erfolgreich gemacht. Diesen könnte ich auch mit einem FRAM Speichermodul kombinieren, um die Werte beim Sensor zwischenzuspeichern.

Was soll der ESP8266 machen? M.E. reicht es, wenn Du Licht an/aus als 1/0 an einen GPIO bekommst und das mit vzlogger an die Middleware übertragen lässt.
 

Warum will ich das haben? In erster Linie: Just for fun! 

Das ist die wichtigste Triebfeder! :-)

Viele Grüße
Rupert

 

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://demo.volkszaehler.org/pipermail/volkszaehler-users/attachments/20180505/e1b7d0b3/attachment-0001.html>


More information about the volkszaehler-users mailing list