First pass at driver, and doc

This commit is contained in:
Ian Gulliver
2016-04-07 22:19:40 -07:00
parent 5c034a396c
commit 560a26a7b0
2 changed files with 97 additions and 0 deletions

BIN
ILT1000-API.pdf Normal file

Binary file not shown.

97
ilt1000.py Executable file
View File

@@ -0,0 +1,97 @@
#!/usr/bin/python3
import datetime
import serial
class Error(Exception):
pass
class UnsupportedCommand(Error):
pass
class RequiredValueNotSet(Error):
pass
class OutOfRange(Error):
pass
class Saturated(Error):
pass
class ILT1000(object):
def __init__(self, device, set_time=True):
self._dev = serial.Serial(device, 115200)
try:
# clear junk in outgoing buffer
self._SendCommand('echooff')
except UnsupportedCommand:
pass
assert int(self._SendCommand('echooff')) == 0
if set_time:
self.SetDateTime()
def _SendCommand(self, command):
self._dev.write(command.encode('ascii') + b'\r\n')
ret = self._dev.readline().rstrip().decode('ascii')
if ret == '-999':
raise UnsupportedCommand(command)
if ret == '-500':
raise RequiredValueNotSet(command)
if ret == '-501':
raise OutOfRange(command)
if ret == '-502':
raise Saturated(command)
return ret
def GetModelName(self):
return self._SendCommand('getmodelname')
def GetGeneration(self):
return int(self._SendCommand('getgeneration'))
def GetFirmwareVersion(self):
return self._SendCommand('getfwversion')
def GetSerialNumber(self):
return self._SendCommand('getserialnumber')
def GetControllerTempF(self):
return int(self._SendCommand('gettemp'))
def GetAmbientTempF(self):
# Protocol doc indicates that this is degrees F * 100, but actual values
# look like just degrees F
return int(self._SendCommand('getambienttemp'))
def GetDateTime(self):
ret = self._SendCommand('getdatetime')
return datetime.datetime.fromtimestamp(int(ret.split()[2]))
def SetDateTime(self, now=None):
now = now or datetime.datetime.utcnow()
timestr = now.strftime('%m/%d/%Y %H:%M:%S')
ret = self._SendCommand('setdatetime ' + timestr)
assert int(ret) == 0
def GetCurrentPicoAmps(self):
ret = self._SendCommand('getcurrent')
return float(ret)
def GetVoltage(self):
ret = self._SendCommand('getvoltage')
return float(ret) / 1000000
def GetTransmissionPercent(self):
ret = self._SendCommand('gettrans')
return float(ret) / 10
def GetOpticalDensity(self):
ret = self._SendCommand('getod')
return float(ret) / 100