from . import config from . import messages as msg #from . import convert #from .DeviceData import DeviceData #from .DeviceInfo import DeviceInfo #from .InstantDemand import InstantDemand #from .Reading import Reading #from .Total import Total import defusedxml.ElementTree as ET import socket #========================================================================== def all(): # Newlines are required xmlCmd = "\nget_device_data\n" \ "%s\n\n" % ( config.macAddress ) xmlData = sendXml( xmlCmd ) # Add fake wrapper for parsing list of elements xmlData = "%s" % xmlData root = ET.fromstring( xmlData ) return DeviceData( root ) #========================================================================== def device(): # Newlines are required xmlCmd = "\nlist_devices\n\n" xmlData = sendXml( xmlCmd ) root = ET.fromstring( xmlData ) return msg.DeviceInfo( root ) #========================================================================== def instant(): # Newlines are required xmlCmd = "\nget_instantaneous_demand\n" \ "%s\n\n" % ( config.macAddress ) xmlData = sendXml( xmlCmd ) root = ET.fromstring( xmlData ) return msg.InstantaneousDemand( root ) #========================================================================== def history( start ): "start == datetime in utc" startHex = convert.fromTime( start ) # Newlines are required xmlCmd = "\nget_history_data\n" \ "%s\n%s\n" \ "\n" % ( config.macAddress, startHex ) xmlData = sendXml( xmlCmd ) # Add fake wrapper for parsing list of elements root = ET.fromstring( xmlData ) return [ Total( child ) for child in root ] #========================================================================== def instantHistory( interval ): "interval = 'hour', 'day', 'week'" assert( interval in [ 'hour', 'day', 'week' ] ) # Newlines are required xmlCmd = "\nget_demand_values\n" \ "%s\n\n" % ( config.macAddress ) xmlData = sendXml( xmlCmd ) # Add fake wrapper for parsing list of elements xmlData = "%s" % xmlData root = ET.fromstring( xmlData ) return msg.Reading.xmlToList( root ) #========================================================================== def totalHistory( interval ): "interval = 'day', 'week', 'month', 'year'" assert( interval in [ 'day', 'week', 'month', 'year' ] ) # Newlines are required xmlCmd = "\nget_summation_values\n" \ "%s\n\n" % ( config.macAddress ) xmlData = sendXml( xmlCmd ) # Add fake wrapper for parsing list of elements xmlData = "%s" % xmlData root = ET.fromstring( xmlData ) return msg.Reading.xmlToList( root ) #========================================================================== def sendXml( xmlCmd ): sock = socket.create_connection( ( config.host, config.port ) ) try: sock.send( xmlCmd ) buf = "" while True: s = sock.recv( 1024 ) if not s: break buf += s finally: sock.close() return buf #==========================================================================