Arduino消耗了来自firebase的大量数据

时间:2017-03-28 07:21:29

标签: firebase arduino firebase-authentication arduino-esp8266

我正在研究Arduino-firebase家庭自动化项目。 现在,Firebase数据通过移动应用程序更改,Arduino Esp8266模型从firebase读取数据。所以每次循环都会调用

 FirebaseObject firebaseObject=Firebase.get(path_command);

并且它会持续消耗数据。 所以这是我的问题,有没有办法只在firebase服务器上更改数据时获取数据?

我尝试了以下代码,但它在

处崩溃了设备

if(Firebase.available())

Firebase.begin(FIREBASE_HOST, FIREBASE_AUTH);
  Firebase.stream("/devices/_18_fe_34_d6_9_4f_/command");
if (Firebase.failed()) {
    Serial.println("streaming error");
    Serial.println(Firebase.error());
  }

  if (Firebase.available()) {
      FirebaseObject firebaseObject = Firebase.readEvent();     
      String deviceToken=firebaseObject.getString("device_token");   
        Serial.println(deviceToken);    
  }   

如果有更好的解决方案,请指导我,谢谢。

2 个答案:

答案 0 :(得分:1)

我们已经找到了大量数据使用的解决方案。 以前我们使用下面的代码获取所有json数组。

 FirebaseObject firebaseObject=Firebase.get(path_command);

消耗几个字节或Kb数据。 现在我们首先检查它是否是由额外标志对数据进行的任何更改 版。它是增量的。 我们将它存储在每个节点级别的数据库中,每次数据更新时我们需要通过递增来更改它。 现在我们需要在以下面的方式获取所有json数组之前检查版本

   int version =Firebase.getInt(version_path);
       if(version!=previosVersion)
              FirebaseObject firebaseObject=Firebase.get(path_command);

。如果我们得到版本差异,那么我们只需要获取json对象。 在此之前的一个小时内,Arduino每小时耗费大约3到5 MB,现在每小时消耗700-800 KB。我们仍然在寻找最佳的优化。 感谢。

答案 1 :(得分:0)

使用此函数Firebase.available(),它返回一个布尔值(true或false) 如果它返回true,表示数据库中发生了某种数据更改,因此您可以检索它。

但是只有在此函数之后调用上述函数时,此函数才会生效:

Firebase.stream("path u wish to monitor changes");

有关详细信息,请参阅Firebase.available()

的文档