# Change XYZ to the UID of your RS485 Bricklet

setup:
	# Set operating mode to Modbus RTU slave
	publish '{"mode": "modbus_slave_rtu"}' to tinkerforge/request/rs485_bricklet/XYZ/set_mode

	# Modbus specific configuration:
	# - slave address = 17
	# - master request timeout = 0ms (unused in slave mode)
	publish '{"slave_address": 17, "master_request_timeout": 0}' to tinkerforge/request/rs485_bricklet/XYZ/set_modbus_configuration

	# Handle incoming Modbus slave write single register request callbacks
	subscribe to tinkerforge/callback/rs485_bricklet/XYZ/modbus_slave_write_single_register_request
		if a message arrives
			# message contains request_id as int, register_address as ant and register_value as int

			if registerAddress != 42
				print "Error: Invalid register address"
				publish '{"request_id": request_id, "exception_code": "IllegalDataAddress"}' to tinkerforge/request/rs485_bricklet/XYZ/modbus_slave_report_exception
			elseif
				publish '{"request_id": request_id}' to tinkerforge/request/rs485_bricklet/XYZ/modbus_slave_answer_write_single_register_request
			endif
		endif
	endsubscribe

	publish '{"register": true}' to tinkerforge/register/rs485_bricklet/XYZ/modbus_slave_write_single_register_request # Register modbus_slave_write_single_register_request callback
