async def set_genSens_TxPwrLvl(self, advScan, conn, **kwargs): try: assert (advScan >= 1 and advScan <= 9), ( "Parameter \'advScan\' has to be between 1 and 9") assert (conn >= 1 and conn <= 9), ( "Parameter \'conn\' has to be between 1 and 9") data = bytearray(uint8(advScan), uint8(conn)) self.client.write_gatt_char( GenericSensor.GEN_SENS_TX_PWR_LVL_CHAR_UUID, data, **kwargs) self.genSens_TxPwrLvl_AdvScan = advScan self.genSens_TxPwrLvl_Conn = conn pwrLvl = [ "TX_PWR_LVL_NEG_18_DBM", "TX_PWR_LVL_NEG_12_DBM", "TX_PWR_LVL_NEG_6_DBM", "TX_PWR_LVL_NEG_3_DBM", "TX_PWR_LVL_NEG_2_DBM", "TX_PWR_LVL_NEG_1_DBM", "TX_PWR_LVL_0_DBM", "TX_PWR_LVL_3_DBM", "TX_PWR_LVL_MAX" ] self.logger.info( "[" + currentFuncName() + "] transmitted: " + f"TxPwrLvl_AdvScan: {pwrLvl[self.genSens_TxPwrLvl_AdvScan-1]}\t" + f"TxPwrLvl_Conn: {pwrLvl[self.genSens_TxPwrLvl_Conn-1]}") return self.genSens_TxPwrLvl_AdvScan, self.genSens_TxPwrLvl_Conn except Exception as e: self.genSens_TxPwrLvl_AdvScan = None self.genSens_TxPwrLvl_Conn = None self.logger.error("[" + currentFuncName() + "] received exception: " + str(e)) raise e
async def set_temp_CalibrationData(self, calA, calB, **kwargs): try: # Write A and B to bytearray: caldata = bytearray([39, 16, 0, 0, 49, 57, 55, 48, 48, 49, 48, 49]) caldata[0] = np.uint8(calA >> 8) caldata[1] = np.uint8(calA & 0x00FF) caldata[2] = np.uint8(calB >> 8) caldata[3] = np.uint8(calB & 0x00FF) calDate = bytearray(time.strftime("%Y%m%d"), "utf-8") # Write actual date to bytearray: i = 0 for i in range(8): caldata[4 + i] = calDate[i] await self.client.write_gatt_char(Temperature.TEMP_CALIBRATION_DATA_CHAR_UUID, caldata, **kwargs) self.temp_CalibrationData_CalA = calA self.temp_CalibrationData_CalB = calB self.temp_CalibrationData_CalDate = calDate self.logger.info("[" + currentFuncName() + "] transmitted: " + f"calA: {self.temp_CalibrationData_CalA}\t" + f"calB: {self.temp_CalibrationData_CalB}\t" + f"calDate: {self.temp_CalibrationData_CalDate}") return list((self.temp_CalibrationData_CalA, self.temp_CalibrationData_CalB)), self.temp_CalibrationData_CalDate except Exception as e: self.temp_CalibrationData_CalA = None self.temp_CalibrationData_CalB = None self.temp_CalibrationData_CalDate = None self.logger.error("[" + currentFuncName() + "] received exception: " + str(e)) raise e
async def get_genSens_TxPwrLvl(self, **kwargs): if self.genSens_TxPwrLvl_AdvScan is not None: return self.genSens_TxPwrLvl_AdvScan, self.genSens_TxPwrLvl_Conn try: data = await self.client.read_gatt_char( GenericSensor.GEN_SENS_TX_PWR_LVL_CHAR_UUID, **kwargs) self.genSens_TxPwrLvl_AdvScan = int(format(data[0])) self.genSens_TxPwrLvl_Conn = int(format(data[1])) pwrLvl = [ "TX_PWR_LVL_NEG_18_DBM", "TX_PWR_LVL_NEG_12_DBM", "TX_PWR_LVL_NEG_6_DBM", "TX_PWR_LVL_NEG_3_DBM", "TX_PWR_LVL_NEG_2_DBM", "TX_PWR_LVL_NEG_1_DBM", "TX_PWR_LVL_0_DBM", "TX_PWR_LVL_3_DBM", "TX_PWR_LVL_MAX" ] self.logger.info( "[" + currentFuncName() + "] received: " + f"TxPwrLvl_AdvScan: {pwrLvl[self.genSens_TxPwrLvl_AdvScan-1]}\t" + f"TxPwrLvl_Conn: {pwrLvl[self.genSens_TxPwrLvl_Conn-1]}") return self.genSens_TxPwrLvl_AdvScan, self.genSens_TxPwrLvl_Conn except Exception as e: self.logger.error("[" + currentFuncName() + "] received exception: " + str(e)) raise e
async def get_temp_CalibrationData(self, **kwargs): if self.temp_CalibrationData_CalA is not None: return list((self.temp_CalibrationData_CalA, self.temp_CalibrationData_CalB)), self.temp_CalibrationData_CalDate try: caldata = await self.client.read_gatt_char(Temperature.TEMP_CALIBRATION_DATA_CHAR_UUID, **kwargs) self.temp_CalibrationData_CalA = struct.unpack('>H',caldata[:2])[0] self.temp_CalibrationData_CalB = struct.unpack('>h',caldata[2:4])[0] i = 0 date = "" for i in range(4): date = date + str(chr(caldata[i + 4])) date = date + "/" for i in range(2): date = date + str(chr(caldata[i + 8])) date = date + "/" for i in range(2): date = date + str(chr(caldata[i + 10])) self.temp_CalibrationData_CalDate = date self.logger.info("[" + currentFuncName() + "] received: " + f"calA: {self.temp_CalibrationData_CalA}\t" + f"calB: {self.temp_CalibrationData_CalB}\t" + f"calDate: {self.temp_CalibrationData_CalDate}") return list((self.temp_CalibrationData_CalA, self.temp_CalibrationData_CalB)), self.temp_CalibrationData_CalDate except Exception as e: self.logger.error("[" + currentFuncName() + "] received exception: " + str(e)) raise e
async def get_temp_Temperature(self, **kwargs): try: self._lock_Temperature = True data = await self._get_notify(Temperature.TEMP_TEMPERATURE_CHAR_UUID, **kwargs) self.temp_Temperature = struct.unpack('<f',data)[0] self.logger.info("[" + currentFuncName() + "] received: " + str(self.temp_Temperature)) return self.temp_Temperature except Exception as e: self.logger.error("[" + currentFuncName() + "] received exception: " + str(e)) raise e
async def get_battery_BatteryLevel(self, **kwargs): try: data = await self._get_notify( Battery.BATTERY_BATTERY_LEVEL_CHAR_UUID, **kwargs) self.battery_BatteryLevel = int(format(data[0])) self.logger.info("[" + currentFuncName() + "] received: " + str(self.battery_BatteryLevel)) return self.battery_BatteryLevel except Exception as e: self.logger.error("[" + currentFuncName() + "] received exception: " + str(e)) raise e
async def get_genSens_Label(self, **kwargs): if self.genSens_Label is not None: return self.genSens_Label try: data = await self.client.read_gatt_char( GenericSensor.GEN_SENS_LABEL_CHAR_UUID, **kwargs) self.genSens_Label = data.decode("utf-8").strip(" ") self.logger.info("[" + currentFuncName() + "] received: " + self.genSens_Label) return self.genSens_Label except Exception as e: self.logger.error("[" + currentFuncName() + "] received exception: " + str(e)) raise e
async def get_devInf_SerialNumber(self, **kwargs): if self.devInf_SerialNumber is not None: return self.devInf_SerialNumber try: data = await self.client.read_gatt_char( DeviceInformation.DEV_INF_SERIAL_NUMBER_CHAR_UUID, **kwargs) self.devInf_SerialNumber = data.decode("utf-8").strip(" ") self.logger.info("[" + currentFuncName() + "] received: " + self.devInf_SerialNumber) return self.devInf_SerialNumber except Exception as e: self.logger.error("[" + currentFuncName() + "] received exception: " + str(e)) raise e
async def get_devInf_PNP_ID(self, **kwargs): if self.devInf_PNP_ID is not None: return self.devInf_PNP_ID try: data = await self.client.read_gatt_char( DeviceInformation.DEV_INF_PNP_ID_CHAR_UUID, **kwargs) self.devInf_PNP_ID = data # Has to be formated self.logger.info("[" + currentFuncName() + "] received: " + str(self.devInf_PNP_ID)) return self.devInf_PNP_ID except Exception as e: self.logger.error("[" + currentFuncName() + "] received exception: " + str(e)) raise e
async def get_devInf_HardwareRevision(self, **kwargs): if self.devInf_HardwareRevision is not None: return self.devInf_HardwareRevision try: data = await self.client.read_gatt_char( DeviceInformation.DEV_INF_HARDWARE_REVISION_CHAR_UUID, **kwargs) self.devInf_HardwareRevision = data.decode("utf-8").strip(" ") self.logger.info("[" + currentFuncName() + "] received: " + self.devInf_HardwareRevision) return self.devInf_HardwareRevision except Exception as e: self.logger.error("[" + currentFuncName() + "] received exception: " + str(e)) raise e
async def get_devInf_ManufacturerName(self, **kwargs): if self.devInf_ManufacturerName is not None: return self.devInf_ManufacturerName try: data = await self.client.read_gatt_char( DeviceInformation.DEV_INF_MANUFACTURER_NAME_CHAR_UUID, **kwargs) self.devInf_ManufacturerName = data.decode("utf-8").strip(" ") self.logger.info("[" + currentFuncName() + "] received: " + self.devInf_ManufacturerName) return self.devInf_ManufacturerName except Exception as e: self.logger.error("[" + currentFuncName() + "] received exception: " + str(e)) raise e
async def set_genSens_Label(self, label, **kwargs): if len(label) <= 64: newLabel = label else: newLabel = label[:64] bytelist = bytearray(newLabel, "utf-8") try: data = await self.client.write_gatt_char( GenericSensor.GEN_SENS_LABEL_CHAR_UUID, bytelist, **kwargs) self.genSens_Label = newLabel self.logger.info("[" + currentFuncName() + "] transmitted: " + self.genSens_Label) return self.genSens_Label except Exception as e: self.genSens_Label = None self.logger.error("[" + currentFuncName() + "] received exception: " + str(e)) raise e
async def set_genSens_AdvMode(self, advMode, **kwargs): try: assert (advMode >= self.ADV_MODE_1 and advMode <= self.ADV_MODE_4), ( "Advertisement Mode has to be between 1 and 4") data = bytearray(uint8(advMode)) await self.client.write_gatt_char( GenericSensor.GEN_SENS_ADV_MODE_CHAR_UUID, data, **kwargs) self.genSens_AdvMode = advMode if self.genSens_AdvMode == self.ADV_MODE_1: self.connTimeout = self.MAX_ADV_INTERVAL_MODE_1 + self.connTimeout_plus self.logger.info("[" + currentFuncName() + "] transmitted: ADV_MODE_1") elif self.genSens_AdvMode == self.ADV_MODE_2: self.connTimeout = self.MAX_ADV_INTERVAL_MODE_2 + self.connTimeout_plus self.logger.info("[" + currentFuncName() + "] transmitted: ADV_MODE_2") elif self.genSens_AdvMode == self.ADV_MODE_3: self.connTimeout = self.MAX_ADV_INTERVAL_MODE_3 + self.connTimeout_plus self.logger.info("[" + currentFuncName() + "] transmitted: ADV_MODE_3") elif self.genSens_AdvMode == self.ADV_MODE_4: self.connTimeout = self.MAX_ADV_INTERVAL_MODE_4 + self.connTimeout_plus self.logger.info("[" + currentFuncName() + "] transmitted: ADV_MODE_4") else: self.connTimeout = self.MAX_ADV_INTERVAL_MODE_4 + self.connTimeout_plus self.logger.warning("[" + currentFuncName() + "] transmitted unexpected value: " + str(self.genSens_AdvMode)) return self.genSens_AdvMode except Exception as e: self.genSens_AdvMode = None self.logger.error("[" + currentFuncName() + "] received exception: " + str(e)) raise e
async def get_genSens_AdvMode(self, **kwargs): if self.genSens_AdvMode is not None: return self.genSens_AdvMode try: data = await self.client.read_gatt_char( GenericSensor.GEN_SENS_ADV_MODE_CHAR_UUID, **kwargs) self.genSens_AdvMode = int(format(data[0])) if self.genSens_AdvMode == self.ADV_MODE_1: self.connTimeout = self.MAX_ADV_INTERVAL_MODE_1 + self.connTimeout_plus self.logger.info("[" + currentFuncName() + "] received: ADV_MODE_1") elif self.genSens_AdvMode == self.ADV_MODE_2: self.connTimeout = self.MAX_ADV_INTERVAL_MODE_2 + self.connTimeout_plus self.logger.info("[" + currentFuncName() + "] received: ADV_MODE_2") elif self.genSens_AdvMode == self.ADV_MODE_3: self.connTimeout = self.MAX_ADV_INTERVAL_MODE_3 + self.connTimeout_plus self.logger.info("[" + currentFuncName() + "] received: ADV_MODE_3") elif self.genSens_AdvMode == self.ADV_MODE_4: self.connTimeout = self.MAX_ADV_INTERVAL_MODE_4 + self.connTimeout_plus self.logger.info("[" + currentFuncName() + "] received: ADV_MODE_4") else: self.connTimeout = self.MAX_ADV_INTERVAL_MODE_4 + self.connTimeout_plus self.logger.warning("[" + currentFuncName() + "] received unexpected result: " + str(self.genSens_AdvMode)) return self.genSens_AdvMode except Exception as e: self.logger.error("[" + currentFuncName() + "] received exception: " + str(e)) raise e