#!/usr/bin/python # -*- coding: utf-8 -*- import serial, time import meterbus address = 0 port = '/dev/serial/by-path/pci-0000:01:1b.0-usb-0:2:1.0-port0' 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" # start communication with 8N1, DTR enabled ser = serial.Serial(port, 2400, 8, 'N', 1, 0.5) ser.dsrdtr=True # send wake up sequence ser.write(wakeup) time.sleep(0.130) ser.read() response = ser.readline() # switch to 8E1 ser.parity = serial.PARITY_EVEN # SND_NKE to reset the communication meterbus.send_ping_frame(ser, address) frame = meterbus.load(meterbus.recv_frame(ser, 1)) assert isinstance(frame, meterbus.TelegramACK) # request data from meter meterbus.send_request_frame(ser, address) frame = meterbus.load(meterbus.recv_frame(ser, meterbus.FRAME_DATA_LENGTH)) assert isinstance(frame, meterbus.TelegramLong) # print data, todo: save it to file print(frame.to_JSON())