[vz-users] Datenübertragung zwischen zwie Volkszählern

Friedrich Kessler vz at riare.de
Wed Dec 27 20:57:47 CET 2017


Hallo,

erstmal schöne Feiertage und ein erfolgreiches 2018. Vielen Dank auch von
meiner Seite für die super Unterstützung und Weiterentwicklung des
Volkszählers.

Ich habe 3 Raspis mit Erweiterungen von Udo. Insgesamt 15 Zähler (jeder
Stromkreis) + 2 Temperaturmessungen. Diese sammeln die Daten welche ich in
15 Minuten Intervall an einer weiteren Raspi (mit installiertem vz) sende,
der nun alle Daten hält. Habe mittlerweile 5.731.289 Datensätze in meinem
„Sammle-Raspi“.
Wäre nicht im August mein Switch ausgefallen an dem die 3 Raspis „hängen“
hätte ich heute eine Uptime von über 800 Tagen auf den Systemen (fahre
noch sehr alte Versionen).


Cron-Job exportiert die Daten aus der DB (letzten 3 Tage) -> kopiert die
Daten mittels scp auf den 4. Raspi und dort werden diese mittels cronjob
importiert.

Export-SQL-Datei:

export.sql

# die Daten der letzten 3 Tage werden exportiert - kann beliebig geändert
werden
set @datum=subdate(current_date,3);
set @zp = unix_timestamp(@datum)*1000;
select channel_id,
 timestamp,
 value 
 from data 
 where timestamp > @zp
 INTO outfile '/tmp/data.vz3' fields terminated by ';';



Cronjob ruft shell-script auf:

export.sh

#!/bin/bash
‚ lösche alte Daten aus temp-Verzeichnis
sudo rm /tmp/*.vz3 
mysql -uuser -ppassword volkszaehler < export.sql
scp /tmp/data.vz3 pi at serv02:/tmp/data.vz3;



Daten liegen nun im temp-Verzeichnis und werden mittels scp auf den
Zielrechner (serv02) ins temp-Verzeichnis kopiert.

Auf dem Ziel-Raspi läuft ein Cronjob:

import.sh
#!/bin/bash
mysql -vv --local_infile=1 -uuser -ppassword volkszaehler < data_import.sql
sudo rm /tmp/*.vz3



data_import.sql
LOAD DATA LOCAL INFILE '/tmp/data.vz3'
INTO TABLE data
FIELDS TERMINATED BY ';'
ENCLOSED BY '"'  LINES TERMINATED BY '\n'  (channel_id,timestamp,value);

Beim Import finden noch einige Schritte statt (Datenverdichtung  Monat
/Tag, wann wurden die letzten Daten importiert, also einige Daten erzeugt
um Abfragen schneller ablaufen zu lassen)



Hier habe ich dann die Möglichkeit mittels VZ Frontend alle Kanäle in
Graphen auszuwerten bzw. habe ich ein PHP Script welches aus den Werten
der beiden Tabellen die Übersicht auf einer Web-Seite darstellt.

Viele Grüße und guten Rutsch

Friedrich





Am 26.12.17 12:33 schrieb "Rupert Schöttler" unter
<rupert.schoettler at gmx.de>:

>Hallo Daniel,
>
>
>Am 24.12.2017 um 17:06 schrieb Daniel Lauckner:
>> Mein erster Ansatz wäre jetzt der gewesen, im WP-Rpi einen
>>> Kanal: El.Energie(S0-Signal) anzulegen und dann direkt in die
>>> Datenbank diese Kanales die Daten aus der Datenbank des anderen
>>> Rpi zu übertragen, wo ja bereits ein solcher Kanal samt
>>>Datenbank besteht.
>>> Die Frage ist : Nur wie?
>> Auf jeden Fall nicht auf Datenbankebene!
>> Die Einträge in der DB bekommen nicht nur einen Kanal zugewiesen
>> sondern auch eine fortlaufende Nummer.
>
>Warum nicht? Klar, die "fortlaufende Nummer", den Primary Key "id" darf
>man nicht mit übertragen, den erzeugt sich die Ziel-DB beim insert aber
>auch selbst. Die channel_id muss halt die richtige sein, sonst kann die
>Ziel-DB die Daten nicht zuordnen.
>
>Ich habe nach meinen "Wiederkehrenden System-Crashes" (siehe Thread von
>Anfang Dezember) die Daten aus den Sicherungsfragmenten auf einem
>Rechner nach CSV exportiert und in die Middleware wieder eingespielt.
>
>Auf der Sicherungsseite:
>create table csv_data ( channel_id INTEGER not null, timestamp BIGINT
>not null, value DOUBLE not null ) engine=csv;
>insert into csv_data select channel_id,timestamp,value from ...
>
>Dies erzeugt im Verzeichnis /var/lib/mysql/volkszaehler eine Datei
>csv_data.CSV, die ich dann auf den Middleware-Pi kopiert und mit
>load data local infile 'csv_data.CSV' into table data FIELDS TERMINATED
>BY ',' OPTIONALLY ENCLOSED BY '"' LINES  TERMINATED BY '\n' (channel_id,
>timestamp, value);
>eingelesen habe.
>
>Dieses Verfahren ist sicherlich nicht dazu geeignet, dauerhaft zwei
>VZ-Datenbanken zu synchronisieren, wie Torsten das im OP angefragt
>hatte. Das braucht's ja auch gar nicht, und er hat es mittlerweile
>abgestellt. So ein Export/Import mag aber nützlich sein, die auf der
>"abgeklemmten" Datenbank gesammelten Daten auf die aktive zu übertragen,
>damit die Historie komplett ist.
>
>Viele Grüße
>Rupert
>




More information about the volkszaehler-users mailing list