使用UISlider改变飞利浦Hue亮度目标C.

时间:2015-05-08 13:33:58

标签: objective-c uislider philips-hue

我正在构建一个控制三个飞利浦色调RGB LED灯泡的应用程序。我希望能够使用UISlider更改亮度。目前我有一个UISlider在每次更改时都调用一个方法,但是,这种方法远远超过philips hue bridge的每秒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次,但桥接器仍然采用与命令淹没时相同的方式(停止接受所有命令)。任何帮助或方向将不胜感激。提前谢谢!

1 个答案:

答案 0 :(得分:0)

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

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

  

如果你大致大约每秒10个命令

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

更新1:我刚刚发现了Hue SDK github repo(也许是飞利浦员工)的贡献者之一this remark,建议每秒只发送2个命令:

  

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