<div dir="ltr"><div class="gmail_extra">Hallo *,<br><div class="gmail_quote"><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><div dir="ltr"><br><div class="gmail_extra">
<div class="gmail_quote">...<br><div class="im"><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">
Ich wünsche mir allerdings, dass im Volkszähler Projekt die Anzeige von absoluten Zählerständen in Zukunft irgendwann einmal vernünftig realisiert wird.<br></blockquote><div><br></div></div><div>Die Idee finde ich nicht uncharmant. <br>
<br>Je nachdem welchen Zählertyp Du hast sollte das eigentlich heute schon möglich sein. Wenn es sich um ein "Meter" handelt das also Verbräuche speichert dann kann man natürlich den Startverbauch in einen Timestamp vor dem ersten echten Zählerwert schreiben. Damit die MW den wirklich berücksichtigt braucht es zusätzlich noch 1(!) weiteren Wert+Timestamp davor da der erste verschluckt wird. Dieser sollte soweit vorher liegen dass eine vernünftige Durchschnittsleistung berechnet wird- anderenfalls kann das im FE sehr blöd aussehen.<br>
</div></div></div></div></blockquote><div><br></div><div>Ich habe das Ganze mal in einen Unit Test verpackt- wer Interesse hat sollte es mit dem Code unten und den Unit Tests in Git nachvollziehen können. Die Funktion "setTotal" funktioniert so, dass sie <br>
<br></div><div>1) den aktuellen Gesamtverbaucht ermittelt<br></div><div>2) ausrechnet wieviel dazu muss um den Wunschwert zu erreichen<br></div><div>3) den ersten Wert der Datenbank um den "dazu" Anteil erhöht<br>
</div><div>4) und den ersten Wert aktualisiert<br><br></div><div>Der Ablauf dafür mit den Unittestfunktionen sieht so aus:<br><br> function testSetTotal() {<br> $this->getTuples(1, "1.1.2030");<br> echo("\nold consumption: {$this->json->data->consumption}\n");<br>
<br> // new desired total consumption<br> $total = 75; // kWh<br> $delta = $total - $this->json->data->consumption / 1000; // kWh<br><br> $rowCount = $this->json->data->rows;<br>
if ($rowCount) {<br> // we have starting timestamp + at least one valid tuple- get tuple range<br> $ts1 = $this->json->data->from;<br> $ts2 = ($rowCount > 2) ? $this->json->data->tuples[1][0] : $this->json->data->to;<br>
<br> // add consumption of first tuple<br> $delta += $this->json->data->tuples[0][1] * ($ts2 - $ts1) / 3.6e9; // kWh<br><br> // update tuple to match desired total<br> $url = self::$context . '/' . self::$uuid . '.json?operation=edit&ts=' . $ts2 . '&value=' . ($delta * self::$resolution); // kWh * res<br>
$this->getJson($url);<br><br> // verify total consumption<br> $this->getTuples(1, "1.1.2030", '', 1);<br> echo("new consumption: {$this->json->data->consumption}\n");<br>
<br> $this->assertFromTo($ts1, $this->json->data->to);<br> $this->assertEquals($total * 1000, $this->json->data->consumption); // compare Wh<br> }<br> else {<br>
echo("Not enough tuples\n");<br> }<br> }<br></div><div><br></div><div>Um die Funktion "setTotal" jetzt produktiv einsetzen zu können braucht es:<br></div><div>- eine Erweiterung des Datenkontext da editieren aktuell nicht möglich ist<br>
</div><div>- eine Idee wo/wie die Funktion den Anwendern angeboten werden soll:<br> a) Evtl. als kleines Zusatztool für die Kommandozeile?<br></div><div> b) als Funktion des channel Kontext?<br><div> c) als Funktion des channel Kontext?<br>
</div></div> d) als neuer "totals" Kontext?<br><div> <br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><div dir="ltr"><div class="gmail_extra">
<div class="gmail_quote"><div></div><div>Bei "Countern" ist es egtl. kein Problem- hier wird ja ohnehin der echte Zählerwert gespeichert, passt also.<br><br></div></div></div></div></blockquote><div>Tatsächlich scheint auch das nicht ganz zu funktionieren da die MW immer nur die Differenzen ausgibt. Auch hierfür wäre es also notwendig 1 zusätzlichen Tuple mit Wert 0 als allerersten Tuple zu schreiben. <br>
<br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><div dir="ltr"><div class="gmail_extra"><div class="gmail_quote"><div></div><div>Bei "Sensoren" wiederrum die nur Momentanwerte speichern ließe sich das analog "Meter" implementieren.<br>
</div><div><br>Jetzt käme es mal auf einen Test und Feedback an, dann liesse sich das Ganze durchaus auch über den Channel Controller implementieren, z.B. indem man eine neue Eigenschaft "hasTotal" definiert die über Channel Updates in Form von Tupeln gespeichert werden. Damit könnte Clients die obige nicht ganz triviale Logik verfügbar gemacht werden.<br>
<br></div></div></div></div></blockquote>Wer probierts aus und gibt Feedback ob/wie die Funktion implementiert werden soll?<br><br>vg<br></div><div class="gmail_quote">Andreas<br></div></div></div>