#!/usr/bin/env python import pifacedigitalio import pifacecommon.mcp23s17 import sys button_count = 2 # dirty workaround to disable reset of output pins def init_board_no_power_off(self): ioconfig = ( pifacecommon.mcp23s17.BANK_OFF | pifacecommon.mcp23s17.INT_MIRROR_OFF | pifacecommon.mcp23s17.SEQOP_OFF | pifacecommon.mcp23s17.DISSLW_OFF | pifacecommon.mcp23s17.HAEN_ON | pifacecommon.mcp23s17.ODR_OFF | pifacecommon.mcp23s17.INTPOL_LOW ) self.iocon.value = ioconfig if self.iocon.value != ioconfig: raise pifacedigitalio.NoPiFaceDigitalDetectedError( "No PiFace Digital board detected (hardware_addr={h}, " "bus={b}, chip_select={c}).".format( h=self.hardware_addr, b=self.bus, c=self.chip_select)) else: self.iodira.value = 0 # GPIOA as outputs self.iodirb.value = 0xFF # GPIOB as inputs self.gppub.value = 0xFF # input pullups on self.enable_interrupts() setattr(pifacedigitalio.PiFaceDigital, 'init_board', init_board_no_power_off) def chch_status(pfd): for i in range(button_count): if pfd.output_pins[i].value != 0: print(str(i) + ' on') else: print(str(i) + ' off') def chch_all_off(pfd): for i in range(button_count): pfd.output_pins[i].turn_off() def chch_all_on(pfd): for i in range(button_count): pfd.output_pins[i].turn_on() def chch_off(pfd, i): pfd.output_pins[i].turn_off() def chch_on(pfd, i): print(i) pfd.output_pins[i].turn_on() def help(): print('valid commands: status, on , off , all_on, all_off') alias = {'lounge': 0, 'elabor': 1} if __name__ == "__main__": # listener = pifacedigitalio.InputEventListener() # listener.activate() # chch_status_output(listener.chip) pifc = pifacedigitalio.PiFaceDigital() room_number = '' if len(sys.argv) == 3: try: room_number = int(sys.argv[2]) if room_number < 0 or room_number > button_count-1: raise Exception('Out of range') except ValueError: room_number = alias.get(sys.argv[2]) except: room_number = '' try: command = sys.argv[1] except: help() exit(1) if command=='status': chch_status(pifc) elif command=='all_off': chch_all_off(pifc) elif command=='all_on': chch_all_on(pifc) elif command=='off' and isinstance( room_number, int ): chch_off(pifc, room_number) elif command=='on' and isinstance( room_number, int ): chch_on(pifc, room_number) else: help()