【问题标题】:Arduino consuming lots of data from firebaseArduino 消耗大量来自 firebase 的数据
【发布时间】:2017-03-28 07:21:28
【问题描述】:

我正在从事 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


    【解决方案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。我们仍在寻找最佳优化。 谢谢。

    【讨论】:

      【解决方案2】:

      使用此函数Firebase.available() 返回一个布尔值(真或假)。
      如果返回true,表示数据库发生了某种数据变化,可以找回来。

      但是这个函数只有在这个函数之后调用上面的函数才有效:

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-10-18
        相关资源
        最近更新 更多