Scheduled Upload to a server

I will like to create a functionality to upload the state of all things monitored by my gateway to a server. How do I implement it? As a thing? Add-on? Rule?

You would want to do this in an add-on (or even just a separate script). See here for a good example: https://github.com/tim-hellhake/azure-iot-bridge