[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