Статья

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

Так получилось, что поставил себе кондиционеры, которыми нет возможности управлять по 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В, что снимало вопрос о дополнительном понижающем преобразователе.

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

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

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

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

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

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

Прошивка Wemos в ESPHome

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

substitutions: board_name: balconyac upper_board_name: BalconyAC esphome: includes: - panasonic_ir.h libraries: - IRremoteESP8266 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: "$ 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: '$_Status' - platform: gpio pin: number: GPIO5 mode: INPUT name: $_Work_Sensor id: power # Задержка нужна, чтобы точно отслеживать статус включения/выключения светодиода состояния # В некоторых случаях он какое-то время мигает с интервалом в 1секунду - статус "Не готов" # После некоторого времени статус меняется на "Готов" - светодиод горит постоянно и кондиционер включается filters: - delayed_on_off: 5s sensor: - platform: uptime name: '$_Uptime_Sensor' icon: mdi:clock-outline id: uptime_sensor - platform: wifi_signal name: $_WiFi_RSSI update_interval: 60s climate: - platform: custom lambda: |- auto my_panasonic = new PanasonicAC(); App.register_component(my_panasonic); return ; climates: - name: '$' switch: - platform: restart name: '$ Restart' text_sensor: # Expose ESPHome version as sensor. - platform: version name: $ ESPHome Version # Expose WiFi information as sensors. - platform: wifi_info ip_address: name: $_IP ssid: name: $_SSID bssid: name: $_BSSID mac_address: name: $_MAC - platform: template 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 ; icon: mdi:clock-start update_interval: 15s time: - platform: homeassistant id: homeassistant_time

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

Пример автоматизации управления 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

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

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

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

Библиотека panasonic_ir.h на Sprut.aiБиблиотека panasonic_ir.h на GitHubКод для управления кондиционером в ESPHomeВключение кондиционера. Код Home Assistant




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

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

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

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

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

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

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


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

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

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

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

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

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

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

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

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

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

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

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

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

и т.д. 

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

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


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

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

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

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

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

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

Вернуться назад

Устройства


Вернуться назад