dontsovcmc / waterius

Передача показаний воды по Wi-Fi. Watermeter Wi-Fi transmitter.
https://waterius.ru
GNU Lesser General Public License v3.0
559 stars 110 forks source link

Подозрение, что не считает при отправке по Wi-Fi #121

Closed dontsovcmc closed 4 years ago

dontsovcmc commented 4 years ago

Дмитрий написал тест и предполагает ошибку: "У меня цикл на 100 замыканий. Перед включением цикла всё по нулям. Запускаем... В середине примерно отправляем данные. Ждем окончания цикла. Отправляем данные. Затем складываем два расхода, именно расхода. Получается 96-97 раз. Если не передавать, то честная сотня."

Надо бы воспроизвести.

/*
 * Скетч для управления реле с помощью ардуино
 * PIN_RELAY содержит номер пина, к которому подключено реле, которым мы будем управлять 
 * Для изменения периода срабатывания реле нужно изменить параметр функции delay(): поставив 1000 миллисекунд, получим 1 сек задержки
 * 
 */

#define PIN_RELAY 5               // Определяем пин, используемый для подключения реле

// В этой функции определяем первоначальные установки
void setup()
{
  pinMode(PIN_RELAY, OUTPUT);     // Объявляем пин реле как выход
  digitalWrite(PIN_RELAY, HIGH);  // Отключаем реле - посылаем высокий уровень сигнала
}
void loop()
{
  int i = 0;                      // Начинаем отсчет с нуля
  while (i < 100){               // Количество циклов
    i++;                          // Прибавляем каждый цикл единицу
  digitalWrite(PIN_RELAY, HIGH);  // Отключаем реле - посылаем высокий уровень сигнала
  delay(1000);                    // Задержка в мс
  digitalWrite(PIN_RELAY, LOW);   // Включаем реле - посылаем низкий уровень сигнала
  delay(1000);                    // Задержка в мс
  }
exit(0);                          // Останавливаем цикл после заданного количества циклов
}
dontsovcmc commented 4 years ago

Требуется тестирования. Должны считаться.

dontsovcmc commented 4 years ago

На версии 0.9.10 не воспроизводится. Теперь можно делать любые тесты на Питоне: https://github.com/dontsovcmc/waterius/issues/121 Обертка для Ватериуса скоро будет в master

dontsovcmc commented 4 years ago

Ватериус может не посчитать очень короткий импульс, если пользователь нажмет кнопку:

Ватериус ждет когда вы отожмете кнопку после нажатия. Это пауза и она может достигать 100-200мс. Даже если быстро нажимаете. И эти 100-200мс прибавляются к замыканию реле: т.е. реле замкнулось, ватериус ждет подтверждения замыкания через 250мс, а вместо этого нажимается кнопка: но реле то разомкнется через 300мс, поэтому ватериус после паузы кнопки выходит из спячки и видит, что реле не замкнуто - т.е. нет импульса. вот минус показание.

Тест:

  1. вручную нажимать кнопку: почти всегда 1 импульс теряет
  2. автоматически выходить на связь: нет ошибок