Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Режимы работы и MQTT #43

Closed
slydiman opened this issue Apr 12, 2021 · 2 comments
Closed

Режимы работы и MQTT #43

slydiman opened this issue Apr 12, 2021 · 2 comments

Comments

@slydiman
Copy link

slydiman commented Apr 12, 2021

Пытаюсь сконфигурировать нормальный объект climate в Home Assistant.
Можно использовать templates, но интеграция всё равно climate.mqtt как не крути.
Пытаюсь к режимам off / heat добавить режим auto или задействовать опцию aux heat.

Сразу скажу что оптимальный вариант - использовать aux heat в climate для кипячения вместо отдельного переключателя switch.r4s1.Kettle.boil, но рассмотрим и другие варианты.

Столкнулся с проблемами в дизайне шлюза:

Проблема 1: Попытался добавить режим auto.
mode_command_topic один на все режимы и не смотря на наличие mode_command_template не получается выставить что нужно через единственный топик. Допустим используем раздельные cmd/rsp.
cmd/state <-- 0/off/false - выключение, 1/on/true - кипячение, 2...100 - кипячение и подогрев; А где просто подогрев???
cmd/heat_temp <-- 0...39 - выключение, 40...90 подогрев, > 90 - кипячение;
Итого просто невозможно изменив значение одного топика выбрать режимы off / heat / boil / boil + heat.

Проблема 2: Попытался прикрутить aux heat к топику state аналогично как сейчас сделан switch.r4s1.Kettle.boil, но в случае если heat_temp = 85, это ни разу не boil, а просто нагрев. То есть aux heat как и switch boil переключается параллельно с режимом off/heat, в чем нет никакого смысла.

Проблема 3: всегда сбивается заданная температура. Просто невозможно держать объект climate в состоянии off и при этом хранить температуру 85.

Предлагаю рассмотреть следующий дизайн:
heat_temp - выставляется либо на чайнике кнопками, либо через MQTT и никогда не сбрасывается само вне зависимости ни от каких режимов и состояний. Изменение heat_temp через MQTT не должно менять режим (включать/выключать чайник) - это только target temperature, а не переключатель с хитрой логикой.
hstate - оставить как сейчас (off / heat) - управляет только подогревом, никакого кипячения.
state - on/off связать с aux_command_topic и aux_state_topic в Home Assistant - управляет именно кипячением и имеет приоритет над hstate.
state и hstate должны быть независимыми. То есть две boolean переменные state и hstate дают всё 4 возможных режима работы - выкл / нагрев / кипячение / кипячение + подогрев. К примеру в режиме кипячение + подогрев скипел чайник - state (aux) выключился, hstate=heat остался.
Такой дизайн решает все проблемы и позволит настроить нормальный объект climate, думаю и не только в Home Assistant. В конце концов если в какой-нибудь системе нет aux heat, останется переключатель boil (завязанный на топик state), который будет работать правильно, а не так как сейчас.

Пожелание: в Home Assistant discovery в device добавить MAC адрес шлюза (не чайника!!!) "connections": [["mac", "12:34:56:78:90:ab"]]. Это позволит правильно группировать устройства внутри Home Assistant. Можно конечно совсем вымудриться и добавить MAC чайника и ещё via_device с адресом шлюза, но ИМХО это уже лишнее.

@slydiman
Copy link
Author

slydiman commented Apr 13, 2021

Пока сделал вот такой объект climate в Home Assistant.
Костыли конечно, но сейчас этим хотя бы можно пользоваться.
Режимы:

  • off
  • heat (включается сразу на 85 и после включения можно быстренько подкрутить)
  • auto (кипячение)
  - platform: mqtt
    name: Kettle
    retain: false
    min_temp: 0
    max_temp: 100
    temp_step: 5
    precision: 1
    temperature_command_topic: "r4s/xxx/heat_temp"
    temperature_state_topic: "r4s/xxx/heat_temp"
    current_temperature_topic: "r4s/xxx/temp"
    availability_topic: "r4s/xxx/status"
    mode_command_topic: "r4s/xxx/heat_temp"
    mode_command_template: >
      {% if value == "off" %}
      0
      {% elif value == "heat" %}
      85
      {% else %}
      100
      {% endif %}
    mode_state_topic: "r4s/xxx/json"
    mode_state_template: >
      {% if value_json.state == 0 %}
      off
      {% elif value_json.target > 0 %}
      heat
      {% else %}
      auto
      {% endif %}
    modes:
      - "off"
      - "heat"
      - "auto"

ну и из всего многообразия UI вот этот более менее

          - type: custom:simple-thermostat
            entity: climate.kettle
            header:
              name: Чайник
              icon: mdi:kettle
            step_size: 5
            control:
              hvac:
                "off":
                  name: Выкл.
                  icon: mdi:kettle-off
                heat:
                  name: Нагрев # 85°C
                  icon: mdi:kettle-alert
                auto:
                  name: Кипячение
                  icon: mdi:kettle-steam
            label:
              temperature: Сейчас в чайнике

@alutov
Copy link
Owner

alutov commented Sep 22, 2021

В новой версии изменена логика работы Mqtt топика State в чайнике Redmond. Теперь он управляет только режимом кипячения, не влияя на режим подогрева. Это дает возможность использовать все режимы чайника. Поправлен и топик heat_temp. установка температуры до 30°C выключает подогрев, если он был включен и включает подогрев с последней запомненной в шлюзе температурой(чайник температуру не помнит), если он был выключен. Сделано для того, чтобы меньше ковыряться в интерфейсе ассистента (Вбить температуру напрямую цифрами разработчики ассистента не сочли нужным). С этой же целью установка температуры 100°C выключает подогрев. Что касается via_device. Как написано в документации, там нужно указывать идентификатор устройства через которое идет обмен сообщениями с ассистентом. Пробовал использовать его во всех объектах с идентификатором шлюза. Эффекта не заметил. Ведь по логике, если становится недоступен шлюз, должны стать недоступными все зависимые от него объекты. Чего на практике не происходит. Как я понял, топология нужна ассистенту не для корректной работы, а исключительно для рисования картинок.

@alutov alutov closed this as completed Feb 2, 2022
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants