近乎实时的 LAN 设备状态,无需轮询

物联网 ios
2021-06-08 07:41:58

我必须开发一个 iPhone 应用程序来监控设备。

该设备是一个船灯控制系统。使用 iPhone 应用程序,我可以控制灯的开/关。可以从设备触摸屏或使用 iPhone 应用程序打开/关闭灯。

重要的是,应用程序会收到灯光状态变化的通知(有人打开了灯光形式的墙壁断路器或从设备触摸屏)。但重要的是设备/iPhone 状态更新程序是电源优化的(我不想使用轮询来耗尽 iPhone 电池以连续读取设备的状态)。如果可以优化系统,那么在设备上添加蓝牙不是问题。

设备和应用程序在同一个局域网上(解决方案必须在没有互联网连接的情况下工作)。

该设备公开了一个休息服务来读取/更改灯开/关状态。

在应用程序中,我需要近乎实时地显示设备状态的变化。

是否有比应用程序每 n 秒调用一次以进行检查的设备通知 iPhone 应用程序状态更改更好的解决方案?

一种本地设备-> iPhone 通知?也许 homekit 的某些功能可能会有所帮助?

1个回答

我猜你最好的选择实际上是使用 BLE 信标和通知。为什么?因为可以从后台模式唤醒iOS的东西很少,如果你不能使用互联网,列表就更有限了。信标和定位服务就是其中之一。

这是一篇很好的文章,它讨论了如何通过 BLE 来解决所有问题。但基本上你必须实现 iBeacon 服务,确保即使在应用程序没有运行时它也能正确唤醒手机。这将为您提供最佳的电池寿命。

它还将机制从电话发起的轮询转变为设备发起的通知。

理论上,使用external-accesory框架和 MFI 是可能的,但实施起来更具挑战性。在设备端实现,即。如果您确实让系统充当 HomeKit 附件,那么附件框架registerForLocalNotifications 可让您在后台监控事件

要将您的系统变成类似 HomeKit 的设备,您可以尝试使用HomeBridge 对其进行原型设计。