1

我正在构建一个控制三个飞利浦色调 RGB LED 灯泡的应用程序。我希望能够使用 UISlider 更改亮度。目前我有一个 UISlider 在每次更改时调用一个方法,但是,此方法远远超过了 philips hue 桥每秒 10 个命令的限制。这是我调用 UI 滑块更改的方法。

- (void) changeBulbBrightness: (NSNumber *)currentBrightness
{
    NSTimeInterval timeInterval = [self.timeLastCommandSent timeIntervalSinceNow];
    NSLog(@"Time Since Last command: %f", timeInterval);
    if (timeInterval < -0.3)
    {
        NSLog(@"COMMAND SENT!!!!");
        PHBridgeResourcesCache *cache = [PHBridgeResourcesReader readBridgeResourcesCache];
        PHBridgeSendAPI *bridgeSendAPI = [[PHBridgeSendAPI alloc] init];
        for (PHLight *light in cache.lights.allValues)
        {
            PHLightState *lightState = light.lightState;
            //PHLightState *lightState = [[PHLightState alloc] init];
            if (lightState.on)
            {
                [lightState setBrightness:currentBrightness];
                // Send lightstate to light


     [bridgeSendAPI updateLightStateForId:light.identifier withLightState:lightState completionHandler:^(NSArray *errors) {
                /*if (errors != nil) {
                    NSString *message = [NSString stringWithFormat:@"%@: %@", NSLocalizedString(@"Errors", @""), errors != nil ? errors : NSLocalizedString(@"none", @"")];
                    if (self.loggingOn)
                    {
                        NSLog(@"Brightness Change Response: %@",message);
                    }
                }
                 */
            }];
        }
        self.timeLastCommandSent = [[NSDate alloc]init];
    }
}
self.appDelegate.currentSetup.brightnessSetting = currentBrightness;
NSLog(@"Brightness Now = %@", currentBrightness);

我尝试制作一个计时器来将命令数量限制为每秒 10 个,但是当它被命令淹没时,网桥仍然会以相同的方式运行(停止接受所有命令)。任何帮助或方向将不胜感激。提前致谢!

4

1 回答 1

0

一个原因可能是您的多个灯。您正在为每个灯发送更新命令。因此,如果您在 Hue 入门套件中连接了 3 个灯泡,如果存在一些不幸的缓存涉及将更新从 2​​ 秒打包到 1 秒发送,您可能仍会发送 10 个或更多。因此,我建议您进一步减少发送的更新数量(尝试 0.5 甚至 1.0)作为间隔,看看它是否会变得更好。

另请注意,SDK 对速率限制非常模糊。它说:

如果你保持大约每秒10 个命令

由于飞利浦 Hue SDK 通常没有得到很好的支持(查看开放的 GitHub 问题),因此请谨慎对待并自己进行实验。一旦我有时间自己检查它,我会在这里发布更新。

更新 1:我刚刚发现Hue SDK github repo 的一位贡献者(可能是飞利浦员工)的评论,建议每秒只发送 2 个命令:

如前所述,在循环中执行大量请求时要小心,因为对 PHBridgeSendAPI 的调用不会阻塞,并且请求会被保留,直到它们得到响应或超时。每秒两次调用似乎是一个安全的速率,如果您想获得更高的速率,建议使用您自己的队列机制链接请求(以确保在调用新请求之前释放内存)。

于 2015-05-16T21:46:56.623 回答