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