Telecommande volet
Changement d’interface pour ma télécommande des volets de onewire vers i2c. Cliquer pour agrandir voici le script python qui va avec :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 |
#! /usr/bin/python import smbus import sys import getopt import time bus = smbus.SMBus(0) # For revision 1 Raspberry Pi, change to bus = smbus.SMBus(1) for revision 2. address = 0x38 # I2C address of PCF8574A tempo = 0.01 def usage(): print 'Usage:volet.py -o <output> -s <low|high>' def main(): try: opts, args = getopt.getopt(sys.argv[1:],"ho:s:",["output=","state="]) if not opts: usage() sys.exit(2) except getopt.GetoptError: usage() sys.exit(2) for opt, arg in opts: if opt == '-h': usage() sys.exit() elif opt in ("-o", "--output"): output = int(arg) elif opt in ("-s", "--state"): state = arg if output == 0: bus.write_byte(address,0xdf) # df met le bit 5 a 0 (STOP) time.sleep(tempo) bus.write_byte(address,0xff) # on met tous les bits a 1 time.sleep(tempo) sys.exit() y = 1 # bit 1 a 1 de y for x in range(1,7): bus.write_byte(address,0xbf) # bf met le bit 6 a 0 (SEL) time.sleep(tempo) bus.write_byte(address,0xff) # on met tous les bits a 1 time.sleep(tempo) if output&y == y: # verifie le bit de output avec celui de y bus.write_byte(address,0xfb) # fb met le bit 2 a 0 (VAL) time.sleep(tempo) bus.write_byte(address,0xff) # on met tous les bits a 1 time.sleep(tempo) y = y << 1 # on decale le bit dans y else: if state == "high": bus.write_byte(address,0xf7) # f7 met le bit 3 a 0 (UP) time.sleep(tempo) bus.write_byte(address,0xff) # on met tous les bits a 1 time.sleep(tempo) elif state == "low": bus.write_byte(address,0xef) # ef met le bit 4 a 0 (DOWN) time.sleep(tempo) bus.write_byte(address,0xff) # on met tous les bits a 1 time.sleep(tempo) else: sys.exit() if __name__ == "__main__": main() |