Questions about hardware that can be controlled by Indigo (but not through the interfaces and plugins listed). If Indigo doesn't support some bit of hardware you're interested in, and you don't find a 3rd Party Plugin for it, add it to this forum. Be sure to include links to as much information as you can find about it.
Note: adding it here does not mean we're going to add it - in fact it's possible one of our 3rd party developers may decide to write a plugin for it. We add hardware/features based on a lot of different factors beyond just having a request for it.
########################################
class SerialGateway:
########################################
def __init__(self, plugin, dev):
self.logger = logging.getLogger("Plugin.SerialGateway")
self.dev = dev
self.plugin = plugin
self.connected = False
dev.updateStateOnServer(key="status", value="Disconnected")
dev.updateStateImageOnServer(indigo.kStateImageSel.SensorOff)
self.connSerial = None
self.command = ''
def start(self):
self.logger.info(u"{}: Running Serial Start".format(self.dev.name))
serialUrl = self.plugin.getSerialPortUrl(self.dev.pluginProps, u"serialPort")
self.logger.info(u"{}: Serial Port URL is: {}".format(self.dev.name, serialUrl))
try:
self.connSerial = self.plugin.openSerial(u"Lutron Gateway", serialUrl, 9600, stopbits=1, timeout=2, writeTimeout=1)
if self.connSerial is None:
self.logger.error(u"{}: Failed to open serial port".format(self.dev.name))
self.dev.updateStateOnServer(key="status", value="Failed")
self.dev.updateStateImageOnServer(indigo.kStateImageSel.SensorTripped)
return
except Exception, e:
self.logger.error(u"{}: Failed to open serial port".format(self.dev.name))
self.dev.updateStateOnServer(key="status", value="Failed")
self.dev.updateStateImageOnServer(indigo.kStateImageSel.SensorTripped)
return
self.connected = True
self.dev.updateStateOnServer(key="status", value="Connected")
self.dev.updateStateImageOnServer(indigo.kStateImageSel.SensorOn)
# Disable main repeater terminal prompt
self.send("#MONITORING,12,2")
# Enable main repeater HVAC monitoring
self.send("#MONITORING,17,1")
# Enable main repeater monitoring param 18 (undocumented but seems to be enabled by default for ethernet connections)
self.send("#MONITORING,18,1")
def stop(self):
self.logger.debug(u"Serial stop called")
if self.connected:
self.connSerial.close()
self.connected = False
self.connSerial = None
def poll(self):
if not self.connected:
self.start()
try:
s = self.connSerial.read()
except:
self.logger.error(u"{}: Error reading from serial port".format(self.dev.name))
self.dev.updateStateOnServer(key="status", value="Failed")
self.dev.updateStateImageOnServer(indigo.kStateImageSel.SensorTripped)
self.connected = False
return
if len(s) > 0:
if s == '\r': # RadioRA 2 messages are always terminated with CRLF
tmp = self.command
self.command = ''
return tmp
else:
self.command += s
def send(self, cmd):
self.logger.debug(u"Sending serial command: %s" % cmd)
cmd = cmd + "\r"
self.connSerial.write(str(cmd))
Users browsing this forum: No registered users and 3 guests