【发布时间】:2015-05-08 13:33:57
【问题描述】:
我正在构建一个控制三个飞利浦色相 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 个命令。您是否验证过您实际上每秒发送的命令不超过 4 个?在调用
updateLightState之前添加一条日志语句以验证频率。 -
我在 UISlider 级别有一个 NSLog,它显示正在发送的当前 NSNumber。它每秒至少发送 30 次日志(即使值没有改变)。
-
这是意料之中的。但是您需要在实际调用
updateLightStateForId时进行记录,以便验证您的逻辑。
标签: objective-c uislider philips-hue