#!/usr/bin/python import minimalmodbus, requests, time, logging, json from apscheduler.scheduler import Scheduler logging.basicConfig() pz = minimalmodbus.Instrument("/dev/CH340", 4) pz.serial.baudrate = 9600 pz.serial.timeout = 0.1 sched = Scheduler() sched.start() def read_meter(): data = pz.read_registers(0,7,4) return [ data[0] * 0.1, # Voltage(0.1V) (data[1] + (data[2] << 16)) * 0.001, # Current(0.001A) (data[3] + (data[4] << 16)) * 0.1, # Power(0.1W) data[5] + (data[6] << 16)] # Energy(1Wh) def send_data(): meas = ["PZVOLT", "PZAMPS", "PZWATT", "PZWHRS"] data = read_meter() pzemData = [] emonData = [] for i in range (len(meas)): pzemData.append('{} value={} {}'.format(meas[i], data[i], int(time.time()))) emonData.append('{}'.format(data[i])) pData = '\n'.join(pzemData) eData = str(', '.join(emonData)) requests.post('http://192.168.1.61:8086/write?db=test&precision=s', data=pData) apikey='xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx4' payload = {'csv':eData, 'apikey':apikey} url = 'http://192.168.1.205/emoncms/input/post?node=pzem' r = requests.post(url, params=(payload)) print r.text print r.url def daily_reset(): pz._performCommand(66, '') def main(): sched.add_cron_job(send_data, second='*/5') sched.add_cron_job(daily_reset, hour='23', minute='59', second='56') while True: time.sleep(1) if __name__ == "__main__": main()