trunet

Example XBee Twisted Protocol

Aug 12th, 2011
383
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 2.66 KB | None | 0 0
  1. from twisted.python import log, usage
  2. from twisted.internet import reactor
  3. from twisted.internet.serialport import SerialPort
  4. from twisted.web.client import Agent
  5. from twisted.web.http_headers import Headers
  6.  
  7. from struct import unpack
  8.  
  9. import sys
  10.  
  11. class JamesOptions(usage.Options):
  12.     optParameters = [
  13.         ['outfile', 'o', None, 'Logfile [default: sys.stdout]'],
  14.         ['baudrate', 'b', 38400, 'Serial baudrate [default: 9600'],
  15.         ['port', 'p', '/dev/tty.usbserial-A600ezgH', 'Serial Port device'],
  16.     ]
  17.  
  18. class XbeeLogger:
  19.     def decodeFloat(self, var):
  20.         text = ""
  21.         for i in range(0, len(var)):
  22.             text += var[i]
  23.         return unpack('f', text)[0]
  24.  
  25.     def handle_packet(self, xbeePacketDictionary):
  26.         response = xbeePacketDictionary
  27.         agent = Agent(reactor)
  28.         d = agent.request(
  29.             'GET',
  30.             "http://localhost/emoncms2/api/post?apikey=MYAPIKEY&json={real_power:" + str(self.decodeFloat(response.get("rf_data")[0:4])) + ",apparent_power:" + str(self.decodeFloat(response.get("rf_data")[4:8])) + ",power_factory:" + str(self.decodeFloat(response.get("rf_data")[8:12])) + ",vrms:" + str(self.decodeFloat(response.get("rf_data")[12:16])) + ",irms:" + str(self.decodeFloat(response.get("rf_data")[16:20])) + "}",
  31.             Headers({'User-Agent': ['James House Control']}),
  32.             None)
  33.         def cbResponse(ignored):
  34.             #log.msg('Response received')
  35.             pass
  36.         d.addCallback(cbResponse)
  37.  
  38.         def cbShutdown(failure):
  39.             log.err(failure)
  40.         d.addErrback(cbShutdown)
  41.         print 'src addr long:' + str(response.get('source_addr_long'))
  42.         #print "Tamanho:|" + str(len(response.get("rf_data"))) + "|"
  43.         #print "Real Power:|" + str(self.decodeFloat(response.get("rf_data")[0:4])) + "|"
  44.         #print "Apparent Power:|" + str(self.decodeFloat(response.get("rf_data")[4:8])) + "|"
  45.         #print "Power Factor:|" + str(self.decodeFloat(response.get("rf_data")[8:12])) + "|"
  46.         #print "Vrms:|" + str(self.decodeFloat(response.get("rf_data")[12:16])) + "|"
  47.         #print "Irms:|" + str(self.decodeFloat(response.get("rf_data")[16:20])) + "|"
  48.  
  49. if __name__ == '__main__':
  50.     o = JamesOptions()
  51.     try:
  52.         o.parseOptions()
  53.     except usage.UsageError, errortext:
  54.         print '%s: %s' % (sys.argv[0], errortext)
  55.         print '%s: Try --help for usage details.' % (sys.argv[0])
  56.         raise SystemExit, 1
  57.  
  58.     logFile = o.opts['outfile']
  59.     if logFile is None:
  60.         logFile = sys.stdout
  61.     log.startLogging(logFile)
  62.  
  63.     from xbeeService.protocol import ZigBeeProtocol
  64.     class XbeeTest(ZigBeeProtocol, XbeeLogger):
  65.         pass
  66.  
  67.     port = o.opts['port']
  68.     log.msg('Attempting to open %s at %dbps as a %s device' % (port, o.opts['baudrate'], ZigBeeProtocol.__name__))
  69.     s = SerialPort(XbeeTest(), o.opts['port'], reactor, baudrate=o.opts['baudrate'])
  70.     reactor.run()
Advertisement
Add Comment
Please, Sign In to add comment