Better way of doing this?

First, see How to use code fences

The warning is because you are creating a variable (timer_lightoff, and timer_lighton in this case) and you never use them, just like the warning says.

Since you are never using them, why create them?

    createTimer(now.plusMinutes(5), [|
        frontporch.sendCommand(OFF)
        fronthall.sendCommand(OFF)
        logInfo( "rules", "Timer - front porch going off.[{}]", frontporch.state )
    ])

Just throw away the result of createTimer. By using local variables that is what you are doing anyway. You only need to keep the timer in a variable (global variable mind you) if you need to interact with the timer later from another rule or another run of this rule, such as cancelling it or rescheduling it.