Wrapper module to control X10 devices.
Initial focus is supporting:
- Mochad (or compatible) servers to control
- https://sourceforge.net/projects/mochad/ for CM15A RF (radio frequency) and PL (power line) controller and the CM19A RF controller
- https://hg.sr.ht/~clach04/mochad_firecracker works under Windows and Linux and can control CM17A serial Firecracker
- CM17A serial Firecracker X10 unit, builtin support for CM17A over regular serial port. Also known to work with CM19A USB Firecracker device. For control via GPIO on Raspberry Pi manually install:
- https://bitbucket.org/cdelker/python-x10-firecracker-interface can be used on Raspberry Pi to control GPIO, not (yet) Python 3 compatible and does not support ALL on/off
Implemented in pure Python. Known to work with:
- Python 2.7
- Python 3.4.4
- Python 3.5
To get started and install the latest version from PyPi:
pip install x10_any # Or latest from source code via; pip install git+https://github.com/clach04/x10_any.git
If installing/working with a source checkout issue:
pip install -r requirements.txt # Alternatively python setup.py develop python setup.py install -e python -m pip install -e .
NOTE Debian/Ubuntu/Rasbian can install system packages instead of using pip via:
sudo apt-get install python-serial sudo apt-get install python2-serial
Then run tests via:
python -m x10_any.test.tests
Under Linux most users do not have serial port permissions, either:
- give user permission (e.g. add to group "dialout") - RECOMMENDED
- run this demo as root - NOT recommended!
Giver user dialout (serial port) access:
# NOTE requires logout/login to take effect sudo usermod -a -G dialout $USER
Mochad:
import x10_any dev = x10_any.MochadDriver() dev.x10_command('A', 1, x10_any.ON) dev.x10_command('A', 1, x10_any.OFF)
Firecracker:
import logging log = logging.getLogger('x10_any') logging.basicConfig() # TODO include function name/line numbers in log #log.setLevel(level=logging.INFO) log.setLevel(level=logging.DEBUG) import x10_any dev = x10_any.FirecrackerDriver() #dev = x10_any.FirecrackerDriver('COM11') #dev = x10_any.FirecrackerDriver('/dev/ttyUSB0') house_code = 'A' unit_code = 1 dev.x10_command(house_code, unit_code, x10_any.ON) dev.x10_command(house_code, unit_code, x10_any.OFF)
See http://hintshop.ludvig.co.nz/show/persistent-names-usb-serial-devices/ for notes on using udevadm to determine serial number and adding entries to /etc/udev/rules.d/99-usb-serial.rules for persistent devicenames if using multiple usb serial adapters.