Pandora Car Alarm System custom component

По телеку что-ли рекламу запустить? Кто ищет тот всегда найдет. А не найдет - так свое сделает.

Подскажите, стоит ли ожидать поддержку запуска двигателя ?

1 Like

Hi, how to add “alarm_state” sensor?

Добрый вечер земляку.
Поставил ваш компонент в Hassio,в докере.
Валит несколько ошибок.Можете посоветовать на что смотреть надо?
Занимаюсь с HA второй месяц,осваиваю

Для новичков в HomeAssistant написал код для двух переключателей (svitch и lock), которые будут ставить/снимать с охраны и заводить/глушить двигатель.
Учел защиту от двойных случайных нажатий (после нажатия кнопка блокируется до реального запуска двигателя).
Снимок
Для удобства все элементы кода разместил в отдельном файле my_auto.yaml. Для этого использовал функцию packages (это не сложно и оказывается ОЧЕНЬ удобно). Для этого в самом верху файла configuration.yaml вставляем:

homeassistant:
  packages: !include_dir_merge_named packages/

Создаем в нашей основной директории “Homeassistant” папку “packages”, а в ней файл “my_auto.yaml”. В файл “my_auto.yaml” вставляем весь нижеприведенный код, заменив лишь “Creta” на наименование своего автомобиля (см. сенсоры), а также ID 1234567890 на свой ID из личного кабинета.
Вы можете не использовать функцию packages и тогда разложите все элементы кода (input_boolean, switch, automation) по местам в вашем конфигурационном файле.

my_auto:
#-------------------------------------------------------------------------------------------
    input_boolean:
      enginie_button:
        name: Нажали ли кнопку запуска
        initial: off
      lock_button:
        name: Кнопка закрытия авто
        initial: on
#-------------------------------------------------------------------------------------------
    switch: # Выключатель "Двигатель" (запустить, остановить)
      - platform: template
        switches:
          engine:
            # Кнопка не доступна, если кнопка была включена, но еще двигатель не запустился. И наоборот. Если машина не на связи или открыта.
            availability_template: >- 
              {%- if (((is_state('input_boolean.enginie_button', 'on') and is_state('binary_sensor.creta_engine_state', 'on'))
                 or (is_state('input_boolean.enginie_button', 'off') and is_state('binary_sensor.creta_engine_state', 'off'))))
                 and (is_state('binary_sensor.creta_lock', 'off'))
                 and (is_state('binary_sensor.creta_connection_state', 'on'))                 
                 %}
                true
              {%- endif %}
            friendly_name: Двигатель
            value_template: "{{ is_state('binary_sensor.creta_engine_state', 'on') }}"
            turn_on:
              - service: input_boolean.turn_on # Запоминаем, что включили кнопку
                data:
                  entity_id: input_boolean.enginie_button
              - service: pandora.start_engine # Запускаем двигатель
                data:
                  id: 1234567890 # Берем из личного кабинета p-on.ru во вкладке "информация"
              # следующие строчки можно удалить, если они вам мешают ---------
              - delay: 10                     # Обновляем каждые 
              - service: pandora.update_state # 10 секунд статус
              - delay: 10                     # авто, что бы
              - service: pandora.update_state # быстрее кнопка
              - delay: 10                     # стала активной
              - service: pandora.update_state # До сюда ----------------------  
            turn_off:
              - service: input_boolean.turn_off # Запоминаем, что выключили кнопку
                data:
                  entity_id: input_boolean.enginie_button
              - service: pandora.stop_engine # Останавливаем двигатель
                data:
                  id: 1234567890 
              # следующие строчки можно удалить, если они вам мешают ---------
              - delay: 10                     # Обновляем каждые 
              - service: pandora.update_state # 10 секунд статус
              - delay: 10                     # авто, что бы
              - service: pandora.update_state # быстрее кнопка
              - delay: 10                     # стала активной
              - service: pandora.update_state # До сюда ----------------------              
            icon_template: >- # Смена иконок во включенном и выключенном состоянии
              {% if not ((is_state('input_boolean.enginie_button', 'on') and is_state('binary_sensor.creta_engine_state', 'on'))
                 or (is_state('input_boolean.enginie_button', 'off') and is_state('binary_sensor.creta_engine_state', 'off'))) %}
                mdi:timer-sand
              {% else %}
                {% if is_state('binary_sensor.creta_lock', 'on') %}
                  mdi:engine-off-outline
                {% else %}
                  {% if is_state('binary_sensor.creta_engine_state', 'on') %}
                    mdi:fan
                  {% else %}
                    {% if is_state('binary_sensor.creta_lock', 'on') %}
                      mdi:engine-off-outline
                    {% else %}
                      mdi:engine-outline
                    {% endif %}
                  {% endif %}
                {% endif %}
              {% endif %}
#-------------------------------------------------------------------------------------------
    lock:
      - platform: template
        name: auto
        value_template: "{{ is_state('binary_sensor.creta_lock', 'off') }}" # off - авто на охране
        availability_template: >- 
          {%- if ((is_state('input_boolean.lock_button', 'on') and is_state('binary_sensor.creta_lock', 'off'))
             or (is_state('input_boolean.lock_button', 'off') and is_state('binary_sensor.creta_lock', 'on')))
             and (is_state('binary_sensor.creta_connection_state', 'on'))
             %}
            true
          {%- endif %}
        lock:
          - service: input_boolean.turn_on # Запоминаем, что нажали закрыть авто
            data:
              entity_id: input_boolean.lock_button
          - service: pandora.lock # Закрываем авто
            data:
              id: 1234567890 
          # следующие строчки можно удалить, если они вам мешают ---------
          - delay: 10                     # Обновляем каждые 
          - service: pandora.update_state # 10 секунд статус
          - delay: 10                     # авто, что бы
          - service: pandora.update_state # быстрее кнопка
          - delay: 10                     # стала активной
          - service: pandora.update_state # До сюда ----------------------  
        unlock:
          - service: input_boolean.turn_off # Запоминаем, что нажали кнопку снятия с охраны
            data:
              entity_id: input_boolean.lock_button
          - service: pandora.unlock # Снимаем с охраны (сенсор становится ON)
            data:
              id: 1234567890 
          # следующие строчки можно удалить, если они вам мешают ---------
          - delay: 10                     # Обновляем каждые 
          - service: pandora.update_state # 10 секунд статус
          - delay: 10                     # авто, что бы
          - service: pandora.update_state # быстрее кнопка
          - delay: 10                     # стала активной
          - service: pandora.update_state # До сюда ----------------------  

#-------------------------------------------------------------------------------------------
    automation: 
    # Если вы завели двигатель, сняли-поставили авто на охрану не из ХА, то надо следующее:
      - alias:  Обновление состояния кнопки при остановки двигателя
        trigger:
          - platform: state
            entity_id: binary_sensor.creta_engine_state
            from: 'on'
            to: 'off' 
        action:        
          - service: input_boolean.turn_off
            data:
              entity_id: input_boolean.enginie_button

      - alias:  Обновление состояния кнопки при запуске двигателя
        trigger:
          - platform: state
            entity_id: binary_sensor.creta_engine_state
            from: 'off'
            to: 'on' 
        action:        
          - service: input_boolean.turn_on
            data:
              entity_id: input_boolean.enginie_button

      - alias:  Обновление состояния кнопки при постановке на охрану
        trigger:
          - platform: state
            entity_id: binary_sensor.creta_lock
            from: 'on'
            to: 'off' # Авто закрылось (поставилось на охрану)
        action:        
          - service: input_boolean.turn_on
            data:
              entity_id: input_boolean.lock_button

      - alias:  Обновление состояния кнопки при снятии с охраны
        trigger:
          - platform: state
            entity_id: binary_sensor.creta_lock
            from: 'off'
            to: 'on' # Авто открылось (снялось с охраны)
        action:        
          - service: input_boolean.turn_off
            data:
              entity_id: input_boolean.lock_button                        

Теперь добавляем кнопки в интерфейс. Для этого в ui-lovelace.yaml вставляем:
Включение/открытие долгим нажатие кнопки:

              - type: entity-button
                entity: lock.auto
                tap_action:  # По короткому:
                  action: more-info
                hold_action: # зажать, что бы открыть
                  action: toggle
              - type: entity-button
                entity: switch.engine
                tap_action:  # По короткому:
                  action: more-info
                hold_action: # зажать, что бы запустить
                  action: toggle

Спасибо за внимание)

1 Like

Получится. Сам пользую hassbian на RPi.

Добавил оставшиеся численные сенсоры:

  • Balance
  • Speed
  • Engine RPM
  • GSM level
  • Battery voltage

P.S. Переименовал некоторые старые имена сенсоров . Возможно придется перенастроить их в UI и автоматизациях.

1 Like

Оставшиеся сенсоры мы с Сергеем настроили самостоятельно. Ждем команд :innocent:

Добавил службы:

  • pandora.lock
  • pandora.unlock
  • pandora.start_engine
  • pandora.stop_engine
  • pandora.turn_on_ext_channel (ex. pandora.enable_seat_heater)
  • pandora.turn_off_ext_channel

В данных нужно по-прежнему указать id вашей машины в сервисе p-on.ru:

id: 1234567890

Также в конфигурацию добавил параметр polling_interval для регулирования интервала получения информации о состоянии сигнализации. В секундах. Не чаще, чем 1 раз 10с.

...

pandora:
  name:
    username: your_email@for_p-on.ru
    password: your_password_for_p-on.ru
    polling_interval: 30

...

Обновиться можно так:

cd /config/custom_components/pandora
git pull
exit

P.S. Далее бинарные сенсоры. В конце почищу и причешу код.

Сам проверил только старт и стоп. У меня запрещено снимать с охраны через GSM.
Пробуйте. Не забывайте отписывайться по результатам.

Проверил, снятие ,постановка запуск и остановка работает. Спасибо за отличный проект.

Все работает на “ура”!

1 Like

Чудненько!

1 Like

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

Поделитесь пожалуйста как :slight_smile: в частности интересуют статус постановки на охрану в первую очередь

Это один из бинарных сенсоров. Я их еще не доделалал. Все просили команды.

Очень ждём их, спасибо :blush: было бы удобно для отслеживания постановки и снятия с Охраны а автоматизациях. Ещё я заметил что в коде есть также запрос GPS координат, но куда они потом попадают в HA не нашёл

Координаты попадают в device tracker

Добрый день!
Похоже, pandora опять поломалась в 0.107:
2020-04-04 14:02:16 ERROR (MainThread) [homeassistant.components.binary_sensor] pandora: Error on device update!
File “/home/homeassistant/.homeassistant/custom_components/pandora/binary_sensor.py”, line 106, in update

А device tracker сам должен был создаться? Просто у меня не появился новый для машины после установки аддона, только сенсоры