1

我正在尽我所能通过为我的家庭自动化设置编写脚本来学习 Python。我想监控 4 个 Iphone 的存在,并且现在我想避免安装任何应用程序来处理这个问题。(是的,这既不切实际,也不是 100% 准确 - 但为什么要走简单的路线?:))

通过使用 Stackoverflow 和 Google,我能够创建一个在我的 RPI3 上运行的功能齐全的脚本,该脚本执行以下操作:

  • 创建 4 个进程(每个人一个)
  • 通过以下方式检查他们的电话是否存在:

    • ping他们的IP(使用dhcp保留)
    • 在 arp 中查找他们的 mac
    • 查找他们的蓝牙名称(使用 Pybluez)
  • 拨打我的智能家居解决方案,将虚拟开关设置为出席或离开

这一切都很好 - 除了一个事实:即使我使用三个单独的检查,我也一定会遇到这样一种情况,即使有人在家,他们 3 也会空着(因为 Iphone 因切换他们的 wifi 而臭名昭著)在深度睡眠时,蓝牙并不总是可用的)。因此,对于这些情况,我会在将它们设置为离开之前重做几分钟的检查。

总而言之,这意味着我收到了很多蓝牙电话,我现在认为这是我的问题的根源:

我随机从我的蓝牙查找中没有得到任何响应。

我尝试了两种方法:

  • bluetooth.lookup_name(macadr,超时=超时)“
  • subprocess.check_output(['hcitool', 'name', macadr])

即使我使用的是 Try/Catch,它也不会产生任何错误。话虽如此,我相当确定我的“不可见”问题是几乎同时调用查找函数的结果 - 导致“设备忙”问题。

由于我仍在学习 Python 中的技巧 - 有没有办法让我更好地控制与这些设备的通信?我应该指出,任何设备都不需要与解决方案配对。

我看到的效果可以通过同时发出“hcitool name AA:BB:CC:DD:EE:FF”从多个 shell 中重现 - 效果将是它们相互抵消。同样 - 如果我启动我的脚本并从提示符中调用“hcitool”,它将破坏我脚本中的查找。

任何输入将不胜感激。

//托马斯

4

0 回答 0