tobias_richter.tasmota

Ansible Galaxy Build Status

tobias_richter.tasmota

这个角色允许您通过执行命令来配置 Tasmota 设备。

:bulb: 请查看 https://tasmota.github.io/docs/#/Commands 获取命令列表。

此角色/操作插件将通过 Web 请求向 Tasmota 设备发送命令。 它将对每个提供的 commandvalue 对进行以下步骤处理:

  • 检索提供的 command 的当前设置
  • 将结果与传入的 value 进行比较
    • 当新值与现有值不同时,将以新值执行命令,任务将报告为 changed
    • 当未检测到变化时,不会执行命令(这将避免在多个命令上重启)

要求

此角色需要安装一些 Python 库。

pip install -r requirements.txt

限制

事实收集

您必须通过 gather_facts: no 禁用事实收集,因为目前 Tasmota 设备不支持事实模块。

changed 报告

一些命令(如 SetOption)接受 int 值,如 01,但在查询当前状态时返回 onoff。 这可能导致错误的“已更改”状态报告。欢迎您创建 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_usertasmota_password 都不为空,它们将被包含在命令中以进行身份验证。

如果设置了任何 MQTT 配置值,则在运行命令后将自动发出一个 Backlog 命令。

Tasmota 命令包含要执行的 Tasmota 命令列表。 每个 tasmota_command 定义如下:

- 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

    # 确保 TuyaMCU fnId 被禁用或丢失
  - 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,您可以使用类似于以下的结构:

# 所有实例的命令
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.tasmota
许可证
apache-2.0
下载
1.1k
拥有者
Expert DevOps Engineer