[vz-users] Gesamtverbrauch Gaszähler mit Nachkommastellen

Tobias Lehr tobias.lehr at me.com
Di Mär 31 21:12:44 CEST 2020


Hallo Frank,

habe eben nochmal gesucht. Das image das ich verwendet habe, ist vom 27.03.2018. Also schon ne Ecke alt. Ich habe es auf nem Testsystem mal geschafft dieses image upzudaten, war aber ziemlich aufwendig, dann werde ich wohl doch einfach ein neues Image aufspielen. Ich habe hier noch nen anderen RPi rumliegen und da werde ich erst mal testen und dann kann ich ja sehen ob alles wieder so läuft wie geplant und dann entsprechend das „Livesystem“ updaten.

Gruß Tobias 
> Am 31.03.2020 um 21:01 schrieb Frank Richter <frank.richter83 at gmail.com>:
> 
> Hallo Tobias,
> 
> den letzten Commit deiner Middleware kriegst du raus mit git log.
> 
> Updaten könnte aufwändig werden, wenn dein Raspbian und PHP zu alt sind für die aktuelle Middleware. Vor Buster hatte Raspbian kein PHP 7.3.
> 
> Grüße
> Frank
> 
> Tobias Lehr <tobias.lehr at me.com <mailto:tobias.lehr at me.com>> schrieb am Di., 31. März 2020, 20:31:
> Hallo Frank, 
> 
> das ist ne gute Frage, ich versuche gerade rauszufinden was das für ne Version ist, weiß nur nicht genau wie.
> 
> Ich habe das image verwendet, und es ist definitv noch ein image ohne nginx, ppm und virtuelle Kanäle.
> 
> Das mit dem Update ist auch so ne Sache, da habe ich mich bisher nie dran getraut. Bisher habe ich immer ein komplett neues Image aufgespielt, was ich allerdings jetzt nicht mehr machen wollen würde. Früher habe ich eine neue SD karte vorbereitet und dann einfach gewechselt, jetzt habe ich eine festverbaute SSD im Einsatz, und solange wollte ich den VZ nicht offline haben.
> 
> Ich hatte auch irgendwann mal auf einem Testsystem ein Update gemacht, dazu hatte ich auch eine Anleitung, allerdings finde ich diese nicht mehr. Bin mir nicht mehr sicher ob ich die aus dem Wiki oder hier aus der mailingliste hatte.
> 
> Wenn mir also jemand nen Tip geben kann wo ich suchen muss, bzw mir zusammenfassen kann wie ich ein Update sinnvollerweise mache, dann würde ich das System mal updaten.
> 
> Gruß Tobias
>> Am 31.03.2020 um 20:25 schrieb Frank Richter <frank.richter83 at gmail.com <mailto:frank.richter83 at gmail.com>>:
>> 
>> Hallo Tobias,
>> 
>> von wann ist deine Installation? Hab das von GitHub kopiert, wenn's bei dir anders aussieht müsstest du vielleicht mal wieder updaten.
>> 
>> https://github.com/volkszaehler/volkszaehler.org/blob/master/htdocs/js/wui.js#L826 <https://github.com/volkszaehler/volkszaehler.org/blob/master/htdocs/js/wui.js#L826>
>> 
>> Grüße
>> Frank
>> 
>> Tobias Lehr <tobias.lehr at me.com <mailto: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 <mailto: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 <mailto: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 <mailto: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 <mailto: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 <mailto: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 <mailto:volkszaehler-users-bounces at demo.volkszaehler.org>] On Behalf Of Tobias Lehr
>>>>> Sent: Sunday, March 29, 2020 5:34 PM
>>>>> To: volkszaehler.org <http://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 <mailto: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- <mailto:volkszaehler-users->
>>>>>> bounces at demo.volkszaehler.org <mailto: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/78b2ce18/attachment-0001.html>


More information about the volkszaehler-users mailing list