Forum: Haus & Smart Home PolluCom E / S


von Otto (Gast)


Lesenswert?

Hallo Bastler,


hat jemand von euch schonmal einen PolluCom zerlegt ? Leider habe ich 
keinen Zähler mit Erweiterung und wollte mal schauen ob man nicht 
"selbst" erweitern kann. Leider bekomme ich das Gehäuse nicht 
zerstörungsfrei auf wie es scheint, gibt es dort einen Trick ? Mich 
würde auch interessieren wie die "optische" Schnittstelle funktioniert 
und wie lange die Batterien halten wenn die dauerhaft benutzt wird.


Grüße.

von chris (Gast)


Lesenswert?

Hallo Otto,

ich habe auch einige Pollucom E Wäremzähler, welche ca. 7-8 Jahre alt 
sind. Nun würde ich auch gerne die Batterien wechseln und stehe vor dem 
gleichen Problem wie du. Wie soll ich das Gehäuse öffnen?
Hast du noch was rausgefunden? Hast du das Gehäuse aufgebrochen und 
gesehen wie die Ober und unterteile ineinander verrasten?

Wäre super, wenn du (oder auch andere) diesbezüglich weiterhelfen 
könntest.

Gruß,
Christian

von Michael Wulz (Gast)


Lesenswert?

Ist zwar schon alt, aber dennoch.

Einfach unten Rechts in das Loch wo die Kabel reingehen mit einem dünnen 
Schraubenzieher reinfahren und das Gehäuse öffnen.

Braucht etwas Druck. Sollte aber ohne große Schäden zu Öffnen gehen.

Wichtig beim Batterietausch, den Zähler auf Spannung halten!!
Dazu ein geregeltes einstellbares Netzteil anhängen, sonst ist der 
Zähler Schrott!

Hat einer von Euch die Infrarot-Schnittstelle schon mal Benutzt?
Ich bekomme die nämlich nicht zum laufen!

danke
Michael

von Markus (Gast)


Lesenswert?

Hallo Michael,
an der IR Schnittstelle habe ich mich auch schon versucht, bin aber 
nicht weit gekommen. Im Netzt finde ich einfach nichts dazu.
Hast Du schon irgenwelche Details ?

Grüße,
Markus

von Gerd (Gast)


Lesenswert?


von Efried (Gast)


Lesenswert?

Beschreibungen der Zerlegung inkl. eingebaute Manipulationshürden gibt 
es hier:
http://www.kriwanek.de/c-control-pro/solarmessung/103-waermemengenmessgeraet-sensus-pollucom-zerlegen.html
Ich habe einen falsch eingebauten (gebrauchten) Zähler und möchte die 
Kosten für das USB Modul zur Konfigurierung sparen und die PT500 
Sensoren vertauschen. Wie könnte da ein Manupulationsschutz aussehen? 
Wenn ich die Fühlerleitungen abisoliere und beide parallel verbinde und 
dann tausche bevor ich die Verbindung wieder trenne kann das Messwerk 
nichts merken, falls wirklich nur der Widerstand gemessen wird und nicht 
wie bei den DS1820 eine Adresse im Sensor hinterlegt wird.
danke im Voraus für Tipps, ggf. auch wie man zu einer kostengünstigen 
USB-Lösung für den IEC870-5 kommt.
danke

von Kurt (Gast)


Lesenswert?

Efried schrieb:
> Beschreibungen der Zerlegung inkl. eingebaute Manipulationshürden gibt
> es hier:
> http://www.kriwanek.de/c-control-pro/solarmessung/...

Wie ist denn die Belegung der nicht benutzten Schnittstellen, hast du 
die schon gemessen? Der Impulsgeber oder MBus wären ja mal was.

> Ich habe einen falsch eingebauten (gebrauchten) Zähler und möchte die
> Kosten für das USB Modul zur Konfigurierung sparen und die PT500
> Sensoren vertauschen. Wie könnte da ein Manupulationsschutz aussehen?

Wenn du einen Widerstand an die Platine friemelst, löten würde ja einen 
Schluss nach GND verursachen, sollte es funktionieren.

> Wenn ich die Fühlerleitungen abisoliere und beide parallel verbinde und
> dann tausche bevor ich die Verbindung wieder trenne kann das Messwerk
> nichts merken, falls wirklich nur der Widerstand gemessen wird und nicht
> wie bei den DS1820 eine Adresse im Sensor hinterlegt wird.

Wieviel Leitungen kommen denn vom PT500? Ich sehe da 4 Leitungen pro 
Fühler oder ist das etwas anderes?

---

von Efried (Gast)


Lesenswert?

es braucht immer noch den Optokoppler - der mir um schlanke 400€ 
abgeboten wurde...

von Kurt (Gast)


Lesenswert?

Efried schrieb:
> es braucht immer noch den Optokoppler - der mir um schlanke 400€
> abgeboten wurde...

Huch, welchen Optokoppler meinst du? Der fehlende Chip auf der Platine?


---

von Matthias R. (matthias-riedel)


Lesenswert?

Efried schrieb:
> Ich habe einen falsch eingebauten (gebrauchten) Zähler und möchte die
> Kosten für das USB Modul zur Konfigurierung sparen und die PT500
> Sensoren vertauschen.

Falls es noch von intresse ist, steck einfach die Fuehler ab un passend 
wieder an, es interessiert das Geraet nicht. Ich habe die fuehler und 
Pulsgeber ueber ein Jahr abgesteckt gehabt und er geht immer noch.


Efried schrieb:
> es braucht immer noch den Optokoppler - der mir um schlanke 400€
> abgeboten wurde...

Denn Koppler kannst du dir fuer ca 15,- EUR selber bauen, einfach FTDI 
mit IR Sende und Empfangsdiode. Geht einwandfrei, lese mit dem Gleichen 
auch meine Stromzaehler aus.
Desweiteren habe ich mir einen Schaltplan der IR Dioden und der 
Steckerbelegung herausgezeichnet und mir dafuer einen Adapter auf RS485 
inkl. Stromversorgung gebaut, damit kann man den Zaehler staendig 
auslesen ohne in immer wieder in den Kommunikationsmodus zu versetzen 
muessen.
Bisher lese ich nur über Minicom aus, möchte aber jetzt das ganze mit 
Java angehen, allerdings bin ich da blutiger Anfaenger. Sollte ein 
Programmierer interesse am gleichen haben wuerde ich unter umstaenden 
die Anbindung an USB stellen gegen den Code stellen.

Gruss Matthias

von Carsten H. (kaimaik)


Lesenswert?

Hallo Matthias,
auch ich möchte den Zähler dauerhaft auslesen.Könntest Du mir 
freundlicherweise mit deinem Bausatz helfen.Welche Teile benötige ich 
genau
und wo bekomme ich diese?Wie sieht dein Layout dafür aus?

Gruß Carsten

von Meinolf L. (meilu)


Lesenswert?

hallo
hast du davon einen schaltplan ,
was wäre ganz nett

meinolf

von Frank Z. (frankza)


Lesenswert?

Hallo zusammen,

ich nutze den USB IR Schreib/lesekopf von volkszaehler mit dem sensus 
pollucom E 
(http://wiki.volkszaehler.org/hardware/controllers/ir-schreib-lesekopf-usb-ausgang) 
- geht aber bestimmt auch mit http://www.huitsing.nl/irftdi/, da beide 
sich unterhalten können. Protokoll habe ich mir mittels "MiniCom 3" 
nachgebaut und frage alle 20 Minuten den Zählerstand ab.

Gruß

Frank

von Carsten Hünecke (Gast)


Lesenswert?

Hallo,
wie sieht denn dein Protokoll aus ?
Könnte ich es auch bekommen ?

Gruß Carsten

von Frank Z. (frankza)


Lesenswert?

Hallo zusammen,

da ich einige Fragen bekommen habe, hier meine Implementierung. Das 
Protokoll an sich kann z.B. unter http://www.m-bus.com/files/CBDIPW6.PDF 
angeschaut werden.

Ich kann leider nur für eine Implementierung unter Linux sprechen! Unter 
Windwos funktioniert der "MiniCom 3" ohne weitere Einstellungen bei mir.

Fehlerhandling habe ich der Übersicht halber gelöscht! Geht zwar alles 
flexibler, habe ich aber aufgrund von zeitmangel nicht gemacht.

Unter Linux den Port richtig setzen:
stty -F /dev/ttyUSB0 
1:0:9bb:0:3:1c:7f:15:4:5:0:0:11:13:1a:0:12:f:17:16:0:0:0:0:0:0:0:0:0:0:0 
:0:0:0:0:0

Programm:

char *buf;
char in[256] = "";
ssize_t ret_out;

.... Init serielle Schnittstelle
int fd = open ("/dev/ttyUSB0", O_RDWR | O_NOCTTY );
set_interface_attribs (fd, B2400, 0);  // set speed to 2,400 bps, 8n1 
(no parity)
set_blocking (fd, 0 );                // set no blocking
strcpy( in, 
"UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUU 
UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUU"  );
ret_out = write (fd, in, strlen(in));           // sent wakeup
usleep ((1000 + 25) * 100);             // sleep enough to transmit plus
buf = read_data( fd);
// Initialisiere MBus -> ACK mit 'E5'
in[0] = 0x10;
in[1] = 0x40; // Init MBus
in[2] = 0x00;
in[3] = 0x40; // Checksumme = in[1] + in [2]
in[4] = 0x16;
ret_out = write (fd, in, 5);           // sent
usleep ((1000 + 25) * 100);             // sleep enough to transmit plus
buf = read_data( fd);
if( buf[5] == 0xE5 ) {
// Get Data from MBus
in[0] = 0x10;
in[1] = 0x5B;  // GetData
in[2] = 0x00;
in[3] = 0x5B;   // Checksumme = in[1] + in [2]
in[4] = 0x16;
ret_out = write (fd, in, 5);
usleep ((1000 + 25) * 100);             // sleep enough to transmit plus
buf = read_data( fd);
// Zaehlerstand
double waerme = ((double) toInt(&buf[26])) + (100.0 * (double) 
toInt(&buf[27])) + (1000.0 * (double) toInt(&buf[28])) + (10000.0 * 
(double) toInt(&buf[29]));
//aktuelle Leistung
double leistung = ((double) toInt(&buf[44])) + (100.0 * (double) 
toInt(&buf[45])) + (1000.0 * (double) toInt(&buf[46])) + (10000.0 * 
(double) toInt(&buf[47]));
}

int toInt( char *in ) {

char out[2];
int iOut = 0;
sprintf( out, "%02x", in[0] );

iOut = atoi( out );

return iOut;
}

Gruß

Frank

von Peter S. (marcov1)


Lesenswert?

Hallo Frank,

vielen Dank, dass Du Deinen Code zur Verfügung stellst. Wenn ich es 
richtig verstehe, dann wertest Du die Zähler in einer eigenen Umgebung 
aus und nicht über das Volkszähler-image mit VZLOGGER?

Gruß Marco

von Frank Z. (frankza)


Lesenswert?

Hallo Marco,

ja, richtig. Hatte mir am Anfang den mbus controller angeschaut. Leider 
habe ich dort zu viele Fehler bekommen. War mir zu aufwändig diesen ans 
laufen zu bekommen. Kann ja mal schauen ob das jetzt klappt.

Gruß

Frank

von Peter S. (marcov1)


Lesenswert?

Hallo Frank,

ich habe jetzt mal versucht Dein Script ans Laufen zu bekommen, bekomme 
leider folgende Fehlermeldungen:


test.sh: 3: test.sh: char: not found
test.sh: 4: test.sh: char: not found
test.sh: 5: test.sh: ssize_t: not found
test.sh: 6: test.sh: Syntax error: "(" unexpected

müssen die Variablen am Anfang des scitpes noch definiert werden?

von greg (Gast)


Lesenswert?

Das ist kein shellscript, sondern C code...

von HANNES (Gast)


Lesenswert?

Hallo,
ich lese seit Kurzem meinen PolluCom E ebenfalls über die optische 
Schnittstelle aus. Der WMZ ist jetzt ca. 1 Jahr alt. Hat jemand schon 
Erfahrungen wie sich das Auslesen auf die Lebensdauer bzw. auf die 
Batterie auswirkt? Ich lese derzeit den WMZ zwischen Sonnenaufgang und 
Sonnenuntergang alle 5min aus. Ist das zu häufig?

Grüße,
Hannes

von Andreas K. (a_kemper)


Lesenswert?

Hallo,

ich habe besagten WMZ mit der Mini-Bus Option, womit kabelgebunden z.B. 
ein Funk- oder induktives Fernauslesemodul ("MiniPad") angeschlossen 
werden kann. Auf dem Mini-Bus kommt ebenfalls das M-Bus Protokoll zum 
Einsatz, jedoch arbeitet dieser offensichtlich mit etwas anderen 
elektrischen Parametern.

Hat jemand entsprechend Erfahrung, wie ich den Zähler über diese 
Schnittstelle auslesen kann? Konkret welche Art von "Adapter" ich hier 
für den Raspberry brauche?

Besten Dank,
Andreas

von Peter S. (marcov1)


Angehängte Dateien:

Lesenswert?

Hallo Frank,

ich habe versucht Deinen Code zu kompilieren (mit GCC) - bekomme aber ne 
Menge Compilerfehler (was teilweise an den zerschossenen Zeilenumbrüchen 
liegt). Ich hänge es mal als Textdatei an - vielleicht kannst Du Deinen 
funktionierenden Code auch als Textdatei anhängen.

hier die Fehler:

script.c:8:1: error: initializer element is not constant
script.c:9:35: error: expected ‘)’ before numeric constant
script.c:10:19: error: expected ‘)’ before numeric constant
script.c:11:13: error: expected ‘)’ before string constant
script.c:12:1: warning: data definition has no type or storage class 
[enabled by default]
script.c:12:26: warning: incompatible implicit declaration of built-in 
function ‘strlen’ [enabled by default]
script.c:12:1: error: initializer element is not constant
script.c:13:9: error: expected declaration specifiers or ‘...’ before 
‘(’ token
script.c:14:1: warning: data definition has no type or storage class 
[enabled by default]
script.c:14:1: error: conflicting types for ‘buf’
script.c:5:7: note: previous declaration of ‘buf’ was here
script.c:14:1: error: initializer element is not constant
script.c:16:1: warning: data definition has no type or storage class 
[enabled by default]
script.c:16:1: error: conflicting types for ‘in’
script.c:6:6: note: previous definition of ‘in’ was here
script.c:16:1: error: invalid initializer
script.c:17:1: warning: data definition has no type or storage class 
[enabled by default]
script.c:17:1: error: conflicting types for ‘in’
script.c:6:6: note: previous definition of ‘in’ was here
script.c:17:1: error: invalid initializer
script.c:18:1: warning: data definition has no type or storage class 
[enabled by default]
script.c:18:1: error: conflicting types for ‘in’
script.c:6:6: note: previous definition of ‘in’ was here
script.c:18:1: error: invalid initializer
script.c:19:1: warning: data definition has no type or storage class 
[enabled by default]
script.c:19:1: error: conflicting types for ‘in’
script.c:6:6: note: previous definition of ‘in’ was here
script.c:19:1: error: invalid initializer
script.c:20:1: warning: data definition has no type or storage class 
[enabled by default]
script.c:20:1: error: conflicting types for ‘in’
script.c:6:6: note: previous definition of ‘in’ was here
script.c:20:1: error: invalid initializer
script.c:21:1: warning: data definition has no type or storage class 
[enabled by default]
script.c:21:1: error: redefinition of ‘ret_out’
script.c:12:1: note: previous definition of ‘ret_out’ was here
script.c:21:1: error: initializer element is not constant
script.c:22:7: error: expected ‘=’, ‘,’, ‘;’, ‘asm’ or ‘__attribute__’ 
before ‘...’ token
script.c:23:1: warning: data definition has no type or storage class 
[enabled by default]
script.c:23:1: error: conflicting types for ‘buf’
script.c:5:7: note: previous declaration of ‘buf’ was here
script.c:23:1: error: initializer element is not constant
script.c:24:1: error: expected identifier or ‘(’ before ‘if’


Gruß Marco

: Bearbeitet durch User
von Klaus H. (klaus1976)


Lesenswert?

Ich habe auch einen Wärmemengenzähler vom gleichen typ zu Hause. Ich 
habe mich drangesetzt und probiert den Code über Python für den 
Raspberry zu schreiben. Allerdings, antwortet der Zähler nicht richtig. 
Irgendwie bin ich am verzweifeln woran es liegen kann. Kann mir jemand 
seinen Code zur Verfügung stellen.  Das wäre super lieb.  ( Der 
verwendete IR ist in Ordnung, da ich hier mit Minicom kommuniziere.

von Sebastian Hilbert (Gast)


Lesenswert?

Hiermit kann ich den WMZ auslesen. Code verwendet pyMeterBus

https://github.com/ganehag/pyMeterBus
1
#!/usr/bin/python
2
# -*- coding: utf-8 -*-
3
4
import serial, time
5
import meterbus
6
7
address = 0
8
port = '/dev/ttyUSB0'
9
wakeup = "\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55"
10
11
# start communication with 8N1, DTR enabled
12
ser =  serial.Serial(port, 2400, 8, 'N', 1, 0.5)
13
ser.dsrdtr=True
14
15
# send wake up sequence
16
ser.write(wakeup)
17
time.sleep(0.130)
18
ser.read()
19
response = ser.readline()
20
21
# switch to 8E1
22
ser.parity = serial.PARITY_EVEN
23
24
# SND_NKE to reset the communication
25
meterbus.send_ping_frame(ser, address)
26
frame = meterbus.load(meterbus.recv_frame(ser, 1))
27
assert isinstance(frame, meterbus.TelegramACK)
28
29
# request data from meter
30
meterbus.send_request_frame(ser, address)
31
frame = meterbus.load(meterbus.recv_frame(ser, meterbus.FRAME_DATA_LENGTH))
32
assert isinstance(frame, meterbus.TelegramLong)
33
34
# print data, todo: save it to file
35
print(frame.to_JSON())

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.