I have a smart contract that has a price (let's say it gets updated every hour). The price is defined on some website. Using Chainlink oracles, is it possible to get the variable updated only when the price changes (i.e. have the oracle push the price to the contract)? Or can the price only be updated whenever the contract sends the request to the oracle (i.e. by calling sendChainlinkRequestTo)?
You can use the fluxmonitor initiator to kick off a job only when the off-chain price updates. As this is a newer feature, documentation isn't out yet.
This is the initiator currently being used to power Chainlink Price Feeds.
You could also build an external initiator, but the fluxmonitor will be easier to work with.