Кондиционер Panasonic: делаем из "тупого" - "умный"

17 октября 2021, 10:53

Так получилось, что поставил себе кондиционеры, которыми нет возможности управлять по Wi-Fi, потому что мыслей об умном доме изначально даже не было. Но потом все поменялось и дом превратился в самостоятельно живущий "организм", который живет своей жизнью по заданным алгоритмам, упрощая нашу жизнь.

Я не сторонник всякий красивых lovelace в Home Assistant и считаю, что все должно работать без тыкания в экран планшета или телефона. Поэтому моя концепция заключается в том, чтобы все "тупое" могло работать как и работало, но с возможностью дополнительного управления через автоматизации. Таким способом было реализовано управление сенсорными кнопками вытяжки (возможно позже напишу об этом. Процесс тоже был достаточно сложный. Хотелось сохранить управление сенсорными кнопками и в то же время сделать так, чтобы можно было эмулировать их нажатие).

Все, что делается в умном доме, делается по принципу: "Если умный дом перестанет работать, то все устройства должны продолжать работать от штатных выключателей, кнопок и пультов". Поэтому все доработки и изменения делаются только исходя из этой концепции.

Задача №1 - чем и как управлять

В процессе начинаний был найден скетч для Arduino, который умел работать с кондиционером Panasonic через библиотеку ir_Panasonic.h Но т.к. знаний маловато, стал вопрос о том, как ее можно использовать в ESPHome. После долгих и упорных проб и поисков, наткнулся на гитхабе на issues, где разбиралось как раз подключение похожих библиотек и их использование с компонентом Climate в Home Assistant.

Но код, который там был, несколько устарел, и на старте не происходило нормальной инициализации кондиционера с установленными параметрами. Поэтому пришлось библиотеку немного "подпиливать" под обновленный ESPHome.

В итоге получилась такая библиотека - panasonic_ir.h 

const uint16_t kIrLed = 4;  // Wemos D1 mini - D2 pin. (ESP8266 GPIO pin to use. Recommended: 0 (D3).)

const float const_min = 16;
const float const_max = 30;
const float const_target_temp = 25;

// Добавил положение заслонки
// kPanasonicAcSwingVAuto, kPanasonicAcSwingVHighest, kPanasonicAcSwingVHigh, kPanasonicAcSwingVMiddle, kPanasonicAcSwingVLow, kPanasonicAcSwingVLowest
char swing = kPanasonicAcSwingVLow;

Тут нужно указать необходимые нам параметры: 

  1. GPIO, на котором подключен IR светодиод.
  2. Минимальная температура установки (смотрим на пульте, какую можем установить, кликая кнопками управления до минимальной)
  3. Максимальная температура установки (смотрим на пульте, какую можем установить, кликая кнопками управления до максимальной)
  4.  Устанавливаемая температура при инициализации (по умолчанию).
  5. Устанавливаемое положение заслонок при инициализации (по умолчанию).

С библиотекой разобрались, теперь переходим к схеме управления и получению статуса работы кондиционера.

Задача №2 - управление и получения статуса работы.

Изначально была принципиальная позиция - не вешать датчик двери на заслонки, как это многие делают, чтобы получить статус работы кондиционера, а получать его непосредственно от самого кондиционера. Я не видел смысла искать обходное решение, т.к. у кондиционера есть явный индикатор, который говорит, включен он или нет - это светодиод питания. Этот способ давал много существенных, на мой взгляд, преимуществ. Мы не зависим от сервера умного дома в виде прослойки, в которую передаются данные о положении заслонок от датчика на заслонке, а получаем состояние непосредственно в контроллер. При желании мы можем, в этом случае, вообще перенести всю логику работы и управления в контроллер и управлять, не используя сервер УД и Home Assistant с помощью Wi-Fi.

Исследование платы и куда будем подключаться

После вскрытия кондиционера и снятия платы светодиодов обнаружилось, что на ней есть все необходимое, чтобы можно было с минимальными доработками подключить ESP. Было обнаружено питание 5В, GND, управляющие сигналы. Исходя из того, что питание платы осуществлялось 5 вольтами, выбор контролера был сделан в пользу Wemos D1 mini. Уже был опыт использования этой платы в вытяжке на кухне и мне очень понравилось с ней работать. Главное в ней - это 2 напряжения питания, 5В и 3.3В, что снимало вопрос о дополнительном понижающем преобразователе. 

1600x_image.png?1634368832
1600x_image.png?1634368834

Wemos D1 mini

1600x_image.png?1634368829

Плата светодиодов кондиционера. Пин 2 - управление светодиодом состояния.

1600x_image.png?1634368834
1600x_image.png?1634368834

Схема управления

После снятия параметров выяснилось, что светодиод состояния управляется минусом. В выключенном состоянии на 2 пине - 5В, во включенном - 4.3В относительно минуса (GND). Стало понятно, что нужно делать делитель напряжения, чтобы можно было отловить состояние включено/выключено. То есть до 4.5В должен на вывод платы подаваться минус (логический 0), а выше 4.5В - 5В (логическая Схема получилась следующая:

o01-1.jpg

Левая часть - делитель, который передает статус на пин D2 Wemos о статусе кондиционера - включен/выключен.

Правая часть - управление инфракрасным светодиодом, который отдельно подпаивался и садился на термоклей.

o01-1.jpg
Важно: необходимо подобрать инфракрасный светодиод с нужной длиной волны, путем тестов. Обычно это 940нм.

У меня отлично зарекомендовал себя GNL-3014IRAC-1, на 940нм.

Прошивка Wemos в ESPHome

Теперь необходимо написать код, для прошивки Wemos.

substitutions:
  board_name: balconyac
  upper_board_name: BalconyAC

esphome:
  includes:
    - panasonic_ir.h
  libraries:
    - IRremoteESP8266

  name: ${board_name}
  platform: ESP8266
  board: d1_mini 
  comment: Wemos D1 mini Balcony Conditioner
  
wifi:
  ssid: !secret wifi-ssid
  password: !secret wifi-password
  reboot_timeout: 15min
  output_power: 17.5dB
  fast_connect: true
  power_save_mode: none

  # Enable fallback hotspot (captive portal) in case wifi connection fails
  ap:
    ssid: "${upper_board_name} Fallback Hotspot"
    password: !secret ap-password

captive_portal:

# Enable logging
logger:

# Enable Home Assistant API
api:
  reboot_timeout: 10min
ota:

web_server:
  port: 80

binary_sensor:
  - platform: status
    name: '${upper_board_name}_Status'
    
  - platform: gpio
    pin:
      number: GPIO5
      mode: INPUT
    name: ${upper_board_name}_Work_Sensor
    id: power
    # Задержка нужна, чтобы точно отслеживать статус включения/выключения светодиода состояния
    # В некоторых случаях он какое-то время мигает с интервалом в 1секунду - статус "Не готов"
    # После некоторого времени статус меняется на "Готов" - светодиод горит постоянно и кондиционер включается
    filters:
      - delayed_on_off: 5s

sensor:
  - platform: uptime
    name: '${upper_board_name}_Uptime_Sensor'
    icon: mdi:clock-outline
    id: uptime_sensor

  - platform: wifi_signal
    name: ${upper_board_name}_WiFi_RSSI
    update_interval: 60s
    
climate:
- platform: custom
  lambda: |-
    auto my_panasonic = new PanasonicAC();
    App.register_component(my_panasonic);
    return {my_panasonic};

  climates:
    - name: '${upper_board_name}'

switch:
  - platform: restart
    name: '${upper_board_name} Restart'

text_sensor:
  # Expose ESPHome version as sensor.
  - platform: version
    name: ${upper_board_name} ESPHome Version
  # Expose WiFi information as sensors.
  - platform: wifi_info
    ip_address:
      name: ${upper_board_name}_IP
    ssid:
      name: ${upper_board_name}_SSID
    bssid:
      name: ${upper_board_name}_BSSID
    mac_address:
      name: ${board_name}_MAC

  - platform: template
    name: ${upper_board_name}_Uptime
    lambda: |-
      uint32_t dur = id(uptime_sensor).state;
      int dys = 0;
      int hrs = 0;
      int mnts = 0;
      if (dur > 86399) {
        dys = trunc(dur / 86400);
        dur = dur - (dys * 86400);
      }
      if (dur > 3599) {
        hrs = trunc(dur / 3600);
        dur = dur - (hrs * 3600);
      }
      if (dur > 59) {
        mnts = trunc(dur / 60);
        dur = dur - (mnts * 60);
      }
      char buffer[17];
      sprintf(buffer, "%ud uh um us", dys, hrs, mnts, dur);
      return {buffer};
    icon: mdi:clock-start
    update_interval: 15s

time:
  - platform: homeassistant
    id: homeassistant_time

Карточка кондиционера в Home Assistant

1600x_image.png?1634370696
1600x_image.png?1634370695

Пример автоматизации управления Home Assistant

- id: 'Балкон A/C: включение кондиционера'
  alias: balconyac_on
  initial_state: true
  trigger:
  # Отслеживаем кнопки с дистанционного пульта
    - platform: state
      entity_id: sensor.0x60a423fffe8affcd_action 
      to: 1_double
      id: 'on'
    - platform: state
      entity_id: sensor.0x60a423fffe8affcd_action
      to: 4_double
      id: 'off'
  condition:
  ## Сенсор управления кондиционером. ON - Разрешаем автоматизацию, OFF - запрещаем управлять
    - condition: state
      entity_id: binary_sensor.bn_ac_control_general
      state: 'on'
    ## Кондиционер выключен. Сенсор с D2 пина Wemos
    - condition: state
      entity_id: binary_sensor.balconyac_work_sensor
      state: 'off'
  action:
    - choose:
        - conditions:
            - condition: trigger
              id: 'on'
          sequence:
            ## Устанавливаем температуру
            - service: climate.set_temperature
              data:
                temperature: 25
                hvac_mode: heat
              target:
                entity_id: climate.balconyac
            ## Задержка, на всякий "пожарный"
            - delay: 2
            ## Устанавливаем пресет. Ночной режим - Silent, Powerfull - Турбо или обычный - None
            - service: climate.set_preset_mode
              target:
                entity_id: climate.balconyac
              data:
                preset_mode: none
        - conditions:
            - condition: trigger
              id: 'off'
          sequence:
          ## Выключаем, если была нажата кнопка выключения
            - service: climate.turn_off
              target:
                entity_id: climate.balconyac
  mode: queued
  max: 5
1600x_image.png?1634371411

Управление кондиционером осуществляется от такого пульта, который у меня управляет LED лампой на СС2530.

Двойное нажатие кнопки 1 - включает кондиционер, двойное нажатие кнопки 4 - выключает кондиционер.

Вот собственно говоря и все. Ниже привожу еще раз ссылки на код.


Все новости мира умных домов - t.me/SprutAI_News или Instagram
Остались вопросы? Мы в Telegram - @SprutAI

Хочешь умный дом но нет времени разбираться?
Посмотри примеры работ и выбери себе интегратора.
  1. (maxtor)
    (maxtor) месяц назад

    Плюсую за сценарии автоматизации без "красивостей" и тыркания в телефон. Однако имхо слишком мудренный вариант, чем не устраивают IR-шлюзы? Легко настроить и впоследствии легко интегрировать в тот же HA, например с помощью BroadLink RM mini 3

  2. Ильмир Гайнутдинов (Gelmer)

    А стандартный компонент climate IR не пробовал, мне кажется он панасоником должен управлять. У меня для daewoo подошел протокол coolix. Кстати можно добавить сенсор текущей температуры. В карточке по центру будет показываться. 

    Так же в climate IR можно подключить ик приемник, и имеем почти интерактив: при управлении штатным пультом в НА статус меняется. 

    Вот я описывал в статье https://sprut.ai/client/articl...

    • Евгений Матлай (Jeka_M)
      Евгений Матлай (Jeka_M) отредактировано месяц назад

      У меня не взлетело. Перепробовал все. Только RAW команды, но мне этот путь не очень понравился. По сути я решал сразу 2 задачи в одной. Управлять кондиционером и отслеживать статус включения с помощью одного устройства, которое в любом случае будет ставиться.

  3. Евгений Матлай (Jeka_M)
    Евгений Матлай (Jeka_M) месяц назад

    Шлюз нужно где-то ставить, а это все внутри кондиционера спрятано. Это главная была причина, почему я не хотел ими пользоваться. У меня 3 кондиционера и для каждого ее нужно где-то ставить. Плюс, это автономность контролера.  В будущем возможно еще подключу штатный датчик температуры и по сути мы получаем автономную работу кондиционера по своим алгоритмам.

  4. Григорий Неизвестный (GrKoR)
    Григорий Неизвестный (GrKoR) отредактировано месяц назад

    А я правильно понимаю, что при включении с пульта получается рассинхрон и есп не знает, в каком режиме работает кондей? Только понимает по светодиоду, что его включили снаружи.

    Или есть еще и ик-приемник, который ловит команды пульта для нужд есп? Если ик-приемника нет, то как идея - поставить :) Есп потянет. И будет лучше понимать, что происходит

    • Евгений Матлай (Jeka_M)
      Евгений Матлай (Jeka_M) месяц назад

      Я скажу больше. У вас пульт не понимает, в каком режиме работает кондиционер, т.к. у него нет обратной связи. Вы можете это проверить, если у вас 2 одинаковых кондиционера и включать/выключать будете разными. ESP понимает, что кондиционер включен, т.к. статус считывает со светодиода, а вот в каком режиме, ей не известно. Но я слабо представляю, для чего вообще нужно знать этот режим. Задача автоматизаций и инверторного кондиционера заключается в поддержании нужной температуры. По внешним датчикам и календарю прекрасно понятно, нужно на тепло или на холод его включать, какую температуру задать на день и на ночь. Это если не устраивает режим AUTO.

      • Григорий Неизвестный (GrKoR)

        Я знаю про то, что пульты без обратной связи.

        Своим сплитам я протокол расковырял и вайфай прикрутил. Вот тут описывал: https://sprut.ai/client/articl...

        Насчет «зачем нужна обратная связь» - история творческая :) когда есть возможность добавить немного информации и статистики в умный дом, я всегда это делаю. Не сказать, что всегда эта информация используется, но иногда пригождается. Не настаиваю на таком подходе.
        Ваш подход мне нравится) не нашел бы у себя в сплите uart - делал бы аналогично вашему

    • Евгений Матлай (Jeka_M)
      Евгений Матлай (Jeka_M) месяц назад

      Если честно, даже не понимаю для чего может пригодиться обратная связь. Какой может быть кейс с ней?

      • Григорий Неизвестный (GrKoR)

        Я собираю такое. Бывает потом полезно проанализировать, в каких ситуациях автомат не сработал, а человекам хотелось включить. Или наоборот, автоматика сплит включила, а не надо было.

        В общем, автоматизации допиливать

        • Евгений Матлай (Jeka_M)
          Евгений Матлай (Jeka_M) месяц назад

          Так это будет видно по сенсору включения/выключения. Включился, сработал сенсор. Повесьте на него автоматизацию с уведомлением на телеграмм как вариант. Для этого же и делалось отслеживание статуса включения. А дальше уже все зависит от автоматизаций. У меня, например, на шторах есть автоматизация, которая 5 раз передает команду, если по истечении 5 раз положение не изменилось, значит что-то не то. Как правило, садится аккумулятор. Аналогично можно и тут делать.

          • (endoftime)
            (endoftime) месяц назад

            Есть много других кейсов. 

            1. Перевод кондиционера в "безопасный" режим (ЭКО, сайлент и т.п.) при наличие людей в помещении.

            2. Включение режима осушения если влажно.

            3. Управление температурой по внешнему датчику. 

            и т.д. 

            и вот тут как раз очень нужна нормальная обратная связь. 

            очень хотел подключить к дайкину. Но интерфейсный блок, которого в моей модели нет с завода) стоит негуманных денег.


            • Евгений Матлай (Jeka_M)
              Евгений Матлай (Jeka_M) месяц назад

              Мне кажется это лучше решать не через обратную связь, а отдельным датчиком климата, который будет показывать и температуру правильно и влажность. И опять же, это можно решать и без обратной связи. Например, выключили кондиционер и включили на заданные параметры и вы со 100% вероятностью понимаете, на каком режиме он работает. Режим можно хранить в MQTT брокере и все устройства его видят. Если происходит ситуация с выключением, например, света или не понятен статус - выключаете и снова включаете кондиционер. Статус кондиционера показывает, что он включился. Режим работы понятен. Если более гибко, тогда по любому нужно использовать внешние сенсоры. Тоже хотел по ЮАРТу делать, но он такое ощущение, что он отключен програмно. Потом понял, что он мне просто не нужен. Тут больше понятно становится после практического использования. По итогу все сводится к тому, что он просто включается и выключается когда ему нужно и в тех режимах, каких нужно. Ты даже не думаешь, что тебе нужно брать пульт и что-то делать. Это как многие люди начинают построение УД с Алисы и красивых lovelace в ХА, забывая, что главная задача УД работать полностью автономно и самостоятельно. И самая лучшая реализация, когда ты забываешь про телефон и про Алису, разве что просишь ее рассказать анекдот.

  5. Алексей Трошин (catch)
    Алексей Трошин (catch) месяц назад

    Спасибо за статью. Очень нужна статья про вытяжку! Есть тоже вытяжка с сенсорным управлением. Хочется как то ее подключить к автоматике.

    Буду очень признателен за описание вашего опыта!

    • Евгений Матлай (Jeka_M)
      Евгений Матлай (Jeka_M) месяц назад

      Для этого нужно ее снова разбирать, что не очень удобно. Правда на днях у меня еще появилась одна идея с ней и возможно буду доделывать. Одним махом опишу все. Сейчас не отслеживается скорость работы вентилятора, но вроде придумал, как ее получать. Если вкратце, то там используется оптрон PC817. Но из-за того, что там емкостные кнопки, нужно ставить резисторы, подтяжку, тщательно отмывать пайку от флюса. Делать минимально короткими и тонкими проводами, чтобы исключать всякие наводки. Уже полгода работает без каких-бы то не было ложных срабатываний, хотя сначала были, пока плату хорошо не промыл и проводами не развел нормально. Сейчас еще хочу с ESP перевести на СС2530, чтобы напрямую в zigbee2mqtt закидывать сразу.

  6. Евгений Матлай (Jeka_M)
    Евгений Матлай (Jeka_M) отредактировано месяц назад

    Отдельно добавлю. Нужно опытным путем подбирать номиналы резисторов R2 и R3 исходя из того, какое управляющее напряжение будет приходить со светодиода, чтобы четко отловить открытие и закрытие транзистора. Проще всего это делать подпаяв изначально потенциометры. Но не менее 1кОм, чтобы не спалить кондиционер. Лучше ставить на период тестов резистор 1кОм и после него отдельно потенциометр на 10кОм и уже им подбирать.

К списку статей

Устройства в материале

wemos D1 mini

Производитель: Espressif Systems
Заказать на:
JD

Tuya ZigBee 3.0 беспроводной 4-Кнопочный пульт

Производитель: LoraTap
Заказать на:

Скидки для сообщества

Z-Wave Ukraine

+380 68 641 9670
Промокод:
Sprut-UA
Размер скидки:
15%

Тематические чаты

Похожие статьи

17 декабря 2019, 17:49
Универсальный привод для автоматического удаленного открытия окон с простой интеграцией в умные дома.
04 сентября 2018, 12:14
Интеграция RGB ленты на ESP8266 с прошивкой tasmota в систему HomeBridge (HomeKit)
15 октября 2018, 09:05
Прошивка для Sonoff c нативным HomeKit
02 ноября 2018, 12:14
Кнопка звонка с уведомлениями в HomeKit
27 октября 2018, 12:20
Нативный Термостат для котла на ESP8266 с поддержкой Apple HomeKit
20 октября 2018, 22:57
Теоретические основы протокола MQTT и описание того, как он работает и для чего используется
25 сентября 2020, 11:49
Сенсорный монитор для управления умным домом. Настройка и использование.
02 июля 2020, 07:24
Я хочу поделиться своей разработкой: "умным открывателем пластикового окна". В статье вы найдете все необходимое, чтобы повторить проект и изготовить собственный привод для открывания окна с использованием штатной фурнитуры окна.
24 августа 2018, 12:18
Пошаговая установка HomeAssistant
15 ноября 2018, 13:11
Xiaomi Mi Remote 360 добавляем Apple HomeKit