Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #!/usr/bin/env python
- import os, sys, minimalmodbus, argparse
- # choose no. of switch in the given power strip model
- switchNum=6
- # parse command line paramenters
- parser = argparse.ArgumentParser(description=\
- 'Modbus master for Modbus USB Power Strip. \
- Reads and writes to specified switch relay coils')
- parser.add_argument('devicePath', help='Device path e.g. /dev/ttyUSB0')
- parser.add_argument('switchId', type=int, choices=range(switchNum+1), help='Select switch number 1-' + str(switchNum) + ' on the power strip. Switch number 0 is used to select all switches for turn_on or turn_off operations')
- parser.add_argument('operation', choices=['read','turn_on', 'turn_off'], help='Performs given operation on the chosen switch')
- args = parser.parse_args()
- def main(devicePath, switchId, operation):
- # to ensure that the port closes after each call
- minimalmodbus.CLOSE_PORT_AFTER_EACH_CALL=True
- # establish connection
- try:
- # resolve symbolic links, if any, in the given device path
- powerStripCanonicalPath = os.path.realpath(devicePath)
- # create an instance of modbus slave instrument called powerStrip
- powerStrip = minimalmodbus.Instrument(powerStripCanonicalPath, 1) # arguments: port name, slave address (in decimal)
- # set baud rate
- powerStrip.serial.baudrate = 9600
- #powerStrip.debug = True # to see communication with the instrument
- except:
- print 'Connection failed'
- sys.exit(1)
- # set switch address since addressing starts from 0
- switchAddr = switchId - 1
- # execute given operation
- try:
- if operation=='read':
- # check for valid switchId to perform read operation
- if switchId > 0:
- print 'Switch', switchId,
- if powerStrip.read_bit(switchAddr, 1) == 1: # read_bit(coil address, modbus function code)
- print 'is on'
- elif powerStrip.read_bit(switchAddr, 1) == 0:
- print 'is off'
- else:
- print 'Read not supported on all switches'
- raise
- else:
- if switchId > 0:
- # to perform turn_on, turn_off operations on given switch
- if operation == 'turn_on':
- powerStrip.write_bit(switchAddr, 1, 5) # write_bit(coil address, value, modbus function code)
- if operation == 'turn_off':
- powerStrip.write_bit(switchAddr, 0, 5) # write_bit(coil address, value, modbus function code)
- # to perform operation on all switch
- elif switchId == 0:
- for currSwitchAddr in range(switchNum):
- powerStrip.write_bit(currSwitchAddr, operation == 'turn_on', 5) # write_bit(coil address, value, modbus function code)
- except:
- print 'Operation failed'
- sys.exit(2)
- if __name__ == "__main__":
- main(args.devicePath, args.switchId, args.operation)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement