Without knowing the DNS configuration on the router it will be a little difficult to help.
.local top level domain addresses are usually used in mDNS hostnames.
Many home routers use .lan or .home as the top level domain.
Just by naming the system pi4.local does not mean that the router will cache that name. It could be configured differently.
To test, I just setup a test FreeBSD vm (I named it fbsdtest.local), and ran some packet captures on DHCP requests from the FreeBSD machine.
The FreeBSD machine will only send the first part of the name, fbsdtest, in my case. It does not send the whole fbsdtest.local. (only sending hostname, not hostname and top level domain)
If your router is not using .local as the top level domain, and you are not running mDNS on the FreeBSD machine. Client systems on the LAN will not be able to resolve py4.local, without manually adding them to the hosts file on each client.
If you do want to use mDNS,
here is a link to another post on configuring the mDNS service.