Esempio n. 1
0
 def __init__(self, pin):
     self.__ds = OneWire(pin)
     self.__data = 0
Esempio n. 2
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
Esempio n. 3
0
File: aio.py Progetto: walln3r/home
    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