pymodbus + PEACEFAIR PZEM-017 サンプル
外部シャント無しのPEACEFAIR PZEM-013も基本は(たぶん)同じ。
RS485はUSBドングル。
#! /usr/bin/python3
import pymodbus
import datetimefrom pymodbus.client.sync import ModbusSerialClient as ModbusClient
client = ModbusClient(method='rtu', port='/dev/ttyUSB0',
baudrate=9600, parity='N', stopbits=2, bytesize=8, timeout=1)
connection = client.connect()
while True:
time.sleep(1)
param = client.read_input_registers(0, 8, unit=0x01).registers
vv = param[0]/100
cv = param[1]/100
pv = (param[2]+param[3]*0x10000)/10
ev = param[4]+param[5]*0x10000
hvas = param[6]
lvas = param[7]
print(datetime.datetime.now(), end='')
print(" {:6.2f}V {:6.2f}A {:6.2f}W {:5d}Wh VAS H{:1} L{:1}".format(
vv, cv, pv, ev, hvas, lvas))
出力例:
2023-02-13 12:15:48.552119 18.75V 0.83A 15.50W 236Wh VAS H0 L0
.
.
.
シャント設定をしていないとあるがとりあえずなんで。
time.sleep(1)を取ると9回/s前後で取得できる。
ModbusClient→Connect→がわりと時間がかかる。
Voltage/Current/Power Valueは読み出した時にしか参照できないが、Energy Valueは本体に給電されている限りは自立して積算される。電源が切れてもResetしない限りは保持されるっぽい
実験ではソーラーパネルとチャージコントローラーの間につけて見てるので、夜に停電すると参照できなくなるのが難。USBのテストポートがあるが、接続すると値が変わってしまう事があって今のところ謎。