2014-10-08 71 views
0

您好我正在通过Firebase SDK控制嵌套恒温器。我们有太多请求异常的大问题。我看到了一些关于这个问题的线索,但没有解决这个问题。所以我想问问是否有人设法解决这个问题?NEST - FIREBASE API - 太多的请求异常

+0

让我形容它的更多细节。与太多请求相关的问题始终与更改设备上的某些内容有关。在获取设备状态的情况下,我们没有这个问题。我们可以在设备上进行3-5次更改,然后超出限制并有太多的请求异常。然后,我们必须等待一段时间,然后我们才能对设备进行一些更改。 – user1442611 2014-10-09 10:19:30

回答

0

我有过类似的问题。但只有当我认证太多的时候。我不得不等待一段时间才能让更改再次进行验证。现在我有一个websocket运行来获取值,并没有问题。设定值是我要做的下一步。所以,我不知道有多少要求,你可以发送

+0

我目前也在向嵌套写数据。我有太多的例外请求。这是因为我没有使用我的计时器。只要确保你限制你的数据变化,每个分支都在它看来的极限附近。希望它帮助 – 2014-10-13 10:42:15

1

https://developer.nest.com/documentation/data-rate-limits

为了避免出错,我们建议您限制请求,每分钟一个电话,最大值。

从这个和其他职位上,我相信你可以在任何60分钟的窗口提出60个请求。但我认为这是每个访问令牌限制。 Nest分别说,他们限制对设备和结构的写入 - 我没有达到写入限制,但我没有写很多写入设备。

0

为了解决这个限制,我做了以下内容:

  • 当用户发出一个命令,也不会立即发送命令到火力地堡;只需排队并在恒定延迟后执行,D
  • 如果用户在延迟D内发出另一个命令,则将先前的命令取消排队并排队最近的一个命令。

使用此策略,问题命令数最多为每D秒一个。

下面是代码:

-(void) delayedSetValue:(NSArray *)valuesAndURL { 
NSDictionary *values = valuesAndURL[0]; 
NSString *URL = valuesAndURL[1]; 

if ([self.subscribedURLs objectForKey:URL]) { 
    [[self.fireBi objectForKey:URL] runTransactionBlock:^FTransactionResult *(FMutableData *currentData) { 
     [currentData setValue:values]; 
     return [FTransactionResult successWithValue:currentData]; 
    } andCompletionBlock:^(NSError *error, BOOL committed, FDataSnapshot *snapshot) { 
     if (error) { 
      NSLog(@"Error: %@", error); 
     } 
    } withLocalEvents:NO]; 
} 
} 

/* 
* Sets the values for the given firebase URL. 
*/ 
- (void)setValues:(NSDictionary *)values forURL:(NSString *)URL 
{ 
    [NSObject cancelPreviousPerformRequestsWithTarget:self]; 
    NSArray *valuesAndURL = @[values, URL]; 
    [self performSelector:@selector(delayedSetValue:) withObject:valuesAndURL afterDelay:5.0f]; 
}