Да, жаль, что тема остановилась на полпути. А я так ждал результата.
Недождавшись, реализовал у себя такой алгоритм работы с счетчиками воды на базе МегаД.
В основе лежат следующие способы получения и обработки данных:
1. МегаД сам сообщает MajorDoMo, что на вход пришел импульс от счетчика. Метод в MajorDoMo при этом просто делает приращение свойства, в котором хранится общее число импульсов счетчика за все время работы. Таким образом получаем по сути общие показания счетчика. Одновременно обновляются пара других свойств, в которых хранятся общий расход в литрах и м.куб.
2. Метод в MajorDoMo раз в час делает запрос к МегаД, получает количество импульсов от счетчиков за час и сбрасывает (обнуляет) внутренний счетчик МегаД. Значения сохраняются в свойство, имеющее историю значений (для графика почасового расхода воды). Также каждый час идет подсчет общих показаний счетчиков на основе данных из базы данных. Т.е. имеется два варианта общих показаний счетчика, которые в идеале должны быть равны. Но бывает, что появляется расхождения, и тогда приходится корректировать показания вручную.
3. Раз в сутки вызывается метод, который делает выборку по базе данных и сохраняет значение суточного расхода в свойство, имеющее историю значений (для графика суточного расхода воды). В этом же методе делается проверка на последний день месяца - если месяц закончился, то сохраняется значение месячного расхода.
Про подсчет оставшегося времени до следующей поверки счетчиков, или перевода расхода воды в рубли, даже не говорю - это довольно просто.
Конечно, такой алгоритм имеет свои точки отказа. Но меня пока и в таком виде устраивает. Желательно бы еще сделать проверку на наличие в базе предыдущих значений суточного и месячного расхода перед записью в нее текущего значения, чтобы не было пропусков.
А если стремиться к идеалу, то надо вообще делать аппаратный логгер со встроенной энергонезависимой памятью для истории значений и батареей на случай отключения электричества. Но как по мне, дак это уже слишком.
