Define variables:

$temp-eco = 20
$temp-comf = 22
$temp-memory = 20
$temp-setpoint = 20

I also have a DummySwitch device for vacation mode named vacation-switch

Check if someone changed the thermostat to auto mode. This mode is also enabled if the cube is restarted:

when every 15 minutes and $heating-thermostat.mode = "auto" then set mode of heating-thermostat to "manu"

To avoid mistakes of cube connection errors or the “cube is busy” syndrom, check whether all commands were done successfully:

when [every 1 minute and [$temp-setpoint is not $heating-thermostat.temperatureSetpoint 
    and $heating-thermostat.temperatureSetpoint > 4.5]] or $temp-setpoint changes 
        then set temp of heating-thermostat to $temp-setpoint

Allow manual adjustment via the GUI or directly at the thermostat:

when $heating-thermostat.temperatureSetpoint changes 
    and $heating-thermostat.temperatureSetpoint is not $temp-setpoint 
    and $heating-thermostat.temperatureSetpoint > 4.5
        then $temp-setpoint = $heating-thermostat.temperatureSetpoint

Save energy if a window is opened and not closed again

when window is opened for 1 minute then $temp-setpoint = 5

Fall back to heating plan when window is closed:

when window is closed then $temp-setpoint = $temp-memory

Turn the heater up in the morning if someone is at home

when it is 6:00 and vacation-switch is off then set $temp-memory to $temp-comf
when it is 6:01 and window is closed and vacation-switch is off then $temp-setpoint = $temp-comf

Cool down the heater in the evening:

when it is 18:30 then set $temp-memory to $temp-eco
when it is 18:31 and window is closed then $temp-setpoint = $temp-eco