База данных в home assistant и сервер умного дома
В Home Assistant есть конечно такая одна полезная функция это возможность строить разные графики, по умолчанию они там для всех объектов всех параметров добавляются, данные сохраняются в базе, конечно делают так, что можно поменять на другую базу, а не которая по умолчанию используются, но в этом нет никакого смысла, потому что та которая есть она нормально работает, если хочется конечно данные куда-то оттуда извлечь или там использовать в других каких-то системах, то это другая тема и конечно можно так заморочиться, но по большому счёту если хочется просто посмотреть как менялись значение, какой-то вывод сделать из этого, то довольно интересно будет это сделать в Home Assistant.
Я у себя сделал совсем по-другому изначально, я уже очень давно веду данных всех значений, всех их изменений, на внешнем хостинге, ну потому что во-первых это, хоть и дорого достаточно потому что хостинг он, ну это платный хостинг, там получается где-то 300 руб в месяц, то есть в год получается почти 3 тысячи и даже больше, ну там смотря как оплачивать, если за весь год сразу, то чуть дешевле, и в итоге там достаточно много места, там делается резервная копия этих данных и можно особо не переживать, единственный минус что нужно подключение к интернету, чтобы туда данные передавать, ну и нужно придумать как это делать, то есть у меня сделано таким образом, что все устройства и все их параметры они прокодированы и есть отдельный скрипт, который например через zegbee2mqtt получает описание этого устройства со всеми там его значениями и дальше каждый атрибут отдельно там перекодирует в определённую систему и отправляет его на этот внешний сервер, все эти значения.
Это удобно потому что я использую там возможность через Google Chart строить разные графики сделал такую страничку где можно вывести четыре графика, ну там можно и меньше при желании и можно указать период за который эти и можно также указать в какой там детализации выводить, то есть допустим по секундам или в минутах и в часах, до этого было ещё в месяцах, сделал дополнительно совсем недавно в неделях, потому что много лет уже ведёт статистика иногда нужно как-то усреднить значение чтобы не так было мелко как дневное, месяц слишком крупно, но видимо скоро уже придётся сделать назначение по годам, но большого смысла в этом нет, например по месяцам удобно смотреть изменение температуры, среднею, допустим в комнатах, на улице, у меня тоже данные сохраняются с погодного сервера внешнего и это удобно, я даже сделал так что у меня котировки акции сохраняются в этой базе для некоторых самых интересных, то есть в принципе можно для чего угодно использовать.
Также сделал возможность выводить график, среднее значение, минимальное, максимальное, а если нужно будет, и ещё есть там всякие дополнительные такие фишки, так допустим показывать дельту, то есть изменения с предыдущего значения, например если по месяцам тогда у меня будет так как обычно в графиках потребления воды или электроэнергии строится, что в этот месяц потрачено столько-то, вот также у меня выводится в этом графике.
И ещё такая фишка есть это суммарно я могу посчитать потребление электроэнергии, я сделал таким образом, что каждое изменение параметра оно там с пересчётом на время и на потребляемую мощность может просто приплюсовать за этот период потребление, например у меня есть лампочка, она там потребляет 20 Вт, если она горела там 1 час значит 20 Вт будет записано в этой базе, если допустим при выключении она горела полчаса, значит 10 ват будет записано и таким образом я могу просто суммарно посмотреть сколько всего было потребленно этой лампочной, то есть он когда во включенном режиме, соответственно умножается на единицу и записывается если, она в выключенном режиме, то умножается на ноль и соответственно не приплюсовывается, это удобно.
Есть ещё более хитрый способ когда допустим я знаю потребление в амперах, я также указал там у себя в базе, что надо умножать на 230, то есть вольт фактически, и у меня получается потребление уже в ватах, то есть это тоже очень удобно таким образом легко пересчитывать.
Ну и также я могу в базе посмотреть просто количество изменений, то есть если допустим значение отправляется раз в минуту или чаще, я могу легко посмотреть сколько было отправок этого значения, то есть например если свет включился и выключился, то это две отправки, это позволяет например какой-нибудь датчик взять, например датчик открытия, и посмотреть сколько он за месяц сработал и удивительно получается что многие датчики открытия которые я использую например от Xiaomi они уже там по 10.000 отправок сделали и батарейка даже не села, а датчики которые на радиочастоте у меня на 433 МГц работают совсем очень давно, то они там 100.000 уже отправок сделали и всё ещё работают от батарейки, там она покрупнее там CR2450, но при этом всё равно могут делать нормально качественную передачу информации в систему умного дома.
Ну и в Home Assistant тоже конечно это всё можно настроить единственное получается, что база она достаточно быстро растёт и многие либо просто перестают записывать, например когда на raspberry использовал я ещё SD карту, то это была собственно одна из главных причин почему SD карта довольно быстро переходила в режим read-only и всё, фактически уже не работала, это выглядит конечно странно когда она переходит в такой режим вроде заходишь всё работает там всё сохраняется, перезагрузился и все старые значения остались, все файлы старые, то есть всё она по сути только сохраняет это где-то в кэше, в памяти, а в реальности на карту записать уже не может, ну и понят если карта большая, она конечно подольше там поживёт, но всё-равно, если она выйдет из строя это будет ещё обиднее, чем допустим если выйдет маленькая и дешёвая карта.
Если запись этих значений в базу выключить, то тогда не будет никакой статистики, это тоже не очень интересно, я например у себя все логи выключаю сразу, там системные журналы всякие, в Home Assistant, в Zigbee режим там есть тоже только ошибки записывать, в OpenHab я сразу выключаю всё логирование, потому что он тоже пишет все изменения всех событий, это иногда бывает очень много данных просто они даже не в базу получается записываются, а в текстовый файл и конечно такой поток просто любую карточку там и во-первых забьёт её, а во-вторых она конечно быстро ресурс свой исчерпает.
Поэтому люди думают как там SSD диски подключать и там в общем-то другие решения, есть такие переходники на EMMC память, которые в SD карту, в разъём, втыкаются, но это всё конечно такие костыли лучше во-первых действительно ограничить объём записи, есть там утилита такая в линуксе, которой легко проверить какие там приложения и сколько пишут, ну я когда всё выключил, то практически очень мало, что записывалось.
В Home Assistant есть тоже возможность настроить этот мониторинг, то есть чтобы не всё записывалось во-первых, и у меня сделано так что в основном это 7 дней только пишет и запись в базу происходит только раз в минуту, ну наверное запись сама она особо не влияет на ресурс, потому что она всё равно записывается там, хоть раз в секунду, хоть раз в минуту, это большой разницы нет, единственное что когда например сервер перезагружается, данные за эту минуту просто могут быть потеряны, потому что они не успели записаться но это не очень критично, потому что особо ничего так быстро не меняется и в Home Assistant, например если используется zigbee2mqtt, и вообще там сервис MQTT, то там есть такой признак retain, то есть эти значения они сохраняются в самом mqtt, это тоже сильно создает большой трафик дополнительно, это всё записывается тоже в базу и конечно на это тоже надо обратить внимание если много таких значений сохраняется и они постоянно обновляется, постоянно с таким признаком записываются, то это тоже такой дополнительный источник данных для того чтобы SD карта вышла быстрее из строя.
Поэтому Home Assistant конечно подтягивает эти значения по умолчанию и ему сами значения из базы старые особо не нужны, он никогда оттуда не берёт их при включении, например у меня система которую я использую самописную, она берет данные последние из базы, загружает для того чтобы там не пришлось, например, показывать что это значение ещё не поступило, а в Home Assistant это часто бывает при перезагрузке просто пишет либо старое значение, которое из MQTT было подтянутого, либо пишет что значение отсутствует и это может быть очень долго прямо, там час например, пока какое-то устройство не отправит значение, в таком режиме светится и например когда делаешь какой-то пользовательский дашборд, то там просто может тоже это значение отображаться криво и там в общем некрасиво пишет, что там значения нет, или там это не числовое значение,и там какая-нибудь схема, ну допустим какой-нибудь элемент на дашборде он неправильно отображается, или вообще не отображается.
В таком режиме у меня например довольно много разных датчиков и устройств через MQTT около 50 устройств у меня заведено, ну и понятно что у каждого устройства есть свои ещё там отдельные сенсоры, например датчик температуры влажности, он записывает температуру, влажность, ещё если это датчик Aqara он ещё и давление пишет, ещё качество связи отдельный параметры у меня записывается, ещё записывается значение напряжения батарейки и в процентном измерении оставшийся заряд, то есть очень много таких идёт данных и это только этот датчик, причём он довольно сильно ограничивает свой трафик, свой свою передачу, а например умная розетка она себя никак не ограничивает, у неё там нет задачи экономить батарейку и она питает от сети, и она шлёт там каждые 10 секунд огромный поток данных, которые тоже меняются, там и напряжение в сети, и текущее потребление там с точностью до сотых может присылать, и в общем там и ток и в ватах потребление, и ещё разные параметры другие, которые у неё есть у этой розетки, и также и качество связи, в общем очень много разных параметров это тоже всё сохраняется в базу и в итоге получается у меня 7 дней это где-то 500 Мб занимает места, ну и 7 дней конечно маловато, то есть например не посмотреть там допустим, понедельник к понедельнику, то есть в таком режиме, или например нельзя сравнить там месяц к месяцу изменения, а вообще хочется конечно целый год смотреть, ну тогда есть выход либо э использовать SD карту большого размера и хранить на ней эту всю информацию, ну тогда нужно уже быть готовым к тому что SD карта рано или поздно выйдет из строя, ну а я использую встроенную в Orange Pi 3 EMMC память, она понадёжнее вроде как должна ну и из-за этого конечно сильно получается ограничен в размере этого лога для мониторинга у своего умного дома.
Автоматизация в умном доме должна быть полезной и создавать дополнительный комфорт, но иногда всё идет не так… Причины этого, и как всё настроить смотри на моём канале.
Discuss about post