In theory, you can program a device to act based on changes of an Ubidots variable. This could be done by either polling the cloud at periodic time intervals, or by subscribing to a variable using MQTT.
In practice, we only recommend using downlink commands to push configurations to remote devices, or better said, to perform "Virtual controls". The problem with physical controls is that, even though they are technically possible, they pose a huge risk when communication fails.
See some examples of Virtual vs Physical controls:
👍 Virtual controls
Change the update frequency of a device.
Reboot a device remotely.
Command a device to download a new firmware from a specific URL.
⚠️ Physical controls
Open/Close a water valve. DANGER: If the "close" command is not received, then a flood might happen.
Start/Stop a production line. DANGER: If the "start" command is received during a maintenance window, then an accident can happen.