VoxCommando

Help and Support (Using VoxCommando) => Command Builder Reference => Topic started by: RickyD333 on May 07, 2015, 01:38:09 PM

Title: Second Counter - A little stuck on getting finishing touch
Post by: RickyD333 on May 07, 2015, 01:38:09 PM
I'm making a second counter for some workout routines. The concept is to say, "set clock for xx seconds." Then Vox says, "setting clock for xx seconds." Now I have it working at that point. So if I set the clock for 30 seconds, at the end of that time Vox will say, "30 seconds are up." However, I'm stuck on figuring out how to make it wait for me to say "begin" to then start the timer. I suppose I could have it require confirmation and have one of my confirmation phrases be "begin," but I have the confirmation set to expire after a certain amount of time elapses -- I think I have it set to 20 seconds. I would like to be able to wait longer than that set time to begin the timer.

I'm having one other small problem with the timer too (it's probably really simple). If I set the timer for 30 seconds, Vox should say at the end of that time, "30 seconds are up." But I can't seem to get it to say the number of seconds. It's just saying the payload number, "1".

Here's what I have so far:

Code: [Select]
<?xml version="1.0" encoding="utf-16"?>
<!--VoxCommando 2.1.4.2-->
<commandGroup open="True" name="Second counter" enabled="True" prefix="" priority="0" requiredProcess="" description="">
  <command id="409" name="Timer" enabled="true" alwaysOn="False" confirm="False" requiredConfidence="0" loop="False" loopDelay="0" loopMax="0" description="">
    <action>
      <cmdType>VC.SetEventTimer</cmdType>
      <params>
        <param>0h 0m {1}s</param>
        <param>Timer</param>
      </params>
      <cmdRepeat>1</cmdRepeat>
    </action>
    <action>
      <cmdType>TTS.Speak</cmdType>
      <params>
        <param>Clock set for {1} seconds</param>
      </params>
      <cmdRepeat>1</cmdRepeat>
    </action>
    <phrase>set clock for</phrase>
    <payloadRange>1,60</payloadRange>
    <phrase>second, seconds</phrase>
  </command>
  <command id="425" name="Say When time is up" enabled="true" alwaysOn="False" confirm="False" requiredConfidence="0" loop="False" loopDelay="0" loopMax="0" description="">
    <action>
      <cmdType>TTS.Speak</cmdType>
      <params>
        <param>{1} seconds are up</param>
      </params>
      <cmdRepeat>1</cmdRepeat>
    </action>
    <event>Timer</event>
  </command>
</commandGroup>
Title: Re: Second Counter - A little stuck on getting finishing touch
Post by: nime5ter on May 07, 2015, 02:03:39 PM
Try three commands and set a variable for your timer. Along the lines of:

Code: [Select]
<?xml version="1.0" encoding="utf-16"?>
<!--VoxCommando 2.1.4.6-->
<commandGroup open="True" name="RickyD Second Counter" enabled="True" prefix="" priority="0" requiredProcess="" description="">
  <command id="720" name="set clock for {1} seconds" enabled="true" alwaysOn="False" confirm="False" requiredConfidence="0" loop="False" loopDelay="0" loopMax="0" description="">
    <action>
      <cmdType>TTS.Speak</cmdType>
      <params>
        <param>Clock set for {1} seconds.</param>
      </params>
      <cmdRepeat>1</cmdRepeat>
    </action>
    <action>
      <cmdType>Results.SetVar</cmdType>
      <params>
        <param>timer</param>
        <param>{1}</param>
      </params>
      <cmdRepeat>1</cmdRepeat>
    </action>
    <phrase>Set clock for</phrase>
    <payloadRange>1,60</payloadRange>
    <phrase>second, seconds</phrase>
  </command>
  <command id="721" name="start timer" enabled="true" alwaysOn="False" confirm="False" requiredConfidence="0" loop="False" loopDelay="0" loopMax="0" description="Note that you have three optional payloads in VC.SetEventTimer. In your original version, you could have passed {1} as a payload to be used in the other command.">
    <action>
      <cmdType>VC.SetEventTimer</cmdType>
      <params>
        <param>{var.timer}</param>
        <param>Timer</param>
      </params>
      <cmdRepeat>1</cmdRepeat>
    </action>
    <action>
      <cmdType>TTS.Speak</cmdType>
      <params>
        <param>Counting down {var.timer} seconds.</param>
      </params>
      <cmdRepeat>1</cmdRepeat>
    </action>
    <phrase>start timer, begin</phrase>
  </command>
  <command id="722" name="time's up" enabled="true" alwaysOn="False" confirm="False" requiredConfidence="0" loop="False" loopDelay="0" loopMax="0" description="">
    <action>
      <cmdType>TTS.Speak</cmdType>
      <params>
        <param>{var.timer} seconds are up.</param>
      </params>
      <cmdRepeat>1</cmdRepeat>
    </action>
    <event>Timer</event>
  </command>
</commandGroup>
Title: Re: Second Counter - A little stuck on getting finishing touch
Post by: PegLegTV on May 07, 2015, 02:10:58 PM
Quote
I'm having one other small problem with the timer too (it's probably really simple). If I set the timer for 30 seconds, Vox should say at the end of that time, "30 seconds are up." But I can't seem to get it to say the number of seconds. It's just saying the payload number, "1".


in order for this to work you needed to place the seconds in the payload field after the event name in the VC.SetEventTimer action

This should do the trick, I created a third command that sets a variable to the number of seconds,

then the second command uses that variable to set the event timer when you say start the clock

and then the third is for the timer ending,


Code: [Select]
<?xml version="1.0" encoding="utf-16"?>
<!--VoxCommando 2.1.4.5-->
<commandGroup open="True" name="Second counter" enabled="True" prefix="" priority="0" requiredProcess="" description="">
  <command id="1113" 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>Timmer</param>
        <param>{1}</param>
      </params>
      <cmdRepeat>1</cmdRepeat>
    </action>
    <action>
      <cmdType>TTS.Speak</cmdType>
      <params>
        <param>Clock set for {Var.Timer} seconds</param>
      </params>
      <cmdRepeat>1</cmdRepeat>
    </action>
    <phrase>Set clock for </phrase>
    <payloadRange>1,60</payloadRange>
    <phrase>second, seconds</phrase>
  </command>
  <command id="443" name="Start Timer" enabled="true" alwaysOn="False" confirm="False" requiredConfidence="0" loop="False" loopDelay="0" loopMax="0" description="">
    <action>
      <cmdType>VC.SetEventTimer</cmdType>
      <params>
        <param>0h 0m {Var.Timer}s</param>
        <param>Timer</param>
        <param>{Var.Timer}</param>
      </params>
      <cmdRepeat>1</cmdRepeat>
    </action>
    <action>
      <cmdType>TTS.Speak</cmdType>
      <params>
        <param>{Var.Timer} Second Clock Started</param>
      </params>
      <cmdRepeat>1</cmdRepeat>
    </action>
    <phrase>Start the Clock</phrase>
  </command>
  <command id="442" name="Say When time is up" enabled="true" alwaysOn="False" confirm="False" requiredConfidence="0" loop="False" loopDelay="0" loopMax="0" description="">
    <action>
      <cmdType>TTS.Speak</cmdType>
      <params>
        <param>{1} seconds are up</param>
      </params>
      <cmdRepeat>1</cmdRepeat>
    </action>
    <event>Timer</event>
  </command>
</commandGroup>


Nime5ter responded while I was replying,
but I thought I would still share, mine does the same thing except mine has the varibale carried as a payload with the VC.SetEventTimer action like nime5ter noted in the command it's self
Title: Re: Second Counter - A little stuck on getting finishing touch
Post by: RickyD333 on May 07, 2015, 02:27:07 PM
Awesome, thanks guys! I love dissecting these commands people make. Learning new stuff all the time.
Title: Re: Second Counter - A little stuck on getting finishing touch
Post by: RickyD333 on May 07, 2015, 05:55:54 PM
Okay, so I've been trying to figure out how to modify this to do minutes instead of seconds (or maybe modify this one action to do either minutes or seconds...might as well throw in hours because I am thinking of using this command for purposes other than working out, such as cooking). I'm not understanding something with this command to allow me to do this. I've been using Nime5ter's xml to tinker around and also another command that James posted somewhere on the forum for setting reminders (and that one I actually came closest to getting it to work... I think. I thought I had it working for a minute, literally, but when I tried to have it countdown for two minutes it instead just did one :P  ). I'm missing something and I don't know what.

Thanks for your help guys.
Title: Re: Second Counter - A little stuck on getting finishing touch
Post by: nime5ter on May 07, 2015, 06:34:02 PM
Yes, that's slightly more complicated.

If I were using the group above as my starting point, I might do something like this. Note that you can't combine minutes and seconds here -- one or the other. Not sure if that's an issue for you. There are other ways to do it, if so.

Code: [Select]
<?xml version="1.0" encoding="utf-16"?>
<!--VoxCommando 2.1.4.6-->
<commandGroup open="True" name="RickyD Second Counter minutes or seconds" enabled="True" prefix="" priority="0" requiredProcess="" description="">
  <command id="720" name="set clock for {1} {2}" enabled="true" alwaysOn="False" confirm="False" requiredConfidence="0" loop="False" loopDelay="0" loopMax="0" description="">
    <action>
      <cmdType>Results.SetVar</cmdType>
      <params>
        <param>timer</param>
        <param>{1}{2}</param>
      </params>
      <cmdRepeat>1</cmdRepeat>
    </action>
    <action>
      <cmdType>Results.RegEx</cmdType>
      <params>
        <param>\w.*?({1}.*?)$</param>
        <param />
        <param>{LastSpoken}</param>
      </params>
      <cmdRepeat>1</cmdRepeat>
    </action>
    <action>
      <cmdType>Results.SetVar</cmdType>
      <params>
        <param>friendlyTime</param>
        <param>{Match.1}</param>
      </params>
      <cmdRepeat>1</cmdRepeat>
    </action>
    <action>
      <cmdType>TTS.Speak</cmdType>
      <params>
        <param>Clock set for {var.friendlyTime} .</param>
      </params>
      <cmdRepeat>1</cmdRepeat>
    </action>
    <phrase>Set clock for</phrase>
    <payloadRange>1,60</payloadRange>
    <payloadFromXML phraseOnly="False" use2partPhrase="False" phraseConnector="by" Phrase2wildcard="anyone" optional="False">payloads\timer_unit.xml</payloadFromXML>
  </command>
  <command id="721" name="start timer" enabled="true" alwaysOn="False" confirm="False" requiredConfidence="0" loop="False" loopDelay="0" loopMax="0" description="">
    <action>
      <cmdType>VC.SetEventTimer</cmdType>
      <params>
        <param>{var.timer}</param>
        <param>Timer</param>
      </params>
      <cmdRepeat>1</cmdRepeat>
    </action>
    <action>
      <cmdType>TTS.Speak</cmdType>
      <params>
        <param>Counting down {var.friendlyTime}.</param>
      </params>
      <cmdRepeat>1</cmdRepeat>
    </action>
    <phrase>start timer, begin</phrase>
  </command>
  <command id="722" name="time's up" 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.timer}&amp;&amp;1</ifParams>
      <then>
        <action>
          <cmdType>TTS.Speak</cmdType>
          <params>
            <param> {var.friendlyTime} is up.</param>
          </params>
          <cmdRepeat>1</cmdRepeat>
        </action>
      </then>
      <else>
        <action>
          <cmdType>TTS.Speak</cmdType>
          <params>
            <param> {var.friendlyTime} are up.</param>
          </params>
          <cmdRepeat>1</cmdRepeat>
        </action>
      </else>
    </if>
    <event>Timer</event>
  </command>
</commandGroup>

Edited to fix my logic block: should be A==B, not A contains B.
Title: Re: Second Counter - A little stuck on getting finishing touch
Post by: Dave on May 07, 2015, 06:43:39 PM
Here is another way, but nime5ters commands are of course a bit more elegant  ;)
Code: [Select]
<?xml version="1.0" encoding="utf-16"?>
<!--VoxCommando 2.1.3.8-->
<commandGroup open="True" name="RickyD Second Counter" enabled="True" prefix="" priority="0" requiredProcess="" description="">
  <command id="720" name="set clock for {1} seconds" enabled="true" alwaysOn="False" confirm="False" requiredConfidence="0" loop="False" loopDelay="0" loopMax="0" description="">
    <if ifBlockDisabled="False" ifNot="False">
      <ifType>(A)Contains(B)</ifType>
      <ifParams>{LastSpoken}&amp;&amp;minute</ifParams>
      <then>
        <action>
          <cmdType>TTS.Speak</cmdType>
          <params>
            <param>Clock set for {1} minutes.</param>
          </params>
          <cmdRepeat>1</cmdRepeat>
        </action>
        <action>
          <cmdType>Results.SetVar</cmdType>
          <params>
            <param>timerM</param>
            <param>{1}</param>
          </params>
          <cmdRepeat>1</cmdRepeat>
        </action>
        <action>
          <cmdType>Results.SetVar</cmdType>
          <params>
            <param>timerS</param>
            <param>0</param>
          </params>
          <cmdRepeat>1</cmdRepeat>
        </action>
      </then>
      <else>
        <action>
          <cmdType>TTS.Speak</cmdType>
          <params>
            <param>Clock set for {1} seconds.</param>
          </params>
          <cmdRepeat>1</cmdRepeat>
        </action>
        <action>
          <cmdType>Results.SetVar</cmdType>
          <params>
            <param>timerS</param>
            <param>{1}</param>
          </params>
          <cmdRepeat>1</cmdRepeat>
        </action>
        <action>
          <cmdType>Results.SetVar</cmdType>
          <params>
            <param>timerM</param>
            <param>0</param>
          </params>
          <cmdRepeat>1</cmdRepeat>
        </action>
      </else>
    </if>
    <phrase>Set clock for</phrase>
    <payloadRange optional="true">1,60</payloadRange>
    <payloadFromXML phraseOnly="False" use2partPhrase="False" phraseConnector="by" Phrase2wildcard="anyone" optional="False">test.xml</payloadFromXML>
    <phrase>second, seconds, minute, minutes</phrase>
  </command>
  <command id="721" name="start timer" enabled="true" alwaysOn="False" confirm="False" requiredConfidence="0" loop="False" loopDelay="0" loopMax="0" description="Note that you have three optional payloads in VC.SetEventTimer. In your original version, you could have passed {1} as a payload to be used in the other command.">
    <action>
      <cmdType>VC.SetEventTimer</cmdType>
      <params>
        <param>{var.timerM}m {var.timerS}s</param>
        <param>Timer</param>
      </params>
      <cmdRepeat>1</cmdRepeat>
    </action>
    <if ifBlockDisabled="False" ifNot="False">
      <ifType>(A)==(B)</ifType>
      <ifParams>{var.timerM}&amp;&amp;0</ifParams>
      <then>
        <action>
          <cmdType>TTS.Speak</cmdType>
          <params>
            <param>Counting down {var.timerS} seconds.</param>
          </params>
          <cmdRepeat>1</cmdRepeat>
        </action>
      </then>
      <else>
        <action>
          <cmdType>TTS.Speak</cmdType>
          <params>
            <param>Counting down {var.timerM} minutes.</param>
          </params>
          <cmdRepeat>1</cmdRepeat>
        </action>
      </else>
    </if>
    <phrase>start timer, begin</phrase>
  </command>
  <command id="722" name="time's up" 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.timerM}&amp;&amp;0</ifParams>
      <then>
        <action>
          <cmdType>TTS.Speak</cmdType>
          <params>
            <param>{var.timerS} seconds are up.</param>
          </params>
          <cmdRepeat>1</cmdRepeat>
        </action>
      </then>
      <else>
        <action>
          <cmdType>TTS.Speak</cmdType>
          <params>
            <param>{var.timerM} minutes are up.</param>
          </params>
          <cmdRepeat>1</cmdRepeat>
        </action>
      </else>
    </if>
    <event>Timer</event>
  </command>
</commandGroup>
Title: Re: Second Counter - A little stuck on getting finishing touch
Post by: nime5ter on May 07, 2015, 06:56:26 PM
:)  We have an expression in English: "There's more than one way to skin a cat." (Equivalent to 'Viele Wege führen nach Rom.')

Thanks for posting your alternative method. I wish more people would post different solutions to questions. Keep them coming!


Title: Re: Second Counter - A little stuck on getting finishing touch
Post by: RickyD333 on May 07, 2015, 07:14:17 PM
Is there anything I have to edit within the command to make it work on my pc? Because neither of these commands works for me. I just selected the xml, copied, pasted it into my command tree, saved it, refreshed, and tested. I'll attach my log in case that helps...

Title: Re: Second Counter - A little stuck on getting finishing touch
Post by: nime5ter on May 07, 2015, 07:26:13 PM
Looks like you didn't download the payload XML file that I attached to my post, so unless you guess what was in there and made your own, you should see a bright red payload in your command tree.

If you look at the commands I posted, the initial command uses payload XML.

(And you should always save and exit the tree after pasting in new commands, so that your tree rebuilds.)
Title: Re: Second Counter - A little stuck on getting finishing touch
Post by: Dave on May 07, 2015, 07:32:36 PM
Sorry my mistake, now it should work:
Code: [Select]
<?xml version="1.0" encoding="utf-16"?>
<!--VoxCommando 2.1.3.8-->
<commandGroup open="True" name="RickyD Second Counter" enabled="True" prefix="" priority="0" requiredProcess="" description="">
  <command id="736" name="set clock for {1} seconds" enabled="true" alwaysOn="False" confirm="False" requiredConfidence="0" loop="False" loopDelay="0" loopMax="0" description="">
    <if ifBlockDisabled="False" ifNot="False">
      <ifType>(A)Contains(B)</ifType>
      <ifParams>{LastSpoken}&amp;&amp;minute</ifParams>
      <then>
        <action>
          <cmdType>TTS.Speak</cmdType>
          <params>
            <param>Clock set for {1} minutes.</param>
          </params>
          <cmdRepeat>1</cmdRepeat>
        </action>
        <action>
          <cmdType>Results.SetVar</cmdType>
          <params>
            <param>timerM</param>
            <param>{1}</param>
          </params>
          <cmdRepeat>1</cmdRepeat>
        </action>
        <action>
          <cmdType>Results.SetVar</cmdType>
          <params>
            <param>timerS</param>
            <param>0</param>
          </params>
          <cmdRepeat>1</cmdRepeat>
        </action>
      </then>
      <else>
        <action>
          <cmdType>TTS.Speak</cmdType>
          <params>
            <param>Clock set for {1} seconds.</param>
          </params>
          <cmdRepeat>1</cmdRepeat>
        </action>
        <action>
          <cmdType>Results.SetVar</cmdType>
          <params>
            <param>timerS</param>
            <param>{1}</param>
          </params>
          <cmdRepeat>1</cmdRepeat>
        </action>
        <action>
          <cmdType>Results.SetVar</cmdType>
          <params>
            <param>timerM</param>
            <param>0</param>
          </params>
          <cmdRepeat>1</cmdRepeat>
        </action>
      </else>
    </if>
    <phrase>Set clock for</phrase>
    <payloadRange>1,60</payloadRange>
    <phrase>second, seconds, minute, minutes</phrase>
  </command>
  <command id="737" name="start timer" enabled="true" alwaysOn="False" confirm="False" requiredConfidence="0" loop="False" loopDelay="0" loopMax="0" description="Note that you have three optional payloads in VC.SetEventTimer. In your original version, you could have passed {1} as a payload to be used in the other command.">
    <action>
      <cmdType>VC.SetEventTimer</cmdType>
      <params>
        <param>{var.timerM}m {var.timerS}s</param>
        <param>Timer</param>
      </params>
      <cmdRepeat>1</cmdRepeat>
    </action>
    <if ifBlockDisabled="False" ifNot="False">
      <ifType>(A)==(B)</ifType>
      <ifParams>{var.timerM}&amp;&amp;0</ifParams>
      <then>
        <action>
          <cmdType>TTS.Speak</cmdType>
          <params>
            <param>Counting down {var.timerS} seconds.</param>
          </params>
          <cmdRepeat>1</cmdRepeat>
        </action>
      </then>
      <else>
        <action>
          <cmdType>TTS.Speak</cmdType>
          <params>
            <param>Counting down {var.timerM} minutes.</param>
          </params>
          <cmdRepeat>1</cmdRepeat>
        </action>
      </else>
    </if>
    <phrase>start timer, begin</phrase>
  </command>
  <command id="738" name="time's up" 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.timerM}&amp;&amp;0</ifParams>
      <then>
        <action>
          <cmdType>TTS.Speak</cmdType>
          <params>
            <param>{var.timerS} seconds are up.</param>
          </params>
          <cmdRepeat>1</cmdRepeat>
        </action>
      </then>
      <else>
        <action>
          <cmdType>TTS.Speak</cmdType>
          <params>
            <param>{var.timerM} minutes are up.</param>
          </params>
          <cmdRepeat>1</cmdRepeat>
        </action>
      </else>
    </if>
    <event>Timer</event>
  </command>
</commandGroup>
Title: Re: Second Counter - A little stuck on getting finishing touch
Post by: RickyD333 on May 07, 2015, 07:56:52 PM
 :bonk

Awesome! You guys are fantastic.
Title: Re: Second Counter - A little stuck on getting finishing touch
Post by: Dave on May 08, 2015, 09:22:08 AM
I modified my code a little bit, so now you can mix minutes and seconds in your command  ;D

Possible voice commands are:
Set clock for XX minutes.
Set clock for XX seconds.
Set clock for XX minutes and YY seconds.
Set clock for XX minutes, YY seconds.


That was a fun one  :biglaugh

Code: [Select]
<?xml version="1.0" encoding="utf-16"?>
<!--VoxCommando 2.1.3.8-->
<commandGroup open="True" name="RickyD Second Counter minutes and seconds mixed" enabled="True" prefix="" priority="0" requiredProcess="" description="">
  <command id="751" name="set clock for {1} seconds" enabled="true" alwaysOn="False" confirm="False" requiredConfidence="0" loop="False" loopDelay="0" loopMax="0" description="">
    <if ifBlockDisabled="False" ifNot="False">
      <ifType>(A)Contains(B)</ifType>
      <ifParams>{LastSpoken}&amp;&amp;minute</ifParams>
      <then>
        <action>
          <cmdType>Results.SetVar</cmdType>
          <params>
            <param>timerM</param>
            <param>{1}</param>
          </params>
          <cmdRepeat>1</cmdRepeat>
        </action>
      </then>
      <else>
        <action>
          <cmdType>Results.SetVar</cmdType>
          <params>
            <param>timerM</param>
            <param>0</param>
          </params>
          <cmdRepeat>1</cmdRepeat>
        </action>
        <action>
          <cmdType>Results.SetVar</cmdType>
          <params>
            <param>timerS</param>
            <param>{1}</param>
          </params>
          <cmdRepeat>1</cmdRepeat>
        </action>
        <action>
          <cmdType>TTS.Speak</cmdType>
          <params>
            <param>Clock set for {1} seconds.</param>
          </params>
          <cmdRepeat>1</cmdRepeat>
        </action>
        <action>
          <cmdType>VC.StopMacro</cmdType>
          <params />
          <cmdRepeat>1</cmdRepeat>
        </action>
      </else>
    </if>
    <if ifBlockDisabled="False" ifNot="False">
      <ifType>(A)Contains(B)</ifType>
      <ifParams>{LastSpoken}&amp;&amp;second</ifParams>
      <then>
        <action>
          <cmdType>TTS.Speak</cmdType>
          <params>
            <param>Clock set for {1} minutes and {2} seconds.</param>
          </params>
          <cmdRepeat>1</cmdRepeat>
        </action>
        <action>
          <cmdType>Results.SetVar</cmdType>
          <params>
            <param>timerS</param>
            <param>{2}</param>
          </params>
          <cmdRepeat>1</cmdRepeat>
        </action>
      </then>
      <else>
        <action>
          <cmdType>TTS.Speak</cmdType>
          <params>
            <param>Clock set for {1} minutes.</param>
          </params>
          <cmdRepeat>1</cmdRepeat>
        </action>
        <action>
          <cmdType>Results.SetVar</cmdType>
          <params>
            <param>timerS</param>
            <param>0</param>
          </params>
          <cmdRepeat>1</cmdRepeat>
        </action>
      </else>
    </if>
    <phrase>Set clock for</phrase>
    <payloadRange>1,60</payloadRange>
    <phrase>second, seconds, minute, minutes</phrase>
    <phrase optional="true">and</phrase>
    <payloadRange optional="true">1,59</payloadRange>
    <phrase optional="true">second, seconds, minute, minutes</phrase>
  </command>
  <command id="752" name="start timer" enabled="true" alwaysOn="False" confirm="False" requiredConfidence="0" loop="False" loopDelay="0" loopMax="0" description="Note that you have three optional payloads in VC.SetEventTimer. In your original version, you could have passed {1} as a payload to be used in the other command.">
    <action>
      <cmdType>VC.SetEventTimer</cmdType>
      <params>
        <param>{var.timerM}m {var.timerS}s</param>
        <param>Timer</param>
      </params>
      <cmdRepeat>1</cmdRepeat>
    </action>
    <if ifBlockDisabled="False" ifNot="False">
      <ifType>(A)==(B)</ifType>
      <ifParams>{var.timerM}&amp;&amp;0</ifParams>
      <then>
        <action>
          <cmdType>TTS.Speak</cmdType>
          <params>
            <param>Counting down {var.timerS} seconds.</param>
          </params>
          <cmdRepeat>1</cmdRepeat>
        </action>
        <action>
          <cmdType>VC.StopMacro</cmdType>
          <params />
          <cmdRepeat>1</cmdRepeat>
        </action>
      </then>
      <else />
    </if>
    <if ifBlockDisabled="False" ifNot="False">
      <ifType>(A)==(B)</ifType>
      <ifParams>{var.timerS}&amp;&amp;0</ifParams>
      <then>
        <action>
          <cmdType>TTS.Speak</cmdType>
          <params>
            <param>Counting down {var.timerM} minutes.</param>
          </params>
          <cmdRepeat>1</cmdRepeat>
        </action>
      </then>
      <else>
        <action>
          <cmdType>TTS.Speak</cmdType>
          <params>
            <param>Counting down {var.timerM} minutes and {var.timerS} seconds.</param>
          </params>
          <cmdRepeat>1</cmdRepeat>
        </action>
      </else>
    </if>
    <phrase>start timer, begin</phrase>
  </command>
  <command id="753" name="time's up" 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.timerM}&amp;&amp;0</ifParams>
      <then>
        <action>
          <cmdType>TTS.Speak</cmdType>
          <params>
            <param>{var.timerS} seconds are up.</param>
          </params>
          <cmdRepeat>1</cmdRepeat>
        </action>
        <action>
          <cmdType>VC.StopMacro</cmdType>
          <params />
          <cmdRepeat>1</cmdRepeat>
        </action>
      </then>
      <else />
    </if>
    <if ifBlockDisabled="False" ifNot="False">
      <ifType>(A)==(B)</ifType>
      <ifParams>{var.timerS}&amp;&amp;0</ifParams>
      <then>
        <action>
          <cmdType>TTS.Speak</cmdType>
          <params>
            <param>{var.timerM} minutes are up.</param>
          </params>
          <cmdRepeat>1</cmdRepeat>
        </action>
      </then>
      <else>
        <action>
          <cmdType>TTS.Speak</cmdType>
          <params>
            <param>{var.timerM} minutes and {var.timerS} seconds are up.</param>
          </params>
          <cmdRepeat>1</cmdRepeat>
        </action>
      </else>
    </if>
    <event>Timer</event>
  </command>
</commandGroup>
Title: Re: Second Counter - A little stuck on getting finishing touch
Post by: nime5ter on May 08, 2015, 09:43:24 AM
 :clap
Title: Re: Second Counter - A little stuck on getting finishing touch
Post by: jitterjames on May 08, 2015, 09:44:24 AM
Nice!  ::bow
Title: Re: Second Counter - A little stuck on getting finishing touch
Post by: RickyD333 on May 09, 2015, 03:56:17 PM
Dave, you're a wizard!