{ :local linkSpeedforbill 7 ; :local linkSpeedforfree 2 ; :local activeCountbill 0 ; :local activeCountfree 0 ; :foreach ac in=[/ip hotspot active find] do={ :if ([:len [/ip hotspot active get $ac user]] = 12) do={ :set activeCountbill ($activeCountbill + 1); } else { :set activeCountfree ($activeCountfree + 1); } } :local DownSpeedPerOnebill ; :local UpSpeedPerOnebill ; :if ($activeCountbill > 0) do={ :set DownSpeedPerOnebill (($linkSpeedforbill * 1300) / $activeCountbill ); :set UpSpeedPerOnebill ($DownSpeedPerOnebill /4) ; :set DownSpeedPerOnebill ($DownSpeedPerOnebill . "k") ; :set UpSpeedPerOnebill ($UpSpeedPerOnebill . "k") ; } :local DownSpeedPerOnefree ; :local UpSpeedPerOnefree ; :if ($activeCountfree > 0) do={ :set DownSpeedPerOnefree (($linkSpeedforfree * 1000) / $activeCountfree ); :set UpSpeedPerOnefree ($DownSpeedPerOnefree /4) ; :set DownSpeedPerOnefree ($DownSpeedPerOnefree . "k") ; :set UpSpeedPerOnefree ($UpSpeedPerOnefree . "k") ; } /queue simple remove [find] ; :local addr; :local uname; :foreach i in=[/ip hotspot active find] do={ :set uname [/ip hotspot active get $i user]; :set addr [/ip hotspot active get $i address]; :if ([:len $uname] = 12) do={ /queue simple add name=$uname target=$addr max-limit="$UpSpeedPerOnebill/$DownSpeedPerOnebill" ; } else { /queue simple add name=$uname target=$addr max-limit="$UpSpeedPerOnefree/$DownSpeedPerOnefree" ; } }} :log info "xxxxx Change Speed xxxxx"