Hallo,
habe den Volkszähler schon länger laufen, und dort wird auch alles geloggt, der Zählerstand etc. stimmt, hier zeigt die Volkszähler seite z.B. bei mir 8865 kwh an. aber wie bekomme ich diesen Stand in fhem angezeigt?
mit last 1800 bekomme ich den Wert nicht angezeigt!
anbei zwei Bilder, diese sind zeitgleich erstellt
Hallo,
warum denn einen extra Beitrag?
https://forum.fhem.de/index.php/topic,69880.msg661798.html#msg661798 (https://forum.fhem.de/index.php/topic,69880.msg661798.html#msg661798)
da ich denke das ein neues Thema dazu besser passt!
hat keiner eine Idee, warum das nicht klappt
Was bekommst Du schon in Fhem angezeigt? Bitte "list" vom Gerät.
Hi,
hier mal das List:
Internals:
Channel 5f9777b0-7d54-11e5-85cb-ab4d43be7dbc
DEF 192.168.178.37 80 5f9777b0-7d54-11e5-85cb-ab4d43be7dbc last 1800
Host 192.168.178.37
Host_Port 80
NAME Zaehlerstand
NR 1103
Reading last
STATE l: 368.325
TYPE VOLKSZAEHLER
READINGS:
2017-07-26 13:47:00 AVERAGE 368.325
2017-07-26 13:47:00 CONSUMPTION 184.4
2017-07-26 13:16:57 FROM
2017-07-26 13:46:59 LAST 368.325
2017-07-26 13:46:59 MAX 368.32547401506
2017-07-26 13:46:59 MIN 368.32547401506
2017-07-26 13:46:59 TO
Attributes:
delay 1800
room 0.5 Zähler
Aktueller Zählerstand im Volkszähler ca 8950
Komisch, dass Du weder FROM noch TO hast.
Gibt es etwas in der Log, mit verbose 5?
Was ergibt die direkte Abfrage in einem Browser:
http://192.168.178.37:80/middleware.php/data/5f9777b0-7d54-11e5-85cb-ab4d43be7dbc.json?from=1800%20seconds%20ago&tuples=1
?
Hallo,
hier mal die Tuples abfrage
version: "0.3",
data: {
tuples: [
[
1501072181582,
337.502,
841
]
],
uuid: "5f9777b0-7d54-11e5-85cb-ab4d43be7dbc",
from: 1501070376795,
to: 1501072181582,
min: [
1501072181582,
337.50243103331
],
max: [
1501072181582,
337.50243103331
],
average: 337.502,
consumption: 169.2,
rows: 1
}
}
Habe etwas gefunden:
2017.07.26 11:46:59.682 2: VOLKSZAEHLER Can't get http://192.168.178.37:80/middleware.php/data/5f9777b0-7d54-11e5-85cb-ab4d43be7dbc.json?from=600%20seconds%20ago&tuples=1 -- 500 Can't connect to 192.168.178.37:80 (No route to host)
wenn ich dieses aber im IE abfrage bekomme ich eine Antwort:
http://192.168.178.37/middleware.php/data/5f9777b0-7d54-11e5-85cb-ab4d43be7dbc.json?from=600%20seconds%20ago&tuples=1
{
version: "0.3",
data: {
tuples: [
[
1501072730034,
466.999,
391
]
],
uuid: "5f9777b0-7d54-11e5-85cb-ab4d43be7dbc",
from: 1501072127206,
to: 1501072730034,
min: [
1501072730034,
466.99887861433
],
max: [
1501072730034,
466.99887861433
],
average: 466.999,
consumption: 78.2,
rows: 1
}
}
Zitat2017.07.26 11:46:59.682 2: VOLKSZAEHLER Can't get http://192.168.178.37:80/middleware.php/data/5f9777b0-7d54-11e5-85cb-ab4d43be7dbc.json?from=600%20seconds%20ago&tuples=1 -- 500 Can't connect to 192.168.178.37:80 (No route to host)
Das ist aber komisch. Kannst Du den Volkzähler in einem Terminal aus dem FHEM Rechner anpingen?
Bzg. deines Problem: ich vermute, der Volkzähler macht selbst irgendwelche Aggregation der Daten, um den gesamten Zählerstand zu zeigen. Bin aber kein Spezialist von diesem Ding. Gibt es vielleicht auf dem Gerät mehrere Kanäle?
der Ping funktioniert wunderbar.
so wie hier habe ich das Device auch angelegt
Zählerstand
Kanal im Volkszaehler, der den Zählerstand per I/R-Lesekopf ermittelt, jede Stunde davon der letzte Wert.
define Zaehlerstand VOLKSZAEHLER 192.168.178.45 80 ebb9c9b0-7058-11e2-b5ed-d12ec87a3a7f last 1800
attr Zaehlerstand group Strom
attr Zaehlerstand room Volkszaehler
Ich glaube nicht das Volkszähler Aggregationen macht, ich habe den Zähler letztens neu aufgesetzt und er zeigt trotzdem den richtigen Zählerstand an.
So weit ich verstanden habe, pflegt Volkzähler seine eigene Datenbank und macht doch aggregation : z.B. hier: https://github.com/volkszaehler/vzlogger/blob/master/etc/vzlogger.conf
"aggtime": 300, // aggregate meter readings and send middleware update after <aggtime> seconds
"aggfixedinterval": true, // round timestamps to nearest <aggtime> before sending to middleware
"aggmode": "SUM", // aggregation mode: aggregate meter readings during <aggtime> interval
// "SUM": add readings (use for s0 impulses)
// "MAX": maximum value (use for meters sending absolute readings)
// "AVG": average value (use for meters sending current usage)
Wie sieht deine conf von Volkzähler aus?
bin heute nicht zuhause, kann ich gerne heute abend oder morgen schauen, aber der Volkszähler läuft ja und zeigt alles korrekt an.
Zitatder Volkszähler läuft ja und zeigt alles korrekt an.
Deswegen, würde ich gerne die Konfiguration davon sehen.
ok, hier mal die VZlogger.conf
nichts von agg drin.
Das ist auch schon verdammt lange her das ich das aufgesetzt habe,
/**
* vzlogger configuration
*
* use proper encoded JSON with javascript comments
*
* take a look at the wiki for detailed information:
* http://wiki.volkszaehler.org/software/controller/vzlogger#configuration
*/ { "retry" : 30, /* how long to sleep between failed requests, in seconds */
"daemon": true, /* run periodically */
"verbosity" : 15, /* between 0 and 15 */
"log" : "/var/log/vzlogger.log",/* path to logfile, optional */ "local" :
{
"enabled" : false, /* should we start the local HTTPd for serving live readings? */
"port" : 80, /* the TCP port for the local HTTPd */
"index" : false, /* should we provide a index listing of available channels if no UUID was requested? */
"timeout" : 30, /* timeout for long polling comet requests, 0 disables comet, in seconds */
"buffer" : 600 /* how long to buffer readings for the local interface, in seconds */
},
"meters" :
[
{
"enabled" : true, /* disabled meters will be ignored */
"protocol" : "sml", /* see 'vzlogger -h' for list of available protocols */
"device" : "/dev/ttyUSB0",
"channels":
[
{
"uuid" : "5f9777b0-7d54-11e5-85cb-ab4d43be7dbc",
"middleware" : "http://127.0.0.1/middleware.php",
"identifier" : "1-0:1.8.0*255", /* Zählerstand Bezug */
},
{
"uuid" : "741e1350-7d54-11e5-8aec-3199da81de7f",
"middleware" : "http://127.0.0.1/middleware.php",
"identifier" : "1-0:2.8.0*255" /* Zählerstand Lieferung */
}
]
}
]
}
Jetzt bin ich verwirrt (wahrscheinlich weil ich Volkszähler nicht kenne). Warum nutzt Du in Fhem ein anderes Channel als die, die in vzlogger definiert sind?
Hi,
sorry, ich nutze schon die richtige UUID.
Der Code oben ist aus der Hilfe, wo beschrieben ist, das so der Zählerstand ausgegeben werden soll.
Und wie soll ich versuchen, dein Problem zu lösen, wenn Du den Code von der Hilfe zeigst?
Hier das List des Zahlerstandes, habe es genauso angelegt wie im manual beschrieben.
Internals:
Channel 5f9777b0-7d54-11e5-85cb-ab4d43be7dbc
DEF 192.168.178.37 80 5f9777b0-7d54-11e5-85cb-ab4d43be7dbc last 1800
Host 192.168.178.37
Host_Port 80
NAME Zaehlerstand
NR 1101
Reading last
STATE l: 511.632
TYPE VOLKSZAEHLER
READINGS:
2017-07-27 08:53:46 AVERAGE 511.632
2017-07-27 08:53:46 CONSUMPTION 10659.6
2017-07-26 12:03:26 FROM
2017-07-27 08:53:30 LAST 511.632
2017-07-27 08:53:30 MAX 511.63186892323
2017-07-27 08:53:30 MIN 511.63186892323
2017-07-27 08:53:30 TO
Attributes:
delay 1800
room 0.5 Zähler
verbose 5
Sorry, hatte falsch verstanden.
Ich weiss nicht, wie das Frontend von Volkszähler die kWh kalkuliert, wenn dieser Wert im Ergebnis der Anfrage nicht kommt. Wäre interessant zu sehen, wie den Quellcode der Webseite aussieht. Ich schaue mal in github.
Schon was gefunden:
/**
* Load total consumption for all entities that have the initialconsumption property defined
*/
vz.entities.loadTotalConsumption = function() {
if (vz.options.totalsInterval) {
var queue = [];
vz.entities.each(function(entity) {
queue.push(entity.loadTotalConsumption());
}, true); // recursive
// set timeout for next load once completed
$.when.apply($, queue).done(function() {
vz.entities.updateTableColumnVisibility(); // unhide total column
window.setTimeout(vz.entities.loadTotalConsumption, vz.options.totalsInterval * 1000);
});
}
};
initialconsumption property defined ? Der hat das irgendwo gespeichert
Und hier etwas interessantes:
http://demo.volkszaehler.org/pipermail/volkszaehler-users/2015-March/005866.html
Kannst Du im Volkszähler Frontend auf dem kleinen "i" ganz rechts vom Kanal klicken, um die Definition zu holen?
Also... ich muss sagen, ich komme mit demo.volkszaehler.org nicht weiter.
Kannst Du folgendes hier kopieren?
http://192.168.178.37:80/middleware.php/data/5f9777b0-7d54-11e5-85cb-ab4d43be7dbc.json?from=1970&tuples=1
Und der Wert von "InitialVerbrauch" in der Definition brauchen wir auch.
Hi,
Der initialverbrauch war 163
Hier ist der ZÄHLERSTAND DRIN
"version":"0.3","data":{"tuples":[[1501398510405,573.252,357555],[1501398514867,322.725,2]],"uuid":"5f9777b0-7d54-11e5-85cb-ab4d43be7dbc","from":1446061825025,"to":1501398514867,"min":[1501398514867,322.72523411824],"max":[1501398510405,573.25192035201],"average":573.252,"consumption":8811628.5,"rows":1}}
Und hier ein screenshot
ZitatHier ist der ZÄHLERSTAND DRIN
Ist der Zählerstand = InitialVerbrauch(163) + consumption seit Anfang (http://192.168.178.37:80/middleware.php/data/5f9777b0-7d54-11e5-85cb-ab4d43be7dbc.json?from=1970&tuples=1) ?? Dann würde ich jetzt verstehen.
ja, das passt
8822604.1w/h plus 163kw/h
Zählerstand in FHEM
8985kwh
Na dann weiss Du, wie jetzt dein gesamtes Verbrauch in FHEM zu zeigen: entweder musst Du ein paar Zeilen Code ins Modul hinzufügen, oder du holst den Wert mittels HTTPMOD.
Danke für die Hilfe, das mit HTTPMOD habe ich mir mal angeschaut, aber irgendwie bekomme ich das Reading nicht raus
Zeig
nternals:
BUSY 0
CFGFN
CHANGED
DEF http://192.168.178.37:80/middleware.php/data/5f9777b0-7d54-11e5-85cb-ab4d43be7dbc.json?from=1970&tuples=1
Interval 300
LASTSEND 1501567912.69624
MainURL http://192.168.178.37:80/middleware.php/data/5f9777b0-7d54-11e5-85cb-ab4d43be7dbc.json?from=1970&tuples=1
ModuleVersion 3.3.11 - 8.5.2017
NAME Zaehlerstand1234
NR 29683
STATE ???
TRIGGERTIME 1501568212.69256
TRIGGERTIME_FMT 2017-08-01 08:16:52
TYPE HTTPMOD
addr http://192.168.178.37:80
buf
data
displayurl http://192.168.178.37:80/middleware.php/data/5f9777b0-7d54-11e5-85cb-ab4d43be7dbc.json?from=1970&tuples=1
header
host 192.168.178.37
httpversion 1.0
ignoreredirects 0
loglevel 4
path /middleware.php/data/5f9777b0-7d54-11e5-85cb-ab4d43be7dbc.json?from=1970&tuples=1
protocol http
redirects 0
timeout 2
url http://192.168.178.37:80/middleware.php/data/5f9777b0-7d54-11e5-85cb-ab4d43be7dbc.json?from=1970&tuples=1
value 0
QUEUE:
READINGS:
REQUEST:
data
header
ignoreredirects 0
retryCount 0
type update
url http://192.168.178.37:80/middleware.php/data/5f9777b0-7d54-11e5-85cb-ab4d43be7dbc.json?from=1970&tuples=1
value 0
sslargs:
Attributes:
reading2Name consumption
reading2Regex [ [ { "content": "consumption", "isParticipating": true, "groupNum": 0, "groupName": null, "startPos": 278, "endPos": 289 } ] ]
room 0.5 Zähler
userattr reading2Name reading2Regex
Ohje. Regex viel zu kompliziert (und stimmt höchstwahrscheinlich nicht).
Schau mal in der Log, was du als Antwort bekommst, und teste deine Regex auf regex101.com.
Etwas wie:
attr Zaehlerstand1234 reading2Regex consumption.*?([\d\.]+)
oder
attr Zaehlerstand1234 reading2JSON data_consumption
sollte reichen.
Und dann userReadings dazu, um InitialVerbrauch zu addieren.
danke aber das will alles nicht so.
Save config
Tablet-UI
0.1 OelHeizung
0.5 Zähler
1.00 Küche
2.00 Wohnzimmer
3.00 Schlafzimmer
3.50 Ankleide
4.00 Draussen
5.00 Badezimmer
6.00 Esszimmer
7.00 Flur Oben
8.00 Flur Unten
9.00 Anrufliste
9.01 CUL
9.02 Wetter
9.04 Anwesenheit
9.05 Kalender
9.06 Fritzbox
9.07 Trigger
9.08 Logs
9.09 Hilfe
9.10 Heizung
9.50 Alarm
ALEXA Control
AMAD
Homematic-Schalter
IT
Residents
Unsorted
alexa
icoEverything Everything
Logfile
Commandref
Remote doc
Edit files
Select style
Event monitor
DOIFtools
restart
update
updatecheck
reloadMyUtils
ReReadcfg
AMAD-Upd
Internals:
BUSY 0
CHANGED
DEF http://192.168.178.37:80/middleware.php/data/5f9777b0-7d54-11e5-85cb-ab4d43be7dbc.json?from=1970&tuples=1
Interval 300
LASTSEND 1501570364.47014
MainURL http://192.168.178.37:80/middleware.php/data/5f9777b0-7d54-11e5-85cb-ab4d43be7dbc.json?from=1970&tuples=1
ModuleVersion 3.3.11 - 8.5.2017
NAME Zaehlerstand1234
NR 1106
STATE ???
TRIGGERTIME 1501570664.46664
TRIGGERTIME_FMT 2017-08-01 08:57:44
TYPE HTTPMOD
addr http://192.168.178.37:80
buf
data
displayurl http://192.168.178.37:80/middleware.php/data/5f9777b0-7d54-11e5-85cb-ab4d43be7dbc.json?from=1970&tuples=1
header
host 192.168.178.37
httpversion 1.0
ignoreredirects 0
loglevel 4
path /middleware.php/data/5f9777b0-7d54-11e5-85cb-ab4d43be7dbc.json?from=1970&tuples=1
protocol http
redirects 0
timeout 2
url http://192.168.178.37:80/middleware.php/data/5f9777b0-7d54-11e5-85cb-ab4d43be7dbc.json?from=1970&tuples=1
value 0
QUEUE:
READINGS:
REQUEST:
data
header
ignoreredirects 0
retryCount 0
type update
url http://192.168.178.37:80/middleware.php/data/5f9777b0-7d54-11e5-85cb-ab4d43be7dbc.json?from=1970&tuples=1
value 0
sslargs:
Attributes:
reading2Name consumption
reading2Regex consumption.*?([\d\.]+)
room 0.5 Zähler
userattr reading2JSON reading2Name reading2Regex
verbose 5
aus dem Log
2017.08.01 08:50:43.479 5: Zaehlerstand1234: UpdateHintList called
2017.08.01 08:50:43.480 5: Zaehlerstand1234: UpdateHintList: setlist =
2017.08.01 08:50:43.480 5: Zaehlerstand1234: UpdateHintList: getlist =
2017.08.01 08:52:44.466 4: Zaehlerstand1234: GetUpdate called (update)
2017.08.01 08:52:44.467 4: Zaehlerstand1234: update timer modified: will call GetUpdate in 300.0 seconds at 2017-08-01 08:57:44
2017.08.01 08:52:44.468 4: Zaehlerstand1234: AddToQueue adds update, initial queue len: 0
2017.08.01 08:52:44.468 5: Zaehlerstand1234: AddToQueue adds type update to URL http://192.168.178.37:80/middleware.php/data/5f9777b0-7d54-11e5-85cb-ab4d43be7dbc.json?from=1970&tuples=1, no data, no headers, retry 0
2017.08.01 08:52:44.469 5: Zaehlerstand1234: HandleSendQueue called, qlen = 1
2017.08.01 08:52:44.470 4: Zaehlerstand1234: HandleSendQueue sends request type update to URL http://192.168.178.37:80/middleware.php/data/5f9777b0-7d54-11e5-85cb-ab4d43be7dbc.json?from=1970&tuples=1, No Data, No Header,
timeout 2
2017.08.01 08:52:44.471 4: HttpUtils url=http://192.168.178.37:80/middleware.php/data/5f9777b0-7d54-11e5-85cb-ab4d43be7dbc.json?from=1970&tuples=1
2017.08.01 08:52:44.576 5: HttpUtils request header:
GET /middleware.php/data/5f9777b0-7d54-11e5-85cb-ab4d43be7dbc.json?from=1970&tuples=1 HTTP/1.0
Host: 192.168.178.37
User-Agent: fhem
Content-Length: 0
Content-Type: application/x-www-form-urlencoded
2017.08.01 08:52:46.584 3: Zaehlerstand1234: Read callback: Error: read from http://192.168.178.37:80 timed out
2017.08.01 08:52:46.585 4: Zaehlerstand1234: Read callback: request type was update retry 0, no headers, body empty
2017.08.01 08:52:46.586 5: Zaehlerstand1234: ExtractSid called, context reading, num
2017.08.01 08:52:46.587 4: Zaehlerstand1234: CheckAuth decided no authentication required
Hmmm.
Die Kalkulation / Aggregation, die er machen soll, um den gesamten Wert zu ergeben, dauert anscheinend zu lang. Deswegen:
Error: read from http://192.168.178.37:80 timed out
... oder dein Volkszähler Middleware ist ausgeschaltet.
Mach mal dazu attr timeout 10 oder 20... oder 30, bis Du eine Antwort bekommst.
danke jetzt funktioniert es.
Was ich nicht hinbekomme ich die Formatierung bzw. die Einheiten hinter das Reading zu stellen.
Ich mache das auch bei anderen Zählern und da funktioniert es einwandfrei. ich denke da ich noch etwas zu addiere klappt es nicht, kann mir jemand nochmals auf die Sprünge helfen?
Funktioniert einwanfrei
valueFormat
{'2_value' => '{sprintf("%.2f KW/h",$VALUE/1000)}','7_value' => '{("%.1f °C")}','8_value' => '{("%.1f °C")}'}
hier leider nicht
valueFormat
{'consumption' => '{sprintf("%.0f KW",$VALUE/1000)+159}'}