[vz-users] Abfrage Zählerstand aus Wasserzähler

Andreas Goetz cpuidle at gmail.com
Do Apr 8 10:18:44 CEST 2021


Das passiert tatsächlich nicht in der Middleware sondern nur im UI:

    this.totalconsumption = (this.definition.scale || 1) * this.initialconsumption + json.data.consumption;

Du musst die Addition also selber machen. Den Wert dafür erhältst Du über:

https://demo.volkszaehler.org/middleware.php/entity/1a233660-2e6c-11eb-920c-47caa07ee809.json <https://demo.volkszaehler.org/middleware.php/entity/1a233660-2e6c-11eb-920c-47caa07ee809.json>

Viele Grüße, Andreas


> On 8. Apr 2021, at 10:03, Heine.Thomas at online.de wrote:
> 
> Hallo Andreas,
> 
> das ist vom ersten Wert bis jetzt, oder?
> Das gibt ne lange Liste (siehe Anhang)
> 
> Da steht dann bei consumption 1490 drin. 
> Ist ja auch der Verbraúch seit der Aufzeichnung.
> 
> Wird da aber nirgends der Initailverbrauch drauf gerechnet oder angezeigt, oder? 
> So dass ich es nicht selbst machen muss und an mehreren Stellen dran denken muss?
> 
> Oder kann ich den Eintrag des Initialverbrauchs auch irgendwie abfragen?
> 
> Danke
> 
> Gruß
> Thomas
> 
> 
> Am 08.04.2021 um 09:55 schrieb Andreas Goetz:
>> Entschuldige, Deine Timestamps scheinen zu passen in ms. Bei Post kannst Du die aber weglassen- die Middleware wird sie selbst erzeugen.
>> 
>> Bzgl. Abfrage probier mal bitte ?from=1&to=now
>> 
>> Viele Grüße, 
>> Andreas
>> 
>> 
>>> On 8. Apr 2021, at 09:42, Heine.Thomas at online.de <mailto:Heine.Thomas at online.de> wrote:
>>> 
>>> Hallo Andreas,
>>> 
>>> ich steh grade auf dem Schlauch. An welcher Stelle seht ihr denn falsche Zeitstempel?
>>> Welcher Konverter? Das ESP?
>>> 
>>> Das ESP sendet die Daten an Node-Red. Dort setze ich mir den Post-Befehl selbst zusammen. 
>>> Ich nehme den Counter-stand und setze die UUID und einen aktuellen Zeitstempel mit dran.
>>> <bhjgbnpbhbfpehmc.png>
>>> 
>>> ich poste es wie folgt:
>>> http://192.168.178.51/middleware.php/data/ <http://192.168.178.51/middleware.php/data/>xxxxxx-xxxxx-xxxxx-xxxxx-xxxxxxxxxx.json?ts=1617867468039&value=147
>>> 
>>> Die post-response:
>>> {"_msgid":"99863cea.a330b","uuid":"xxxxxx-xxxxx-xxxxx-xxxxx-xxxxxxxxxx","timestamp":1617867468039,"url":"http://192.168.178.51/middleware.php/data/ <http://192.168.178.51/middleware.php/data/>xxxxxx-xxxxx-xxxxx-xxxxx-xxxxxxxxxx.json?ts=1617867468039&value=147","statusCode":200,"headers":{"date":"Thu, 08 Apr 2021 07:37:48 GMT","server":"ReactPHP/1","cache-control":"no-cache, private","content-type":"application/json","access-control-allow-origin":"*","content-length":"26","connection":"close","x-node-red-request-node":"39370292"},"responseUrl":"http://192.168.178.51/middleware.php/data/ <http://192.168.178.51/middleware.php/data/>xxxxxx-xxxxx-xxxxx-xxxxx-xxxxxxxxxx.json?ts=1617867468039&value=147","payload":{"version":"0.3","rows":1},"redirectList":[]}
>>> 
>>> Ist hier irgend ein Fehler versteckt?
>>> 
>>> Gruß
>>> Thomas
>>> 
>>> Am 08.04.2021 um 09:01 schrieb Andreas Goetz:
>>>> Die VZ Zählerstände sind in Millisekunden- der Konverter vmtl. Sekunden? 
>>>> 
>>>> Viele Grüße, Andreas
>>>> 
>>>> 
>>>>> On 8. Apr 2021, at 09:00, Heine.Thomas at online.de <mailto:Heine.Thomas at online.de> wrote:
>>>>> 
>>>>> Hallo Thomas,
>>>>> 
>>>>> Wenn ich es so abfrage:
>>>>> http://192.168.178.51/data/xxxxxx-xxxxx-xxxxx-xxxxx-xxxxxxxxxx.json <http://192.168.178.51/data/xxxxxx-xxxxx-xxxxx-xxxxx-xxxxxxxxxx.json>
>>>>> kommt folgendes:
>>>>> 
>>>>> {"version":"0.3","data":{"tuples":[[1617777764306,0,1]],"uuid":"xxxxxx-xxxxx-xxxxx-xxxxx-xxxxxxxxxx","from":1617777464308,"to":1617777764306,"min":[1617777764306,0],"max":[1617777764306,0],"average":0,"consumption":0,"rows":2}}
>>>>> consumption bleibt 0 (ist das nicht der Aktualverbrauch?)
>>>>> 
>>>>> Ich hab ja keinen Impuls-Kanal, sondern einen Zählerstand-Kanal.
>>>>> In Frontend wird der Gesamtverbrauch ja auch richtig angezeigt (aufgerundet 136m³):
>>>>> 
>>>>> <ajjlibndepcjlagi.png>
>>>>> 
>>>>> Den Gesamtverbrauch (müsste ja der Zählerstand sein) würde ich gerne anzeigen.
>>>>> Oder habe ich hier irgendwas nicht richtig kapiert, oder Grundlegende Denkfehler?
>>>>> 
>>>>> Der Counter-Stand des ESP kann doch auch als Zählerstand mit dem entsprechenden Offset und Initialverbrauch als "Zähler" dienen,                             oder?
>>>>> 
>>>>> <lppmegjjoipaghpl.png>
>>>>> 
>>>>> 
>>>>> 
>>>>> Was stimmt bei den Zeitstempeln nicht? Wenn ich sie im Unix-Time-Converter eingebe, passen sie.
>>>>> 
>>>>> Gruß Thomas
>>>>> 
>>>>> 
>>>>> Am 08.04.2021 um 08:40 schrieb Thomas Höpfner:
>>>>>> Hallo Thomas,
>>>>>> 
>>>>>> die Zeitstempel stimmen nicht. Wie PHP hier reagiert verstehe ich auch nicht.
>>>>>> options=raw kanst du weglassen. Hier bekommst du nur eine Liste mit allen Impulsen. Interesand ist aber nur die Anzahl, die steht dann auch als consumtion in der Antwort.
>>>>>> Ich sehe im Moment keine Möglichkeit den aktuellen Zählerstand eines Iipulszählers aus vz auszulesen.
>>>>>> 
>>>>>> Thomas 
>>>>>> 
>>>>>> -----Ursprüngliche Nachricht-----
>>>>>> Von: Heine.Thomas at online.de <mailto:Heine.Thomas at online.de> <Heine.Thomas at online.de> <mailto:Heine.Thomas at online.de>
>>>>>> Gesendet: Donnerstag 8 April 2021 08:24
>>>>>> An: volkszaehler-users at demo.volkszaehler.org <mailto:volkszaehler-users at demo.volkszaehler.org>
>>>>>> Betreff: Re: [vz-users] Abfrage Zählerstand aus Wasserzähler
>>>>>> 
>>>>>> Hallo Andreas,
>>>>>> 
>>>>>> es liegen seid 2.4. Daten vor (inzwischen 1450 Liter)
>>>>>> Initialverbrauch 134264 Liter
>>>>>> Der Zählerstand sollten also inzwischen rechnerisch 135714 Liter sein.
>>>>>> 
>>>>>> Hier die Debug-Abfrage:
>>>>>> 
>>>>>> http://192.168.178.51/data/xxxxxx-xxxxx-xxxxx-xxxxx-xxxxxxxxxx.json?from=-1&options=raw&debug=1 <http://192.168.178.51/data/xxxxxx-xxxxx-xxxxx-xxxxx-xxxxxxxxxx.json?from=-1&options=raw&debug=1>
>>>>>> 
>>>>>> und das Ergebnis:
>>>>>> 
>>>>>> {
>>>>>> 	"version": "0.3",
>>>>>> 	"data": {
>>>>>> 		"tuples": [
>>>>>> 			[
>>>>>> 				1617862067814,1617864302904
>>>>>> 				145,
>>>>>> 				1
>>>>>> 			]
>>>>>> 		],
>>>>>> 		"uuid": "xxxxxx-xxxxx-xxxxx-xxxxx-xxxxxxxxxx",
>>>>>> 		"from": 1617861767833,
>>>>>> 		"to": 1617862067814,
>>>>>> 		"average": 0,
>>>>>> 		"consumption": 0,
>>>>>> 		"rows": 2
>>>>>> 	},
>>>>>> 	"debug": {
>>>>>> 		"database": "pdo_mysql",
>>>>>> 		"time": 0.19783,
>>>>>> 		"uptime": 1177360290,
>>>>>> 		"load": [
>>>>>> 			3.78,
>>>>>> 			4.25,
>>>>>> 			4.21
>>>>>> 		],
>>>>>> 		"commit-hash": "xxxxxxxxxxxxxxxxxxxxxxxxxxx",
>>>>>> 		"php-version": "7.3.19-1~deb10u1",
>>>>>> 		"messages": [],
>>>>>> 		"sql": {
>>>>>> 			"totalTime": 0.02234506607055664,
>>>>>> 			"worstTime": 0.0026459693908691406,
>>>>>> 			"queries": [
>>>>>> 				{
>>>>>> 					"sql": "SELECT \n  MAX(timestamp) \nFROM \n  data \nWHERE \n  channel_id = 44 \n  AND timestamp < 1617873106000",
>>>>>> 					"execTime": 0.0026459693908691406
>>>>>> 				},
>>>>>> 				{
>>>>>> 					"sql": "SELECT \n  MAX(timestamp) \nFROM \n  data \nWHERE \n  channel_id = 44 \n  AND timestamp < 1617862067814",
>>>>>> 					"execTime": 0.0012600421905517578
>>>>>> 				},
>>>>>> 				{
>>>>>> 					"sql": "SELECT \n  aggregate.type \nFROM \n  aggregate \n  INNER JOIN entities ON aggregate.channel_id = entities.id <http://entities.id/> \nWHERE \n  uuid = 'xxxxxx-xxxxx-xxxxx-xxxxx-xxxxxxxxxx' \n  and aggregate.type = 6 \n  AND timestamp >= 1617861767833 \n  AND timestamp <= 1617862067814 \nLIMIT \n  1",
>>>>>> 					"execTime": 0.0021820068359375
>>>>>> 				},
>>>>>> 				{
>>>>>> 					"sql": "SELECT \n  aggregate.type \nFROM \n  aggregate \n  INNER JOIN entities ON aggregate.channel_id = entities.id <http://entities.id/> \nWHERE \n  uuid = 'xxxxxx-xxxxx-xxxxx-xxxxx-xxxxxxxxxx' \n  and aggregate.type = 5 \n  AND timestamp >= 1617861767833 \n  AND timestamp <= 1617862067814 \nLIMIT \n  1",
>>>>>> 					"execTime": 0.0018649101257324219
>>>>>> 				},
>>>>>> 				{
>>>>>> 					"sql": "SELECT \n  aggregate.type \nFROM \n  aggregate \n  INNER JOIN entities ON aggregate.channel_id = entities.id <http://entities.id/> \nWHERE \n  uuid = 'xxxxxx-xxxxx-xxxxx-xxxxx-xxxxxxxxxx' \n  and aggregate.type = 4 \n  AND timestamp >= 1617861767833 \n  AND timestamp <= 1617862067814 \nLIMIT \n  1",
>>>>>> 					"execTime": 0.002110004425048828
>>>>>> 				},
>>>>>> 				{
>>>>>> 					"sql": "SELECT \n  aggregate.type \nFROM \n  aggregate \n  INNER JOIN entities ON aggregate.channel_id = entities.id <http://entities.id/> \nWHERE \n  uuid = 'xxxxxx-xxxxx-xxxxx-xxxxx-xxxxxxxxxx' \n  and aggregate.type = 3 \n  AND timestamp >= 1617861767833 \n  AND timestamp <= 1617862067814 \nLIMIT \n  1",
>>>>>> 					"execTime": 0.0017001628875732422
>>>>>> 				},
>>>>>> 				{
>>>>>> 					"sql": "SELECT \n  aggregate.type \nFROM \n  aggregate \n  INNER JOIN entities ON aggregate.channel_id = entities.id <http://entities.id/> \nWHERE \n  uuid = 'xxxxxx-xxxxx-xxxxx-xxxxx-xxxxxxxxxx' \n  and aggregate.type = 2 \n  AND timestamp >= 1617861767833 \n  AND timestamp <= 1617862067814 \nLIMIT \n  1",
>>>>>> 					"execTime": 0.001873016357421875
>>>>>> 				},
>>>>>> 				{
>>>>>> 					"sql": "SELECT \n  aggregate.type \nFROM \n  aggregate \n  INNER JOIN entities ON aggregate.channel_id = entities.id <http://entities.id/> \nWHERE \n  uuid = 'xxxxxx-xxxxx-xxxxx-xxxxx-xxxxxxxxxx' \n  and aggregate.type = 1 \n  AND timestamp >= 1617861767833 \n  AND timestamp <= 1617862067814 \nLIMIT \n  1",
>>>>>> 					"execTime": 0.0018138885498046875
>>>>>> 				},
>>>>>> 				{
>>>>>> 					"sql": "SELECT \n  UNIX_TIMESTAMP(\n    FROM_UNIXTIME(\n      MIN(timestamp) \/ 1000, \n      \"%Y-%m-%d %H:%i:00\"\n    )\n  ) * 1000 \nFROM \n  aggregate \nWHERE \n  channel_id = 44 \n  AND type = '1' \n  AND timestamp >= UNIX_TIMESTAMP(\n    DATE_ADD(\n      FROM_UNIXTIME(\n        1617861767833 \/ 1000, \"%Y-%m-%d %H:%i:00\"\n      ), \n      INTERVAL 1 minute\n    )\n  ) * 1000",
>>>>>> 					"execTime": 0.001316070556640625
>>>>>> 				},
>>>>>> 				{
>>>>>> 					"sql": "SELECT \n  UNIX_TIMESTAMP(\n    DATE_ADD(\n      FROM_UNIXTIME(\n        MAX(timestamp) \/ 1000, \n        \"%Y-%m-%d %H:%i:00\"\n      ), \n      INTERVAL 1 minute\n    )\n  ) * 1000 \nFROM \n  aggregate \nWHERE \n  channel_id = 44 \n  AND type = '1' \n  AND timestamp < 1617862067814",
>>>>>> 					"execTime": 0.0012249946594238281
>>>>>> 				},
>>>>>> 				{
>>>>>> 					"sql": "SELECT \n  aggregate.type \nFROM \n  aggregate \n  INNER JOIN entities ON aggregate.channel_id = entities.id <http://entities.id/> \nWHERE \n  uuid = 'xxxxxx-xxxxx-xxxxx-xxxxx-xxxxxxxxxx' \n  and aggregate.type = 0 \n  AND timestamp >= 1617861767833 \n  AND timestamp <= 1617862067814 \nLIMIT \n  1",
>>>>>> 					"execTime": 0.0016429424285888672
>>>>>> 				},
>>>>>> 				{
>>>>>> 					"sql": "SELECT \n  COUNT(1) \nFROM \n  data \nWHERE \n  channel_id = 44 \n  AND timestamp >= 1617861767833 \n  AND timestamp <= 1617862067814",
>>>>>> 					"execTime": 0.001310110092163086
>>>>>> 				},
>>>>>> 				{
>>>>>> 					"sql": "SELECT \n  timestamp, \n  value, \n  1 AS count \nFROM \n  data \nWHERE \n  channel_id = 44 \n  AND timestamp >= 1617861767833 \n  AND timestamp <= 1617862067814 \nORDER BY \n  timestamp ASC",
>>>>>> 					"execTime": 0.0014009475708007812
>>>>>> 				}
>>>>>> 			]
>>>>>> 		}
>>>>>> 	}
>>>>>> }
>>>>>> 
>>>>>> 
>>>>>> Hilft das weiter?
>>>>>> 
>>>>>> Gruß
>>>>>> Thomas
>>>>>> 
>>>>>> 
>>>>>> 
>>>>>> 
>>>>>> 
>>>>>> Am 08.04.2021 um 08:10 schrieb Andreas Goetz:
>>>>>> Häng mal bitte ein &debug=1 dran, dann sollten wir sehen welches SQL ausgeführt wird. Vielleicht gibt das einen Hinweis.
>>>>>> 
>>>>>> Viele Grüße, Andreas
>>>>>> 
>>>>>> PS.: seit wann erfasst Du die Daten?
>>>>>> 
>>>>>> Am 08.04.2021 um 07:59 schrieb Heine.thomas at online.de <mailto:Heine.thomas at online.de>:
>>>>>> 
>>>>>> Hallo,
>>>>>> 
>>>>>> ich habe inzwischen meinen Wasserzähler mit einem Reed-Kontakt ausgestattet und lese ihn per Tasmota ESP8266 über einen Counter (10l-Schritte) aus.
>>>>>> der Counterwert wird also alle 10l um 1 erhöht.
>>>>>> Im VZ-Logger habe ich einen Kanal mit "Wasser Zählerstände" angelegt.
>>>>>> Das klappt soweit auch alles. Ich sehe einen Verbrauch, und auch den Gesamt-Zählerstand nach dem ich einen Initialen Zählerstand eingetragen habe.
>>>>>> 
>>>>>> <adillmbjlmnoplia.png>
>>>>>> 
>>>>>> 
>>>>>> 
>>>>>> Per HTTP-Request kann ich auch bestimmte Zeit-Bereiche super abfragen.
>>>>>> 
>>>>>> Jetzt würde ich gerne aber an meiner Haus-Visualisierung den aktuellen Zählerstand anzeigen.
>>>>>> 
>>>>>> 
>>>>>> So wollte ich ihn abfragen:
>>>>>> 
>>>>>> http://192.168.178.51/data/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxx.json?from=-1&options=raw <http://192.168.178.51/data/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxx.json?from=-1&options=raw>
>>>>>> 
>>>>>> das json sieht jedoch dann so aus:
>>>>>> {"version":"0.3","data":{"tuples":[[1617860867741,144,1]],"uuid":"xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxx","from":1617860567724,"to":1617860867741,"average":0,"consumption":0,"rows":2}}
>>>>>> 
>>>>>> bzw. so:
>>>>>> <lcnmkochlddnejkg.png>
>>>>>> 
>>>>>> der Zählerstand müsste derzeit irgendwo bei 136xxx Liter sein...
>>>>>> 
>>>>>> Was mache ich bei der Abfrage zum Zählerstand falsch?
>>>>>> 
>>>>>> Danke vorab für eure Hilfe
>>>>>> 
>>>>>> Gruß
>>>>>> Thomas
>>>>>> 
>>>>> 
>>>> 
>>> 
>> 
> 
> <xxxx-xxxxxx-xxxxxxx-xxxxxxx.json>

-------------- nächster Teil --------------
Ein Dateianhang mit HTML-Daten wurde abgetrennt...
URL: <http://demo.volkszaehler.org/pipermail/volkszaehler-users/attachments/20210408/4ad1258f/attachment-0001.html>


Mehr Informationen über die Mailingliste volkszaehler-users