chch-power/cli.py

92 lines
2.6 KiB
Python
Executable File

#!/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 <room_number>, off <room_number>, 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()