Кажется, я пофиксил проблему с подсчетом расхода воды. Заценить можно тут: https://github.com/lan143/navier/commit/7c1c6647900e8ee8b0bde137e6d8f843135dd3c0
Собственно, как я это сделал. Я решил, что зачем изобретать велосипед, пойду да посмотрю как это делает Ватериус. Благо он опенсурс. В коде его конечно черт ногу сломит. Особенно не очень хотелось курить даташит по attiny85 чтобы понять что там происходит (ибо по коду там вовсю всякие регистры процессора юзаются). Поэтому я решил погуглить, вдруг есть какое-то описание его работы на хабре. И таки я нашел, вот эту статью: https://habr.com/ru/articles/418573/ Судя по всему она была написана еще на первых версиях Ватериуса, когда он не поддерживал всякие намуры, и реализация считывания данных с счетчика там просто гениальная: просто каждые 250 мс проверяем состояние пина. Если он притянут к земле, то еще раз проверим через 250 мс (вдруг словили наводку), и если он так же притянут к земле, то считаем что замкнулся геркон в счетчике и плюсуем 10 литров. Блин, почему я до такого не додумался) Я начал изобретать с прерываниями и все такое. Случился короч оверинжиринг.
Дальше читать не стал, идея понятна, осталось реализовать. Я сразу доработал идею, что когда мы плюсуем 10 литров, после блокируемся до следующего поднятия пина на плюс питания. И тут возникает интересная ситуация: если вдруг счетчик остановился в момент когда геркон замкнут, и потом случилась перезагрузка контроллера, то после загрузки флаг блокировки сбросится и мы опять приплюсуем 10 литров лишние. И так будет каждую перезагрузку. Сначала я подумал, что ну чо там, редкое событие. Но, когда отлаживал код, у меня счетчик как раз встал на показании 0 литров, и каждую перезагрузку у меня было +10 литров)) Штош, надо пилить сохранение флага))
Решил сделать по простому: когда записываем показания в кольцевое хранилище, к текущим значениям выставим 1 самый левый бит в 1, в случае если есть блокировка. Затем, когда блокировка была снята, запишем еще раз значение в кольцевое хранилище, но на этот раз без крайнего бита в 1. Далее при загрузке мы можем восстановить информацию о блокировке и не делать +10 литров. Идеально вроде. Это я собственно реализовал, проверил, все отлично работает.
Кто-то может сказать, что, ну мол, ты ж теперь сможешь меньше кубов воды хранить. Но, спешу вас обрадовать - для хранения показаний у меня используется переменные типа uint32, а это 32 бита. Один бит мы отдали под флаг блокировки, получается что для показаний у нас осталось 31 бит. Максимальное значение, что мы сможем туда сохранить, будет 2 в 31ой степени - 1. А это: 2147483647 литров, или 2147483 кубометров. Что-то мне подсказывает, что такого хранилища хватит не только до конца жизни esp32 (в которой флешка сдохнет спустя 100к перезаписей) но и до конца моей тоже.
Так вот, новая версия задеплоена, будет наблюдать. Но я очень надеюсь, что все будет в порядке и этот гештальд можно будет считать закрытым. Ладно, пойду спать, до связи)
Ну что, похоже я таки баг устранил. Сегодня проверял утром, потом днем, и вот сейчас опять проверил - показания контроллера 1 в 1 совпадают с показаниями счетчика. Похоже, что это победа :) Я сейчас еще закинул небольшие правки, которые покрывают некоторые граничные ситуации про которые сразу не вспомнил.
Еще вот сегодня СКАТ и контроллер повесил на стену в щитке. Сначала сделал разметку и просверлил отверстия. Делать это было конечно не очень удобно, там толком не развернешься, всего 15 см внутри из доступного пространства. Но кое как я это сделал, и с виду как будто ровно.
Затем навесил СКАТ и прикрутил рейку, на рейку поставил контроллер. А за ними потянулся вот такой не красивый клубок проводов и кабелей. Я попытался кое как его распутать (3е фото), но идеальный кабель менеджмент я устрою уже наверное завтра. А все потому, что завтра должен будет прийти кросс бокс, в котором я собственно и сделаю разводку. И думаю с этим щитком на время можно будет закончить.
Еще сегодня забрал герметик с озона, думал, что ну вот наконец-то проклею вокруг ванны, а цвет оказался совсем не такой. Заказывал бежевый, и даже на упаковке совсем другой цвет, а получил по итогу какой-то цвет оранжевого поноса.
Сделал один шовчик тестово, но чет совсем не нравится. Завтра когда схватится думаю буду его сдирать нафиг. А этот герметик думаю пойдет на герметизацию каких-то мест, которые не будут на виду. Все же выкидывать его жалко.
Заказал Церезит, цвет Жасмин. Мы помню его вроде смотрели когда затирку выбирали, и вроде как он ниче так был. Поэтому взял один тюбик на пробу. Если то самое, и тюбика пройтись по ванне не хватит, то потом еще дозакажу и доделаю.
А щаз занимаюсь тем, что пытаюсь отодрать остатки затирки с пола. Она собака фиг чем смывается. Уже купил спец смывку от церезит, как раз типо для эпоксидной затирки которой больше суток, но ее даже она не берет. Сейчас тру металлической губкой вместе со смывкой, вроде что-то получается, но пока не понятно что. Если не поможет, то наверное придется перейти на более жесткий абразив, наждачку например. А там может и до алмазных дисков дело дойдет 🙂