tasmota

Ansible Galaxy Статус сборки

tobias_richter.tasmota

Эта роль позволяет настраивать устройства tasmota, выполняя команды.

:bulb: Смотрите https://tasmota.github.io/docs/#/Commands для списка команд.

Эта роль/action_plugin будет отправлять команды на устройство tasmota с помощью веб-запросов. Она выполнит следующие шаги для каждой пары command, value, указанных в tasmota_commands:

  • Получит текущее значение заданной команды
  • Сравнит его с пришедшим значением
    • Если новое значение отличается от существующего, команда выполняется с новым значением, и задача отразится как changed
    • Если изменения не обнаружены, команда не будет выполняться (это поможет избежать перезагрузок при нескольких командах)

Требования

Эта роль требует установки некоторых зависимостей на Python.

pip install -r requirements.txt

Ограничения

Сбор фактов

Вы должны отключить сбор фактов, указав gather_facts: no, так как устройства tasmota в данный момент не поддерживаются модулем фактов.

Отчет о changed

Некоторые команды, такие как SetOption, принимают значения int, как 0 или 1, но возвращают on или off при запросе текущеего статуса. Это может привести к неверному отчету о "измененных" состояниях. Вы можете создать PR, чтобы добавить поддержку недостающих команд.

Переменные роли

Доступные переменные перечислены ниже с их значениями по умолчанию:

    tasmota_user: '' 
    tasmota_password: ''
    tasmota_commands: []
    tasmota_mqtt_user: ''
    tasmota_mqtt_password: ''
    tasmota_mqtt_host: ''
    tasmota_mqtt_port: ''
    tasmota_mqtt_client: ''
    tasmota_mqtt_topic: ''
    tasmota_mqtt_fulltopic: ''
    tasmota_mqtt_no_log: true

Если tasmota_user и tasmota_password не пустые, они будут включены в команды для аутентификации.

Если любое из значений конфигурации mqtt задано, будет автоматически выполнена команда Backlog после выполнения команд.

Команды tasmota содержат список команд, которые необходимо выполнить. Каждая команда определяется так:

- command: <COMMAND>
  value: <VALUE>
  

например:

tasmota_commands:
    
    # установить TelePeriod на 10 секунд
  - command: TelePeriod
    value: 10
    
    # увеличить TelePeriod до 3600 секунд, когда переключатель выключен, установить по умолчанию, когда переключатель включен
  - command: Rule1
    value: "on Power1#state=0 do TelePeriod 3600 endon on Power1#state=1 do TelePeriod 1 endon"
    
    # включить Rule1
  - command: Rule1
    value: 1
    
    # включить одноразовое действие для Rule1
  - command: Rule1
    value: 5

    # установить и включить шаблон (обратите внимание, что шаблон не строка)
  - command: Template
    value: {NAME: FooModule, GPIO: [1,2272,1,2304,1,1,0,0,1,1,1,1,1,0], FLAG: 0, BASE: 54}
  - command: Module
    value: 0 # Шаблон

    # настроить несколько функций TuyaMCU (повторить для каждой пары fnId, dpId)
  - command: TuyaMCU
    value: 11,10
  - command: TuyaMCU
    value: 12,13

    # убедиться, что fnId TuyaMCU отключен или отсутствует
  - command: TuyaMCU
    value: 11,0

    # Настроить Timer16 для триггера правила раз в день в 06:00 (+-0:05) для перезагрузки устройства
  - command: Timer16
    value: '{"Enable":1,"Time":"06:00","Window":5,"Days":"1111111","Repeat":1,"Output":1,"Action":3, "Mode":0}'
  - command: Rule3
    value: "on Clock#Timer=16 do Restart 1 endon"
  - command: Rule3
    value: 1
  - command: Timers
    value: 1

    # Пример для no_log
  - command: MqttPassword
    value: MySafePassword
    no_log: True

Советы

Чтобы избежать указания tasmota_commands для каждого хоста, используя host_vars, вы можете использовать конструкцию, аналогичную этой:

# команды для всех экземпляров
default_tasmota_commands:
  # установить пользовательский NtpServer
  - command: NtpServer1
    value: 192.168.0.1
  - command: LedState
    value: 0      

# специфические команды 
specific_tasmota_commands:
  tasmota001:
    - command: FriendlyName1
      value: TV

  tasmota002:
    - command: FriendlyName1
      value: HiFi

tasmota_commands: "{{ default_tasmota_commands | union(specific_tasmota_commands[inventory_hostname] | default([])) }}"

Пример

Устанавливает TelePeriod на 10 секунд для всех устройств, указанных в группе хостов tasmota.

- hosts: tasmota_devices  
  # отключение сбора фактов, так как это в настоящее время невозможно для устройств tasmota  
  gather_facts: no
  vars:
    tasmota_commands:
        - command: TelePeriod
          value: 10
  roles:
    - tobias_richter.tasmota

Лицензия

Apache 2.0

О проекте

Ansible Role for managing tasmota devices with tasmota commands.

Установить
ansible-galaxy install tobias-richter/ansible-tasmota
Лицензия
apache-2.0
Загрузки
873
Владелец
Expert DevOps Engineer