Корзина пуста

Отслеживание режима работы стиральной (посудомоечной, сушильной и т.п.) машины

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

К сожалению, бытовых приборов, например, стиральных машин, имеющих поддержку Z-Wave, "с завода" крайне мало, но это совершенно не помешает подключить к системе умного дома любую стиральную машину, хоть "Вятку-автомат" (надеюсь, что до этого все-таки не дойдет). А вообще, способ, описанный ниже, прекрасно подходит не только для стиральной, но и для посудомоечной или сушильной машины. Тут главное — принцип.

Разумеется, полностью управлять стиральной машиной через умный дом не получится. Выбирать режим стирки и отжима, как, впрочем, загружать в машину белье, придется по старинке — руками. А вот получить PUSH-уведомление на телефон, когда стирка завершится — уже более интересная и нужная функция. Это позволит оптимизировать процесс последовательной стирки, когда накопилось много вещей и вы хотите их все максимально быстро постирать за несколько стирок. Еще вариант: вы, уходя на работу, запустили стирку, но хотите, чтобы в целях безопасности, по ее окончании, машина была обесточена, а подача воды в дом — перекрыта.

Принцип

Самый простой, логичный и недорогой способ отследить состояние работы машины, не вмешиваясь в ее конструкцию, — это отследить ее энергопотребление. Сделать это — элементарно, подключив машину в розетку через FIBARO Wall Plug (легче, но чуть дороже) либо, установив внутрь, предназначенной для стиральной машины розетки, модуль FIBARO Single Switch 2 (требуется монтаж квалифицированным электриком, но сам модуль немного дешевле). Помимо этих модулей могут быть использованы любые другие аналогичные — главное, чтобы они поддерживали измерение мощности, потребляемой нагрузкой и, разумеется, соответствовали ей по мощности — стиральная машина в некоторых режимах потребляет 2 кВт/ч и более, обязательно ознакомьтесь с инструкцией на нее.

Казалось бы — все очень просто. Допустим, в дежурном (standby) режиме машина потребляет 5 Вт. Мониторим потребление энергии, когда потребляемая мощность становится больше 5 Вт, опознаем это как то, что машина стирку начала, обновляя значение соответствующей глобальной переменной. А как только мощность падает до 5 Вт или меньше, расцениваем это как завершение стирки и снова меняем значение глобальной переменной. Но все немного сложнее.

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

Он будеть выглядеть примерно так:

Отчет о потребленной энергии FIBARO Home Center 2

На графике потребления энергии, хорошо видны фазы работы машины: набор воды, нагрев, стирка, полоскание и отжим. Еще видно, что в процессе стирки, поребляемая машиной мощность многократно падала до условного нуля (режима standby), при этом фактически процесс стирки еще не завершился. Поэтому, совершенно неправильно ориентироваться только на показатель мощности при оценке режима работы — если бы каждый раз при таком "завершении стирки" высылалось бы PUSH-уведомление, то за пару часов, что стирает машина, вы бы их получили штук 100.

Схема работы программы

Программа состоит из трех частей (одна переменная и две сцены):

  • Глобальная переменная Washing_Machine, которая может иметь два значения — "Working" (работает) и "Idle" (не работает).
  • Первая сцена будет анализировать потребление (триггер — изменение потребления) и, в зависимости от результатов, менять значение этой глобальной переменной.
  • Вторая сцена будет выполнять действия (триггер — изменение глобальной переменной), например, отправлять PUSH-уведомления при окончании стирки.
  • Основная идея правильного анализа потребляемой машиной мощности такова: если мощность превышает мощность покоя, но при этом глобальная переменная имеет значение "не работает", значит машина начала процесс стирки. Если мощность падает ниже мощности покоя, при этом глобальная переменная имеет значение "работает", тут уже есть два варианта: либо машина задумалась и процесс стирки еще не завершен либо все-таки стирка завершилась. Понять что именно произошло, поможет дополнительная проверка — мы будем в течение некоторого времени (опять же подобранного экспериментально, например трех минут) усиленно измерять потребляемую машиной мощность. Если же за это время она не превысит мощность покоя, то только тогда смело можно говорить, что процесс стирки завершен.

    Ниже приведен код сцен с комментариями.

    --[[
    %% properties
    246 power
    %% events
    %% globals
    --]]
    
    if (fibaro:countScenes() > 1) then
      fibaro:abort();
    end
    
    
    local app = {
      name		= "Washing_Machine", -- имя глобальной переменной
      on			= "Working", -- работает
      off			= "Idle", -- не работает
      id			= 246, -- id устройства измерения мощности
      power			= 90, -- мощность покоя (standby)
      wait			= 60*1000 -- сколько времени надо, чтобы удостовериться, что стирка завершена
      	};
    
    local realpower = tonumber(fibaro:getValue(app.id, 'power'));
    local appstate = fibaro:getGlobalValue(app.name);
    
    fibaro:debug('Текущая мощность = '..realpower..' и переменная говорит '..appstate);
    
    if realpower > app.power and appstate == app.off then
      fibaro:debug(app.name..' потребление превысило мощность покоя - '..realpower..'>'..app.power..', значит стирка началась.');
      fibaro:setGlobal(app.name, app.on);
    end
    
    if realpower <= app.power and appstate == app.on then
      fibaro:debug(app.name..' потребление упало ниже мощности покоя '..realpower..'<'..app.power..', возможно стирка всё.');
      fibaro:debug('Но подождем '..(app.wait/1000)..' секунд, чтобы в этом убедиться.');
    
      for i = 1, app.wait/1000 do
        fibaro:sleep(1000);
        realpower = tonumber(fibaro:getValue(app.id, 'power'));
        if realpower > app.power then
          fibaro:debug('Мощность = '..realpower..' , т.е. превысила мощность покоя '..app.power..', значит машина все еще стирает.');
          fibaro:abort();
        end
      end
      fibaro:debug('Мощность = '..realpower..' , НЕ превысила мощность покоя '..app.power..', значит машина постирала.');
      fibaro:setGlobal(app.name, app.off);
    end
    
    --[[
    %% properties
    %% events
    %% globals
    Washing_Machine
    --]]
    
    if (fibaro:countScenes() > 1) then
      fibaro:abort();
    end
    
    
    local app = {
      name		= "Washing_Machine", -- имя глобальной переменной
      on			= "Working", -- работает
      off			= "Idle", -- не работает
      pushid		= 210, -- id устройства куда слать PUSH
      pushtext		= "Стиральная машина постирала" -- Текст, который слать в сообщении
      	};
    
    local appstate = fibaro:getGlobalValue(app.name);
    if appstate == app.off then
        fibaro:call(app.pushid, 'sendPush', app.pushtext);
    end
    

    Как всегда ждем комментариев к этой статье либо на нашей странице в фейсбук.

    Добавить комментарий

    Возникли вопросы?