[vz-users] Gesamtverbrauch Gaszähler mit Nachkommastellen

Frank Richter frank.richter83 at gmail.com
Di Mär 31 21:11:03 CEST 2020


Du kannst den Vorschlag trotzdem mal ausprobieren:

var precision = Math.max(0, vz.options.precision -
Math.floor(Math.log(Math.abs(number))/Math.LN10));

ersetzen durch:

var precision = vz.options.precision;

Viel kaputtmachen kannst du da nicht, notfalls bringt ein git checkout
wui.js die Datei schnell wieder in Originalzustand.

Grüße
Frank

Tobias Lehr <tobias.lehr at me.com> schrieb am Di., 31. März 2020, 20:13:

> So ich wollte mich nochmal melden.
>
> Die zweite SQL Abfrage, die in der Tabelle agregate nachschlägt, war bei
> mir auch erfolgreich.
>
> Allerdings bin ich bei der dauerhaften Lösung im Frontend nicht
> weitergekommen.
>
> Leider funktioniert der unschöne Hack in der options.js nicht. Also die
> precision auf 8 zu nehmen und dann für alle anderen Einheiten wie m3 eine
> maxprecision vorzunehmen, Wenn ich precision auf 8 nehme, dann haben alle
> Werte acht stellen. Auch die Temperaturen, die ja schon eine maxPrecision
> definiert haben. Ein weiter Regel für ‚W‘ hinzuzufügen hat leider gar
> keinen Effekt.
>
> Also habe ich in der WUI.js gesucht, und die angegebene Stelle:
>
> var precision = (Math.abs(si.number) < vz.options.minNumber) ? 0 :
>     Math.max(0, vz.options.precision - Math.max(-1,
> Math.floor(Math.log(Math.abs(si.number))/Math.LN10)));
>
> gesucht, aber leider nicht gefunden. Zumindest nicht genauso wie in der
> Mail von frank angegeben.
>
> Ich habe zum Thema Roundings das hier gefunden:
>
> */***
> * * Rounding precision*
> * **
> * * Math.round rounds to whole numbers*
> * * to round to one decimal (e.g. 15.2) we multiply by 10,*
> * * round and reverse the multiplication again*
> * * therefore "vz.options.precision" needs*
> * * to be set to 1 (for 1 decimal) in that case*
> * */*
> vz.wui.formatNumber = function(number, unit, prefix) {
>         prefix = prefix || true; *// default on*
>         var siPrefixes = [*'k'*, *'M'*, *'G'*, *'T'*];
>         var siIndex = 0,
>                         maxIndex = (typeof prefix == *'string'*) ?
> siPrefixes.indexOf(prefix)+1 : siPrefixes.length;
>
>         *// flow unit or air pressure?*
>         *if* ([*'l'*, *'m3'*, *'m^3'*, *'m³'*, *'l/h'*, *'m3/h'*,
> *'m/h^3'*, *'m³/h'*, *'hPa'*].indexOf(unit) >= 0) {
>                 *// don't scale...*
>                 maxIndex = -1;
>
>                 *// ...unless for l->m3 conversion*
>                 *if* (Math.abs(number) > 1000 && (unit == *'l'* || unit
> == *'l/h'*)) {
>                         unit = *'m³'* + unit.substring(1);
>                         number /= 1000;
>                 }
>         }
>
>         *while* (prefix && Math.abs(number) > 1000 && siIndex < maxIndex)
> {
>                 number /= 1000;
>                 siIndex++;
>         }
>
>  *// avoid infinities/NaN*
>         *if* (number < 0 || number > 0) {
>                 var precision = Math.max(0, vz.options.precision -
> Math.floor(Math.log(Math.abs(number))/Math.*LN10*));
>                 *// apply maximum precision e.g. for °C values*
>                 *if* (vz.options.maxPrecision[unit] !== undefined) {
>                         precision =
> Math.min(vz.options.maxPrecision[unit], precision);
>                 }
>                 number = Math.round(number * Math.pow(10, precision)) /
> Math.pow(10, precision); *// rounding*
>         }
>
>         *// avoid almost zero*
>         *if* (Math.abs(number) < Math.pow(10, -vz.options.precision)) {
>                 number = 0;
>         }
>
>         *if* (prefix)
>                 number += (siIndex > 0) ? *' '* + siPrefixes[siIndex-1] : *'
> '*;
>         *else*
>                 number += *' '*;
>
>         *if* (unit) number += unit;
>
>         return number;
> };
>
> unter avoid infinities ist die Angabe so ähnlich drin, aber eben nicht
> exakt, deshalb habe ich mich da auch nicht rangetraut, da ich keine Ahnung
> davon habe und mir nix zerschießen wollte.
>
> Also habe ich jetzt erst mal entschieden das Thema auf Eis zu legen,
> prinzipiell brauche ich die NAchkommastellen nur einmal im Jahr, und da
> kann ich jetzt ja die Datenbank abfrage machen, oder ich geh einfach in den
> Keller und lese die NAckommastellen selber ab.
>
> Trotzdem danke für eure Hilfe.
>
> Gruß
> Tobias
>
> Am 29.03.2020 um 19:50 schrieb Frank Richter <frank.richter83 at gmail.com>:
>
> Hi Tobias.
>
> als unit musst du hier 'W' nehmen, nicht 'kWh'. Aber auch dann ist ein
> eher unschöner Hack...
>
> Da würde ich eher versuchen, die Dezimalstellen zu fixieren und nicht mehr
> abhängig von der Stellenzahl zu machen. Ersetze mal in der wui.js
>
> var precision = (Math.abs(si.number) < vz.options.minNumber) ? 0 :
>     Math.max(0, vz.options.precision - Math.max(-1,
> Math.floor(Math.log(Math.abs(si.number))/Math.LN10)));
>
> durch
>
> var precision = (Math.abs(si.number) < vz.options.minNumber) ? 0 :
> vz.options.precision;
>
> oder gleich
>
>   var precision = vz.options.precision;
>
> Ausprobiert hab ich's nicht, also keine Garantie...
>
> Grüße
> Frank
>
> Am So., 29. März 2020 um 18:16 Uhr schrieb Tobias Lehr <tobias.lehr at me.com
> >:
>
>> Die Abfrage hat aber funktioniert, auch wenn die Ausführung 20 sec
>> gedauert hat.
>>
>> Bei der precision bin ich auch nicht weiter, habe diese auf 8 genommen,
>> und für kWh in maxprecsision 2 definiert, hat aber nicht funktioniert,
>> komischerweise haben damit auch Temperaturen mehr nachkommastellen, obwohl
>> das vorher funktioniert hat
>>
>> precision: 8,                                                   *// TODO
>> update from middleware capabilities?*
>>         maxPrecision:[
>>         {                                               *// override
>> precision for certain units*
>>                 *'°C'*: 1
>>         },{
>>                 *'kWh'*: 2
>>         }
>>         ],
>>
>>
>> Gruß Tobias
>>
>> Am 29.03.2020 um 18:11 schrieb Frank Richter <frank.richter83 at gmail.com>:
>>
>> Die SQL-Abfrage hilft nur bei einem Zählerstand-Kanal. Bei Impulsen
>> müssen sämtliche Impulse aufsummiert werden, um den Gesamtverbrauch zu
>> erhalten.
>>
>> Grüße
>> Frank
>>
>> Tobias Lehr <tobias.lehr at me.com> schrieb am So., 29. März 2020, 18:06:
>>
>>> Hm also dann habe ich da falsch herum gedacht. Das hieße ich müsste die
>>> precision auf 8 stellen und bei maxPrecision für alle anderen werte dann
>>> die entsprechende Zahl vorgeben? Etwas kompliziert. mal testen.
>>>
>>> Die Datenbankabfrage habe ich jetzt auch hinbekommen, es lag an zwei
>>> doppelten Leerzeichen. Hab mir die korrekte Syntax jetzt mal abgespeichert,
>>> nur für den Fall.
>>>
>>> Gruß Tobias
>>>
>>> Am 29.03.2020 um 17:43 schrieb rgb at nord-com.net:
>>>
>>> Hmm, bei mir funkioniert es…
>>>
>>> pi at avz:~:(1)> mysql -uvz -pyourpassword
>>> Welcome to the MariaDB monitor.  Commands end with ; or \g.
>>> Your MariaDB connection id is 76
>>> Server version: 10.3.13-MariaDB-1 Raspbian testing-staging
>>>
>>> Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.
>>>
>>> Type 'help;' or '\h' for help. Type '\c' to clear the current input
>>> statement.
>>>
>>> MariaDB [(none)]> SELECT id FROM `volkszaehler`.`entities`
>>>     ->  WHERE UUID = 'b12dfd80-111c-11ea-8e1a-c9616b442377' INTO
>>> @CHANNEL;
>>> Query OK, 1 row affected (0.002 sec)
>>>
>>> MariaDB [(none)]> SELECT channel_id AS Kanal,(SELECT VALUE FROM
>>> `volkszaehler`.`properties`
>>>     ->   WHERE  `entity_id` = @CHANNEL AND `pkey` = 'title') AS Name,
>>>     -> ROUND(sum(VALUE/100)+(SELECT VALUE FROM
>>> `volkszaehler`.`properties`
>>>     ->   WHERE  `entity_id` = @CHANNEL AND `pkey` =
>>> 'initialconsumption'),2) AS Zählerstand
>>>     -> FROM `volkszaehler`.`data`
>>>     -> WHERE `channel_id` =  @CHANNEL ;
>>> +-------+-------------+--------------+
>>> | Kanal | Name        | Zählerstand  |
>>> +-------+-------------+--------------+
>>> |    10 | Zähler Gas  |      7346.64 |
>>> +-------+-------------+--------------+
>>> 1 row in set (1.501 sec)
>>>
>>> MariaDB [(none)]>
>>>
>>> *From:* volkszaehler-users [
>>> mailto:volkszaehler-users-bounces at demo.volkszaehler.org
>>> <volkszaehler-users-bounces at demo.volkszaehler.org>] *On Behalf Of *Tobias
>>> Lehr
>>> *Sent:* Sunday, March 29, 2020 5:34 PM
>>> *To:* volkszaehler.org - users
>>> *Subject:* Re: [vz-users] Gesamtverbrauch Gaszähler mit Nachkommastellen
>>>
>>> Vielen Dank für die Anregungen, ABER…
>>>
>>> precision in der options.js habe ich gefunden, aber noch nicht so genau
>>> verstanden. Standardmäßig ist precision ja auf 2 eingestellt. Ich habe
>>> jetzt aber verschiedene Nachkommastellen. Temperaturen sind alle mit 1
>>> NAchkommastelle, es sei denn diese wäre 0, dann haben sie keine
>>> nachkommastellen.
>>>
>>> Alle Werte mit 3 Stellen, haben gar keine Nachkommastellen. Werte
>>> kleiner 1 haben 1, 2 oder  3 Nachkommastellen.
>>>
>>> Die Werte unter Gesamt sind immer ohne, die haben aber auch 5 oder 6
>>> Stellen.
>>>
>>> ich habe jetzt precision auf 8 hochgenommen, weil mein Gaszähler 5
>>> Stellen vor dem Komma hat. Das funktioniert, dann hat der Gaszähler gesamt
>>> 3 Nachkommastellen, allerdings sehr unschön daran, Werte mit nur einer
>>> Stelle vor dem Komma haben dann plötzlich 7 NAchkommastellen.
>>>
>>> Also habe ich versucht eine Ausnahme einzufügen wie bei der für °C, das
>>> funktioniert aber nicht, ich vermute es liegt an der hochgestellten 3 in m3.
>>>
>>> maxPrecision:[
>>>         {                                               *// override
>>> precision for certain units*
>>>                 *'°C'*: 1
>>>         },{
>>>                 *'m³'*: 8
>>>         }
>>>         ],
>>>
>>>
>>> so habe ich versucht es zu erweitern. die hochgestellt 3 habe ich mir
>>> einfach reinkopiert. Aber auch die Angabe m3 oder m^3 funktionieren nicht.
>>>
>>>
>>>
>>>
>>> Zu der SQL Abfrage, ich würde zwar gerne den Wert fest im Frontend
>>> angezeigt bekommen aber so eine Abfrage kann ja hilfreich oder zumindest
>>> lehrreich sein. Ich muss dazu sagen ich bin absoluter Laie was SQL angeht.
>>>
>>>
>>> Wo muss ich die absetzen? In mysql direkt? phpmyAdmin habe ich nicht
>>> installiert. Habe ich probiert, aber bekomme einen Fehler wenn ich
>>> folgendes eingebe, also per copy&paste.
>>>
>>>
>>> SELECT id FROM `volkszaehler`.`entities`
>>>  WHERE UUID = 'b12dfd80-111c-11ea-8e1a-c9616b442377' INTO @CHANNEL;
>>>
>>>
>>>
>>> Der Fehler lautet: ERROR 1064 (42000): You have an error in your SQL
>>> syntax; check the manual that corresponds to your MariaDB server version
>>> for the right syntax to use near 'UUID =
>>> '01e03ee0-3241-11e9-991f-856a034c5015' INTO @CHANNEL' at line 2
>>>
>>> ich habe selbstverständlich die UUID auf die meines Gaszählers geändert.
>>>
>>> Gruß Tobias
>>>
>>>
>>>
>>>
>>> Am 29.03.2020 um 16:23 schrieb rgb at nord-com.net:
>>>
>>> Hallo,
>>>
>>> Folgende SQL-Abfrage könnte als Vorlage für die Berechnung des genauen
>>> Verbrauches dienen... müsstest Du für Deine Gegebenheiten entsprechend
>>> anpassen...
>>>
>>> SELECT id FROM `volkszaehler`.`entities`
>>>  WHERE UUID = 'b12dfd80-111c-11ea-8e1a-c9616b442377' INTO @CHANNEL;
>>>
>>> SELECT channel_id AS Kanal,(SELECT VALUE FROM `volkszaehler`.`properties`
>>>
>>>   WHERE  `entity_id` = @CHANNEL AND `pkey` = 'title') AS Name,
>>>           ROUND(sum(VALUE/100)+(SELECT VALUE FROM
>>> `volkszaehler`.`properties`
>>>   WHERE  `entity_id` = @CHANNEL AND `pkey` = 'initialconsumption'),2) AS
>>> Zählerstand
>>> FROM `volkszaehler`.`data`
>>> WHERE `channel_id` =  @CHANNEL ;
>>>
>>> Gruss,
>>> Alex
>>>
>>>
>>> -----Original Message-----
>>> From: volkszaehler-users [mailto:volkszaehler-users-
>>> bounces at demo.volkszaehler.org] On Behalf Of Tobias Lehr
>>> Sent: Sunday, March 29, 2020 3:25 PM
>>> To: volkszaehler-users
>>> Subject: [vz-users] Gesamtverbrauch Gaszähler mit Nachkommastellen
>>>
>>> Hallo,
>>>
>>> ich logge meinen Gasverbrauch per S0 in den Volkszaehler. Die Werte für
>>> min., max., aktuell und Verbrauch werden mit Nachkommastellen
>>> angezeigt. Der Gesamtverbrauch wird aber nur mit ganzer Zahl angezeigt.
>>> Mein Gaszähler hat aber 3 Nachkommastellen und mein Gasversorger
>>> möchte den Zählerstand mit Nachkommastellen angegeben haben. Und da
>>> ich gerade den Zählerstand für die Abrechnung angeben musste, wollte ich
>>> wissen ob man den Gesamtverbrauch, der ja der Zählerstand ist, auch mit
>>> Nachkommastellen anzeigen lassen kann. Ich habe da was in Erinnerung das
>>> es eventuell durch Änderung der options.js Datei gehen könnte. Aber ich
>>> habe leider überhaupt keine Idee wie. Liege ich da richtig? Und könnte
>>> mir
>>> da jemand Unterstützung geben.
>>>
>>> Gruß Tobias
>>>
>>>
>>>
>>
>
-------------- nächster Teil --------------
Ein Dateianhang mit HTML-Daten wurde abgetrennt...
URL: <http://demo.volkszaehler.org/pipermail/volkszaehler-users/attachments/20200331/30b36fab/attachment-0001.html>


More information about the volkszaehler-users mailing list