#!/usr/bin/bashversion=0changelog="version=$version, 13-Jun-2024, initial build"version=2changelog="version=$version, 14-Jun-2024, swapped loop from by-subnet to by-omada-clients-mac, saving before and after files in /var/tmp"HELP="dns2omada.sh is the most simplistic script ever meant to paliate one of dumbest laziest lack of feature of the tp-link OMADA SDN software....it simply populate the OMADA client's name based on DNS name... everytime the script runs it will keep a copy of the omada clients output before and after the script execution in /var/tmp/omadaclients.*.dns2omadausing a python omada api...Assumptions: - you already have a local DNS server able to perform reverse DNS resolution per IP.- you already have omada SDN setup on the network- you should create an OMADA admin account dedicated to this process using a very long random password string without any special character - my subnet is simply from 192.168.0.1 to 192.168.0.256 so I have a simple loop, you might have to modify the script if your subnet is class B with an outer loop etc...usage: 1) install python: sudo apt install python3-pip 2) install the omada python api: pip install tplink-omada-client 3) update the parameters CHANGE_ME values in the scipt below 4) run the script manually or in cron... "# these should be self-explanatoryomada_username="CHANGEME_mrpotatoe"omada_password="CHANGEME_lfdaruiRWGFD335qw324z"omada_site="CHANGEME_homesweethome"omada_url="https://CHANGEME_omada.mylocaldomain" dns_server=CHANGEME_192.168.0.1omadabin=/CHANGEME/bin/omada # the absolute path to the omada binarie whch gets installed with the client.if [[ $# -gt 0 ]]then echo $HELP exit 3fiif fgrep -v grep $0 | fgrep CHANGEME >/dev/nullthen echo "ERROR: you forgot to change these varialbes from $0:" fgrep -v grep $0 | fgrep CHANGEME echo "$HELP" exit 4fi$omadabin -t myomada target --url $omada_url --user $omada_username --password $omada_password --site $omada_site --set-defaultomadaclients=/tmp/omadaclients.$$.txt$omadabin clients > $omadaclientscat $omadaclients | while read mac ip name device port junkdo clientname="" clientmac=$mac # # debugging #echo "parsing mac=$mac ip=$ip name=$name device=$device port=$port junk=$junk" if [[ $ip = "" ]] || [[ $ip = "-" ]] then echo "skiping $mac because omada does not have an IP for it" else clientname=$(nslookup $ip $dns_server 2>/dev/null | fgrep "=" |cut -f2 -d"=" |cut -f1 -d"."|tail -1) if [[ $clientname = "" ]] then echo "skipping $ip because I cant resolve it" else echo "setting hostname for $ip to $clientname for mac $clientmac " $omadabin set-client-name $clientmac $clientname fi fi unset mac ip name device port junk donecat $omadaclients > /var/tmp/omadaclients.before.dns2omada$omadabin clients > /var/tmp/omadaclients.after.dns2omada