tobias_richter.tasmota
tobias_richter.tasmota
这个角色允许您通过执行命令来配置 Tasmota 设备。
:bulb: 请查看 https://tasmota.github.io/docs/#/Commands 获取命令列表。
此角色/操作插件将通过 Web 请求向 Tasmota 设备发送命令。
它将对每个提供的 command
和 value
对进行以下步骤处理:
- 检索提供的
command
的当前设置 - 将结果与传入的
value
进行比较- 当新值与现有值不同时,将以新值执行命令,任务将报告为
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 命令包含要执行的 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