通过仅发送更改的值来减少 firebase 延迟?

Reducing firebase latency by only sending changed value?

我正在使用 Wemos D1 Mini (Arduino) 将传感器数据发送到 Firebase。这是我发送的一个值。我发现这会使程序变慢,因此传感器无法像发送数据那样快速获取数据(这很明显)。

无论如何,当此值更改为 属性 时,我只想 将值发送到 Firebase。这是一个 int 值,但我不确定如何解决这个问题。我应该使用监听器吗?这是我的代码的一部分:

int n = 0; // will be used to store the count
Firebase.setInt("Reps/Value", n); // sends value to fb
delay(100); // Wait 1 second and scan again

我希望传感器可以每秒扫描一次,确实如此。 但是 在这个 rate(双关语意)值每秒被推送到 FB。这会将扫描速度减慢到每 3 秒一次。当 n 更改其值时,如何仅使用 firebaseSetInt 方法?

来自远程数据库的专业使用,您应该采用滑动平均方法。为此,您可以创建一个圆形缓冲区,其中包含 30 个传感器值并计算平均值。只要值在时间 0 记录的平均值范围内 +/- 3%,您就不会更新。如果该值高于或低于您发送到 Firebase 并设置新的 time0 平均值。根据您的精度和需求,您可以减轻系统的压力。
恕我直言,只有电流断路器或流量切割(液体)等生命安全装置必须是实时的,所有业余爱好应用程序(如测量风速、加热等)都很好设计有 20 - 60 秒的间隔。
顺便说一句,事件监听器就是这种方法,如果它不正常就做点什么。如果您有一个固定的目标值作为参考,则检查 +/- 差异会容易得多。如果 FB 的定价发生变化,这对开发者来说将是一个问题 - 所以请提前计划。

您可以在每次读取每个新值后检查该值是否已更改,只需添加一个简单的条件语句即可。

int n = 0; // will be used to store the count
int n_old; // old value saved to fb
if(n!=n_old)   {  //checks whether value is changed
   Firebase.setInt("Reps/Value", n); // sends value to fb
   n_old = n;  // updates the old value to the last updated
}

delay(100); // Wait 1 second and scan again

或者如果你想采用宽容的方法,你可以进一步做这样的事情:

int n = 0; // will be used to store the count
int n_old; // old value saved to fb
int tolerance = 3;  // tolerance upto 3%
if(abs((n-n_old)/((n+n_old)/2))*100 > tolerance)   {
   Firebase.setInt("Reps/Value", n); // sends value to fb
   n_old = n;  // updates the old value to the last updated
}

delay(100); // Wait 1 second and scan again