Comments 19
Всё это конечно красиво и увлекательно.
Но если цифры не совпадают со счетом от УК — они Ваши графики принимают для перерасчета суммы счета?
Нет, конечно. Но ведь это и не цель. Я это все делал для самоанализа, чтобы понять где именно внутри квартиры что у меня потребляется и в каком количестве.

Так или иначе УК берет в расчет цифру, которая светится на квартирном счетчике, и мои графики тут совершенно не причем. Я лишь могу сделать так, чтобы мои показания совпадали с «официальными». Если мои графики вдруг станут показывать аномальные цифры это будет сигналом мне все перепроверить.

В идеалу показания для графиков должны сниматься с тех же самых счетчиков, что ведут и коммерческий учет. Так сделано у меня для счетчиков воды. Но к сожалению подключиться к RS232 моего элекросчетчика мне не дали (хотя и не очень сопротивлялись).

Инфлюкс — терпимый выбор для time series, но я бы не делал на нём новые проекты. Уже есть VictoriaMetrics, которая "как прометеус, но для долгосрочного хранения". Язык promql можно считать уже практически индустриальным стандартом (в сравнении с любыми другими языками выбора данных), поскольку поддерживается он уже как минимум тремя крупными проектами.

Спасибо за наводку, буду знать.

Пока из того что вижу VictoriaMetrics не поддерживается в HomeAssistant, а переползать на другую систему УД только ради базы данных я не готов. К тому же после краткого гугления я не понял что есть такого в виктории, чего не умеет инфлюкс и что обязательно нужно заиметь. В любом случае в текущей связке замечания у меня к графане, к инфлюксу :)
а где же ответ на изначальный вопрос «неужели моя семья стооооолько потребляет?»?

Для того, чтобы ответить на этот вопрос, как оказалось, у меня пока еще маловато данных. Статистику по воде я собираю только 2 недели, а счетчик электричества (который SDM120/SDM220) я вообще еще не установил. К тому же эта статья больше про инструмент, нежели про собственно анализ.
Я не спец в snmp. После беглого гугления я не понял причем тут snmp к графикам в home assistant
Это пичально. Если устройство умеет отдавать показания по snmp, то можно снимать показания в любой другой мониторинг.
А раз home assistant решил придумать свой формат хранения данных, то у них есть фатальный недостаток.
Понять, простить, осознать потраченное зря время и добавить snmp и rrd в чеклист своей идеальной системы «Умного дома».

Как все сложно-то.


У самого дома стоит такая считалка. Даже с датчиками заморачиваться не стал, взял трансформатор, выковырял первичку, вместо нее пропустил один виток фазового провода, двумя резисторами подтянул напряжение с вторички до 0В-5В. Выше потребляемая мощность — выше напряжение.


Это все заходит в АЦП YL-40, а он через i2c подключен к Малине. На Малине постоянно работает питоновский скрипт, который раз в секунду опрашивает датчик, сохраняя текущее значение в виртуальной ФС, складывает эти значения, а потом раз в час высчитывает среднее арифметическое и его сохраняет рядышком с юникстаймом.


Сам 'драйвер'
#!/usr/bin/python
import smbus
import time
address = 0x48
PFC8591 = smbus.SMBus(1)
PFC8591.write_byte(address, 0x00) # set channel to AIN3 | = i2cset -y 1 0x48 0x03
i_sec = 0
mival = 0
i_min=0
mi_all=0
last_hour=0
sensor_value=0
while True:
    try:
        i_sec=i_sec+1;
        Voltage_8bit=PFC8591.read_byte(address) # = i2cget -y 1 0x48
        sensor_value=Voltage_8bit*0.019*1000 # convert 8 bit number to voltage 16.5/256 | 16.5V max voltage for 0xff (=3.3V analog output signal)
    print(sensor_value)
    last_hour=round(last_hour+float(sensor_value)/36000,2)
    if ( i_sec == 600 ) :
        mi_avg = mival/600
        mi_all=mi_all+mi_avg
#       print("Minute is GONE, average minute usage = %d" %mi_avg)
            timestamp = int(time.time())
        hr = open('/root/minute_usage','w')
        hr.write(str(i_min)+':('+str(timestamp)+'):'+str(mi_avg)+';\n')
        hr.close()
        mival=0
        i_sec = 1
        i_min=i_min+1
        if (i_min == 60) :
        ho_avg = mi_all/60
        timestamp = int(time.time())
        hr = open('/root/usage','a+')
        hr.write(str(timestamp)+':'+str(ho_avg)+';\n')
        hr.close();
        i_min=1
        mi_all=1
        last_hour=0
        mival = mival + sensor_value
        f = open('/dev/watt','w')
        f.write(str(sensor_value)+';'+str(last_hour)+'\n')
        f.close()
        time.sleep(.1)
    except IOError:
        print ("Error")

Сохраненная статистика
root@raspberrypi:/home/pi/wattmeter# tail /root/usage 
1580345799:2133.54144444;
1580349423:1672.25627778;
1580353048:1677.22319444;
1580356673:1892.79772222;
1580360296:1648.06294444;
1580363920:1928.60691667;
1580367544:1611.16177778;
1580371168:1834.11991667;
1580374792:1657.84319444;
1580378416:1864.19797222;
root@raspberrypi:/home/pi/wattmeter#

С октября 2019 (перешел на RPI Zero) этот файл занимает 32 килобайта.


Выдает все это примерно вот такой график, хотя разницы нет, могу хоть DIV'ами шириной в один пиксель выводить
image


Анализировать можно что угодно, на что хватит фантазии и знаний арифметики. Вот я даже прогноз сделал, на основе уже потребленной с начала месяца электроэнергии, с учетом разделения по зонам. Хоть в CSV скачивай и в Екселе считай.


Только вот за несколько лет я убедился, что все это детские игрушки, и к умному дому отношения не имеет никакого. Как говорил Тони Старк: эффектно, но не эффективно. Ну вот знаю я, что сегодня мы потребили 10 кВт. Что мне дальше делать с этой информацией? А ничего.


Единственный нужный с этой системы функционал — автоматический отсекатель потребителей, если нагрузка вдруг стала превышать допустимую (у меня лимит 4 кВт, у меня эта проблема стоит остро), при чем благодаря гибкости системы, я могу отключать потребителей по определенным правилам: например если бойлер недавно использовался, то отключать не бойлер, а конвектор, или наоборот, если температура в комнате относительно низкая, и бойлер недавно использовался, то отключать не бойлер с конвектором, а стиральную машину, и тд. Другой пользы я не вижу.


По поводу "а через месяц сдохнет флешка" — конечно сдохнет, если туда постоянно писать. Но только зачем? Проще промежуточные данные складывать в tmpfs, а на флешку синкать это все дело раз в час и в небольших объемах.

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

По поводу «а через месяц сдохнет флешка» — конечно сдохнет, если туда постоянно писать. Но только зачем?

Это сетап многократно рекомендован в сети, к сожалению. Мол, вот вам образ по малинку, разворачивайте его в 2 клика и все готово. А потом дохнет флешка и народ кипешует. В majordomo эту проблему с переменным успехом решали, в home assistant, к сожалению, из коробки ничего нет.

Для себя я проблему решил переходом с малинки на старый нетбук, в который воткнул ssd.

Я никогда не связывался с готовыми инструментами, предпочитая самописное, но если ВАШ инструмент не позволяет гибко настраивать место сохранения ваших данных — может быть есть смысл заморочиться с бесперебойным питанием на RPI, и хранить все часто сохраняемые данные в памяти ?


Ну вот например если ваш homeassistant хранит базу данных в /usr/share/homeassistant/database/db.sql на флешке, вы можете переименовать или удалить этот /usr/share/homeassistant/database, а потом симлинкнуть ln -s /dev/shm /usr/share/homeassistant/database таким образом фактически запись базы данных будет идти всегда в памяти. Можете зайти дальше и раз в час синхронизировать все из памяти на флешку, а при ребуте восстанавливать в память последние синхронизированные данные.


Линукс тем и хорош, что к одной задаче можно подойти с разными решениями.


Но вы должны плюс-минус понимать архитектуру системы с которой работаете, не на уровне мышкования, а на уровне "чо куда пишется".

Я даже на графики не буду смотреть, чтобы сказать где проблема.
1. Плескаться в ванной. Хочешь экономить воду, то нужен отказ от ванной и мыться только принимая душ. Причём, на время намыливания воду нужно отключать.
2. Бойлер. Бойлер греет всегда объём воды, находящийся в баке. Не вся нагретаая вода используется, но продолжает греться. Это как каждый раз кипятить полный чайник, чтобы заварить одну чашку чая, а при следующей итерации доливать чайник до полного. Решение вопроса — проточный водонагреватель.

Есть у меня бедный безработный друг, у которого потребление электричества в год за 3000 кВт*ч зашкаливает на два человека. Вот спрашивает он у меня как и почему, а потом выясняется:
— Используется электрическая сушилка для белья (хотя есть балкон и отдельная комната-сушилка). Видите ли бельё не такое нежное после естественной сушки.
— Готовят еду каждый день, в холодильник ничего не ставится и на следующий день не разогревается.
— Ну про двухразовый приём душа я молчу (тут тоже такой момент, все такие грязные после спанья просыпаются, шопиеец). И да, когда мылится воду не выключает, просто от лейки отходит.
На что я ему дал ответ, что если хочешь комфортной жизни, то нечего ныть, что много платишь за этот комфорт. Обиделся.
Ну не так, чтобы я хотел что-то экономить. Последние копейки я, слава Богу, не считаю, и вода с электричеством не стОят для меня таких уж неподъемных денег. Скорее я даже согласен с Вами на счет «хочешь комфортной жизни, то нечего ныть, что много платишь за этот комфорт». В данном случае мне реально инетересно как именно расходуется вода и электричество. Статья, вообще-то, про инструмент, а не про экономию.

Насчет воды согласен. Насчет бойлер vs проточный — не все так просто как кажется на первый взгляд.


Прежде всего, физику не обманешь, и чтобы проточный водонагреватель, водонагревал наравне с бойлером — он должен потреблять СРАЗУ И МНОГО. По своему опыту скажу, трехкиловаттный проточник — унылое гогно. Так, небольшую струю человеческой температурки оно сделает, но если побольше — там уже другие мощности. Шесть киловатт к примеру. Но какие могут быть 6 киловатт в домах, где на стандартное подключение ставят 16А автомат, а это аж 3.5 кВт ?)


Даже если мы разберемся со своей пиковой мощностью в линии — проточник на больших объемах все равно имеет меньший КПД, потому что тратит избыточную мощность на моментальный разогрев воды, а бойлер нагревает ее пусть дольше по времени, зато затрачивая меньшую мощность.


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


Благодаря этой самой инертности, можно играться с экономией электроэнергии, включая бойлер только в ночное время суток при условии наличия двойного тарифа, или только в дневное время при условии наличия солнечной панели. Такой себе, аккумулятор энергии. На семье из трех человек, с суммарным посещением душа пять раз в день, мытьем посуды, и разным графиком жизни, экономия на таком алгоритме составляет где-то 7-10 гривен в сутки, а это в районе 10 баксов в месяц. Это немного, но в случае с проточником так не получится.


Так же будет труднее его перевести на альтернативную энергетику. В случае с бойлером — он сам себе аккумулятор, мы можем взять тупую солнечную панель, повесить туда тупой инвертор на 220В\2кВт, и воткнуть туда напрямую тупой бойлер, и больше никаких механизмов не потребуется, бойлер сам будет брать столько сколько ему нужно, и все что мы получим — это на несколько градусов прохладнее воду к утру. В случае с проточником — нам надо искать очень мощный инвертор, нам надо либо ставить аккмуляторы (в случае с автомобильными аккумуляторами, нам понадобится 9 штук таких) с проводами толщиной в палец, либо хитрожопо переключать проточник между инвертором и существующей сетью если солнечная панель вдруг стала выдавать меньшую мощность. Дорого. Геморрно. Опасно.


Еще у проточника меньший ресурс, что тоже немаловажно, если уж разбираться в экономии на спичках. Что в принципе не удивительно, это еще одна плата за скорость нагрева.


А еще у моего бойлера — два тена с двумя незамысловатыми тумблерами, так что при желании не составит труда коммутировать их раздельно в зависимости от ситуации в доме: режим купания — оба включены; режим отсутствия дома — один включается на 15 минут раз в час, чтобы просто поддерживать комнатную температуру воды.


Во простыню накатал ))))

Даже если мы разберемся со своей пиковой мощностью в линии — проточник на больших объемах все равно имеет меньший КПД, потому что тратит избыточную мощность на моментальный разогрев воды

WTF???
Q = C*m*(t2-t1) — учебник физики, 7 класс.
И как ты это Q потратишь — «моментально» или «растянуто в бойлере» этой части Вселенной глубоко гадить. Бойлер в 99,999% случаев (то есть в быту В_С_Е_Г_Д_А) будет иметь общий КПД на нагрев именно воды МЕНЬШЕ чем проточник по очень простой причине. Этот процесс не «многовенный», а сильно растянут по времени, за все время нагрева часть энергии тратится не на воду, а на повышение температуры вокруг бака. Ибо не изобрели идеального теплоизолятора, и часть тепла конвективно и излучением уходит из бака в помещение. 0,001% случаев оставляем для варианта, что атмосфера вокруг бойлера имеет температуру больше 100 градусов.

Проточник имеет гораздо больший ресурс, так как вода в нем не нагревается больше 44-45 градусов, а в накопительном это обычно больше 65 градусов. Чем выше температура, тем быстрее идет процесс солеобразования на ТЭНе, а чем больше соли — тем хуже теплопроводность и тем быстрее он сдохнет.

Все описанные плюсы (тпелоаккумулятор) — только для частного дома. В квартирах современных, где ввод 15 кВт, воду отключают раз в году — использовать только проточник (на 8 кВт минимум). Накопительный бак в таких квартирах — это явный факап на стадии ремонта.
Читая начало статьи, подумал что почасовой, посуточный и ежемесячный будут на одном графике для наглядности
Only those users with full accounts are able to leave comments. Log in, please.