def __init__(self, pin): self.__ds = OneWire(pin) self.__data = 0
class FakeDallasTemperature(): def __init__(self, pin): self.__ds = OneWire(pin) self.__data = 0 def __fetchAddress(self): ds_address = self.__ds.search() if ds_address == "1": return False self.__ds.reset() self.__ds.select(ds_address) self.__ds.write(0x44, 1) Arduino.delay(700) present = self.__ds.reset() self.__ds.select(ds_address) self.__ds.write(0xBE) return True def __fetchData(self): data = [] for i in range(9): val = self.__ds.read() data.append(val) raw = (data[1] << 8) | data[0] type = 1 if type == 0: raw = raw << 3; if data[7] == 0x10: raw = (raw & 0xFFF0) + 12 - data[6] else: cfg = (data[4] & 0x60) if cfg == 0x00: raw = raw << 3 elif cfg == 0x20: raw = raw << 2 elif cfg == 0x40: raw = raw << 1 else: pass self.__data = raw def getCelsius(self): if self.__fetchAddress(): self.__fetchData() return self.__data / 16.0 def getFahrenheit(self): if self.__fetchAddress(): self.__fetchData() return self.getCelsius() * 1.8 + 32.0
def readonewire(self): for key in self.unit['onewire']: data = [] one = OneWire(self.unit['onewire'][key]['pin']) one.reset() one.select(self.unit['onewire'][key]['addr']) one.write(0x44, 1) sleep(float(750) / 1000) one.reset() one.select(self.unit['onewire'][key]['addr']) one.write(0xBE) for i in range(9): val = one.read() data.append(val) raw = (data[1] << 8) | data[0] cfg = (data[4] & 0x60) if cfg == 0x00: raw = raw << 3 elif cfg == 0x20: raw = raw << 2 elif cfg == 0x40: raw = raw << 1 if raw < 2048: temp = (raw / 16.0) else: temp = -((~raw & 0xffff) >> 2) / 16.0 time = datetime.now().strftime('%H:%M:%S') self.unit['onewire'][key].update(temp=(temp)) self.unit['onewire'][key].update(lastupdate=str(time)) del one