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

Frank Richter frank.richter83 at gmail.com
Sat May 5 20:23:10 CEST 2018


Wie voll ist dein /tmp (df - h)?

Am 5. Mai 2018 um 20:16 schrieb Frank Richter <frank.richter83 at gmail.com>:

> Kein Plan, hatte ich noch nie. Speicherkarte oder was besseres als
> Systemlaufwerk?
>
> Am 5. Mai 2018 um 20:13 schrieb Christian Wulff <christianwulff at gmx.de>:
>
>> …..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_enable
>> d":1,"aggregation_rows":0,"aggregation_size":49152,"aggre
>> gation_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/16f5f2f9/attachment-0001.html>


More information about the volkszaehler-users mailing list