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

问题描述 投票:1回答:2

我正在研究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);    
  }   

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

firebase arduino firebase-authentication arduino-esp8266
2个回答
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。我们仍然在寻找最佳的优化。谢谢。


0
投票

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

但只有在此函数后调用上述函数,此函数才有效:

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

有关更多信息,请阅读Firebase.available()的文档

© www.soinside.com 2019 - 2024. All rights reserved.