2021年4月27日火曜日

ビーコン検知

概要

ビーコンを3秒周期で検知してその結果をキューに貯めます。
貯めたキューは7個まで保存できて、要素の多い宛先を選択します。


# coding: utf-8

import bluepy

def get_uuid():
  scanner = bluepy.btle.Scanner(0)
  devices = scanner.scan(3) #3秒のスキャンデータ

  rssi_dic = {}
  rssi_dic2 = {}

  #アドレスとRSSIをディクショナリに登録
  for device in devices:
    rssi_dic[device.addr] = str(device.rssi)

  #ディクショナリを昇順に並べ替え
  rssi_dic2 = sorted(rssi_dic.items(), key=lambda x:x[1])

  #一番強いRSSIを返す
  ret = rssi_dic2[0][0]

  #RSSIが-40以下ならunknown
  if int(rssi_dic2[0][1]) <= -40:
    ret = "unknown"
  return ret

def main():

  from collections import Counter

  check_uuid = []

  i = 0
  while True:

    check_uuid.append(str(get_uuid()))
    uuid_ranking = Counter(check_uuid).most_common()
    best_uuid = uuid_ranking[0][0]

    if len(check_uuid) >= 7 :
      check_uuid.pop(0)


if __name__ == "__main__":
  main()

0 件のコメント:

コメントを投稿