Seite 1 von 1

Anbindung Hager ECR 380D als Zähler

Verfasst: Di Feb 08, 2022 4:05 pm
von Elektron
Hallo

ich würde die Einbindung eines Hager ECR als Request anfragen mit flexibler Adresse, Port, ID und Nutzung also sowohl als Netzbezug als such als Zwischenzäher oder Verbraucher

Code: Alles auswählen

#!/usr/bin/python
import sys
# import os
# import time
# import getopt
import struct
from pymodbus.client.sync import ModbusTcpClient

client = ModbusTcpClient('192.168.0.203', port=502)

modbusid = 1

# Gesamtleistung W

resp = client.read_holding_registers(0xB011,2, unit=modbusid)
value1 = resp.registers[0]
value2 = resp.registers[1]
all = (value1 << 16) + value2
# beide Register in eine Zahl schieben
final = float(all) * 10
# in Kommazahl umrechnen mal 10 in W
print ('Gesamt Watt = ' + str(final) +' W')
f = open('/var/www/html/openWB/ramdisk/wattbezug', 'w')
f.write(str(final))
f.close()

# Bezug kWh

resp = client.read_holding_registers(0xB060,2, unit=modbusid)
value1 = resp.registers[0] 
value2 = resp.registers[1]
all = (value1 << 16) + value2
# beide Register in eine Zahl schieben
ikwh = float(all) * 1000
# in Kommazahl umrechnen mal 1000 in Wh
print ('Gesamt Bezug = ' + str(ikwh) +' Wh')
f = open('/var/www/html/openWB/ramdisk/bezugkwh', 'w')
f.write(str(ikwh))
f.close()

# Einspeisung kWh

resp = client.read_holding_registers(0xB064,2, unit=modbusid)
value1 = resp.registers[0] 
value2 = resp.registers[1]
all = (value1 << 16) + value2
# beide Register in eine Zahl schieben
ekwh = float(all) * 1000
# in Kommazahl umrechnen mal 1000 in Wh
print ('Einspeisung = ' + str(ekwh) +' Wh')
f = open('/var/www/html/openWB/ramdisk/einspeisungkwh', 'w')
f.write(str(ekwh))
f.close()

# EVU Herz
resp = client.read_holding_registers(0xB006,1, unit=modbusid)
hz = resp.registers[0]
hz = float(hz) / 100
print ('Netzfrequenz = ' + str(hz) +' Hz')
f = open('/var/www/html/openWB/ramdisk/evuhz', 'w')
f.write(str(hz))
f.close()

# Spannung Phase L1

resp = client.read_holding_registers(0xB000,1, unit=modbusid)
voltage1 = resp.registers[0]
voltage1 = float(voltage1) / 100
print ('Spannung L1 = ' + str(voltage1) +' V')
f = open('/var/www/html/openWB/ramdisk/evuv1', 'w')
f.write(str(voltage1))
f.close()

# Spannung Phase L2

resp = client.read_holding_registers(0xB001,1, unit=modbusid)
voltage2 = resp.registers[0]
voltage2 = float(voltage2) / 100
print ('Spannung L2 = ' + str(voltage2) +' V')
f = open('/var/www/html/openWB/ramdisk/evuv2', 'w')
f.write(str(voltage2))
f.close()

# Spannung Phase L3

resp = client.read_holding_registers(0xB002,1, unit=modbusid)
voltage3 = resp.registers[0]
voltage3 = float(voltage3) / 100
print ('Spannung L3 = ' + str(voltage3) +' V')
f = open('/var/www/html/openWB/ramdisk/evuv3', 'w')
f.write(str(voltage3))
f.close()

# Strom Phase L1

resp = client.read_holding_registers(0xB009,2, unit=modbusid)
value1 = resp.registers[0] 
value2 = resp.registers[1] 
all = (value1 << 16) + value2
# beide Register in eine Zahl schieben
lla1 = float(all) / 1000
# in Kommazahl umrechnen durch 1000 in A
print ('Strom L1 = ' + str(lla1) +' A')
f = open('/var/www/html/openWB/ramdisk/bezuga1', 'w')
f.write(str(lla1))
f.close()

# Strom Phase L2

resp = client.read_holding_registers(0xB00B,2, unit=modbusid)
value1 = resp.registers[0] 
value2 = resp.registers[1] 
all = (value1 << 16) + value2
# beide Register in eine Zahl schieben
lla2 = float(all) / 1000
# in Kommazahl umrechnen durch 1000 in A
print ('Strom L1 = ' + str(lla2) +' A')
f = open('/var/www/html/openWB/ramdisk/bezuga2', 'w')
f.write(str(lla2))
f.close()

# Strom Phase L3

resp = client.read_holding_registers(0xB00D,2, unit=modbusid)
value1 = resp.registers[0] 
value2 = resp.registers[1] 
all = (value1 << 16) + value2
# beide Register in eine Zahl schieben
lla3 = float(all) / 1000
# in Kommazahl umrechnen durch 1000 in A
print ('Strom L1 = ' + str(lla3) +' A')
f = open('/var/www/html/openWB/ramdisk/bezuga3', 'w')
f.write(str(lla3))
f.close()

# Leistung Phase L1

resp = client.read_holding_registers(0xB019,2, unit=modbusid)
value1 = resp.registers[0] 
value2 = resp.registers[1] 
all = (value1 << 16) + value2
# beide Register in eine Zahl schieben
finalw1 = float(all) * 10
# in Kommazahl umrechnen mal 10 in W
print ('Watt L1 = ' + str(finalw1) +' W')
f = open('/var/www/html/openWB/ramdisk/bezugw1', 'w')
f.write(str(finalw1))
f = open('/var/www/html/openWB/ramdisk/wattbezug', 'w')
f.close()

# Leistung Phase L2

resp = client.read_holding_registers(0xB01B,2, unit=modbusid)
value1 = resp.registers[0] 
value2 = resp.registers[1] 
all = (value1 << 16) + value2
# beide Register in eine Zahl schieben
finalw2 = float(all) * 10
# in Kommazahl umrechnen mal 10 in W
print ('Watt L2 = ' + str(finalw2) +' W')
f = open('/var/www/html/openWB/ramdisk/bezugw2', 'w')
f.write(str(finalw2))
f.close()

# Leistung Phase L3

resp = client.read_holding_registers(0xB01D,2, unit=modbusid)
value1 = resp.registers[0] 
value2 = resp.registers[1] 
all = (value1 << 16) + value2
# beide Register in eine Zahl schieben
finalw3 = float(all) * 10
# in Kommazahl umrechnen mal 10 in W
print ('Watt L3 = ' + str(finalw3) +' W')
f = open('/var/www/html/openWB/ramdisk/bezugw3', 'w')
f.write(str(finalw3))
f.close()

# Leistungsfaktor CosPhi L1

resp = client.read_holding_registers(0xB02B,1, unit=modbusid)
evupf1 = resp.registers[0]
evupf1 = float(evupf1) / 1000
print ('CosPhi L1 = ' + str(evupf1) +' %')
f = open('/var/www/html/openWB/ramdisk/evupf1', 'w')
f.write(str(evupf1))
f.close()

# Leistungsfaktor CosPhi L2

resp = client.read_holding_registers(0xB02C,1, unit=modbusid)
evupf2 = resp.registers[0]
evupf2 = float(evupf2) / 1000
print ('CosPhi L2 = ' + str(evupf2) +' %')
f = open('/var/www/html/openWB/ramdisk/evupf2', 'w')
f.write(str(evupf2))
f.close()

# Leistungsfaktor CosPhi L3

resp = client.read_holding_registers(0xB02D,1, unit=modbusid)
evupf3 = resp.registers[0]
evupf3 = float(evupf3) / 1000
print ('CosPhi L3 = ' + str(evupf3) +' %')
f = open('/var/www/html/openWB/ramdisk/evupf3', 'w')
f.write(str(evupf3))
f.close()
Für Rückfragen oder Test stehe ich natürlich jederzeit zur Verfügung

MfG

Elektron

Re: Anbindung Hager ECR 380D als Zähler

Verfasst: Sa Mär 26, 2022 10:52 pm
von Nick94
Moin. Ich bin durch Zufall hier aufs Forum gestoßen.
Ich habe auch diese Zähler verbaut und würde diese gerne optisch darstellen durch Grafana und versuche als Noob mir die Modbus Daten per Raspberry abzugreifen. Dein Code oben ist ja schonmal ein guter Anfang. Hast du Tipps diesbezüglich?

Grüße