Esempio n. 1
0
    def __init__(self, payload):
        if len(payload) != SERVICE_DATA_SIZE:
            print("ERROR: INVALID SERVICE DATA LENGTH", len(payload), payload)
            return

        self.opCode = payload[0]
        self.dataType = payload[1]
        self.crownstoneId = payload[2]
        self.switchState = payload[3]

        # TODO: make less ugly
        if self.switchState > 100:
            self.relayState = 1
            self.igbtState = float(self.switchState - 128) / 100.0

        self.flagBitmask = payload[4]
        self.temperature = Conversion.uint8_to_int8(payload[5])
        self.powerFactor = float(Conversion.uint8_to_int8(payload[6])) / 127
        self.powerUsageReal = float(
            Conversion.uint8_array_to_int16(payload[7:7 + 2])) / 8
        self.energyUsed = Conversion.uint8_array_to_int32(
            payload[9:9 + 4]) * 64
        self.partialTimestamp = Conversion.uint8_array_to_int16(payload[13:13 +
                                                                        2])
        self.validation = Conversion.uint8_array_to_int16(payload[15:15 + 2])
    def __init__(self, payload):
        if len(payload) < self.packetSize:
            print("ERROR: INVALID PAYLOAD LENGTH", len(payload), payload)
            return

        self.timestampCounter = Conversion.uint8_array_to_uint32(payload[0:4])
        self.samples = []
        for i in range(4, self.packetSize, self.sampleSize):
            self.samples.append(
                Conversion.uint8_array_to_int16(payload[i:i +
                                                        self.sampleSize]))
    def parseState(self, meshStateItemState):
        self.crownstoneId       = meshStateItemState[0]
        self.switchState        = meshStateItemState[1]
        self.flagsBitmask        = meshStateItemState[2]
        self.temperature        = meshStateItemState[3]
        self.powerFactor        = float(meshStateItemState[4]) / 127
        self.powerUsageReal     = float(Conversion.uint8_array_to_int16(meshStateItemState[5:7])) / 8
        if self.powerFactor == 0:
            self.powerFactor = 1.0
        self.powerUsageApparent = self.powerUsageReal / self.powerFactor
        self.accumulatedEnergy         = Conversion.uint8_array_to_int32(meshStateItemState[7:11])
        self.partialTimestamp   = Conversion.uint8_array_to_uint16(meshStateItemState[11:13])
        self.timestamp          = reconstructTimestamp(time.time(), self.partialTimestamp)

        if self.crownstoneId == 0:
            self.deprecated = True