====== 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|