#!/usr/bin/env python """ "elropi.py" for switching Elro devices using Python on Raspberry Pi by Heiko H. 2012 This file uses RPi.GPIO to output a bit train to a 433.92 MHz transmitter, allowing you to control light switches from the Elro brand. Credits: This file is mostly a port from C++ and Wiring to Python and the RPi.GPIO library, based on C++ source code written by J. Lukas: http://www.jer00n.nl/433send.cpp and Arduino source code written by Piepersnijder: http://gathering.tweakers.net/forum/view_message/34919677 Some parts have been rewritten and/or translated. This code uses the Broadcom GPIO pin naming by default, which can be changed in the "GPIOMode" class variable below. For more on pin naming see: http://elinux.org/RPi_Low-level_peripherals Version 1.0 """ import time import RPi.GPIO as GPIO class RemoteSwitch(object): repeat = 10 # Number of transmissions pulselength = 300 # microseconds GPIOMode = GPIO.BCM def __init__(self, device, key=[1,1,1,1,1], pin=4): ''' devices: A = 1, B = 2, C = 4, D = 8, E = 16 key: according to dipswitches on your Elro receivers pin: according to Broadcom pin naming ''' self.pin = pin self.key = key self.device = device GPIO.setmode(self.GPIOMode) GPIO.setup(self.pin, GPIO.OUT) def switchOn(self): self._switch(GPIO.HIGH) def switchOff(self): self._switch(GPIO.LOW) def _switch(self, switch): self.bit = [142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 136, 128, 0, 0, 0] for t in range(5): if self.key[t]: self.bit[t]=136 x=1 for i in range(1,6): if self.device & x > 0: self.bit[4+i] = 136 x = x<<1 if switch == GPIO.HIGH: self.bit[10] = 136 self.bit[11] = 142 bangs = [] for y in range(16): x = 128 for i in range(1,9): b = (self.bit[y] & x > 0) and GPIO.HIGH or GPIO.LOW bangs.append(b) x = x>>1 GPIO.output(self.pin, GPIO.LOW) for z in range(self.repeat): for b in bangs: GPIO.output(self.pin, b) time.sleep(self.pulselength/1000000.) if __name__ == '__main__': import sys GPIO.setwarnings(False) if len(sys.argv) < 3: print "usage:sudo python %s int_device int_state (e.g. '%s 2 1' switches device 2 on)" % \ (sys.argv[0], sys.argv[0]) sys.exit(1) # Change the key[] variable below according to the dipswitches on your Elro receivers. default_key = [1,0,0,0,1] # change the pin accpording to your wiring default_pin =17 device = RemoteSwitch( device= int(sys.argv[1]), key=default_key, pin=default_pin) if int(sys.argv[2]): device.switchOn() else: device.switchOff()