[vz-dev] Zeitstampfer - was: Re: Fwd: watchcat.c und Hardwareansteuerung

Jens Wilmer volkszaehler at jenswilmer.de
Sun May 2 02:40:53 CEST 2010


Hallo zusammen,

Am 01.05.2010 21:14, schrieb Justin Otherguy:
> Lasst uns das doch mal wie folgt ausprobieren:
> - der Controller sammelt die eingehenden Impulse für ein konfiguriertes Intervall, z.B. 1s, 1 min, 15 min, 1 Tag...
>    
So etwas ähnliches sollte ja die "HighVolume" Version des "Watchasync", 
allerdings ist dies erst einmal nur mir 2^n Sekunden Intervallen möglich.
>    auf diese Weise lassen sich verschiedene Fälle abdecken:
>    - wir brauchen keine Auswertung der ms
>    - wir ahmen das Verhalten der Smart Meter der grossen EVU nach
>    - wir schonen unsere Internet-Anbindung
>    - wir haben einen Zähler, der kontinuierlich Impulse rausspuckt und wandeln das so in eine zeitkontinuierliche Folge
> - bei der Übermittlung verwenden wir dann einen zusätzlichen Parameter "count"
>    - dieser ist optional (so können wir auch den bisherigen Modus weiter laufen lassen)
>    - das Default ist count=1
>    
Bei mir würde sich allerdings das format der Anfragen ändern, da alle 
Impulse eines Intervalles von allen Eingängen gesendet würden. Es sollte 
aber kein Problem sein, dies auf dem Server zu sortieren.
> - bei der Auswertung können gibt es ja derzeit bereits 2 Modi:
>    - den "Direktmodus":
>      hier wird aus allen Zeitstempeln Zeitstempel-/Leistungs-Tupel berechnet und an den Browser übermittelt
>      Das ist wunderbar für eine Darstellung, bei der die Anzahl Impulse/Pixel in der Darstellung sehr gering würde (derzeit ist dieser Schwellwert (Variable "$schwelle") auf 10 eingestellt: weniger als $schwelle Impulse im Intervall ->  "Direktmodus"; sonst: "Zählmodus"
>    
Da dieser Modus nur leider immer falsche Werte Anzeigt, außer bei 
konstantem Verbrauch ab dem zweiten Intervall, würde ich ja gern bei der 
Darstellung schon auf diesen Modus verzichten.
>    - den "Zählmodus":
>      hier werden bereits nicht mehr alle einzelnen Impuls-Intervalle ausgewertet und übermittelt, sondern hier wird pro Intervall nur noch die Anzahl Impulse bestimmt; daraus wird dann die Leistung berechnet (Impulse/Zeit)
> ->  der Direktmodus würde nun also entfallen; das bedeutet:
> - wir müssen uns mal anschauen, wie sich das auf Darstellungen mit "hohem Zoom" auswirkt (also: wenig Impulse für das darzustellende Zeitfenster)
>    
Die Darstellung wird dann auch in diesem Bereich richtig. Ob "richtig" 
jetzt auch "schön" ist, darüber ließe sich noch streiten. Ich würde es 
bekanntlich sehr willkommen heißen.
> - bei der Auswertung können nicht mehr nur die Einträge gezählt werden:
>    SELECT * from public.pulses where id='$id' and servertime>  '$schritt_anfang' and servertime<  '$schritt_ende'
>    sondern man müsste pro Eintrag das Feld "count" aufsummieren
>    
Das sollte für die Datenbank fast keinen Unterschied ergeben, falls es 
keinen Index für "id" und "servertime" gibt, andernfalls würde ich es 
ihr aber trotzdem noch zutrauen.
> ->  die DB-Struktur müsste man also um das Feld "count" ergänzen
>    
Ja.
> Das wär's schon ;-)
>
> Das bedeutet, dass man mit der Wahl des Intervalls eben die Auflösung festlegt. Eine "bulk"-Übertragung ("1 impuls kam zu $zeitpunkt1; 1 impuls kam zu $zeitpunkt2; ...) halte ich für zu aufwändig. Wer eine höhere Auflösung haben möchte, sollte das Intervall entsprechend wählen.
>    
Genau meine Meinung, Du scheinst in unserer Diskussion die Seiten 
gewechselt zu haben.
> Ich finde es sehr schick, eine möglichst fein aufgelöste Darstellung zu haben - vielleicht sollte man das aber auch nicht überbewerten. Im Anhang zu Folien zum DFN-Workshop sind Graphen mit unterschiedlicher zeitlicher Auflösung zum Vergleich abgebildet. Wenn man sich das anschaut wird klar, dass 15 Minuten fast schon ausreichen; die reale Aussagekraft steigt m.E. damit nicht mehr besonders durch eine höhere Auflösung. Wenn man also 1 oder 5 Minuten wählt, sollte das wunderbar sein.
>    
Für nicht Zweierpotenz Sekunden Intervalle würden auch im Interrupt Code 
einige extrem schnell ausgeführte binäre Verundungen durch sehr langsame 
Divisionen ersetzt. Hier wäre noch zu schauen, ob man dadurch wieder 
Impulse verliert, oder sogar die Funktionsfähigkeit des Ethernets 
verliert. Zur Not müsste man hier noch einen zweiten Puffer einfügen, 
der wie bisher Zeitpunkte sammelt und dies dann in der Hauptschleife 
"konsolidieren"
Ein Nachteil ist der höhere Speicherverbrauch. Bei der 
Einzelimpulsvariante kann sich ein 644 64 Pufferspeicherplätze leisten. 
Wenn jetzt durchschnittlich alle 10 Sekunden ein Impuls kommt, können 
damit 640 Sekunden sekundengenauer Daten abgelegt, und Netzausfälle 
damit überbrückt werden. Die Sammelvariante ist derzeit noch auf die 
Überwachung von 8 Portpins ausgelegt (Und ich warte noch auf ein wenig 
M4 Unterstützung aus der Ethersex Ecke um dies zu ändern), damit bekomme 
ich mit etwas mehr Speicherbedarf 32 Pufferspeicher hin, damit lassen 
sich 32 Sekunden sekundengenauer Impulse speichern und damit 
Netzausfälle bis zu 32 Sekunden überbrücken. Das könnte unter Umständen 
für DSL Zwangstrennungen zu wenig sein.
Dafür würden bei der Einzelimpulsvariante die nicht mehr pufferbaren 
Impulse ignoriert, bei der Sammelmethode würden sie dem Intervall 32 
Sekunden später zugeschlagen. Damit bliebe die Summe bei einer Auflösung 
unter 64 Sekunden wieder korrekt, nur im "Nahbereich" gäbe es eine 
Verschiebung und die auch direkt um 32 Sekunden.

Gibt es jetzt pro Sekunde zehn Impulse lassen sich mit der 
Einzelimpulsvariante 6,4 Sekunden Puffern, mit der Sammelmethode bleibt 
es bei 32 Sekunden. Dazu käme noch, das die Sammelmethode auch nur 1 
Paket pro Sekunde verschicken müsste, das sollte gehen. Die 
Einzelimpulsmethode müsste 10 Pakete pro Sekunde verschicken, das geht 
nicht. Diese Impulsfrequenz darf also nur 5 Sekunden andauern, dann 
bräuchte sie erstmal 30 Sekunden, um sich zu "erholen".

Dreht man die Auflösung herunter gibt es auch direkt eine Entspannung: 
wenn man mit einer Auflösung von 64 Sekunden zufrieden ist, reicht der 
Puffer auch direkt für 32 * 64 = 2048 Sekunden. (Bei 10 Impulsen pro 
Sekunde müsste man hier allerdings die Zähler erweitern und käme nur 
noch auf 16 * 64 = 1024 Sekunden)

Die Auswahl hängt hier von zwei Kriterien ab: Wie genaue Daten möchte 
ich sammeln und preisgeben? (Den Einzelimpulszähler könnte man auch 
mühelos um die entsprechende "Unschärfe" ergänzen.)
Wieviele Impulse kommen in diesem Intervall durchschnittlich an? Sobald 
dies mehr als 2 sind, ist der Sammelzähler besser.
Ich bin noch mit dem Einzelimpulszähler zufrieden (Auflösung 1 Sekunde, 
ca. 1 Impuls/ 2 Sekunden)... Sehe aber auch, dass die Sammelvariante in 
vielerlei Hinsicht sehr schnell besser ist.

> Einverstanden?
>    
Schon lange!
> Hat jemand Lust, das im Controllercode zu implementieren?
>    
Für Watchasync ist es fast schon fertig...

  Bis bald,
   Jens Wilmer



More information about the volkszaehler-dev mailing list