def sendData(self,state): self.value = True if state else False self.age = 0 cmd='on' if state else 'off' data = urlData.getData('{}?cmd={}'.format(self.url,cmd)) self.value = data['state'] return self
def sendData(self,state): ''' Set relay state low or high (0/1) Provides for debounce on slow devices with 500ms delay for up to 2.5 seconds. ''' if state: state = '1' else: state = '0' if self.disabled: return self attempts = 5 while attempts: try: self.status = 0 self.tstamp = time.time() url = '{}?state={}'.format(self.url,state) data = urlData.getData(url) self.value = int(data['state']) return self except urlData.dataException: self.alarm = 'No data ({})'.format(e) except TypeError as e: self.alarm = 'Invalid data ({})'.format(e) except ValueError as e: self.alarm = 'Decode error ({})'.format(e) self.age = self.tstamp - self.stime if self.age >= self.maxAge: self.status = 2 self.alarm = 'Stale data' time.sleep(.5) attempts = attempts - 1 return self
def getData(self): ''' retrieve state from device. Provides for debounce on slow devices with 500ms delay for up to 2.5 seconds. ''' if self.disabled: return self attempts = 5 while attempts: try: self.status = 0 self.tstamp = time.time() url = self.url data = urlData.getData(url) self.value = int(data['state']) return self except urlData.dataException: self.alarm = 'No data ({})'.format(e) except TypeError as e: self.alarm = 'Invalid data ({})'.format(e) except ValueError as e: self.alarm = 'Decode error ({})'.format(e) self.age = self.tstamp - self.stime if self.age >= self.maxAge: self.status = 2 self.alarm = 'Stale data' time.sleep(.5) attempts = attempts - 1 return self
def getData(self): ''' retrieve data from device raise dht_alarm on high or low value for temperature or hunidity. Provides for debounce on slow devices with 500ms delay for up to 2.5 seconds. ''' if self.disabled: return self attempts = 5 while attempts: try: self.alarm = '' self.value = 0.0 self.status = 1 url = self.url self.tstamp = time.time() if self.senstype == 'temperature': url = '{}?units={}'.format(self.url,self.units) data = urlData.getData(url) self.value = float(data[self.senstype]) if type(self.drift) == int or type(self.drift) == float: self.value = self.value + self.drift else: aeval.symtable['v'] = self.value self.value = aeval(self.drift) self.stime = int(data["time"]) self.alarm = '' self.status = 0 if self.value >= self.high: self.alarm = 'High {} {}'.format(self.senstype,self.value) self.status = 1 elif self.value <= self.low: self.alarm = 'Low {} {}'.format(self.senstype,self.value) self.status = -1 self.age = self.tstamp - self.stime if self.age >= self.maxAge: self.status = 2 self.alarm = 'Stale data' return self except urlData.dataException: self.alarm = 'No data ({})'.format(e) except TypeError as e: self.alarm = 'Invalid data ({})'.format(e) except ValueError as e: self.alarm = 'Decode error ({})'.format(e) self.age = self.tstamp - self.stime if self.age >= self.maxAge: self.status = 2 self.alarm = 'Stale data' time.sleep(.5) attempts = attempts - 1 return self
def getData(self): now = time.time() self.age = 0 data = urlData.getData(self.url) self.value = data['state'] return self