Skip to content

Instantly share code, notes, and snippets.

@repen
Last active October 16, 2019 14:57
Show Gist options
  • Save repen/5f8a63839c4fcacd3294ff7eb523e807 to your computer and use it in GitHub Desktop.
Save repen/5f8a63839c4fcacd3294ff7eb523e807 to your computer and use it in GitHub Desktop.
askvarhdw
#!/usr/bin/python
import threading, time, subprocess, logging, minimalmodbus
from apscheduler.schedulers.background import BackgroundScheduler
from time import sleep
def save_log(path, data):
data = "[ERROR {}] {}\n".format(time.strftime('%Y%m%d %X '),data)
with open(path, "a") as f:
f.write(data)
while True:
rs485 = minimalmodbus.Instrument('/dev/ttyUSB0', 1)
rs485.serial.baudrate = 9600
rs485.serial.bytesize = 8
rs485.serial.parity = minimalmodbus.serial.PARITY_NONE
rs485.serial.stopbits = 1
rs485.serial.timeout = 1
rs485.debug = True
rs485.mode = minimalmodbus.MODE_RTU
# print (rs485)
try:
Volts = rs485.read_float(0, functioncode=4, numberOfRegisters=2)
except Exception as e:
save_log("/tmp/error.log", e)
Volts = 'error'
Current = rs485.read_float(6, functioncode=4, numberOfRegisters=2)
Active_Power = rs485.read_float(12, functioncode=4, numberOfRegisters=2)
Apparent_Power = rs485.read_float(18, functioncode=4, numberOfRegisters=2)
Reactive_Power = rs485.read_float(24, functioncode=4, numberOfRegisters=2)
Power_Factor = rs485.read_float(30, functioncode=4, numberOfRegisters=2)
Phase_Angle = rs485.read_float(36, functioncode=4, numberOfRegisters=2)
Frequency = rs485.read_float(70, functioncode=4, numberOfRegisters=2)
Import_Active_Energy = rs485.read_float(72, functioncode=4, numberOfRegisters=2)
Export_Active_Energy = rs485.read_float(74, functioncode=4, numberOfRegisters=2)
Import_Reactive_Energy = rs485.read_float(76, functioncode=4, numberOfRegisters=2)
Export_Reactive_Energy = rs485.read_float(78, functioncode=4, numberOfRegisters=2)
Total_Active_Energy = rs485.read_float(342, functioncode=4, numberOfRegisters=2)
Total_Reactive_Energy = rs485.read_float(344, functioncode=4, numberOfRegisters=2)
#print ('Voltage: {0:.1f} Volts'.format(Volts))
#print ('Current: {0:.1f} Amps'.format(Current))
#print ('Active power: {0:.1f} Watts'.format(Active_Power))
#print ('Apparent power: {0:.1f} VoltAmps'.format(Apparent_Power))
#print ('Reactive power: {0:.1f} VAr'.format(Reactive_Power))
#print ('Power factor: {0:.1f}'.format(Power_Factor))
#print ('Phase angle: {0:.1f} Degree'.format(Phase_Angle))
#print ('Frequency: {0:.1f} Hz'.format(Frequency))
#print ('Import active energy: {0:.3f} Kwh'.format(Import_Active_Energy))
#print ('Export active energy: {0:.3f} kwh'.format(Export_Active_Energy))
#print ('Import reactive energy: {0:.3f} kvarh'.format(Import_Reactive_Energy))
#print ('Export reactive energy: {0:.3f} kvarh'.format(Export_Reactive_Energy))
#print ('Total active energy: {0:.3f} kwh'.format(Total_Active_Energy))
#print ('Total reactive energy: {0:.3f} kvarh'.format(Total_Reactive_Energy))
#print ('Current Yield (V*A): {0:.1f} Watt'.format(Volts * Current))
file = open('/tmp/meter_data.txt', 'w+')
# file = open('/home/pi/SDM120C/meter_data.txt', 'w+')
file.write(time.strftime('%Y%m%d %X '))
file.write('{} {} {} {} {} {} {} {} {} {} {} {} {} {}\n'.format(Volts, Current, Active_Power, Apparent_Power, Reactive_Power, Power_Factor, Phase_Angle, Frequency, Import_Active_Energy, Export_Active_Energy, Import_Reactive_Energy, Export_Reactive_Energy, Total_Active_Energy, Total_Reactive_Energy))
file.close()
subprocess.call('/home/pi/SDM120C/send-to-eorg.sh')
#output = subprocess.call(['/home/pi/SDM120C/send-to-eorg.sh'])
time.sleep(10)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment