Reading data on RaspberryPi¶
Takes in serial information from Log4 USB or POE device then displays measurements on RaspberryPi python terminal. Units supported
Current - “uA”, “mA”, “A”
Voltage - “mV”, “V”
Power - “mW”, “W”
Dependencies¶
pyserial
Requirements¶
Log4 USB or Log4 PoE
Micro-USB B to USB A-type cable
RaspberryPi 2, 3, or 4
Python 2 or 3
Setup¶
Use the micro USB cable to connect Log4 device with RaspberryPi via “MONITOR USB” port.
Make sure Log4 device is turned ON.
Run the python script and the terminal should start spitting out measurement data.
Code¶
# Log4 USB and POE Serial Output
# Takes in serial information from Log4 USB or POE device then
# displays measurements on RaspberryPi python terminal.
# created 2018
# by Tekt Industries
# This example code is in the public domain.
# Units supported
# Current - "uA", "mA", "A"
# Voltage - "mV", "V"
# Power - "mW", "W"
import serial
import time
def serialConnect(serialdevice):
if serialdevice=='auto':
serlocations=['/dev/ttyACM', '/dev/ttyACM0', '/dev/ttyACM1','/dev/ttyACM2', '/dev/ttyACM3','/dev/ttyACM4', '/dev/ttyACM5','/dev/ttyUSB0','/dev/ttyUSB1','/dev/ttyUSB2','/dev/ttyUSB3', '/dev/ttyUSB4', '/dev/ttyUSB5', '/dev/ttyUSB6', '/dev/ttyUSB7', '/dev/ttyUSB8', '/dev/ttyUSB9', '/dev/ttyUSB10','/dev/ttyS0', '/dev/ttyS1', '/dev/ttyS2', 'com2', 'com3', 'com4', 'com5', 'com6', 'com7', 'com8', 'com9', 'com10', 'com11', 'com12', 'com13', 'com14', 'com15', 'com16', 'com17', 'com18', 'com19', 'com20', 'com21', 'com1', 'end']
else:
serlocations=[serialdevice]
for device in serlocations:
try:
ser = serial.Serial(
port=device,
baudrate=115200,
parity=serial.PARITY_ODD,
stopbits=serial.STOPBITS_TWO,
bytesize=serial.SEVENBITS
)
print device
return ser
except:
pass
if device == 'end':
print "No Device Found"
class Log4USB:
def _init_(self):
self.current=0
self.voltage=0
self.power=0
self.current_chB=0
self.voltage_chB=0
self.power_chB=0
self.device=""
self.cD=1
self.vD=1
self.pD=1
self.timestamp=0
def setUnits(self,currentDivision,voltageDivision,powerDivision):
if currentDivision=='mA':
self.cD=1000.0
elif currentDivision=='A':
self.cD=1000000.0
else:
self.cD=1
if voltageDivision=='V':
self.vD=1000.0
else:
self.vD=1
if powerDivision=='mW':
self.pD=1000.0
elif powerDivision=='W':
self.pD=1000000.0
else:
self.pD=1
def measure(self,serialdevice):
if (serialdevice.read())==":":
serialdata=serialdevice.read(24).encode("hex")
currentA=''
voltageA=''
powerA=''
currentB=''
voltageB=''
powerB=''
timestamp=''
for x in range(0,16,2):
timestamp=serialdata[6+x]+serialdata[7+x]+timestamp
if serialdata[4]+serialdata[5]=='14':
self.device="Log4 USB"
for x in range(0,8,2):
currentA=serialdata[22+x]+serialdata[23+x]+currentA
voltageA=serialdata[30+x]+serialdata[31+x]+voltageA
powerA=serialdata[38+x]+serialdata[39+x]+powerA
elif serialdata[4]+serialdata[5]=='20':
self.device="Log4 PoE"
for x in range(0,8,2):
currentA=serialdata[22+x]+serialdata[23+x]+currentA
voltageA=serialdata[30+x]+serialdata[31+x]+voltageA
powerA=serialdata[38+x]+serialdata[39+x]+powerA
currentB=serialdata[22+x]+serialdata[23+x]+currentB
voltageB=serialdata[30+x]+serialdata[31+x]+voltageB
powerB=serialdata[38+x]+serialdata[39+x]+powerB
else:
self.device=""
self.current=0
self.voltage=0
self.power=0
self.current_chB=0
self.voltage_chB=0
self.power_chB=0
self.current=(int(currentA,16)/self.cD)
print currentA
self.voltage=(int(voltageA,16)/self.vD)
self.power=(int(powerA,16)/self.pD)
self.current_chB=(int(currentB,16)/self.cD)
self.voltage_chB=(int(voltageB,16)/self.vD)
self.power_chB=(int(powerB,16)/self.pD)
self.timestamp=int(timestamp,16)/1000
else:
self.current=0
self.voltage=0
self.power=0
self.current_chB=0
self.voltage_chB=0
self.power_chB=0
self.device=""
self.timestamp=0
return Log4USB()
device = serialConnect('auto')
log4usb=Log4USB()
currentUnit='mA'
voltageUnit='V'
powerUnit='mW'
log4usb.setUnits(currentUnit,voltageUnit,powerUnit)
if device:
device.flushInput()
while True:
log4usb.measure(device)
if log4usb.device=="Log4 PoE":
print time.strftime("%Y-%m-%d %H:%M:%S", time.localtime(log4usb.timestamp))
print "Ch A current %f %s" %(log4usb.current , currentUnit)
print "Ch A voltage %f %s" %(log4usb.voltage , voltageUnit)
print "Ch A power %f %s" % (log4usb.power , powerUnit)
print "Ch B current %f %s" %(log4usb.current_chB , currentUnit)
print "Ch B voltage %f %s" %(log4usb.voltage_chB , voltageUnit)
print "Ch B power %f %s" % (log4usb.power_chB , powerUnit)
print ""
elif log4usb.device=="Log4 USB":
print time.strftime("%Y-%m-%d %H:%M:%S", time.localtime(log4usb.timestamp))
print "Current %f %s" %(log4usb.current , currentUnit)
print "Voltage %f %s" %(log4usb.voltage , voltageUnit)
print "Power %f %s" % (log4usb.power , powerUnit)
print ""