Active Topics

 



Notices


Reply
Thread Tools
marxian's Avatar
Posts: 2,448 | Thanked: 9,523 times | Joined on Aug 2010 @ Wigan, UK
#1
MultiMote is plugin-based remote control application that allows you to control software/hardware using HTTP, bluetooth and infrared (only HTTP is currently implemented, although individual plugins can extend this). Remotes can be defined easily using XML, and additional programming logic can be added using C++ and JavaScript. MultiMote uses QtScript to expose objects/properties to the scripting environment.

I have not yet had time to document the APIs, but there are two existing remotes (MultiMote-DreamBox and MultiMote-VLC) in extras-devel that cover most of the bases. There is also a simple HelloWorld test remote on GitHub that uses a Qt/C++ plugin to extend the programming logic.

The source code for MultiMote is hosted at GitHub: https://github.com/marxoft/multimote.

Source code for MultiMote-Dreambox: https://github.com/marxoft/multimote...motes/dreambox

Source code for MultiMote-VLC: https://github.com/marxoft/multimote...er/remotes/vlc

Source code for MultiMote-HelloWorld: https://github.com/marxoft/multimote...tes/helloworld

Basic procedure to create a remote:
  • Define the remote UI in a file named remote.xml. In addition to defining the UI layout, you can also define the signal handlers, for example the onClicked handler of the button element defines what happens when the button is clicked. The handler can be a function body, or it can be a function provided in JavaScript or a Qt/C++ plugin.
  • Define the remote settings in a file named settings.xml (optional). Providing a settings file will result in an "$REMOTE_NAME settings" entry being added to the application menu when the remote is loaded. This is used to raise a dialog enabling users to change the settings. Remote settings are saved in a separate group in the MultiMote config file (/home/user/.config/MultiMote/MultiMote.conf), and are restored when the remote is loaded. Each setting is exposed to the scripting environment using the key attribute as the property name. You can use the onChanged attribute to handle changes made by the user or when the remote settings are loaded.
  • Provide additional programming logic using C++ and/or JavaScript (optional). You can do pretty much whatever you want here. MultiMote will look for *.js files when the remote is loaded and evaluate them. You can then call the functions defined in JavaScript. MultiMote will also look for Qt plugins and attempt to load them. The plugin will be exposed to the scripting environment using its objectName, thus enabling you to call its methods from either the handlers defined in the XML files, or from JavaScript.
  • Place all files in a subdirectory of /home/user/MultiMote/remotes/. Currently, the directory name is used as the display name for the remote, so if your remote is called "My Remote" you should place the files in /home/user/MultiMote/remotes/My Remote/.

MultiMote exposes a few global properties to all remotes:
  • Qt: The Qt property provides access to the global Qt namespace, so that you can use the Qt enums.
  • screen: The screen property can be used to check the current screen orientation, set the allowed orientations, and check if the screen is locked.
  • notifications: The notifications property can be used to display a Hildon information banner/note.
  • http: The http property can be used to make HTTP requests. You can provide an optional callback that will be used to provide the server response.
  • pageStack: The pageStack property can be used to check/control which page of the remote is currently displayed.

Now for some screenshots:







__________________
'Men of high position are allowed, by a special act of grace, to accomodate their reasoning to the answer they need. Logic is only required in those of lesser rank.' - J K Galbraith

My website

GitHub
 

The Following 25 Users Say Thank You to marxian For This Useful Post:
Copernicus's Avatar
Posts: 1,986 | Thanked: 7,698 times | Joined on Dec 2010 @ Dayton, Ohio
#2
Very cool! This looks like a perfect way to implement custom remotes. Blows the old QtIrreco concept completely out of the water.

Originally Posted by marxian View Post
MultiMote is plugin-based remote control application that allows you to control software/hardware using HTTP, bluetooth and infrared (only HTTP is currently implemented, although individual plugins can extend this).
Ah, well, any idea on what kind of infrared backend you're considering? I guess, if you're doing custom remotes, the LIRC server would work fine. And yeah, I do still plan on eventually making the Pierogi backend into a separate library as well...
 

The Following 4 Users Say Thank You to Copernicus For This Useful Post:
nokiabot's Avatar
Posts: 1,974 | Thanked: 1,834 times | Joined on Mar 2013 @ india
#3
good job it looks and sounds good need to check what it is
 

The Following User Says Thank You to nokiabot For This Useful Post:
marxian's Avatar
Posts: 2,448 | Thanked: 9,523 times | Joined on Aug 2010 @ Wigan, UK
#4
Originally Posted by Copernicus View Post
Very cool! This looks like a perfect way to implement custom remotes. Blows the old QtIrreco concept completely out of the water.
Thanks. I'm actually not that familiar with QtIrreco, but it was important to me to be able to have more than simple push buttons. Also, it will be possible to use the same remote with QML aswell as widgets (I'll be working on Harmattan and Symbian versions soon-ish), though in some cases it may make sense to tweak the layout a bit.

Originally Posted by Copernicus View Post
Ah, well, any idea on what kind of infrared backend you're considering? I guess, if you're doing custom remotes, the LIRC server would work fine. And yeah, I do still plan on eventually making the Pierogi backend into a separate library as well...
Less bloat is better, but since it's important that remotes can be created as easily as possible, convenience is also a factor, so enabling the use of existing LIRC config files is attractive. However, if a Pierogi library was available that already provided configs for the remotes that people want to use, that could be a good alternative. I haven't put that much thought into it yet (though I have had a look at the Pierogi code to see how this stuff works ), as I'll be implementing the bluetooth support first (I want a BT mouse and keyboard remote ).
__________________
'Men of high position are allowed, by a special act of grace, to accomodate their reasoning to the answer they need. Logic is only required in those of lesser rank.' - J K Galbraith

My website

GitHub
 

The Following 5 Users Say Thank You to marxian For This Useful Post:
marxian's Avatar
Posts: 2,448 | Thanked: 9,523 times | Joined on Aug 2010 @ Wigan, UK
#5
Originally Posted by nokiabot View Post
good job it looks and sounds good need to check what it is
It's an application that provides backend and user interface implementations for remote controls that you can create using XML. It is possible to create a remote with a single XML file:

Code:
<remote>
    <title>My Remote</title>
    <description>My cool remote</description>
    <orientation>Qt::Horizontal | Qt::Vertical</orientation> // Both orientations supported for auto-rotation.
    <page name="page1">
        <button name="myButton">
            <text>Click me</text>
            <onClicked>notifications.information("This is my cool remote")</onClicked> // Display information banner with message.
        </button>
    </page>
</remote>
Put the above XML in a file named remote.xml, place the file in /home/user/MultiMote/remotes/My Remote/, and the remote will be available in MultiMote.
__________________
'Men of high position are allowed, by a special act of grace, to accomodate their reasoning to the answer they need. Logic is only required in those of lesser rank.' - J K Galbraith

My website

GitHub
 

The Following 4 Users Say Thank You to marxian For This Useful Post:
Posts: 1,163 | Thanked: 1,873 times | Joined on Feb 2011 @ The Netherlands
#6
Woaw, looks great.
Maybe you and copernicus could make one killer application together

Downloading the VLC one right now (:

Originally Posted by marxian
as I'll be implementing the bluetooth support first (I want a BT mouse and keyboard remote ).
And it seems I am served on my wishes:
Originally Posted by mr_pingu View Post
I need a application that allows me to use it as bluetooth hwkeyboard and the screen as mousepad.
Just like bluemaemo but then a working solution and a lot less buggy...
__________________
N900 loaded with:
CSSU-T (Thumb)
720p recording,
Pierogi, Lanterne, Cooktimer, Frogatto
N9 16GB loaded with:
Kernel-Plus
--
[TCPdump & libpcap | ngrep]
--
donate
 

The Following 2 Users Say Thank You to mr_pingu For This Useful Post:
Copernicus's Avatar
Posts: 1,986 | Thanked: 7,698 times | Joined on Dec 2010 @ Dayton, Ohio
#7
Originally Posted by marxian View Post
it will be possible to use the same remote with QML aswell as widgets (I'll be working on Harmattan and Symbian versions soon-ish), though in some cases it may make sense to tweak the layout a bit.
Cool. BTW, let me ask -- are you just exposing a "clicked()" interface to the buttons, or are "pressed()" and "released()" also available? (I guess I should take a look for myself... ) Many CIR remotes have special behaviors when a button is held down (particularly useful for things like volume controls).

Less bloat is better, but since it's important that remotes can be created as easily as possible, convenience is also a factor, so enabling the use of existing LIRC config files is attractive. However, if a Pierogi library was available that already provided configs for the remotes that people want to use, that could be a good alternative.
For least bloat, you'd probably do best by avoiding both LIRC and Pierogi. The LIRC server has been designed as a one-size-fits-all mechanism, trying to support every possible combination of on and off pulses in every protocol in one single massive code path. Pierogi goes the other way, creating a custom method for each CIR protocol, so the hardware driver is much simpler (and far more efficient). On the other hand, I'm also trying to store every keyset of every device in the entire known universe. I guess maybe something like grabbing the Pierogi protocol engine and leaving the keyset data behind might make the most sense for a MultiMote backend...

I'll be implementing the bluetooth support first (I want a BT mouse and keyboard remote ).
Very cool. I've been taking a look at the bluetooth stuff myself (particularly as many devices are moving to bluetooth for remote purposes, and I'd like to get that into Pierogi as well), but I haven't gotten very far with it...
 

The Following 2 Users Say Thank You to Copernicus For This Useful Post:
marxian's Avatar
Posts: 2,448 | Thanked: 9,523 times | Joined on Aug 2010 @ Wigan, UK
#8
Originally Posted by Copernicus View Post
Cool. BTW, let me ask -- are you just exposing a "clicked()" interface to the buttons, or are "pressed()" and "released()" also available? (I guess I should take a look for myself... ) Many CIR remotes have special behaviors when a button is held down (particularly useful for things like volume controls).
Generally, all signals/slots/properties provided by the widget in question are exposed, so looking at the Qt reference documentation for QPushButton, QSlider etc will give you a good idea of what is available. MultiMote does not restrict handlers to specific signals. Instead, it uses QMetaObject to check if the signal is available when parsing the XML. In most cases my widget implementations merely augment what is already available to provide some additional layout properties.
__________________
'Men of high position are allowed, by a special act of grace, to accomodate their reasoning to the answer they need. Logic is only required in those of lesser rank.' - J K Galbraith

My website

GitHub
 

The Following 2 Users Say Thank You to marxian For This Useful Post:
Posts: 638 | Thanked: 1,692 times | Joined on Aug 2009
#9
Do you think that this tool could be used to control an LG smart tv?

Example of commands:
https://github.com/ubaransel/lgcommander

http://harizanov.com/2013/12/control...-raspberry-pi/
 

The Following User Says Thank You to xes For This Useful Post:
marxian's Avatar
Posts: 2,448 | Thanked: 9,523 times | Joined on Aug 2010 @ Wigan, UK
#10
Originally Posted by xes View Post
Do you think that this tool could be used to control an LG smart tv?

Example of commands:
https://github.com/ubaransel/lgcommander

http://harizanov.com/2013/12/control...-raspberry-pi/
Yes, although the current built in HTTP implementation isn't flexible enough to handle it. I should really change that to allow headers to be provided. Right now it's pretty basic. Of course, if you need custom HTTP requests, you can always do that in a Qt plugin, or maybe just using XMLHttpRequest in JavaScript.
__________________
'Men of high position are allowed, by a special act of grace, to accomodate their reasoning to the answer they need. Logic is only required in those of lesser rank.' - J K Galbraith

My website

GitHub
 

The Following User Says Thank You to marxian For This Useful Post:
Reply

Tags
maemo5, not sailfish, remote control


 
Forum Jump


All times are GMT. The time now is 09:09.