How can i only allow published content to appear on the front page?
As far as I know scheduler module is not responsible for promoting or not nodes to the frontpage, so you have to go with a custom solution.
Try to implement hook_node_presave as follows:
/**
 * Implements hook_node_presave().
*/ 
function my_module_node_presave($node) {
  $was_published = !empty($node-&gt;original-&gt;unpublish_on);
  $now_is_unpublished = empty($node-&gt;unpublish_on);
  
  if (!$node-&gt;is_new &amp;&amp; $was_published &amp;&amp; $now_is_unpublished) {
    $node-&gt;promote = 0;
  }
}

Hope that helps!