The Remote (VVVV) module was recently reviewed for debugging and has not yet been tested excessively enough to recommended it for any other use but research on the module itself.
v3 2008-07-09 12:15
bug fixed in XML creation subpatchhttp://vvvv.org/tiki-download_file.php?fileId=1710"style="color:#006699;Remote (VVVV) Quick Demo </a>
Remote (VVVV) is a module that lets you remote-control your IOBoxes (Value Advanced) - meaning: change (and retreive) their values without any explicit link to the box. To get a quick idea of what this is about, check the following patch before diving into the explanation of how this is done:
The Remote (VVVV) node keeps a list of the IOBoxes you registered with it. This list - called Remote List - contains the relative (to the location of the list file) path to the patch the IOBox is located in, a unique ID, the original descriptive name of the IOBox, and the current value. This data is then used to change the IOBoxes values via the PatchAlias, GetPatch, XPath and SetPatch nodes of VVVV. To do this effectively, the Remote (VVVV) node has an Interface Pin which receives commands from any Interface that speaks the very simple protocoll. This setup has two main purposes:
Although the Remote (VVVV) node is encapsulated & simplified as much as possible, there are some things to know about operating it which might cause confusion if you are unfamiliar with them; you are kindly urged to read the following manual to make the most out of your new Remote (VVVV).
The Remote (VVVV) node saves all the data necessary to identify registered IOBoxes in the Remote List. Keeping the list in the buffer eats some resources; to save these the list is closed on Startup, and can also be closed manually or by an Interface. Be aware:
See 'Overwriting existing lists' for the safety pin on this behavior.
IOBoxes can be registered and unregistered with the Remote List by selecting them and banging the 'Register Selection' pin on the Remote (VVVV). A quick way to do this is to open an Inspektor, attach it to the Remote (VVVV), select the IOBox in question and bang the pin directly on the Inspektor. The recommended more comfortable solution is connecting a Keyboard (System Global) Shortcut to the pin; Control + Alt + R is suggested. There are two important caveats to this:
The values of registered IOBoxes can be changed at any time since there are no hardwired link to their Inputs. But for the change to be reflected in the Remote List, the pin 'Listen for Changes' must be enabled. Any changes made to a registered IOBox while this pin is toggled on will be saved with the Remote List instantly.
The pin 'Set List Values OnOpen' opens the Remote List on Startup, sets all registered IOBoxes to the values saved in the list and closes the list afterwards. This is the recommended mode when changing values by accessing the list file with an external program. To manually (re)load, save & close the Remote List or apply the values found in the list to the IOBoxes in the running patches, use the 'Manual' pins found on the Remove (VVVV).
If an existing Remote List is not loaded on startup and new IOBoxes are registered, the Remote (VVVV) node will assume that a new list should be started and overwrite the old one. When this happens unintentional, it is quite aggravating. If you don't want this to happen, enable the 'Keep Open (Safe Mode)' pin. It causes the Remote List to be opened on Startup and prevents it from being closed during runtime.
The Config (VVVV GUI) Interface supplied with the Remote (VVVV) makes exemplary use of the simple protocoll for communication. Connect it in the same way found in the Quick Demo found above. Control Keys are:
The 'Interface Input' pin on the Remote (VVVV) acts on commands formatted as Strings. The following commands are implemented:
(Re)Loads the Remote List from file.
Saves the current content of the list buffer to the file.
Sets all registered IOBoxes found in the current list buffer to the values found in the current list buffer.
Empties the current list buffer.
Sets the value(s) of the IOBox registered under the RemoteID to those found inside the "". To set spreads, simply separate the values within the "" with commas.
Remote (VVVV) registers & unregisters selected IOBoxes from the Remote List which contains the relative paths to the patches these IOBoxes can be found in, their Descriptive Names & Y Input Values. Remote (VVVV) can be told to listen for any manual value changes in registered IOBoxes and update the list accordingly. Remote (VVVV) outputs all the data in the Remote List so that any Interface can relate them to the user. Remote (VVVV) can be told to change specific values by any Interface that is capable of its small interfacing protocoll.
Remote (VVVV) uses XML-nodes (PatchAlias, GetPatch, XPath, SetPatch) for its main functions; most of them involve some sort of search mechanism to sift through all running patches and find the registered IOBoxes to set / retreive their Y Input Values. It is vital for these functions that the Remote List is loaded (buffered) at the time of execution. Most importantly, if you want to register / unregister any Boxes to / from an existing list, make sure that is is currently loaded to prevent overwriting an existing file.
Unregisters all IOBoxes and returns their Descriptive Names to normal. Needs a loaded Remote List to operate on.
Checks for changes to registered IOBoxes in the active patch and updates the Remote List if any are found.
Adds / Removes Entries to / from the Remote List. Only selected IOBoxes with Descriptive Names can be added to the list. Also, their Value must have changed at least once (otherwise it can't be found in the XML of the patch).
for communicating with an Interface. Allows for loading, setting or changing values from, saving and closing the Remote List. The specific protocoll can be found to the right.
Manual copies of operations on the Remote List usually performed by an Interface. Note that the Remote List gets saved automatically whenever an IOBox is (un)registered or changed while 'Listen for Changes' is turned on. For Operation without an Interface, if - for example - the Remote List file is changed by an external program, you can incorporate these changes by loading, setting from & closing the Remote List again. Be aware that loading takes 2 frames (1 to load, 2 to buffer), while setting takes 1 frame for each value to set (XPath isn't spreadable yet). There is a security mechanism that prevents closing before all XML operations a completed. The close command will be buffered, so there is no need to look after that on the users side.
is equivalent to a Manual Load, Manual Set from List & Manual Close on startup. Recommended to initiate the patch properly even when the Interface is sleeping.
Registering and unregistering IOBoxes only works when the Remote List is loaded; registering any IOBox while no list is loaded will result in overwriting any previous list. Safe Mode prevents the list from being closed; neither the Interface nor the Manual Close can do anything about that.
The file to write the Remote List to. The file MUST be supplied with an absolute path, and it MUST reside in the same directory as the root patch. All patches with registered IOBoxes inside of them must reside in the same or deeper hierarchy than the file because Remote (VVVV) saves their locations in relation to the list file.
GReat stuff! Really impressing... :]
i only stumbled over that you need to save the patch after changing selections.
it should be possible in the future to save a patch by xml command however i didn't try it yet. maybe that would be cool. however maybe you also don't want to save your patch everytime when changing selections (cause there is only one backup of your patch ~.xml...)
had some trouble to get it working with the newest private beta but now it looks good...
now that xpath is spreadable, there is some more work for me to do on this :)
anonymous user login