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 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
def __init__(self, payload): if len(payload) < self.packetSize: print("ERROR: INVALID PAYLOAD LENGTH", len(payload), payload) return i = 0 self.currentRmsMA = Conversion.uint8_array_to_int32( payload[i:i + self.sampleSize]) i += self.sampleSize self.currentRmsMedianMA = Conversion.uint8_array_to_int32( payload[i:i + self.sampleSize]) i += self.sampleSize self.filteredCurrentRmsMA = Conversion.uint8_array_to_int32( payload[i:i + self.sampleSize]) i += self.sampleSize self.filteredCurrentRmsMedianMA = Conversion.uint8_array_to_int32( payload[i:i + self.sampleSize]) i += self.sampleSize self.avgZeroVoltage = Conversion.uint8_array_to_int32( payload[i:i + self.sampleSize]) i += self.sampleSize self.avgZeroCurrent = Conversion.uint8_array_to_int32( payload[i:i + self.sampleSize]) i += self.sampleSize self.powerMilliWattApparent = Conversion.uint8_array_to_int32( payload[i:i + self.sampleSize]) i += self.sampleSize self.powerMilliWattReal = Conversion.uint8_array_to_int32( payload[i:i + self.sampleSize]) i += self.sampleSize self.avgPowerMilliWattReal = Conversion.uint8_array_to_int32( payload[i:i + self.sampleSize])
def getInt32(self): return Conversion.uint8_array_to_int32(self._request(4))