#!/usr/bin/python import sys import serial import MySQLdb import time print "getsolardata " + time.ctime() queries = ( "IDN", # inverter ID must come first "KWHTODAY", "KWHLIFE", "PIN", "POUT", "TIME", "MEASTEMP", "DERATELIMIT", "TEMPLIMIT", ) # suppress warnings generated by mysql. (CREATE TABLE IF NOT EXISTS # warns when the table exists, for some crazy reason.) import warnings warnings.formatwarning = lambda x,y,z,w: "" # utility function that reads a socket until a \r def myreadline(s): res = "" while 1: c = s.read() if (c == '\r'): return res res += c def main(): database = sys.argv[1] serial_ports = sys.argv[2:] # one per inverter dbparts = database.split(":") connection = MySQLdb.connect(host=dbparts[0], user=dbparts[1], passwd=dbparts[2], db=dbparts[3]) cursor = connection.cursor() create_sql ="CREATE TABLE IF NOT EXISTS Samples (Timestamp datetime NOT NULL" for query in queries: create_sql += ", %s char(255) NOT NULL" % query create_sql += ", PRIMARY KEY (Timestamp, %s)) ENGINE=InnoDB" % queries[0] cursor.execute(create_sql) # make sure all of our inserts use the same time cursor.execute("SET @time = now()") for serial_port in serial_ports: s = serial.Serial(serial_port) # TODO: set serial port options? # display serial port options #print s sql = "INSERT INTO Samples VALUES (@time" for query in queries: s.write(query + "?\r") response = myreadline(s) #print query + ": " + response sql += ", '%s'" % response sql += ")" print sql cursor.execute(sql) connection.commit() if __name__ == "__main__": main()