Думаю, каждый современный человек хоть раз задавался вопросом: ну сколько же можно оплачивать такие ломовые счета за коммуналку?! Вот и я — не исключение. Свет, газ, отопление, вода, квартплата, лифт, вывоз ТБО и т.д. и т.п.

Одной из причин (далеко не последней) при создании приложения BARY явилась возможность сбора статистики, анализа и сокращения потребления энергоресурсов. Европа уже давно перешла в режим тотальной экономии, думаю нас эта участь стороной не обойдет. Поэтому подготовиться к этому заранее — лишним точно не будет.

Предлагаю рассмотреть, как получилось оптимизировать расходы на электроэнергию вместе с BARY: Умный дом.

Начинаем начинать: кондиционер и тёплые полы


Первой оптимизацией расходов на электроэнергию стало наведение порядка в использовании тёплых полов и кондиционера. Даже без детального анализа было ясно, что потребляют они немало.

Сегодня только ленивый не писал про профилактику вирусных инфекций. Но, все же, повторенье-мать ученья. Залогом здоровой противовирусной погоды в квартире является температура 18-24 С, влажность 40-60%, а также — регулярные проветривания.

У меня же в летнее время кондиционер практически не выключался. В зимнее время — то же самое было с тёплыми полами. В момент отсутствия хозяев в доме кондиционер выключался лишь изредка (не хотелось возвращаться в душное помещение), а тёплые полы — никогда. Счета за все это дело были просто космические, а температура — далека от идеальных параметров. Выключать все вручную перед уходом как-то не получалось: то было некогда, то просто забывалось.

У большинства бытовых кондиционеров нет выносных датчиков температуры воздуха (у меня как раз такой), т.е. они не точно обеспечивают заданный температурный режим. Зато их можно включать по любому внешнему датчику при достижении верхнего порога температуры и выключать — при достижении нижнего. Это и стало моей первой автоматизацией.

На деле выглядит так: задаётся нижний порог 24,0°C и верхний — 24,5°C. Как только в квартире температура поднимается выше 24,5°C, кондиционер включается и работает до тех пор, пока температура не опустится ниже 24,0°C. Чтобы не получилось так, что кондиционер включается и выключается ежеминутно, задаётся условие на минимальное время работы и отдыха. У меня это 10 минут. Значение подбирал эмпирическим путем. На практике же температура всегда находилась в указанном диапазоне.

В BARY это выглядит так:


Рис. Правило включения кондиционера

Думаю, стоит более подробно остановиться на том, что делает правило, показанное в примере:

  • Состояние кондиционера не изменялось за последние 10 минут;
  • Режим охраны выключен;
  • Кондиционер выключен;
  • Режим сна выключен (в ночном режиме используется другое правило);
  • Температура в гостиной или на кухне превышает значение, заданное в этих комнатах (у меня студия, поэтому использую по датчику в каждой комнате. В качестве значений можно использовать как числовое значение, так и переменные из настроек зон и комнат);
  • Датчик движения на кухне не фиксирует движение (этот датчик использует жена, т.к. не любит, когда на неё дует кондиционер);
  • Энергопотребление водонагревателя отсутствует (он очень прожорливый, и в момент его работы лучше ничего тяжёлого не включать).

С этого момента потребление кондиционером электричества сократилось в несколько раз. Для того, чтобы кондиционер не работал вхолостую в момент отсутствия хозяев, в BARY была сделана виртуальная кнопка, статус которой присутствовал в автоматизации на кондиционер («Охрана» из примера выше). Такая же виртуальная кнопка была на ночной режим («Сон» из примера выше), которая также учитывалась в отдельном правиле автоматизации и включала кондиционер в максимально тихом режиме. Поначалу эти кнопки нужно было активировать вручную.

Решение же на автоматизацию нашлось в виде экосистемы Apple. Была реализована связка моих устройств с Homekit, а также приобретен Apple TV. С его помощью можно реализовать работу правил автоматизации в Homekit (также можно использовать iPad, но у меня его на тот момент не было). В самом Homekit создаются правила: последний человек уходит из дома; первый человек приходит домой. К этим правилам и были привязаны виртуальные кнопки в BARY.


Рис. Правила автоматического включения/выключения охраны

Первое время я даже вёл статистику, в которой отображалось количество минут, отработанных кондиционером в час. К сожалению, сейчас статистика уже утеряна, но время работы кондиционера сократилось почти на ? от первоначальной цифры.

Выявление основных потребителей электроэнергии


Методы анализа основных потребителей


Для того, чтобы начать оптимизировать расходы, необходимо понять, куда же уходит большая часть электроэнергии.
Тут, я думаю, могут быть разные подходы:

  • Используем специальные модули — реле. Помимо своей основной функции включения/выключения, они ведут учёт энергии, которая потребляется подключёнными к ним устройствами;
  • Применяем специальные счётчики, использующие трансформаторы тока;
  • Измеряем расход электроэнергии самостоятельно (например с помощью ваттметра) и указываем среднее значение в BARY (этот способ совсем неточный, но ориентировочные показания учитывать получится).

Для всех устройств, кроме тёплых полов, я установил: накладные розетки от Blitzwolf, модули в подрозетники Shelly 1pm / Aqara Relay Module / Fibaro Double Switch 2. Возможно было что-то ещё, сейчас уже не вспомню.
Для тёплых полов я снимал показания на основании статуса их работы и средних показателях потребления (как раз третий не очень точный способ).

В настройках устройств есть специальное поле для указания энергопотребления (мощность потребителя):


Рис. Настройка параметров энергопотребления у устройства

Общее энергопотребление снималось с входного счётчика при помощи платы Wemos D1 и простенького скетча:

Исходный код этого скетча
#include <Wire.h> 
#include <EEPROM.h>
#include <ESP8266HTTPClient.h>
#include <ESP8266WiFi.h>
#include <ArduinoJson.h>

#define WIFI_SSID "****"
#define WIFI_PASS "****"
#define API_URL "http://192.168.1.33/api/post-data"

volatile unsigned int state = 0;
volatile unsigned int kWh = 0;
volatile unsigned int blinked = 0;

int impulse = 3200;
int eeAddress = 0;
unsigned int lastMillis = 0;
int counter = 0;
int blinkMin = 10;
int timeout = 15000;
int PIN = D8;

void setup()
{
  state = impulse;

  EEPROM.begin(512);
  counter = EEPROM.read(eeAddress);
  EEPROM.write(eeAddress, counter + 1);
  EEPROM.commit();

  pinMode(PIN, INPUT_PULLUP); 
  
  attachInterrupt(digitalPinToInterrupt(PIN), blink, RISING);

  Serial.begin(115200);
  Serial.println(F(" "));

  connectWiFi();
}

void connectWiFi() 
{
  WiFi.begin(WIFI_SSID, WIFI_PASS);
  while (WiFi.status() != WL_CONNECTED) {
    delay(500);
    Serial.println("WiFi: Waiting for connection");
  }
  Serial.println("WiFi: connected");
}

float roundEx(float value, int digits) 
{
  int newValue = value * pow(10, digits);
  return (float) newValue / pow(10, digits);
}

void loop()
{
  if (blinked >= blinkMin && millis() - lastMillis > timeout) {
    float divider = (float) impulse * (millis() - lastMillis) / 1000 / 3600;
    float power = blinked / divider;
    float kWhFloat = kWh + (float) (impulse - state) / impulse;

    Serial.print(F("sec="));
    Serial.print(millis() / 1000);
    Serial.print(F("; time="));
    Serial.print((millis() - lastMillis) / 1000);
    Serial.print(F("; blinkMin="));
    Serial.print(blinked);
    Serial.print(F("; state="));
    Serial.print(state);
    Serial.print(F("; kWh="));
    Serial.print(kWhFloat, 3);
    Serial.print(F("; power="));
    Serial.print(power, 3);
    Serial.println(F(" "));
    blinked = 0;
    lastMillis = millis();

    if (WiFi.status() == WL_CONNECTED) {
      StaticJsonBuffer<300> JSONbuffer;
      JsonObject& JSONencoder = JSONbuffer.createObject();
      JSONencoder["device"] = "main_counter";
      JSONencoder["function"] = "counter";
      JSONencoder["counter"] = counter;
      JSONencoder["power"] = power;
      JSONencoder["usage"] = kWhFloat;
      char JSONmessageBuffer[300];
      JSONencoder.prettyPrintTo(JSONmessageBuffer, sizeof(JSONmessageBuffer));
      Serial.println(JSONmessageBuffer);

      HTTPClient http;
      http.begin(API_URL);
      http.addHeader("Content-Type", "application/json");
      int httpCode = http.POST(JSONmessageBuffer);
      String payload = http.getString();
      Serial.print(httpCode);
      Serial.print(" ");
      Serial.println(payload);
      http.end();
    } else {
      connectWiFi();
    }
  }
}

void blink()
{
  detachInterrupt(digitalPinToInterrupt(PIN));
  attachInterrupt(digitalPinToInterrupt(PIN), lowInterrupt, FALLING);
  state--;
  if (state == 0 || state > impulse) {
     kWh++;
     state = impulse; 
   }
   blinked++;
}

void lowInterrupt(){
  detachInterrupt(digitalPinToInterrupt(PIN));
  attachInterrupt(digitalPinToInterrupt(PIN),  blink, RISING);
} 


У любого электросчётчика есть импульсный выход, который дублируется светодиодом. Когда светодиод моргает — импульс прошёл. Если подключить к импульсному выходу какое-нибудь устройство, типа Arduino, то можно посчитать количество импульсов. Скетч раз в 15 секунд (но не чаще, чем наберёт достаточное количество импульсов) делает POST-запрос с текущими показаниями в BARY (почему именно само устройство лезет на сервер, а не наоборот, уже и не вспомню, на тот момент это казалось удобным). Импульсы считываются по прерываниям, а странная схема “attach/detach” реализована для подавления дребезга контактов. Ложных срабатываний не было.

Выявление и анализ прочих электропотребителей


Если в системе используется главный счётчик, то потребители электроэнергии, у которых нет счётчиков, в статистике будут отображаться как неизвестные:


Рис. Малодетализованная статистика энергопотребления

Определив явных основных потребителей и наигравшись с доморощенными скетчами, я понял, что потребителей в классификации “Неизвестно” осталось слишком много. Было принято решение пускать тяжелую артиллерию: многоканальный счётчик WB-MAP12H. Он позволил определить самые “прожорливые” линии и ещё больше дифференцировать энергопотребление.

Основная часть расходов распределялась на кондиционер (летом), тёплые полы (зимой), бризер (зимой), компьютер и мультимедиа. И да, чайник, который всегда так шумно работает и пыхтит, оказался чуть ли не самым распоследним потребителем.

Статистику расходов электроэнергии по категориям в BARY можно посмотреть во вкладке “События”- “Статистика”


Рис. Более детализированная статистика энергопотребления.

Очень удобно: когда расход на какую-нибудь из категорий превышает средние показатели, категория подсвечивается красным цветом. Как “Кондиционирование” на картинке выше. По заполненности этой линии можно судить о величине превышения в процентах от среднего показателя.

Также можно посмотреть, из чего складывается статистика по той или иной категории:


Рис. Детализация статистики по устройствам

Как избежать задвоения данных


Если для анализа расхода электроэнергии используете комплекс девайсов — счётчик в розетке + общий счётчик на линию — показания будут задваиваться. BARY позволяет выстроить иерархию parent-child. Реализовано это следующим образом: у самих устройств задаем категорию потребления и вышестоящий счётчик (см. рис. «Настройка параметров энергопотребления у устройства»).

Вышестоящий счётчик нужен в случае, если один счётчик считает всю линию, а второй — конкретную розетку. При просмотре статистики показания этой розетки будут вычитаться из показаний вышестоящего счётчика, а данные не будут дублироваться. Если снимаем показания с вышестоящего счётчика и конкретных точек, то часть затрат (затрат тех электропотребителей, которые принадлежат линии вышестоящего счётчика, но не висят на розетках с выделенным счётчиком) в статистике будет отображаться как неизвестные. (см. рис. «Малодетализированная статистика энергопотребления»)
Сама вложенность никак не ограничена. У меня, например, используется схема до 4 вложений.

И что теперь делать?


Допустим, с неизвестностью мы закончили, как же теперь начать экономить? Конечно, специфика у каждого умного дома будет своя. Но вот несколько общих рабочих рекомендаций.

Сценарии “Уход из дома/Приход домой”


Настоятельно рекомендую настроить сценарий ухода из дома! Вроде бы банально, но работает очень хорошо. Включаем в этот сценарий отключение всего, что возможно. Сценарий возвращения домой, соответственно, возвращает все в рабочий режим.


Рис. Список устройств, отключаемых при выходе из дома

Сценарий «Спокойной ночи»


Вы когда-нибудь задумывались, сколько потребляют девайсы, находящиеся в режиме ожидания? Просто, подключённые в розетку? Я-да. Загоняться-так загоняться =)
Например, кондиционер, просто оставленный в розетке, потребляет 1,4 Вт*ч. В месяц получается 1,4 Вт*ч*24 ч*30 дней=1 КВт*ч, а не работает полгода минимум.
Конечно, цифра невелика. Но оптимизировать затраты при наличии системы Умный дом для нас ничего не стоит. А таких вот “ожидающих” устройств в доме может быть не одно, и не пять. Телевизоры, игровые консоли, компьютеры и прочие девайсы. Чем больше девайсов — тем больше расход.


Рис. Список устройств, отключаемых в режиме сна

Температурный режим


Температурный режим тёплых полов выставляем минимально допустимым. Например, в ванной температура выставлена на 26 °C, это вполне приемлемая температура и энергии тратится на такой режим не много. При превышении влажности (кто-то принимает душ) температуру повышаем (за время принятия душа полы обычно успевают прогреться на 2-3 градуса).

В других помещениях делаем автоотключение теплого пола по датчику движения (зачем греть полы, если никого в помещении нет?).

Если используются отдельные электрические нагреватели, то также привязываем их работу к датчику температуры (как с кондиционером). Если используется бризер типа “Тион”, то летом стараемся запускать в помещение как можно меньше воздуха (он горячий и это лишняя работа кондиционеру), зимой — то же самое с холодным воздухом (его греет сам бризер).

Да будет свет! Но только по делу


Если освещение в санузлах, гардеробных, кладовых и прочих подобных помещениях до сих пор включается и выключается вручную, привязываем его к датчику движения. Так вы никогда не забудете выключить свет! Ну и не нужно будет в потемках разыскивать выключатель на кухне рядом с полуночным холодильником. К тому же, сделать это несложно — на али есть куча выключателей, работающих по Wi-Fi/Zigbee/433 МГц, в том числе и без нулевой линии.

Если вы до сих пор используете лампы накаливания, галогенные и прочие прожорливые источники света, то знайте:

23 ноября 2009 года вышел Федеральный закон N 261-ФЗ «Об энергосбережении», в котором предусматривалось, что лампы накаливания мощностью 100 ватт и более — будут запрещены к производству и продаже с 1 января 2011 года, мощностью 75 ватт и более отменяются с 1 января 2013 года.

Самое время задуматься над переходом на более экономичные — светодиодные и энергосберегающие.

При одинаковом световом потоке 1200Лм лампа накаливания потребляет 100 Вт, люминесцентные/ энергосберегающие — 25-30 Вт, а светодиодные — около 10 Вт. Плюс срок службы светодиодных и энергосберегающих ламп значительно превышает срок службы лампы накаливания.

Недавно у нас был кейс автоматизации, в котором использовались лампы накаливания, стилизованные под лампы Эдисона. Более 40 ламп по 60 Вт каждая. Сняв статистику энергопотребления за один месяц, без удивления обнаружили, что более трети счета за электричество приходилось именно на эти лампы. Все лампы тут же были заменены на аналогичные, но уже светодиодные. Окупились очень быстро.

Эпилог


За 5 лет работы над своим умным домом, многие сценарии и автоматизации усовершенствовались и претерпели значительные изменения. Энергосбережение вошло в приятную привычку. Сейчас уже трудно представить, что тёплые полы жарят с утра до ночи, а кондиционер беспрерывно гудит. Погода в доме комфортная, а платёжки за свет радуют глаз и кошелёк. BARY на страже экономии ресурсов!

Надеюсь, вам был полезен данный материал. Если у вас есть собственные примеры оптимизации расходов электричества, поделитесь в комментариях, что и как автоматизировали. А также присоединяйтесь к нашей группе в VK и телеграмм!