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 Grüße Frank Tobias Lehr <tobias.l...@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.richte...@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.l...@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.richte...@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.l...@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 r...@nord-com.net: >>> >>> Hmm, bei mir funkioniert es… >>> >>> pi@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-boun...@demo.volkszaehler.org >>> <volkszaehler-users-boun...@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 r...@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- >>> boun...@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 >>> >>> >>> >> >