Skip to content


Switch branches/tags

Latest commit


Git stats


Failed to load latest commit information.
Latest commit message
Commit time

More Screenshots

The original project is located at and was written by Daniel Myers, Alex Wilson, and Alex Zylman. This rewrite serves to improve extensibility by using a plugin architecture with a minimal core and plugins for features or protocols.

High Level Concept:

This project aims to allow any type of device to be controlled by a common web interface (IR, X10, etc.).

How It Works:

  • Devices - these are things like your TV, Stereo, Light, etc.
  • Actions - these are things you do to your devices like, turning them on/off, changing channels, etc.
  • Transcievers - for the devices that need them (so far IR and X10), these are pieces of hardware that transmit/recieve data between the server running Webmote and your devices.
    • These are built with arduinos connected to the server via USB that then have additional circuitry for IR, X10, etc.
  • Remotes - there are both custom (user defined) and default (all available actions for a device) remotes that allow a user to trigger actions.
    • For custom remotes, users can pick where buttons should be placed, what actions they should trigger, what they should look like etc.
    • One motivation for this project was the numerous remotes I had to control my entertainment system. With custom remotes a user can make a remote that has actions from any device or macros. In other words, a remote might be named "Watch TV". That remote might have a button like "Watch Cable" that turns on the TV, cable box, and stereo and also changes them to the correct inputs. There might also be a button called "ESPN" or "CNN" which will automatically navigate you to the channels without having to remember channel numbers (phew...).
  • There are already a few different plugins for example XBMC control and Scheduling which allows you to schedule things like your lights to go on or off at a given time throughout the week.


  • Extensible - plugins for new protocols and functionality
  • Mobile web interface - works on any browser on any platform
  • Simple enough for my parents (old) to setup
  • (eventually) Serve media connected to the server, upload to, download to, etc (this is more of a long term goal...)


A set of abstract base classes (and associated methods) for the plugins to expand on.


A set of subclasses, files and routines that expand the functionality of webmote.
The format is as follows:

A top level directory containing at least:

  • templates (directory)
    • html files containing pages specific to the plugin
  • static (directory)
    • images, javascript, etc.
  • info.json
    • authors
    • version
    • name
    • url


  • Need to implement a method for installing plugin dependencies
  • Need to implement a method or plugin for managing USB port changes manually, or better yet automatically
  • Secondary:
    • Remote/Local Media player
    • In browser file browser
    • Mobile playback
    • Local playback

Setup Server:

#install virtualenv, pip
sudo apt-get install python-virtualenv python-pip
cd webmote

Setup Transceivers:


  • Basics can be found here:
  • Pins in sketch:
    • Zero Crossing - 12
    • Data TX - 13
    • Data RX - 1 (rx isn't actually used at the moment)
  • Download the X10 library and put it in the arduino libraries folder
    • on ubuntu 12.10 - /usr/share/arduino/libraries
    • will probably need to be root to copy to this directory
  • Flash Sketch
    • Open X10_transceiver.pde via arduino (found in webmote/modules/X10/X10_tranceiver)
    • Click 'upload' - circle with right arrow


  • One thing to note is that by default, arduinos are reset when a serial connection is initiated (which webmote does from time to time...) which can cause problems with commands being lost while the arduino is in its reset sequence.
    • You are experiencing this if:
      • When sending a command your tx/rx lights are active (you are talking to the device correctly) AND
      • The console or logfile does not have a message saying "Failed to play" AND
      • When sending a command nothing happens
    • The simplest fix is placing a small capacitor (2.2 uF works for me) between "reset" and "3v3"

Run (development server):

./run alpha


An extensible home automation framework







No releases published


No packages published