Skip to content

Instantly share code, notes, and snippets.

@r
Created September 5, 2014 21:00
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save r/8ac7e634ac617289621f to your computer and use it in GitHub Desktop.
Save r/8ac7e634ac617289621f to your computer and use it in GitHub Desktop.
from twisted.internet import reactor, task
from twisted.internet.protocol import Factory, Protocol
from twisted.internet.endpoints import TCP4ClientEndpoint
import re
class PlexKiwi(Protocol):
def connectionMade(self):
self.initializeConnection()
testMode = ''
pid = ''
def sendCommand(self, testMode, pid):
self.testMode = testMode
self.pid = pid
msg = '%s %s' % (("%#04x" % self.testMode)[2:].upper(), ("%#04x" % self.pid)[2:].upper())
self.sendMessage(msg)
def sendMessage(self, msg):
self.transport.write('%s\r' % msg)
initialized = False
def initializeConnection(self):
self.sendMessage('atz\r')
self.sendMessage('ate0\r')
self.initialized = False
def askForRPM(self):
self.sendCommand(0x01, 0x0C)
responseString = re.compile('^([^>]*)>(.*?)$')
buffer = ''
def dataReceived(self, data):
self.buffer += data
while True:
m = self.responseString.match(self.buffer)
if not m:
break
if not self.initialized:
self.buffer = m.group(2)
self.initialized = True
else:
if m.group(1).strip() != '':
self.processResponse(m.group(1))
self.buffer = m.group(2)
def processResponse(self, response):
r = response.split()
readTestMode = int('0x%s' % r[2], 16)
readPID = int('0x%s' % r[3], 16)
if readTestMode - 0x40 == self.testMode:
if readPID == self.pid:
rpm = '0x%s' % ''.join(r[4:])
rpm = int(rpm, 16) / 4
print rpm
class PlexKiwiFactory(Factory):
def buildProtocol(self, addr):
return PlexKiwi()
point = TCP4ClientEndpoint(reactor, '192.168.0.10', 35000)
d = point.connect(PlexKiwiFactory())
def kickoff(protocol):
t = task.LoopingCall(protocol.askForRPM)
t.start(0.25)
d.addCallback(kickoff)
reactor.run()
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment