[vz-dev] QnD-Hacks CSV-Export
Florian Knodt
f.knodt at yotaweb.de
Mon May 26 15:57:10 CEST 2014
Mahlzeit,
ich habe vor kurzem eine Steuerungsanlage aus den frühen 90ern per
Volkszähler "Web-fähig" gebastelt. Leider war der CSV-Export noch nicht
ganz das, was die hiesigen Prüfer als brauchbar empfanden. Anbei ein
paar Anregungen, vielleicht kann es dem ein oder anderen als Startpunkt
dienen.
Disclaimer: Anlage musste schnell online gehen, daher eher quick&dirty.
001_default_tsfmt.patch
Erlaubt Exportmodulen das standardmäßige Datumsformat vorzugeben. Als
Beispiel verwendet CSV nun - sofern nichts anderes geforders - sql
(YYYY-mm-dd HH:MM:SS) statt timestamp. Da CSV nach meiner Erfahrung in
den meisten Fällen in Excel o.Ä. zur menschengestützten Ansicht landet
ist dieses Zeitformat imo sinnvoller.
CSV.php
Ist eine alternative^wzurechtgebastelte Implementierung des originalen
CSV-Export. Statt alle Kanäle untereinander zu schreiben werden die
Daten gesammelt und in eine Tabelle (uuid;timestamp) umgebogen.
- Da die Daten im RAM gesammelt werden eher nicht für große Datenmengen.
- Da keine Zusammenfassung stattfindet für Kanäle mit unterschiedlichen
Timestamps nur mäßig brauchbar
Meine Daten kommen nur 1x am Tag rein und werden entsprechend mit einem
Timestamp von Punkt 0 Uhr an die Middleware verfüttert, daher für meinen
Zweck noch passend.
Florian
-------------- next part --------------
--- a/lib/Volkszaehler/View/CSV.php
+++ b/lib/Volkszaehler/View/CSV.php
@@ -162,13 +162,13 @@ class CSV extends View {
$average = $interpreter->getAverage();
$consumption = $interpreter->getConsumption();
- $from = $this->formatTimestamp($interpreter->getFrom());
- $to = $this->formatTimestamp($interpreter->getTo());
+ $from = $this->formatTimestamp($interpreter->getFrom(), 'sql');
+ $to = $this->formatTimestamp($interpreter->getTo(), 'sql');
if (isset($from)) echo '# from: ' . $from . PHP_EOL;
if (isset($to)) echo '# to: ' . $to . PHP_EOL;
- if (isset($min)) echo '# min: ' . $this->formatTimestamp($min[0]) . ' => ' . View::formatNumber($min[1]) . PHP_EOL;
- if (isset($max)) echo '# max: ' . $this->formatTimestamp($max[0]) . ' => ' . View::formatNumber($max[1]) . PHP_EOL;
+ if (isset($min)) echo '# min: ' . $this->formatTimestamp($min[0], 'sql') . ' => ' . View::formatNumber($min[1]) . PHP_EOL;
+ if (isset($max)) echo '# max: ' . $this->formatTimestamp($max[0], 'sql') . ' => ' . View::formatNumber($max[1]) . PHP_EOL;
if (isset($average)) echo '# average: ' . View::formatNumber($average) . PHP_EOL;
if (isset($consumption)) echo '# consumption: ' . View::formatNumber($consumption) . PHP_EOL;
@@ -177,7 +177,7 @@ class CSV extends View {
if (isset($tuples)) {
// Aggregators don't return tuples
foreach ($tuples as $tuple) {
- echo $this->formatTimestamp($tuple[0]) . CSV::DELIMITER . $tuple[1] . CSV::DELIMITER . $tuple[2] . PHP_EOL;
+ echo $this->formatTimestamp($tuple[0], 'sql') . CSV::DELIMITER . $tuple[1] . CSV::DELIMITER . $tuple[2] . PHP_EOL;
}
}
}
diff --git a/lib/Volkszaehler/View/View.php b/lib/Volkszaehler/View/View.php
index 673c2b7..336573f 100644
--- a/lib/Volkszaehler/View/View.php
+++ b/lib/Volkszaehler/View/View.php
@@ -158,8 +158,10 @@ abstract class View {
/**
* format timestamp according to request
*/
- public function formatTimestamp($ts) {
- switch ($this->request->getParameter('tsfmt')) {
+ public function formatTimestamp($ts, $tsfmt=false) {
+ $check = $this->request->getParameter('tsfmt');
+ if(isset($check) && $check !== NULL) $tsfmt = $check;
+ switch ($tsfmt) {
case 'sql':
return strftime('%Y-%m-%d %H:%M:%S', intval($ts/1000));
case 'unix':
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://demo.volkszaehler.org/pipermail/volkszaehler-dev/attachments/20140526/628c2ef7/attachment.html>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 899 bytes
Desc: OpenPGP digital signature
URL: <http://demo.volkszaehler.org/pipermail/volkszaehler-dev/attachments/20140526/628c2ef7/attachment.pgp>
More information about the volkszaehler-dev
mailing list