====== PQ Plus CMD 68-52 MID ======
Der PQ Plus CMD 68-52 MID ist ein 3-Phasen Energiezähler mit Modbus-Schnittstelle. Hier soll die Kommunikation mit einem Raspberry Pi beschrieben werden. Wahrscheinlich gilt diese Beschreibung auch für diese sehr ähnlichen Energiezähler:
* Inepro PRO380-Mod
* PQ Plus CMD 68-102MID
* Solar-Log PRO380-CT
* Solar-Log PRO380-Mod
* KDK Dornscheidt PRO380 Mod
* KDK Dornscheidt PRO380-S-CT Mod
===== Hardware =====
Getestet wurde die Modbus-Kommunikation mit dem USB-RS485 Konverter DIGITUS DA-70157 und einem Raspberry Pi 2B. Am RS485 Konverter wurden Pull-up und Pull-down Widerstände mit je 820Ω angeschlossen. Die für den Pull-up Widerstand benötigten 5V stellt der RS485 Konverter selbst zur Verfügung. Zusätzlich sind am RS485 Konverter und am Energiezähler je ein 120Ω Abschlusswiderstand angeschlossen. GND und +5V können nicht mit dem PQ Plus CMD 68-52 verbunden werden.
=== Anschluss direkt am Sub-D Stecker des DIGITUS DA-70157: ===
{{:hardware:channels:rs485_mit_da-70157_d-sub.png?600|}}
=== Anschluss an den Klemmen des mitgelieferten Adapters: ===
{{:hardware:channels:rs485_mit_da-70157_klemmen.png?600|}}
=== Alternativer RS485 Konverter ===
An Stelle eines USB-RS485 Konverters kann auch eine Konverter verwendet werden, der direkt auf den Raspberry Pi aufgesteckt wird: [[https://www.joy-it.net/de/products/RB-RS485|RS485 Breakout Kit]]
Diese Leiterplatte enthält einen Pull-up, einen Pull-down und einen Abschlusswiderstand. Deshalb muss nur der 120Ω Abschlusswiderstand am Energiezähler angebracht werden. Achtung: Die Anschlussbelegung der Sub-D Buchse unterscheidet sich vom USB-RS485 Konverter. Beschriftung auf dem Board beachten!
Bei Verwendung dieses Konverters ändert sich die Schnittstelle von /dev/ttyUSB0 auf /dev/ttyAMA0
===== Einstellungen am Energiezähler =====
Diese Beschreibung gilt für folgende Einstellungen am Energiezähler:
* Baud rate: 9600
* Parity: None
* Adresse: 1
Die Anzahl der Stopbits ist nicht einstellbar (immer 1).
===== Softwareinstallation =====
==== Basisinstallation auf Raspberry Pi ====
Eine einfache Möglichkeit wird hier beschrieben: [[howto:raspberry_pi_image|Volkszaehler auf einem Raspberry Pi mittels fertigem Image installieren]]
==== libmodbus ====
Es wird mindestens Version 3.1.3 von libmodbus benötigt. Wenn diese oder eine neuere Version bereits in der Distribution enthalten ist, können libmodbus und libmodbus-dev einfach über die Paketverwaltung installiert werden:
sudo apt install libmodbus-dev
Sonst muss die auf [[/hardware/channels/meters/power/eastron_sdm630_modbus|Eastron SDM 630]] beschriebene manuelle Installation durchgeführt werden.
==== mbrtu ====
cd ~
git clone https://github.com/gitaeuber/mbrtu
cd mbrtu
make
sudo make install
===== Test der Kommunikation =====
Beispiel für das Auslesen eines Wertes im Hex Format:
mbrtu -d/dev/ttyUSB0 -b9600 -pN -s1 -a1 -f3 -thex -n1 -r0x1060
Liefert dieses Ergebnis:
ADDR=1 REG=4192 DATA=0x5
Beispiel für das Auslesen eines Wertes im Float Format:
mbrtu -d/dev/ttyUSB0 -b9600 -pN -s1 -a1 -f3 -tF32_dcba -n2 -r0x2008
Liefert die Netzspannung von L1:
ADDR=1 REG=8200 DATA=231.20
^Parameter ^Beschreibung^
|-d/dev/ttyUSB0|USB-RS485 Konverter|
|-b9600|Baudrate 9600. Muss der Einstellung am Energiezähler entsprechen.|
|-pN|Kein Parity Bit. Am Energiezähler muss Parity: None eingestellt sein.|
|-s1|Ein Stoppbit. Der CMD68-52 verwendet immer ein Stoppbit.|
|-a1|Modbus Adresse 1. Der Energiezähler muss auf Adresse 1 eingestellt sein.|
|-f3|Function code für das Lesen von Registern.|
|-thex|Für das Auslesen von Registern, die hexadezimale Zahlen enthalten.|
|-tF32_dcba|Für das Auslesen von Registern, die Werte im Float Format enthalten.|
|-n1|Ein 16 Bit Register (für hexadezimale Zahlen)|
|-n2|Zwei 16 Bit Register (für Float Zahlen)|
|-r0x1060|Messbereich (5A Beim CMD 68-52, tatsächlicher Messbereich hängt vom Stromwandler ab)|
|-r0x2008|Spannung von Phase L1|
Eine Liste der Modbus Register ist auf den letzten Seiten dieses Dokuments: [[https://www.kdk-dornscheidt.de/wp-content/uploads/2017/11/Bedienungsanleitung_KDK_PRO380_4205100Pro_420506Pro_S_Mbus_Modbus_V3_00.pdf|Bedienungsanleitung KDK PRO380]]
===== Einbindung über einen vzlogger exec-Kanal =====
Das folgende Script ''exec-modbus'' kann über einen vzlogger exec-Kanal angebunden werden. Achtung: Mit diesem Script können nur Werte im Float-Format ausgelesen werden.
#!/bin/bash
set -e
set -u
usage() {
cat <&2 "no data received on modbus\\n"
else
printf "%d: %s = %f\\n" "${NOW}" "${reg}" "${METER:-0}"
fi
done
# end of file
== Eintrag in vzlogger.conf ==
Dieser Kanal liefert die Gesamtleistung aller 3 Phasen in kW. Bei Netzeinspeisung ist die Leistung negativ.
// Meter configuration
"meters": [
{
"enabled": true,
"allowskip": true,
"protocol": "exec",
"command": "/home/pi/exec-modbus --tty /dev/ttyUSB0 --baudrate 9600 --parity N --stopbits 1 --addr 0x1 0x2080",
"format": "$t: $i = $v",
"interval": 30,
"channels": [
{
"api": "volkszaehler",
"uuid": "72c65340-4a72-11ea-acb1-d536b07bbb9d",
"identifier": "0x2080",
"middleware": "http://localhost/middleware.php"
}
]
},
]
===== Anlegen des Kanals im Frontend =====
Der hier beschriebene vzlogger exec-Kanal liefert die aktuelle Leistung in kW. Im Frontend muss unter Kanal hinzufügen/Kanal erstellen also folgendes ausgewählt bzw. eingetragen werden:
^Eigenschaft^Wert^
|Typ|El. Energie (Leistungswerte)|
|Auflösung|0.001|