Мониторинг расхода электроэнергии
05.05.2018
Поскольку в хозяйстве огромное количество разнообразных потребителей электричества, то в какой-то момент встаёт творческий вопрос о том – куда же столько уходит? Ежемесячные счета выглядят грустно, но что ещё хуже – с каждым месяцем грусти прибавляется.
Конечно, скорее всего от того, что я узнаю куда именно ушло столько электричества – мне лучше не станет, но лучше знать точно, чем расстраиваться от того, что не знаешь.
Простым вариантом является установка n-ного количества стандартных счётчиков, которые будут считать и показывать траты. Для начала я пошёл именно по этому пути. Установил на основном вводе три однофазных счётчика ABB. У них есть прекрасная функция – импульсный выход. Если собирать с этого выхода данные, то можно в любой момент времени (хотя и с приличной задержкой) видеть текущее распределение мощности. И конечно рисовать графики.
Но в данном случае я смог видеть только распределение нагрузки по фазам, а не по потребителям. Познавательно, но не богато. Можно было бы увеличить количество счётчиков, но они занимают очень прилично место в магистральном шкафу и столько, сколько бы мне хотелось – туда всё равно не влезло бы. Ну и в целом ветвь тупиковая. Хотя я пару раз уже чуть было не собрался.
А тут попалось мне на днях некое произведение некоего американца, Craig Jensen. Устройство он назвал PiPowerMeter и похоже, что выпускает его штучными экземплярами. Устройство собрано на базе Cirrus Logic CS5463. В целом, набор на 32 порта съёма данных мне обошёлся в $145 (без датчиков и без RPi). Датчики продаются отдельно где-то по 270 рублей за штуку. RPi, допустим, ещё 3000 рублей. Итого вроде не очень много - $10/порт.
Датчики ставятся те, которые преобразуют амперы в миллиамперы. Этот комментарий оставляю из-за того, что как выяснилось - более популярны в этом мире датчики, которые преобразуют амперы в вольты. Они явно не подойдут. Я остановился на модели SCT013.
В целом достаточно внятная документация и описание присутствует на сайте разработчика. https://github.com/crjens/PiPowerMeter
Небольшие комментарии, которые не удалось подчерпнуть из документации.
1. Показания датчиков считываются последовательно и очень небыстро. Каждый датчик считывается чуть больше 3 секунд. Поэтому для опроса 32 датчиков потребуется больше 1.5 минут. Немного сократить время можно, но не сильно.
2. Есть отдельная страница realtime.html, которая позволяет временно отключить не существенные на данный момент датчики и сосредоточиться на мониторинге одного или нескольких конкретных. Это очень удобно, но нужно понимать, что за время этого мониторинга данные с оставшихся датчиков будут полностью утеряны. Как только вы закрывается данную страницу – остальные датчики снова активируются.
Есть некоторые сложности в установке. Инструкция по установке есть на сайте, она простая и внятная. Сложности в первую очередь они, видимо, связаны с тем, что я раньше не сталкивался с данным серверным решением – вся система написана на JavaScript и работает на базе Node.js. Неожиданно, но почему бы и нет. Но самой неожиданной идеей является то, что Крейг так написал инсталлятор, что его можно запускать ТОЛЬКО из-под юзера ‘pi', только с bash и устанавливать систему можно только в каталог /home/pi/app. Крайне странный поворот и куча потерянного времени на то, чтобы понять этот нюанс.
Важным моментом также является то, что на этом RPi у вас не должно быть ничего, что пытается работать с GPIO. У меня по умолчанию запустилась пара скриптов, которые следили за статусами GPIO и из-за них не запускалась система Крейга.
Достаточно аккуратно сделана система отладочных сообщений, но по умолчанию они никуда не пишутся. Чтобы их увидеть - нужно подправить параметры forever в скрипте init.d/node-server.sh
После установки стоит не забыть поправить в файле reader.js дефолтные установки на сеть 50Гц. Система и сама определяет частоту сети, то на это уходит достаточно большое время при каждом старте.
Можно слегка сократить время, которое требуется на снятие показаний с каждого порта. У меня получилось сократить его до 1.1 секунды. Не очень мало, но всё равно это почти в три раза быстрее оригинала. Не знаю насколько я потеряю в точности, но по первым тестам – не изменилось вообще ничего. Для этого в reader.js в районе функции Reset переписываем значение регистра 5 (cycle count) с 4000 на 500.
write('4A0001f4', 'cycle count change');
Ну и, конечно же, результат это в первую очередь графики, которые можно попытаться осмыслить. Конкретно этот график не судите строго - это общий, который даёт только очень приблизительную информацию.
А здесь, для примера, отдельное здание и распределение его нагрузки по фазам. Это для владельца уже даёт вполне внятную информацию, которую можно пытаться осмыслить.
В целом решение могу очень порекомендовать. К текущему моменту оно уже продержалось около 5 месяцев и в общем работает как часы. Никаких нареканий к нему нет. Можно использовать для оценки мгновенного потребления (с минимальной задержкой в 2-3 секунды для обновления информации по трём фазам) или для оценки потребления в каком-то масштабе времени, посредством рисования графиков.