Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #!/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()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement