Show Posts

This section allows you to view all posts made by this member. Note that you can only see posts made in areas you currently have access to.


Topics - Mace

Pages: [1]
1
Bug Reports / plugin error: System.Exception -> xJson
« on: March 26, 2015, 07:44:12 AM »
So I've been having a couple errors lately and the log doesn't really help me.

Version: 2.1.4.2
Running VC on Win 7 (service pack 1, .NET: 4.5) on a separate server to Kodi

command example:
Code: [Select]
<?xml version="1.0" encoding="utf-16"?>
<!--VoxCommando 2.1.4.2-->
<command id="856" name="Folder Path" enabled="true" alwaysOn="False" confirm="False" requiredConfidence="0" loop="False" loopDelay="0" loopMax="0" description="">
  <action>
    <cmdType>XJson.Raw</cmdType>
    <params>
      <param>XBMC.GetInfoLabels</param>
      <param>"labels" : ["Container.FolderPath"]</param>
    </params>
    <cmdRepeat>1</cmdRepeat>
  </action>
</command>

That's just an example, but it's randomly on everything.
error is: 
Code: [Select]
26/03/2015 8:29:09 PM 952 [plugin] Sending json request:
26/03/2015 8:29:09 PM 952 [plugin] {"jsonrpc": "2.0", "method": "XBMC.GetInfoLabels", "params":{"labels" : ["Container.FolderPath"]},"id": "0"}
26/03/2015 8:29:10 PM 305 [plugin] Web Exception while calling JSON RPC:{"jsonrpc": "2.0", "method": "XBMC.GetInfoLabels", "params":{"labels" : ["Container.FolderPath"]},"id": "0"}
System.Net.WebException: The underlying connection was closed: An unexpected error occurred on a receive. ---> System.IO.IOException: Unable to read data from the transport connection: An existing connection was forcibly closed by the remote host. ---> System.Net.Sockets.SocketException: An existing connection was forcibly closed by the remote host
   at System.Net.Sockets.Socket.Receive(Byte[] buffer, Int32 offset, Int32 size, SocketFlags socketFlags)
   at System.Net.Sockets.NetworkStream.Read(Byte[] buffer, Int32 offset, Int32 size)
   --- End of inner exception stack trace ---
   at System.Net.Sockets.NetworkStream.Read(Byte[] buffer, Int32 offset, Int32 size)
   at System.Net.PooledStream.Read(Byte[] buffer, Int32 offset, Int32 size)
   at System.Net.Connection.SyncRead(HttpWebRequest request, Boolean userRetrievedStream, Boolean probeRead)
   --- End of inner exception stack trace ---
   at System.Net.HttpWebRequest.GetResponse()
   at vcPlugin.xJsonHttpCommunicator.PostRequest(String strRequest)
26/03/2015 8:29:10 PM 305 [error] plugin error:
System.Exception: Failed to connect to XBMC:
System.Net.WebException: The underlying connection was closed: An unexpected error occurred on a receive. ---> System.IO.IOException: Unable to read data from the transport connection: An existing connection was forcibly closed by the remote host. ---> System.Net.Sockets.SocketException: An existing connection was forcibly closed by the remote host
   at System.Net.Sockets.Socket.Receive(Byte[] buffer, Int32 offset, Int32 size, SocketFlags socketFlags)
   at System.Net.Sockets.NetworkStream.Read(Byte[] buffer, Int32 offset, Int32 size)
   --- End of inner exception stack trace ---
   at System.Net.Sockets.NetworkStream.Read(Byte[] buffer, Int32 offset, Int32 size)
   at System.Net.PooledStream.Read(Byte[] buffer, Int32 offset, Int32 size)
   at System.Net.Connection.SyncRead(HttpWebRequest request, Boolean userRetrievedStream, Boolean probeRead)
   --- End of inner exception stack trace ---
   at System.Net.HttpWebRequest.GetResponse()
   at vcPlugin.xJsonHttpCommunicator.PostRequest(String strRequest)
   at vcPlugin.xJsonHttpCommunicator.PostRequest(String strRequest)
   at vcPlugin.xJsonHttpCommunicator.getObj(String[] allParameters)
   at vcPlugin.xJsonHttpCommunicator.jsonRaw(String[] allParameters, Boolean convertSlashToFwd)
   at vcPlugin.Plugin.doAction(String[] parsedActions, String[] parsedParams)
   at eval_d.eval_ᜃ(macroElement A_0, List`1 A_1, Int32 A_2)

I know this looks like a host thing more so than VC.
If I do a reconnect to webserver it works for a few seconds then decides to drop connection again.
It only ever seems to appear when trying to talk to Kodi on another windows 7 system.
I have a appletv and openelec kodi aswell and this error doesn't appear.
I can run a REST client from chrome on the same system as my server and have no issues, but i think that might connect differently.
I can log onto remote server on the same system as my server without a problem.
And my app on my iPad doesn't have any issues connecting.
I've been hunting logs on both systems and haven't found anything.
This is all the Kodi log saids:
Code: [Select]
   DEBUG: webserver: request received for /jsonrpc
   DEBUG: Previous line repeats 1 times.
   DEBUG: Thread JobWorker 12180 terminating (autodelete)
   DEBUG: webserver: request received for /jsonrpc
   DEBUG: Previous line repeats 1 times.

Does this error mean anything to you or is it something with my server?
Can you see anything there that might be a cause?
Any ideas on what other ways i can problem solve?

2
Here's a few commands to play a TV Episode by episode number from the TV Show->Season->Episode  window

Note: For this to work on all TV Shows you will need to tun off "Flatten TV show seasons" in Kodi.
Settings -> Video -> Library, change 'Flatten TV show seasons' to 'Never'. This stops Kodi displaying TV shows that only have 1 season differently to other multi season shows. The way Kodi reads these windows is different and screws up the command.


Big thanks to James for the inspiration: http://voxcommando.com/forum/index.php?topic=2059.0

How does it all work?
Everything runs from one single command "Play Episode {1}"
The other two commands will run depending on the outcome of "Play Episode {1}" command.
For this to work you need to be either watching a TV episode or viewing the episode list from the TV Show->Season.

Why bother?
1. Cause it's fun to learn all the cool stuff VC can do
2. Help others learn about how awesome Regular Expression is.
3. Cause it's nice to look at the screen and say "Play Episode 6"
4. ok, so on some systems it might be a little CPU Hungry.


Code: [Select]
<?xml version="1.0" encoding="utf-16"?>
<!--VoxCommando 2.1.4.2-->
<commandGroup open="True" name="Kodi TV Show Episodes" enabled="True" prefix="" priority="0" requiredProcess="" description="">
  <command id="751" name="Play Episode {1}" enabled="true" alwaysOn="False" confirm="False" requiredConfidence="0" loop="False" loopDelay="0" loopMax="0" description="">
    <action>
      <cmdType>XJson.Raw</cmdType>
      <params>
        <param>Player.GetActivePlayers</param>
      </params>
      <cmdRepeat>1</cmdRepeat>
    </action>
    <if ifBlockDisabled="False" ifNot="False">
      <ifType>(A)Contains(B)</ifType>
      <ifParams>{LastResult}&amp;&amp;"type": "video"</ifParams>
      <then>
        <action>
          <cmdType>VC.TellVox</cmdType>
          <params>
            <param>Play While Another Episode Currently Playing {1}</param>
          </params>
          <cmdRepeat>1</cmdRepeat>
        </action>
      </then>
      <else>
        <action>
          <cmdType>VC.TellVox</cmdType>
          <params>
            <param>Play from Episode List on Screen {1}</param>
          </params>
          <cmdRepeat>1</cmdRepeat>
        </action>
      </else>
    </if>
    <phrase>Play Episode</phrase>
    <payloadRange>1,30</payloadRange>
  </command>
  <command id="1509" name="Play from Epsode List on Screen" enabled="true" alwaysOn="False" confirm="False" requiredConfidence="0" loop="False" loopDelay="0" loopMax="0" description="">
    <action>
      <cmdType>XJson.Raw</cmdType>
      <params>
        <param>XBMC.GetInfoLabels</param>
        <param>"labels" : ["Container.FolderPath"]</param>
      </params>
      <cmdRepeat>1</cmdRepeat>
    </action>
    <action>
      <cmdType>Results.RegExSingle</cmdType>
      <params>
        <param>"Container.FolderPath": \s"videodb://tvshows/titles/*(\d.*?)/(\d.*?).*?"</param>
      </params>
      <cmdRepeat>1</cmdRepeat>
    </action>
    <if ifBlockDisabled="False" ifNot="True">
      <ifType>(A)&lt;(B)</ifType>
      <ifParams>0&amp;&amp;{Match. 1.1}</ifParams>
      <then>
        <action>
          <cmdType>TTS.Speak</cmdType>
          <params>
            <param>Please Select TV show and Season</param>
          </params>
          <cmdRepeat>1</cmdRepeat>
        </action>
        <action>
          <cmdType>XJson.ExecBuiltin</cmdType>
          <params>
            <param>Notification(Error:, Please Select Tv Show and Season First)</param>
          </params>
          <cmdRepeat>1</cmdRepeat>
        </action>
        <action>
          <cmdType>VC.StopMacro</cmdType>
          <params />
          <cmdRepeat>1</cmdRepeat>
        </action>
      </then>
      <else />
    </if>
    <action>
      <cmdType>XJson.Raw</cmdType>
      <params>
        <param>VideoLibrary.GetEpisodes</param>
        <param>"tvshowid":{Match.1.1}, "season":{Match.1.2}, "properties":["episode","season","tvshowid","title","showtitle"]</param>
      </params>
      <cmdRepeat>1</cmdRepeat>
    </action>
    <action>
      <cmdType>Results.RegExSingle</cmdType>
      <params>
        <param>"episode":\s{1},.*?"episodeid":\s*(\d*?),.*?"label":\s"(.*?)",.*?"season":\s(\d.*?),.*?"showtitle":\s"(.*?)",.*?"title":\s"(.*?)",.*?"tvshowid":\s(\d*).*?</param>
      </params>
      <cmdRepeat>1</cmdRepeat>
    </action>
    <if ifBlockDisabled="False" ifNot="True">
      <ifType>LastActionSuccess</ifType>
      <ifParams>&amp;&amp;</ifParams>
      <then>
        <action>
          <cmdType>Results.RegExSingle</cmdType>
          <params>
            <param>"season":\s*(\d*?),.*?"showtitle":\s"(.*?)",.*?"tvshowid":\s(\d*).*?</param>
          </params>
          <cmdRepeat>1</cmdRepeat>
        </action>
        <action>
          <cmdType>TTS.Speak</cmdType>
          <params>
            <param>Sorry, I found Season {Match.1.1} but not episode {1} - of {Match.1.2}</param>
          </params>
          <cmdRepeat>1</cmdRepeat>
        </action>
        <action>
          <cmdType>XJson.ExecBuiltin</cmdType>
          <params>
            <param>Notification(Not Found: No Episode {1} Found</param>
          </params>
          <cmdRepeat>1</cmdRepeat>
        </action>
        <action>
          <cmdType>XJson.Raw</cmdType>
          <params>
            <param>Gui.ActivateWindow</param>
            <param>"window":"video","parameters":["videodb://2/2/{Match.1.3}/{Match. 1.1}/"]</param>
          </params>
          <cmdRepeat>1</cmdRepeat>
        </action>
        <action>
          <cmdType>VC.StopMacro</cmdType>
          <params />
          <cmdRepeat>1</cmdRepeat>
        </action>
      </then>
      <else />
    </if>
    <action>
      <cmdType>XJson.Raw</cmdType>
      <params>
        <param>Player.Open</param>
        <param>"item":{"episodeid":{match.1.1}}</param>
      </params>
      <cmdRepeat>1</cmdRepeat>
    </action>
    <action>
      <cmdType>TTS.Speak</cmdType>
      <params>
        <param>Episode {1} - {Match. 1.5}</param>
      </params>
      <cmdRepeat>1</cmdRepeat>
    </action>
    <action>
      <cmdType>OSD.ShowText</cmdType>
      <params>
        <param>Now playing : {Match.1.4} - {Match. 1.2}</param>
      </params>
      <cmdRepeat>1</cmdRepeat>
    </action>
    <action>
      <cmdType>XJson.ExecBuiltin</cmdType>
      <params>
        <param>Notification(Now Playing:,{Match. 1.4}: {match. 1.2},5000)</param>
      </params>
      <cmdRepeat>1</cmdRepeat>
    </action>
    <phrase optional="true">Do not Need to use this phase - Use 'Play Episode {1}' Command</phrase>
    <phrase>Play from Episode list on Screen</phrase>
    <payloadRange>1,50</payloadRange>
  </command>
  <command id="931" name="Play While Another Episode Currently Playing" enabled="true" alwaysOn="False" confirm="False" requiredConfidence="0" loop="False" loopDelay="0" loopMax="0" description="">
    <action>
      <cmdType>XJson.Raw</cmdType>
      <params>
        <param>Player.GetItem</param>
        <param>"playerid": 1, "properties": ["title", "season", "episode", "showtitle","tvshowid" ]</param>
      </params>
      <cmdRepeat>1</cmdRepeat>
    </action>
    <action>
      <cmdType>Results.RegExSingle</cmdType>
      <params>
        <param>"episode":\s*(\d.*?),.*?"season":\s*(\d.*?),.*?"tvshowid":\s*(\d*?),.*?</param>
      </params>
      <cmdRepeat>1</cmdRepeat>
    </action>
    <action>
      <cmdType>XJson.Raw</cmdType>
      <params>
        <param>VideoLibrary.GetEpisodes</param>
        <param>"tvshowid":{Match.1.3}, "season":{Match.1.2}, "properties":["episode","season","tvshowid","title","showtitle"]</param>
      </params>
      <cmdRepeat>1</cmdRepeat>
    </action>
    <action>
      <cmdType>Results.RegExSingle</cmdType>
      <params>
        <param>"episode":\s{1},.*?"episodeid":\s*(\d*?),.*?"label":\s"(.*?)",.*?"season":\s(\d.*?),.*?"showtitle":\s"(.*?)",.*?"title":\s"(.*?)",.*?"tvshowid":\s(.\d.*?)}.*?</param>
      </params>
      <cmdRepeat>1</cmdRepeat>
    </action>
    <if ifBlockDisabled="False" ifNot="True">
      <ifType>LastActionSuccess</ifType>
      <ifParams>&amp;&amp;</ifParams>
      <then>
        <action>
          <cmdType>OSD.ShowText</cmdType>
          <params>
            <param>Episode {1} not Found</param>
          </params>
          <cmdRepeat>1</cmdRepeat>
        </action>
        <action>
          <cmdType>TTS.Speak</cmdType>
          <params>
            <param>Episode {1} not Found</param>
          </params>
          <cmdRepeat>1</cmdRepeat>
        </action>
        <action>
          <cmdType>XJson.ExecBuiltin</cmdType>
          <params>
            <param>Notification(Error:, No Episode {1} Found)</param>
          </params>
          <cmdRepeat>1</cmdRepeat>
        </action>
        <action>
          <cmdType>VC.StopMacro</cmdType>
          <params />
          <cmdRepeat>1</cmdRepeat>
        </action>
      </then>
      <else />
    </if>
    <action>
      <cmdType>XJson.Raw</cmdType>
      <params>
        <param>Player.Open</param>
        <param>"item":{"episodeid":{match.1.1}}</param>
      </params>
      <cmdRepeat>1</cmdRepeat>
    </action>
    <action>
      <cmdType>OSD.ShowText</cmdType>
      <params>
        <param>Now Playing: {Match.1.4} - {Match. 1.2}</param>
      </params>
      <cmdRepeat>1</cmdRepeat>
    </action>
    <action>
      <cmdType>TTS.Speak</cmdType>
      <params>
        <param>Episode {1} - {Match.1.5}</param>
      </params>
      <cmdRepeat>1</cmdRepeat>
    </action>
    <action>
      <cmdType>XJson.ExecBuiltin</cmdType>
      <params>
        <param>Notification(Now Playing:,{Match. 1.4}: {match. 1.2},5000)</param>
      </params>
      <cmdRepeat>1</cmdRepeat>
    </action>
    <phrase optional="true">Do not Need to use this phase - Use 'Play Episode {1}' Command</phrase>
    <phrase>Play While Another Episode Currently Playing</phrase>
    <payloadRange>1,50</payloadRange>
  </command>
</commandGroup>

I'd like to put them all in one command but it will be rather large and there's not quite the logic i need to use the error support.

If you see any improvements feel free to comment.

3
Other Plugins / xMySql Return Query
« on: March 15, 2015, 10:52:40 PM »
Hi,
Is it much effort, or possible, to have a MySql cmdType query?

Like an addition to the xMySql Plugin, so we can directly query a MySql server from VC and return a result to use. But nothing to do with creating a PayloadXML.

Would be really useful.  ;)

Mace

4
Does Python in VC have a way of communicating to MySQL Database?

5
Haven't looked too much into this yet, just putting the idea out there.

Can I make a multi-phase payload?

Example for TV shows:
To show - season - episode = episode Id

So have a 4 table payload where 3 tables need to match to send the value.
Or maybe 4 separate payloads, all in one seems much neater.
I haven't looked much into RegEx yet, maybe it's possible.

Feel free to offer suggestions.....

6
Bug Reports / Group Naming conflict
« on: March 02, 2015, 09:57:16 PM »
Hello,

Would like to offer a little info for user friendliness.
Recently i was trying to use a Confirm.'Group Name' as an event in my group to trigger a command. I kept getting the error "invalid xml", when trying to drag and drop, after some frustration at sourcing why this was happening i eventually worked out it was because i had the special character ' & ' in the title of my group. Yes i know, pretty basic issue for those in the know, but in my defense it was 1am. 

However this got me thinking, if i didn't know anything about xml formatting i would seriously have the shits on.

On to the point of this discussion. Is it possible to add a better error explanation, like  'no special characters allow' or something like that?

7
Feature Requests / Myo Armband & VC
« on: February 11, 2015, 03:03:54 AM »
Greetings all,

Would be great to have a little plugin to use gestures from Myo Armband.
From what i've read it seems pretty straight forward to have the standard 5 movements work with VC, but i'm not that smart to work out how to do it.

Mace

8
Python Scripting / Python & VoxCommando Season Call Function
« on: May 21, 2013, 07:33:52 AM »
A work around for selecting seasons. While this is achievable with the current commands, this work around lets you call a season without saying the full phrase again.

Step 1:
We will need a python file with this code: (Notepad++ works well)
Code: [Select]
def tvseason(com = dict):
    if com.has_key("Container.FolderPath"):
        return com.get("Container.FolderPath")

Save this file as seasoncall.py in the PY folder in your VoXCommando directory. (remember the .py on the end.

Step2:
Then use this command to load the python file at startup:

Code: [Select]
<command id="1436" name="load python startup code" enabled="true" alwaysOn="False" confirm="False" requiredConfidence="0" loop="False" loopDelay="0" loopMax="0" description="">
  <action>
    <cmdType>PY.ExecFile</cmdType>
    <cmdString>PY\seasoncall.py</cmdString>
    <cmdRepeat>1</cmdRepeat>
  </action>
  <phrase>load python startup code, load python startup script</phrase>
  <event>python ready</event>
</command>

Change seasoncall.py to what ever your python script is called, but once again remember the .py on the end.

The basics of the script is turn the JSON query into a dictionary (fortunately JSON return format from query's is already set as python dictionary. Then if the key is present in the query return the value for the key.

Step3:
You'll then need the commands to run the script:

Code: [Select]
<command id="1501" name="Season Call" enabled="true" alwaysOn="False" confirm="False" requiredConfidence="0" loop="False" loopDelay="0" loopMax="0" description="">
  <action>
    <cmdType>XJson.Raw</cmdType>
    <cmdString>XBMC.GetInfoLabels&amp;&amp;"labels" : ["Container.FolderPath"]</cmdString>
    <cmdRepeat>1</cmdRepeat>
  </action>
  <action>
    <cmdType>PY.ExecString</cmdType>
    <cmdString>result=tvfilter({LastResult})</cmdString>
    <cmdRepeat>1</cmdRepeat>
  </action>
  <action>
    <cmdType>XJson.Raw</cmdType>
    <cmdString>GUI.ActivateWindow&amp;&amp;"window": "video", "parameters": [ "{LastResult}{1}/" ]</cmdString>
    <cmdRepeat>1</cmdRepeat>
  </action>
  <phrase>show me season</phrase>
  <payloadRange>1,10</payloadRange>
</command>

Should look like this:


Keep in mind you must be looking at the season window for a tvshow in XBMC for this to work.

Something like this:


While this is a messy work around is does give everyone a bit of an idea what is possible with the python plugin.
The python script can be adjusted for pretty much any JSON query which is cool.

Script attached at the bottom. Feel free to download and copy to the PY folder.
 

9
Here is a guide for being able to play an episode by name:

Step 1:- Making the Payload.xml file
Open the Xsql plugin, select Plugins then select Xsql

Settings:
Export XML to Folder: .\\XbmcPayloads (or where ever you choose to save this file, adjust the command to point to it.)

In the OutPut (XML payload files) section, add this:
Type: video
Query: select idEpisode, c00 from episode
Filename: xbmcTvEpisodes
Sub: tick
Click Save and Generate
This will create a new PayloadXML with 'episode ID' and 'episode Titles' from all the TVSeries in your database.

This is the command to play:
Code: [Select]
<command id="688" name="Play Episode" enabled="true" alwaysOn="False" confirm="False" requiredConfidence="0" loop="False" loopDelay="0" loopMax="0" description="">
  <action>
    <cmdType>XJson.Raw</cmdType>
    <cmdString>Player.Open&amp;&amp;"item" : {"episodeid" : {1} }</cmdString>
    <cmdRepeat>1</cmdRepeat>
  </action>
  <phrase>Play Episode</phrase>
  <payloadFromXML phraseOnly="False" use2partPhrase="False" phraseConnector="by" Phrase2wildcard="anyone">XbmcPayloads\xbmcTvEpisodes.xml</payloadFromXML>
</command>

Should look like this:


Any episodes with the same name will just play the first instance of that name in the database. Currently I have about 1500 episodes in my database and haven't had this happened yet. A common example is most TV series start with a “pilot “ episode, this will just play the pilot episode of the first TV series in the database.

Enjoy :)

10
Here is a guide for using the live TV function in XBMC Frodo.

<a href="
">See this video for installing VoxCommando with XBMC Frodo.[/url]

Step 1:- Making a TV Payloads.xml file: If you have run the Xsql plug-in correctly then you already have an xbmcTvChannel.xml file in ?XbmcPayloads? folder. Go to Step 2.
If not then from VC window select Plugins then select Xsql
Export XML to Folder: .\\XbmcPayloads (or where ever you choose to save this file, adjust the command to point to it.)

In the OutPut (XML payload files) section add this:
Type: TV
Query: select idChannel, sChannelName from channels where bIsRadio=0
Filename: xbmcTvChannels
Sub: tick

Click Save and Generate

Step 2: Making the commands ? (copy this command to your command tree)

Code: [Select]
<command id="711" name="Live TV Channel" enabled="true" alwaysOn="False" confirm="False" requiredConfidence="0" loop="False" loopDelay="0" loopMax="0" description="">
  <action>
    <cmdType>XJson.Raw</cmdType>
    <cmdString>Player.Open&amp;&amp;"item" : {"channelid" : {1}}</cmdString>
    <cmdRepeat>1</cmdRepeat>
  </action>
  <action>
    <cmdType>XJson.Raw</cmdType>
    <cmdString>GUI.ShowNotification&amp;&amp;"title" : "{LastSpoken}" , "message" : ""</cmdString>
    <cmdRepeat>1</cmdRepeat>
  </action>
  <phrase optional="true">Switch to, Play</phrase>
  <phrase>Channel</phrase>
  <payloadFromXML phraseOnly="False" use2partPhrase="False" phraseConnector="by" Phrase2wildcard="anyone">XbmcPayloads\xbmcTvChannels.xml</payloadFromXML>
</command>

and you're done!

Should look like this:


Here's some optional extras for getting the program guide up: -

This one is for the PVR window Program Guide:

Code: [Select]
<command id="1511" name="PVR Screen" enabled="true" alwaysOn="False" confirm="False" requiredConfidence="0" loop="False" loopDelay="0" loopMax="0" description="">
            <action>
                <cmdType>XJson.ExecBuiltin</cmdType>
                <cmdString>ActivateWindowAndFocus(mypvr, 31,0, 10,0)</cmdString>
                <cmdRepeat>1</cmdRepeat>
            </action>
            <phrase>Program Guide</phrase>
        </command>

In the PVR window:



And this one shows a Program Guide on-screen while watching tv:

Code: [Select]
<command id="1465" name="EPG On Screen" enabled="true" alwaysOn="False" confirm="False" requiredConfidence="0" loop="False" loopDelay="0" loopMax="0" description="">
  <action>
    <cmdType>XJson.Raw</cmdType>
    <cmdString>GUI.ActivateWindow&amp;&amp;"window" : "pvrosdchannels"</cmdString>
    <cmdRepeat>1</cmdRepeat>
  </action>
  <phrase>Program Guide On Screen</phrase>
</command>

On Screen:



Command Group File attached if you wish to install as group.

Update: 03/03/2015
Here's a couple updates to better suit the new kodi api.

for TvGuide:
Change -
      to ->

for TvGuide on Screen:-
Change -
      to ->

Can also add a new Command to go to the Live TV channel list:
               

11
Other Plugins / xSQL and xJSON how they work?
« on: May 15, 2013, 04:48:58 AM »
What does xJson do differently when generating an xml compared to xSQL?

I can add another table from any XBMC database to the xSQL generator and it will make the file.
How do i make xJSON do the same thing?

12
VoxCommando Basics and Core Features / Repeat command
« on: May 09, 2013, 04:48:37 PM »
Hello
I have a question which may benifit others to know.
Is there a way to have VC repeat a command from a payload?

I know I can place a value in the repeat box of the LBC, but can I use a variable and place {1} in the box instead?
So I can repeat a command based on the variable I use each time the command is executed.

13
Python Scripting / Python and voxcommando with infrared signals
« on: May 03, 2013, 02:27:56 PM »
Greeting's all
Another new guy to VC, found the program on XBMC forums and absolutely loving it. My extend of knowledge with programming is as much as installing XBMC, although I've now spent three days on learning Python and I'm hooked!

A bit about my setup:
Amplifier
Projector
HTPC (XBMC on OpenELEC)
Television
Using Global Cache iTach to control all devices.

At the moment I'm using VC on my pc learning how things work.
I've a managed to setup IR Codes from VC to iTach via EventGhost. I know James is working on a TCPip plugin, but until then I'm having fun learning.

*side note* - if using iConvert from Global Cache to convert hex decimal ir codes to global cache codes make sure to close VC and EG, cause if you copy and paste hex codes into iConvert it won't work. Trust me I spent a full day learning hex codes to find the problem, in the end it was just cause VC was open. Something about the two program's that iConvert doesn't like. Once converted to global cache code everything works fine.

1. What I'd like to do is have all my IR Codes in one file with the code needed to connect to the iTach and just call on words to send the codes eg:
TV-On = ircode
TV-Off = ircode
The bit I'm stuck on is the connection between VC and calling the code. I know the macro  PY.ExecFile to execute a python file, but from there I'm lost. Do I put something in the parameter to run it or execute something or does it go in a payload? Speaking of which, parameters and payloads I still haven't completely understood yet. I'm guessing something like a payload XML might help?
Does anyone know of some good documentation that might help explain how python, XML and VC work together? Or some more tutorials I haven't found yet?

2. I've also been playing around with groups, which by the way is a 'WAY COOL' feature.  Is there a way to have a group return to the previous state?
Eg: group 1, 2, and 3.
Group 1 & 2 are enabled - give a command and 1 & 2 are disabled and 3 is enabled. At this point, is there a command to have 3 disable and not just enable 1 &2 but use something that returns to previous state which a would be 1 & 2 enabled and 3 disabled.

Well that's about it, feel free to share some advice, in the mean time ill keep reading.
Thumbs up on such a great product too.

Pages: [1]