#!/usr/bin/python # -*- coding: utf-8 -*- # read_sma_modbus.py, based on https://github.com/JanusHL/pvcontrol/tree/master/SMA # created by Alexander Kabza, 2020-02-26 # 2020-03-25 first version # 2020-03-28 some code simplifications import os import MySQLdb import time import sma from sma import convert2 as c2 from urllib2 import Request, urlopen, URLError #--- Write all parameter to mySQL database def Write_to_mySQL(): conn = MySQLdb.connect(host="localhost",user="xxx",passwd="yyy",db="MyHome") cur = conn.cursor() sql = ("""INSERT INTO PV (timestamp, CondMode, OpHrs, FeedInHrs, TotalYield, TotalGrid, TotalFeedIn, PowerGrid, PowerFeed, PowerPV) VALUES (%s,%s,%s,%s,%s,%s,%s,%s,%s,%s)""",(now, CondMode, OpHrs, FeedInHrs, TotalYield, TotalGrid, TotalFeedIn, PowerGrid, PowerFeed, PowerPV)) #try: cur.execute(*sql) conn.commit() #except: conn.rollback() conn.close() #--- def Write_to_mySQL TCP_IP = '192.168.xxx.yyy' UNIT_ID = 3 PORT=502 def getvalue(reg, len): data = mbus.read_data(reg, len) Translate=c2() Translate.u16.h = data[1] Translate.u16.l = data[0] value = Translate.uint32 return value if __name__ == "__main__": now = (time.strftime("%Y-%m-%d ") + time.strftime("%H:%M:%S")) try: try: mbus = sma.mbusTCP(UNIT_ID, TCP_IP, PORT) mbus.openTCP() except: print ("error Iniciando proceso...") raise try: SerNo = getvalue(30005, 2) DeviceClass = getvalue(30051,2) CondMode = getvalue(30201,2) OpHrs = getvalue(30541, 2) / 3600.0 FeedInHrs = getvalue(30543, 2) / 3600.0 TotalYield = getvalue(30529,4) / 1000.0 TotalGrid = getvalue(30581,2) / 1000.0 TotalFeedIn = getvalue(30583,2) / 1000.0 PowerGrid = getvalue(30865,2) PowerFeed = getvalue(30867,2) PowerPV = getvalue(30775,2) if (PowerPV == 2147483648): PowerPV = 0.0 U1 = getvalue(31253,2) / 100.0 U2 = getvalue(31255,2) / 100.0 U3 = getvalue(31257,2) / 100.0 except: print ("error") raise finally: print('\nCLOSING '+ TCP_IP) mbus.closeTCP() print "" print "SerNo = ", SerNo print "DeviceClass = ", DeviceClass print "CondMode = ", CondMode print "OpHrs = {0:0.2f} hrs".format(OpHrs) print "FeedInHrs = {0:0.2f} hrs".format(FeedInHrs) print "TotalYield = {0:0.2f} kWh".format(TotalYield) print "TotalGrid = {0:0.2f} kWh".format(TotalGrid) print "TotalFeedIn = {0:0.2f} kWh".format(TotalFeedIn) print "PowerGrid = {0:0.0f} W".format(PowerGrid) print "PowerFeed = {0:0.0f} W".format(PowerFeed) print "PowerPV = {0:0.0f} W".format(PowerPV) print "U1 = {0:0.2f} V".format(U1) print "U2 = {0:0.2f} V".format(U2) print "U3 = {0:0.2f} V".format(U3) Write_to_mySQL()