change bandwith script not working with 3.2

hello i have been using below script for last few months with 3.0 beta and now that i am using 3.2 it will not work. any help appreciated.

{
:local user
:local bytesin
:local bytesout
:local megstotal
:local groupname

/tool user-manager user
:foreach i in=[/tool user-manager user find subscriber=admin] do={

:set user [get $i name]
:set bytesin [get $i download-used]
:set bytesout [get $i upload-used]
:set megstotal (($bytesin + 1 + $bytesout) / 1000000)
:set groupname [get $i group-name]

:if (([$megstotal] < 41) && ([$groupname]=A)) do={
/tool user-manager user set [/tool user-manager user find name=$user] rate-limit=" 16k/32k 128k/256k 5k/30k 3000/3000 6 16k/32k"
:log info $user
:log info $groupname
:log info “Total MB Used=$megstotal”
:log info “User Rate Limit set to 64k/128k with burst up to 128k/256k with average 32k/64k priority 6”}

:if (([$megstotal] > 41) && ([$groupname]=A)) do={
/tool user-manager user set [/tool user-manager user find name=$user] rate-limit=" 5k/10k 64k/128k 3k/20k 1000/1000 6 1k/1k"
:log info $user
:log info $groupname
:log info “Total MB Used=$megstotal”
:log info “User Rate Limit set to 32k/64k with burst up to 128k/256k with average 32k/64k priority 8 and bandwith total reset to 0 MB”}

:if (([$megstotal] < 61) && ([$groupname]=B)) do={
/tool user-manager user set [/tool user-manager user find name=$user] rate-limit=" 32k/64k 256k/512k 6k/45k 4000/4000 5 16k/32k"
:log info $user
:log info $groupname
:log info “Total MB Used=$megstotal”
:log info “User Rate Limit set to 128/256 with burst up to 256k/512k with average 64/128k prority 5”}

:if (([$megstotal] > 61) && ([$groupname]=B)) do={
/tool user-manager user set [/tool user-manager user find name=$user] rate-limit=" 16k/32k 150k/512k 5k/30k 800/800 7 16k/32k"
:log info $user
:log info $groupname
:log info “Total MB Used=$megstotal”
:log info “User Rate Limit set to 64k/128k with burst up to 150k/512k with average 64k/128k priority 7 and bandwith total reset to 0 MB”}

:if (([$megstotal] < 101) && ([$groupname]=C)) do={
/tool user-manager user set [/tool user-manager user find name=$user] rate-limit=" 256k/512k 280k/1024k 64k/128k 300/300 4 64k/128k"
:log info $user
:log info $groupname
:log info “Total MB Used=$megstotal”
:log info “User Rate Limit set to 256k/512k with burst up to 280k/1MB with average 128k/256k priority 4”}


:if (([$megstotal] > 101) && ([$groupname]=C)) do={
/tool user-manager user set [/tool user-manager user find name=$user] rate-limit=" 128k/256k 256k/1024k 32k/100k 300/300 6 16k/32k"
/tool user-manager user reset-counters [/tool user-manager user find name=$user]
:log info $user
:log info $groupname
:log info “Total MB Used=$megstotal”
:log info “User Rate Limit set to 128kk/256k with burst to 256k/1MB with average 100k/128k priority 6 and bandwith total reset to 0 MB”}


}
}

hello guys still no luck with this script does anybody know where to find documentation on scripting with version 3.0? i cant seem to find it and this is driving me crazy becase it runs just fine no errores but dont do nothing.

thanks

You can try this:
:if (($megstotal < 41) && ($groupname=“A”)) do={

the same for group B and C

In v3.x all strings should be put in quotes, otherwise script engine will think that it is defined variable.

i tried what you suggested and still no luck runs but does nothing

thanks
michael

ps. i have another script that changes the queues in queue tree at midnight and it no longer will work either. what changed in v 3 so that the scripts no longer run correctly?

please help me gurus . i really need this script to work and somthing has changed in the 3.2 that i cant seem to figure out.

i am still hoping that someone can help me out with this. there is no info in the documents on scripting in the new version. please someone help us see the error we have.

thanks

I will look into your script once i get another routerboard. Next week ish. Could you please tell me what your script does. i could probibly figure it out if i read your script but i havent read it yet. so what does it do? just curious. I will check the source. -Jordan

yes this script is made so that you can have 3 different classes of users A,B,C and set there speeds to certain levals according to how much they have downloaded. it works with usermanager. it is not like the one from kridge that is a billing script this is like a FAP (fair acces policy) we run this over satellite so user consumsion is very important. for this script to work you have to be running any verison under 3.0 ,, works with beta 3.x and 2.9.x , but does not with 3.0, 3.1 or 3.2 have not tried 3.3 or 3.4 yet. you need to copy the script and name it somthing and then you have to make a script that resets user download data every 24 hours or whaterver you want to use as a reset time limit. then you need to run the main script every 2 or 3 hours to set the cleints speeds acording to what they have downloaded. you need to give all users in usermanager a group name of A B or C and you need to go to ip>hotspot>user profiles and add 3 profiles named A B and C no need to set anything else in those m just the name. it works like a charm to keep users in check.


{
:local user
:local bytesin
:local bytesout
:local megstotal
:local groupname

/tool user-manager user
:foreach i in=[/tool user-manager user find subscriber=admin] do={

get name of user

:set user [get $i name]

get how much they have downloaded

:set bytesin [get $i download-used]

get how much they have uploaded

:set bytesout [get $i upload-used]

add upload to download and add 1 if you dont add 1 and there is a 0 it wont work

:set megstotal (($bytesin + 1 + $bytesout) / 1000000)

get the group name A B or C

:set groupname [get $i group-name]

\

this sets speed for users in group A that have used less than 40mb TOTAL (41-1)

:if (([$megstotal] < 41) && ([$groupname]=A)) do={
/tool user-manager user set [/tool user-manager user find name=$user] rate-limit=" 16k/32k 128k/256k 5k/30k 3000/3000 6 16k/32k"

this logs into the LOG name, group , mb used and what they were set to or any other messge you want

:log info $user
:log info $groupname
:log info "Total MB Used=$megstotal"
:log info "User Rate Limit set to 64k/128k with burst up to 128k/256k with average 32k/64k priority 6"}

this sets speed for users in group A that have used more than 40mb TOTAL (41-1)

:if (([$megstotal] > 41) && ([$groupname]=A)) do={
/tool user-manager user set [/tool user-manager user find name=$user] rate-limit=" 5k/10k 64k/128k 3k/20k 1000/1000 6 1k/1k"

this logs into the LOG name, group , mb used and what they were set to or any other messge you want

:log info $user
:log info $groupname
:log info "Total MB Used=$megstotal"
:log info "User Rate Limit set to 32k/64k with burst up to 128k/256k with average 32k/64k priority 8 and bandwith total reset to 0 MB"}

\

this sets speed for users in group B that have used less than 60mb TOTAL (61-1)

:if (([$megstotal] < 61) && ([$groupname]=B)) do={
/tool user-manager user set [/tool user-manager user find name=$user] rate-limit=" 32k/64k 256k/512k 6k/45k 4000/4000 5 16k/32k"

this logs into the LOG name, group , mb used and what they were set to or any other messge you want

:log info $user
:log info $groupname
:log info "Total MB Used=$megstotal"
:log info "User Rate Limit set to 128/256 with burst up to 256k/512k with average 64/128k prority 5"}

\

this sets speed for users in group B that have used more than 60mb TOTAL (61-1)

:if (([$megstotal] > 61) && ([$groupname]=B)) do={
/tool user-manager user set [/tool user-manager user find name=$user] rate-limit=" 16k/32k 150k/512k 5k/30k 800/800 7 16k/32k"

this logs into the LOG name, group , mb used and what they were set to or any other messge you want

:log info $user
:log info $groupname
:log info "Total MB Used=$megstotal"
:log info "User Rate Limit set to 64k/128k with burst up to 150k/512k with average 64k/128k priority 7 and bandwith total reset to 0 MB"}

this sets speed for users in group C that have used less than 100mb TOTAL (101-1)

:if (([$megstotal] < 101) && ([$groupname]=C)) do={
/tool user-manager user set [/tool user-manager user find name=$user] rate-limit=" 256k/512k 280k/1024k 64k/128k 300/300 4 64k/128k"

this logs into the LOG name, group , mb used and what they were set to or any other messge you want

:log info $user
:log info $groupname
:log info "Total MB Used=$megstotal"
:log info "User Rate Limit set to 256k/512k with burst up to 280k/1MB with average 128k/256k priority 4"}

this sets speed for users in group C that have used more than 100mb TOTAL (101-1)

and it also resets there usage back to 0MB

:if (([$megstotal] > 101) && ([$groupname]=C)) do={
/tool user-manager user set [/tool user-manager user find name=$user] rate-limit=" 128k/256k 256k/1024k 32k/100k 300/300 6 16k/32k"
/tool user-manager user reset-counters [/tool user-manager user find name=$user]

this logs into the LOG name, group , mb used and what they were set to or any other messge you want

:log info $user
:log info $groupname
:log info "Total MB Used=$megstotal"
:log info "User Rate Limit set to 128kk/256k with burst to 256k/1MB with average 100k/128k priority 6 and bandwith total reset to 0 MB"}


}
}

ok i have been playing around with this for the last 6 hours and i think i am getting a little bit closer , i had to make a few changes to get it to at least run but here is what i have so far that actually works although it only sets the cleints speeds according to what group they are A,B or C

if i try and do this i get the error about that it cant boolean , this is the same thing i need to match bandwith used and group as in above script bit it just wont work.

[michael@SkyNetCopanBackup] > :if ((4+5=9) and (2+3=5))
do: :log “michael”
conditional is not boolean

i can use and or && i get same results. Is AND broken in 3.4???


{
:local user
:local bytesin
:local bytesout
:local megstotal
:local groupname


/tool user-manager user
:foreach i in=[/tool user-manager user find subscriber=admin] do={
:set user [get $i name]
:set bytesin [get $i download-used]
:set bytesout [get $i upload-used]
:set megstotal ($bytesout/100000+$bytesin/1000000)
:set groupname [get $i group-name]


:if ([$groupname]=“A”) do={
/tool user-manager user set [/tool user-manager user find name=$user] rate-limit=" 16k/32k 128k/256k 5k/30k 3000/3000 6 16k/32k"
:log info $user
:log info $groupname
:log info “Total MB Used=$megstotal”
:log info “User Rate Limit set to 64k/128k with burst up to 128k/256k with average 32k/64k priority 6”}


:if ([$groupname]=“B”) do={
/tool user-manager user set [/tool user-manager user find name=$user] rate-limit=" 32k/64k 256k/512k 6k/45k 4000/4000 5 16k/32k"
:log info $user
:log info $groupname
:log info “Total MB Used=$megstotal”
:log info “User Rate Limit set to 128/256 with burst up to 256k/512k with average 64/128k prority 5”}


:if ([$groupname]=“C”) do={
/tool user-manager user set [/tool user-manager user find name=$user] rate-limit=" 256k/512k 280k/1024k 64k/128k 300/300 4 64k/128k"
:log info $user
:log info $groupname
:log info “Total MB Used=$megstotal”
:log info “User Rate Limit set to 256k/512k with burst up to 280k/1MB with average 128k/256k priority 4”}


}
}

ok here is what i have working so far , it is not the complete script as I am just working with users B at the moment to make like easier but it works like a charm as long as it never finds a user that has just had his counters reset and i need to be able to reset counters every day, might have tryed to work around it adding a 1 or somthing but is just will not add 1 to nothing or anything of the sort negative to nothing or positive to nothing it just will not add it. somthing is just way wrong with the way 3.4 does scripting , can someone send me a copy of all files 3.3?? i did not get it when it was available on mikrotik website. email is mps01k at yahoo dot com


{
:local user
:local bytesin
:local bytesout
:local megstotal
:local groupname
:local usera
:local userb
:local userc
:local add
:set add (3-1)

/tool user-manager user
:foreach i in=[/tool user-manager user find subscriber=admin] do={
:set user [get $i name]
:put $user
:set bytesin [get $i download-used]
:put $bytesin
:set bytesin ($bytesin-$add)
:put $bytesin
:set bytesout [get $i upload-used]
:put $bytesout
:set bytesout ($bytesout-$add)
:put $bytesout
:set megstotal ($bytesout/100000+$bytesin/1000000)
:put $megstotal
:set groupname [get $i group-name]
:put $groupname


:if ([$groupname]=“B”) do={
:set userb [get $user]
:if ([$megstotal]>500) do={
/tool user-manager user set [/tool user-manager user find name=$user] rate-limit=" 16k/32k 128k/256k 5k/10k 4000/4000 6 16k/32k"
:log info $user
:log info $groupname
:log info “Total MB Used=$megstotal”
:put “this is a test limited”
:log info “User Rate Limit set to 16k/32k with burst up to 128k/256k with average 5k/10k priority 6 THIS IS FAP”}
:if ([$megstotal]<500) do={
/tool user-manager user set [/tool user-manager user find name=$user] rate-limit=" 32k/64k 256k/512k 6k/45k 4000/4000 5 16k/32k"
:log info $user
:log info $groupname
:log info “Total MB Used=$megstotal”
:put “this is a test”
:log info “User Rate Limit set to 64k/128k with burst up to 128k/256k with average 32k/64k priority 6”}

}
}
}
}

here is my lastest script and it works well only you have to run one other script to set the speed on users that have never been online or havnt been online since you reset counters. it is below the one that applies FAP


{
:local user
:local bytesin
:local bytesout
:local megstotal
:local groupname
:local usera
:local userb
:local userc

/tool user-manager user
:foreach i in=[/tool user-manager user find subscriber=admin] do={
:set user [get $i name]
:put $user
:set bytesin [get $i download-used]
:put $bytesin
:set bytesout [get $i upload-used]
:put $bytesout
:if ([$bytesin]!= “”) do={
:set megstotal ($bytesout/100000+$bytesin/1000000)
:put $megstotal
:set groupname [get $i group-name]
:put $groupname

:if ([$groupname]=“A”) do={
:set userb [get $user]
:if ([$megstotal]<100) do={
/tool user-manager user set [/tool user-manager user find name=$user] rate-limit=" 32k/32k 256k/256k 64k/64k 60/60 5 32k/32k"
:log info $user
:log info $groupname
:log info “Total MB Used=$megstotal”
:log info “User Rate Limit set to 32k/32k with burst up to 256k/256k with average 64k/64k priority 6 A user”
:log info $user
:log info " “}
:if ([$megstotal]>100) do={
/tool user-manager user set [/tool user-manager user find name=$user] rate-limit=” 16k/16k 256k/256k 32k/32k 60/60 6 16k/16k"
:log info $user
:log info $groupname
:log info “Total MB Used=$megstotal”
:log info “User Rate Limit set to 16k/16k with burst up to 256k/256k with average 32k/32k priority 6, FAPPED A user”
:log info $user
:log info " “}}
:if ([$groupname]=“B”) do={
:set userb [get $user]
:if ([$megstotal]<200) do={
/tool user-manager user set [/tool user-manager user find name=$user] rate-limit=” 64k/64k 384k/384k 96k/96k 60/60 4 56k/56k"
:log info $user
:log info $groupname
:log info “Total MB Used=$megstotal”
:log info “User Rate Limit set to 64k/64k with burst up to 384k/384k with average 96k/96k priority 6, B user”
:log info $user
:log info " “}
:if ([$megstotal]>200) do={
/tool user-manager user set [/tool user-manager user find name=$user] rate-limit=” 56k/56k 384k/384k 64k/64k 60/60 5 32k/32k"
:log info $user
:log info $groupname
:log info “Total MB Used=$megstotal”
:log info “User Rate Limit set to 56k/56k with burst up to 384k/384k with average 64k/64k priority 5 FAPPED B user”
:log info $user
:log info " “}}
:if ([$groupname]=“C”) do={
:set userb [get $user]
:if ([$megstotal]<300) do={
/tool user-manager user set [/tool user-manager user find name=$user] rate-limit=” 256k/256k 1024k/1024k 128k/128k 400/400 4 128k/128k"
:log info $user
:log info $groupname
:log info “Total MB Used=$megstotal”
:log info “User Rate Limit set to 256k/256k with burst up to 1024k/1024k with average 128k/128k priority 4 C user”
:log info $user
:log info " “}
:if ([$megstotal]>300) do={
/tool user-manager user set [/tool user-manager user find name=$user] rate-limit=” 128k/128k 512k/512k 128k/128k 400/400 5 128k/128k"
:log info $user
:log info $groupname
:log info “Total MB Used=$megstotal”
:log info “User Rate Limit set to 128k/128k with burst up to 512k/512k with average 128k/128k priority 5 FAPPED C user”
:log info $user
:log info " "

}
}
}
}
}


To set users to speed that have never been online


{
:local user
:local bytesin
:local bytesout
:local megstotal
:local groupname
:local usera
:local userb
:local userc
:local add
:set add (3-1)

/tool user-manager user
:foreach i in=[/tool user-manager user find subscriber=admin] do={
:set user [get $i name]
:put $user
:set groupname [get $i group-name]
:put $groupname

:if ([$groupname]=“A”) do={
/tool user-manager user set [/tool user-manager user find name=$user] rate-limit=" 32k/32k 256k/256k 64k/64k 60/60 5 32k/32k"
:log info $user
:log info $groupname
:log info “User Rate Limit set to 32k/32k with burst up to 256k/256k with average 64k/64k priority 6”}

:if ([$groupname]=“B”) do={
/tool user-manager user set [/tool user-manager user find name=$user] rate-limit=" 64k/64k 384k/384k 96k/96k 60/60 4 56k/56k"
:log info $user
:log info $groupname
:log info “User Rate Limit set to 64k/64k with burst up to 384k/384k with average 96k/96k priority 6”}

:if ([$groupname]=“C”) do={
/tool user-manager user set [/tool user-manager user find name=$user] rate-limit=" 256k/256k 1024k/1024k 128k/128k 400/400 4 128k/128k"
:log info $user
:log info $groupname
:log info “User Rate Limit set to 256k/256k with burst up to 1024k/1024k with average 128k/128k priority 4”}


}
}
}
}
}

this is the last update that i have working and will actually log the cleint off the internet if they go over the limit. it also does not rely on the counters being reset daily it does however rely on a different script that set thes comment to MB total used once a day.

{
:local userX
:local bytesin
:local bytesout
:local megstotal
:local groupnameA
:local usera
:local userb
:local userc
:local commentMB
:local fapstatus
:local fapstatus1
:local nameA
:local bytesinA
:local bytesoutA
:local megstotalA
:local ID
:local macaddres
:local ipaddres
:local uptimeA
/tool user-manager user
:foreach i in=[/tool user-manager user find subscriber=admin] do={
:set userX [get $i name]
:set bytesin [get $i download-used]
:set fapstatus1 [get $i comment]
:set bytesout [get $i upload-used]
:if ([$bytesin]!= “”) do={
:set megstotal ($bytesout/1048576+$bytesin/1048576)
:set groupnameA [get $i group-name]
:set commentMB [get $i comment]
:set fapstatus ($megstotal-$commentMB)
:if ([$groupnameA]=“A”) do={
:set userb $userX
:if ([$fapstatus]<150) do={
/tool user-manager user set [/tool user-manager user find name=$userX] rate-limit=" 32k/32k 256k/256k 64k/64k 60/60 5 32k/32k"
:log info $userX
:log info $groupnameA
:log info “Total MB Used=$fapstatus”
:log info “User Rate Limit set to 32k/32k with burst up to 256k/256k with average 64k/64k priority 6 A user”
:log info $userX
:log info " "
}
:if ([$fapstatus]>150) do={
/tool user-manager user set [/tool user-manager user find name=$userX] rate-limit=" 16k/16k 256k/256k 32k/32k 60/60 6 16k/16k"
:log info $userX
:log info $groupnameA
:log info “Total MB Used=$fapstatus”
:log info “User Rate Limit set to 16k/16k with burst up to 256k/256k with average 32k/32k priority 6, FAPPED A user”
:log info $userX
:set fapstatus1 $userX
:log info " "
/ip hotspot active
:foreach i in=[/ip hotspot active find] do={
:set nameA $userX
:set macaddres [get $i mac-address]
:put $macaddres
:set ipaddres [get $i address]
:if ([$nameA]=[$fapstatus1]) do={
/ip hotspot active remove [find user=$nameA]
}
}
}
}
:if ([$groupnameA]=“B”) do={
:set userb $userX
:if ([$fapstatus]<300) do={
/tool user-manager user set [/tool user-manager user find name=$userX] rate-limit=" 64k/64k 384k/384k 96k/96k 60/60 4 56k/56k"
:log info $userX
:log info $groupnameA
:log info “Total MB Used=$fapstatus”
:log info “User Rate Limit set to 64k/64k with burst up to 384k/384k with average 96k/96k priority 6, B user”
:log info $userX
:log info " "
}
:if ([$fapstatus]>300) do={
/tool user-manager user set [/tool user-manager user find name=$userX] rate-limit=" 56k/56k 384k/384k 64k/64k 60/60 5 32k/32k"
:log info $userX
:log info $groupnameA
:log info “Total MB Used=$fapstatus”
:log info “User Rate Limit set to 56k/56k with burst up to 384k/384k with average 64k/64k priority 5 FAPPED B user”
:log info $userX
:set fapstatus1 $userX
:log info " "
/ip hotspot active
:foreach i in=[/ip hotspot active find] do={
:set nameA $userX
:set macaddres [get $i mac-address]
:set ipaddres [get $i address]
:if ([$nameA]=[$fapstatus1]) do={
/ip hotspot active remove [find user=$nameA]
}
}
}
}
:if ([$groupnameA]=“C”) do={
:set userb $userX
:if ([$fapstatus]<400) do={
/tool user-manager user set [/tool user-manager user find name=$userX] rate-limit=" 256k/256k 1024k/1024k 128k/128k 400/400 4 128k/128k"
:log info $userX
:log info $groupnameA
:log info “Total MB Used=$fapstatus”
:log info “User Rate Limit set to 256k/256k with burst up to 1024k/1024k with average 128k/128k priority 4 C user”
:log info $userX
:log info " "
}
:if ([$fapstatus]>400) do={
/tool user-manager user set [/tool user-manager user find name=$userX] rate-limit=" 128k/128k 512k/512k 128k/128k 400/400 5 128k/128k"
:log info $userX
:log info $groupnameA
:log info “Total MB Used=$fapstatus”
:log info “User Rate Limit set to 128k/128k with burst up to 512k/512k with average 128k/128k priority 5 FAPPED C user”
:log info $userX
:set fapstatus1 $userX
:log info " "
/ip hotspot active
:foreach i in=[/ip hotspot active find] do={
:set nameA $userX
:set macaddres [get $i mac-address]
:set ipaddres [get $i address]
:if ([$nameA]=[$fapstatus1]) do={
/ip hotspot active remove [find user=$nameA]
}
}
}
}
}
}
}
}