That's not what's happening.
VC cannot scrape ISY if it is not using a valid URL.
http://192.168.1.5/rest/nodes/{1}/ST is certainly not a valid URL.
It becomes a valid URL when you issue the command correctly, so that the node ID *replaces* {1} in your macro, and then VC will scrape that URL.
Your command is not working when you issue it because you are not issuing the command correctly, somehow.
Either there's something wrong with your payloadXML file, or with how you are saying the command.
Or, if you are not saying the command but trying to execute it by clicking "save and execute" then you have not entered a node ID in the Test payload field as demonstrated in the video.
I'm sorry for the following super-long post. I hope it's manageable. I discuss both the command you posted today, as well as the original suggestion.
----
It *is* possible to get the status of a specific device using the method you were trying, but it will be a bit more complicated than the way I originally suggested.
I can't decide if it will be helpful or just confusing to explain why. But here goes.
Your command phrase that you posted is: What is the {ISY Node Name} status?
the {ISY Node Name} refers to the payload XML file you created, in which you have friendly names associated with node IDs.
The only way VoxCommando can then use that node ID that you specify in your voice command is for you to have the equivalent payload value {1} in your command macro.
Using a payload in your command phrase is not enough. You need to pass that to the macro.
Let's look at the original command format that I suggested for a second.
In the *original* command that I suggested, the node ID should have been passed into the URL:
http://192.168.1.5/rest/nodes/{1}/ST
So, if you had verbally issued (i.e., said) the command "What is my {thermostat} status", then VC would know to use the node ID associated with that friendly name: 11 B3 8F 1, and it would pass that into the URL in the Scrape action.
http://192.168.1.5/rest/nodes/11 B3 8F 1/ST
But if you don't actually say the command but instead just try to "save and execute" without giving the command a payload value, VC would have had no idea what {1} stands for, and it would not have scraped the proper URL. In other words, there is no such URL as:
http://192.168.1.5/rest/nodes/{1}/ST. We have to issue the command correctly, passing a proper node ID value to the command.
Now back to the command you're trying to use, which you posted today:
<?xml version="1.0" encoding="utf-16"?>
<!--VoxCommando 2.1.4.2-->
<command id="512" name="Device Status {1}" enabled="true" alwaysOn="False" confirm="False" requiredConfidence="0" loop="False" loopDelay="0" loopMax="0" description="">
<action>
<cmdType>Scrape</cmdType>
<params>
<param>http://192.168.1.5/rest/status</param>
<param>don</param>
<param>dond</param>
</params>
<cmdRepeat>1</cmdRepeat>
</action>
<action>
<cmdType>RegExTool.Open</cmdType>
<params>
<param>True</param>
</params>
<cmdRepeat>1</cmdRepeat>
</action>
<action>
<cmdType>Results.RegEx</cmdType>
<params>
<param>node\sid="(.*?)"><property\sid="(.*?)"\svalue="(.*?)"\sformatted="(.*?)"</param>
</params>
<cmdRepeat>1</cmdRepeat>
</action>
<if ifBlockDisabled="False" ifNot="False">
<ifType>(A)Contains(B)</ifType>
<ifParams>{Match.1.4}&&{Match.1.4}</ifParams>
<then>
<action>
<cmdType>OSD.ShowText</cmdType>
<params>
<param>{PF.1} is currently {Match.1.4}</param>
</params>
<cmdRepeat>1</cmdRepeat>
</action>
<action>
<cmdType>TTS.SpeakSync</cmdType>
<params>
<param>{PF.1} is currently {Match.1.4}</param>
</params>
<cmdRepeat>1</cmdRepeat>
</action>
</then>
<else />
</if>
<action>
<cmdType />
<params />
<cmdRepeat>1</cmdRepeat>
</action>
<phrase>Is the, What is the</phrase>
<payloadFromXML phraseOnly="False" use2partPhrase="True" phraseConnector="by" Phrase2wildcard="anyone" optional="False">payloads\ISYNodeNames.xml</payloadFromXML>
<phrase>On Off , Status</phrase>
</command>
If you choose to scrape all devices, then in order to get the status of one specific device, you should tell the command which device you are interested in. That means passing it the node ID as a payload value, so it knows which node to isolate out of all the possible nodes.
But nowhere in that command have you specified the node ID. That is, {1} is missing from your macro. So VC will have no idea which device it should be looking for in the feedback that it receives from ISY.
Your current regular expression is:
node\sid="(.*?)"><property\sid="(.*?)"\svalue="(.*?)"\sformatted="(.*?)"
{Match.1.4} will return the formatted value of the very first device listed. In your case, that is always the thermostat.
So how can you find the node you're actually interested in? Instead of using a general pattern that will match for every device you have, you should instead use a pattern that only works for the node you are interested in.
In other words, tell it what node ID to find.
node\sid="{1}"><property\sid="(.*?)"\svalue="(.*?)"\sformatted="(.*?)"
So, if you ask for the "motion detector low battery" status, its node ID (14 2E B1 3) is passed into the regular expression.
node\sid="14 2E B1 3"><property\sid="(.*?)"\svalue="(.*?)"\sformatted="(.*?)"
Note that now you only have 3 sets of brackets in your regular expression, so the "formatted" value will be {Match.1.3} now (you're not capturing the node id).
Unfortunately, now we get into a complication caused by how regular expressions work. So while the above is correct as a concept, we have more tap-dancing to do because your node IDs have spaces in them, and regular expressions don't like spaces. (This is why you use "\s" in your regex above.)
Here is one way to overcome the problem. What we do is:
1. Pass the payload {1} value into the command and set it to be the {LastResult}
2. Then we replace the spaces with a . character (you could also use \s)
3. We save the node id, now in the format like 14.2E.B1.3 as a variable I call "device".
4. Now you can use the {var.device} variable in the regular expression.
<?xml version="1.0" encoding="utf-16"?>
<!--VoxCommando 2.1.4.6-->
<command id="512" name="Device Status {1}" enabled="true" alwaysOn="False" confirm="False" requiredConfidence="0" loop="False" loopDelay="0" loopMax="0" description="">
<action>
<cmdType>Results.SetLastResult</cmdType>
<params>
<param>{1}</param>
</params>
<cmdRepeat>1</cmdRepeat>
</action>
<action>
<cmdType>Results.Replace</cmdType>
<params>
<param><![CDATA[ ]]></param>
<param>.</param>
</params>
<cmdRepeat>1</cmdRepeat>
</action>
<action>
<cmdType>Results.SetVar</cmdType>
<params>
<param>device</param>
<param>{LastResult}</param>
</params>
<cmdRepeat>1</cmdRepeat>
</action>
<action>
<cmdType>Scrape</cmdType>
<params>
<param>http://192.168.1.5/rest/status</param>
<param>don</param>
<param>dond</param>
</params>
<cmdRepeat>1</cmdRepeat>
</action>
<action>
<cmdType>Results.RegEx</cmdType>
<params>
<param>node\sid="{var.device}"><property\sid="(.*?)"\svalue="(.*?)"\sformatted="(.*?)"</param>
</params>
<cmdRepeat>1</cmdRepeat>
</action>
<action>
<cmdType>OSD.ShowText</cmdType>
<params>
<param>{PF.1} is currently {Match.1.3}</param>
</params>
<cmdRepeat>1</cmdRepeat>
</action>
<action>
<cmdType>TTS.Speak</cmdType>
<params>
<param>{PF.1} is currently {Match.1.3}</param>
</params>
<cmdRepeat>1</cmdRepeat>
</action>
<phrase>Is the, What is the</phrase>
<payloadFromXML phraseOnly="False" use2partPhrase="True" phraseConnector="by" Phrase2wildcard="anyone" optional="False">payloads\ISYNodeNames.xml</payloadFromXML>
<phrase>On, Off , Status</phrase>
</command>
Personally, I think my original suggestion to use the status URL that specific to each node is a cleaner solution, but this way also works.