
Abbildung 4: Die an Google geschickte URL, nach deren Angaben der Chart-Service das Diagramm in Abbildung 3 zeichnet. Manuell wäre sie nur mit großem Aufwand zu konstruieren.
Objekttechnik statt URL-Dschungel
Um allerdings von den Anforderungen eines Diagramms wie in Abbildung 3 auf die URL in Abbildung 4 zu kommen, muss der Diagrammkonstrukteur zunächst die Bedienungsanleitung auf [4] genau studieren und die verschiedenen Regeln und Kürzel verinnerlichen. Einfacher geht das mit dem CPAN-Modul Google::Chart, das eine objektorientierte Schnittstelle zur Diagramm-Definition anbietet und die URL Schritt für Schritt mittels leicht verständlicher Methodenaufrufe zusammensetzt. Doch vor der eigentlichen Diagrammdefinition steht erst noch die nötige Konsolidierung der Messdaten an.
Der Batterietester maß in unregelmäßigen Zeitabständen und auch nicht zeitgleich für beide Speicherbausteine. Um die beiden Entladungskurven nun so nebeneinander zu stellen, dass ein direkter Vergleich möglich ist, verschiebt das Skript in Listing 1 die Messzeitpunkte auf eine gemeinsame Zeitachse. Beide Messreihen starten dann zu einer virtuellen Stunde null. Das Skript rechnet die absoluten Messzeitpunkte in relative Zeitpunkte um.
Auf Zeitachse verschoben
Enthält die erste Messreihe also zum Beispiel Messpunkte zu den Zeitpunkten 8:00 und 9:00 Uhr, während die zweite Reihe um 11:00 und 11:30 Uhr gemessene Werte enthält, startet die virtuelle gemeinsame Zeitachse zum Beispiel um 0:00 Uhr und zeigt um 0:30 Uhr den Messpunkt der Messreihe 2 und um 1:00 Uhr den Messpunkt der Messreihe 1.
Hierzu bemüht das Skript »data-normalize« eine Datenstruktur »$data«, die eine Referenz auf einen Hash enthält, der unter den Schlüsseln »2gb« und »0.5gb« jeweils ein Array von Messpunkten mit Wertepaaren aus Zeitpunkt und Batteriekapazität enthält.
Normen von 2 bis 98
Ziel des Verfahrens ist es, beide Messkurven an einem gemeinsamen Zeitpunkt zu starten und sowohl die Zeitwerte in x-Richtung als auch die Messwerte in y-Richtung auf den Integerbereich zwischen 0 und 100 zu normieren, denn der Chart-Service erwartet die Daten so.
Das Skript führt die Zeitrechnung mit Hilfe des CPAN-Moduls »DateTime« durch und legt den Zeitpunkt der ersten (zufällig gewählten) Messreihe als Anfang der gemeinsamen Zeitachse in »$day_start« fest. In der Variablen »$time_current« speichert es den Zeitpunkt des aktuell bearbeiteten Messpunkts ab. In »$day_current« hingegen liegt das Tagesdatum der letzten Messung.
Stellt das Skript fest, dass zwischen zwei Messdaten ein ja nicht explizit angegebener Tagessprung liegt (zum Beispiel wenn es nach einer Messung um 23:00 Uhr eine um 8:00 Uhr gibt), addieren die Zeilen 44 und 45 einen Datumstag zu den Zählern.
Die Anzahl der Minuten seit der letzten Messung bestimmt die Zeile 50. Sie speichert diesen Wert in der Variablen »$x« (für x-Achsen-Werte) ab, von wo er in Zeile 53 zusammen mit dem Namen der Messreihe und dem aktuellen Ladezustands-Messwert in das Ergebnis-Array »@results« wandert.





