This role allows you to configure tasmota devices by executing commands.
💡 See https://tasmota.github.io/docs/#/Commands for a command list.
This role/action_plugin will send commands to a tasmota device using web requests.
It will perform the following steps for each provided command
,value
pair in the tasmota_commands
:
- It will retrieve the current setting of the provided
command
- It will compare the result of this with the incoming
value
- when the new value differs from the existing value the command is executed with the new value and the task will report with
changed
- when there is no change detected the command will not execute the command (this will avoid restarts on several commands)
- when the new value differs from the existing value the command is executed with the new value and the task will report with
This role requires some python requirements to be installed.
pip install -r requirements.txt
You have to disable fact gathering using gather_facts: no
because tasmota devices are currently not supported by the facts module.
Some commands like SetOption
are accepting int
values, like 0
or 1
but are returning on
or off
when queried for the current status.
This may cause wrong reported "changed" states. You are welcome to create a PR for adding support for uncovered commands.
Available variables are listed below, along with their default values:
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: ''
If tasmota_user and tasmota password are both non-empty, they will be included in the commands to authenticate access.
If any of the mqtt configuration values is set, a single Backlog
command will be issued automatically after running the commands.
Tasmota commands contains list of tasmota commands to be executed. Each tasmota_command is defined as:
- command: <COMMAND>
value: <VALUE>
e.g.
tasmota_commands:
# set TelePeriod to 10 seconds
- command: TelePeriod
value: 10
# extend TelePeriod to 3600 seconds when switch is turned off, set do default when switch is turned on
- command: Rule1
value: "on Power1#state=0 do TelePeriod 3600 endon on Power1#state=1 do TelePeriod 1 endon"
# enable Rule1
- command: Rule1
value: 1
# enable one shot for Rule1
- command: Rule1
value: 5
# set and enable template (not that template is not a string)
- 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 # Template
# configure multiple TuyaMCU Functions (repeat for each fnId,dpId pair)
- command: TuyaMCU
value: 11,10
- command: TuyaMCU
value: 12,13
# make sure that TuyaMCU fnId is disabled or missing
- command: TuyaMCU
value: 11,0
# Configure Timer16 to trigger a Rule once a day at 06:00 (+-0:05) to restart the device
- 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
# Example for no_log
- command: MqttPassword
value: MySafePassword
no_log: True
To avoid specifying tasmota_commands
for each host using host_vars you can use a construct similar to this:
# commands for all instances
default_tasmota_commands:
# set custom NtpServer
- command: NtpServer1
value: 192.168.0.1
- command: LedState
value: 0
# specific commands
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([])) }}"
Sets the TelePeriod
to 10 seconds to all devices specified in the tasmota
host group.
- hosts: tasmota_devices
# disable fact gathering since this is currently not possible on tasmota devices
gather_facts: no
vars:
tasmota_commands:
- command: TelePeriod
value: 10
roles:
- tobias_richter.tasmota
Apache 2.0