我正在研究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);
}
如果有更好的解决方案,请指导我,谢谢。
答案 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()
的文档