No problem if you prefer to use Python, but here is another method.
*** NOTE: The following VC command concept can be used without any Python to ensure that VC ignores the timers that you want reset, and only reacts to the last timer that you set. ***
If anyone would like more explanation of what's happening, let us know. Basically, it just uses a time stamp variable to keep track of which timer was set last.
<?xml version="1.0" encoding="utf-16"?>
<!--VoxCommando 2.0.0.0-->
<commandGroup open="True" name="validate timer" enabled="True" prefix="" priority="0" requiredProcess="" description="">
<command id="259" name="set timer" enabled="true" alwaysOn="False" confirm="False" requiredConfidence="0" loop="False" loopDelay="0" loopMax="0" description="">
<action>
<cmdType>Results.SetVar</cmdType>
<params>
<param>timestamp</param>
<param>{DtCustom.H:mm:ss}</param>
</params>
<cmdRepeat>1</cmdRepeat>
</action>
<action>
<cmdType>VC.SetEventTimer</cmdType>
<params>
<param>3m</param>
<param>lights.off</param>
<param>{var.timestamp}</param>
</params>
<cmdRepeat>1</cmdRepeat>
</action>
<action>
<cmdType>OSD.ShowText</cmdType>
<params>
<param>timer set</param>
</params>
<cmdRepeat>1</cmdRepeat>
</action>
<phrase>set timer</phrase>
</command>
<command id="275" name="decide whether lights off" enabled="true" alwaysOn="False" confirm="False" requiredConfidence="0" loop="False" loopDelay="0" loopMax="0" description="">
<if ifBlockDisabled="False" ifNot="False">
<ifType>(A)==(B)</ifType>
<ifParams>{var.timestamp}&&{1}</ifParams>
<then>
<action>
<cmdType>OSD.ShowText</cmdType>
<params>
<param>Turning out the lights.</param>
</params>
<cmdRepeat>1</cmdRepeat>
</action>
</then>
<else>
<action>
<cmdType>OSD.ShowText</cmdType>
<params>
<param>Killing this timer.</param>
</params>
<cmdRepeat>1</cmdRepeat>
</action>
</else>
</if>
<event>lights.off</event>
</command>
</commandGroup>