Подключаем точку к сети и консольным кабелем. Включаем tftp сервер. Внутр папки ложим подготовленный файл конфигурации.

После этого запускаем скрипт

import serial
from time import sleep
import sys

# настройки для ком порта
console = serial.Serial(
         port='COM9',
         baudrate=9600,
         parity="N",
         stopbits=1,
         bytesize=8,
         timeout=8
)

console.isOpen()
print(console.name)
sleep(1)
console.write("\r".encode())
sleep(1)
input_data = console.read(console.inWaiting()).decode()
print(input_data)

# команды для CLI
cuser = "admin"
cpass = "incredible"
cmd_en="enable"
cmd_sh_ip ="sh ip int br | include BV"
cmd_conft = "conf t"
cmd_chng_int = "interface BVI1"
cmd_chng_int_ip = "ip address 192.168.4.250 255.255.255.0"
cmd_chng_int_gate = "ip default-gateway 192.168.4.254"
cmd_conft_end = "end"
cmd_conft_wr = "write"
cmd_cp_run_srv = "copy tftp start"
cmd_cp_run_srv_host = "192.168.204.117"
cmd_cp_srv_statup = "copy tftp startup-config"
cmd_cp_configname = "ap_57_01"
cmd_realod= "reload"

def login_in_device(cuser,cpass,input_data):
#поехали
	if 'Username' in input_data:
		console.write(bytes(cuser,'UTF-8'))
	console.write("\r".encode())
	sleep(1)
	input_data = console.read(console.inWaiting()).decode()
	if 'Password' in input_data:
			console.write(bytes(cpass,'UTF-8'))
	console.write("\r".encode())
	sleep(1)
	input_data = console.read(console.inWaiting()).decode()
	print(input_data)

login_in_device(cuser,cpass,input_data)
	
# расширенный режим
console.write(bytes(cmd_en,'UTF-8'))
console.write("\r".encode())
sleep(1)
# смотрим текущтй ИП у интерфейса 
console.write(bytes(cmd_sh_ip,'UTF-8'))
console.write("\r".encode())
sleep(1)
input_data = console.read(console.inWaiting()).decode()
print(input_data)
# режим конфигурирования
console.write(bytes(cmd_conft,'UTF-8'))
console.write("\r".encode())
sleep(1)
# меняем ИП
console.write(bytes(cmd_chng_int,'UTF-8'))
console.write("\r".encode())
sleep(1)
console.write(bytes(cmd_chng_int_ip,'UTF-8'))
console.write("\r".encode())
console.write(bytes(cmd_chng_int_gate,'UTF-8'))
console.write("\r".encode())
sleep(1)
# выходи из режима конфигурирования
console.write(bytes(cmd_conft_end,'UTF-8'))
console.write("\r".encode())
sleep(1)
# записываем измен в стартап конфиг
#console.write(bytes(cmd_conft_wr,'UTF-8'))
#console.write("\r".encode())
#sleep(1)

input_data = console.read(console.inWaiting()).decode()
print(input_data)
# copy config from tftp to startup config
console.write(bytes(cmd_cp_srv_statup,'UTF-8'))
console.write("\r".encode())
sleep(.5)
console.write(bytes(cmd_cp_run_srv_host,'UTF-8'))
console.write("\r".encode())
sleep(.5)
console.write(bytes(cmd_cp_configname,'UTF-8'))
console.write("\r".encode())
# жмем enter для дистенейшена
console.write("\r".encode())
sleep(30)
input_data = console.read(console.inWaiting()).decode()
print(input_data)
if 'Error' in input_data:
	print("4to-to powlo ne tak")	
else:
# reload device
	print("========UWEL V REBOOT===========")
	console.write(bytes(cmd_realod,'UTF-8'))
	console.write("\r".encode())
	sleep(1)
	console.write("\r".encode())

sleep(60)
input_data = console.read(console.inWaiting()).decode()
print(input_data)
sleep(65)
input_data = console.read(console.inWaiting()).decode()
print(input_data)
console.write("\r".encode())
sleep(1)
input_data = console.read(console.inWaiting()).decode()
print(input_data)
login_in_device(cuser,cpass,input_data)
sleep(1)
input_data = console.read(console.inWaiting()).decode()
print(input_data)
sleep(20)



console.close()