Уменьшить задержку в firebase, только отправив измененное значение? - PullRequest
2 голосов
/ 06 апреля 2020

Я использую Wemos D1 Mini (Arduino) для отправки данных датчика в Firebase. Это одно значение, которое я посылаю. Я обнаружил, что это замедляет работу программы, поэтому датчик не может получать данные так же быстро, как отправляются данные (что отчасти очевидно).

В любом случае, я хочу отправить значение для Firebase только , когда это значение изменило свое свойство. Это значение int, но я не уверен, как go обойти это. Должен ли я использовать слушателя? Это часть моего кода:

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

Я надеялся, что датчик может сканировать каждую секунду, что он и делает. Но с этой скоростью (каламбур предназначен) значение передается каждую секунду в FB. Это замедляет сканирование каждые 3 секунды. Как я могу использовать метод firebaseSetInt, только когда n меняет свое значение?

Ответы [ 2 ]

1 голос
/ 07 апреля 2020

Вы можете проверить после каждого чтения каждого нового значения, было ли это значение изменено или нет, просто добавив простой условный оператор.

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

Или, если вы хотите go для подхода с допуском, в дальнейшем вы можете сделать что-то вроде этого:

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
1 голос
/ 06 апреля 2020

Исходя из профессионального использования удаленных баз данных, вы должны go для скользящего среднего подхода. Вы делаете это, создавая круговой буфер с допустимыми значениями 30 датчиков и вычисляя среднее значение. Пока значение составляет +/- 3% от среднего значения, записанного в момент времени 0, вы не будете обновлять. Если значение выше или ниже, вы отправляете в Firebase и устанавливаете новое среднее значение по времени0. В зависимости от вашей точности и потребностей вы ослабляете нагрузку на системы.
Imho, только безопаснее, чем прерыватели тока или резка потока (жидкости), должны работать в режиме реального времени, все хобби-приложения, такие как измерение скорости ветра, нагрев и т. хорошо спроектирован с 20 - 60 сек c интервалами.
Кстати, слушатель событий - это такой подход, просто сделайте что-нибудь, если это не в норме. Если у вас есть фиксированное целевое значение в качестве ориентира, гораздо проще проверить разницу +/-. Если цена FB изменится, это будет проблемой для разработчиков - так что планируйте заранее.

...