#this script must run on the radius and server-manager router #first we create user profile on all router using/connecting to the radius server /ip hotspot user profile add name="STRAW" address-pool=dhcp_pool1 idle-timeout=20m keepalive-timeout=2m status-autorefresh=1m shared-users=1 rate-limit="8k/8k" transparent-proxy=yes open-status-page=always advertise=no /ip hotspot user profile add name="WOOD" address-pool=dhcp_pool1 idle-timeout=20m keepalive-timeout=2m status-autorefresh=1m shared-users=1 rate-limit="16k/16k" transparent-proxy=yes open-status-page=always advertise=no /ip hotspot user profile add name="STONE" address-pool=dhcp_pool1 idle-timeout=20m keepalive-timeout=2m status-autorefresh=1m shared-users=1 rate-limit="16k/24k" transparent-proxy=yes open-status-page=always advertise=no /ip hotspot user profile add name="SILVER" address-pool=dhcp_pool1 keepalive-timeout=2m status-autorefresh=1m shared-users=1 rate-limit="24k/32k" transparent-proxy=yes open-status-page=always advertise=no /ip hotspot user profile add name="BRONZE" address-pool=dhcp_pool1 keepalive-timeout=2m status-autorefresh=1m shared-users=1 rate-limit="24k/48k" transparent-proxy=yes open-status-page=always advertise=no /ip hotspot user profile add name="GOLD" address-pool=dhcp_pool1 keepalive-timeout=2m status-autorefresh=1m shared-users=1 rate-limit="24k/56k" transparent-proxy=yes open-status-page=always advertise=no /ip hotspot user profile add name="PLATINUM" address-pool=dhcp_pool1 keepalive-timeout=2m status-autorefresh=1m shared-users=1 rate-limit="32k/64k 64k/256k 48k/196k 5/5" transparent-proxy=yes open-status-page=always advertise=no /ip hotspot user profile add name="DIAMOND" address-pool=dhcp_pool1 keepalive-timeout=2m status-autorefresh=1m shared-users=1 rate-limit="32k/128k 64k/256k 48k/192k 5/5" transparent-proxy=yes open-status-page=always advertise=no # users created has a download limit of 300mb/mois tool usermanager user set 0,1,2,3,4.. download-limit=314572800 #after copy this script to the router and schedule it to run every time you want # #Jun/15/2009 # smtp.gmail.com I have a gmail account :local username :local surname :local usage :local bytesin :local bytesout :local bytestotal :local megstotal :local cap :local comment :local newcomment :local invoice :local newinvoice :local lastwarning :local newwarning :local percentage :local percentile :local warninglevel :local warn :local update :local email :local server :local groupname :local downloadlimit :local newgroupname :local month :local newmonth :local day :local lastmonth :local monthname :set server [:resolve smtp.gmail.com] :set day [:pick [/system clock get date] 4 6] :set month [:pick [/system clock get date] 0 3] /tool user-manager user :foreach i in=[/tool user-manager user find subscriber=admin] do={ :set warn false ; :set update false :set username [get $i name] :set surname [get $i last-name] :set comment [get $i comment] :set bytesin [get $i download-used] :set bytesout [get $i upload-used] :set bytestotal ($bytesin + $bytesout) :set email [get $i email] :set groupname [get $i group-name] :set downloadlimit [get $i download-limit] :set megstotal ($bytestotal / 1000000) :set invoice ($comment) :set newinvoice ($invoice.$i) :set lastwarning [:pick $comment 5 7] :set lastmonth [:pick $comment 2 5] # si le mois change... :if ($month != $lastmonth) do={ #/tool user-manager user set $i group-name="PLATINUM" comment= "$day$month$("00")" #/tool user-manager user reset-counters $username } else= { :set cap (downloadlimit / (1024*1024)) :set percentage (($megstotal * 100) / $cap) #classifying your current cap percentile #I ended up not using the Percentile variable #The Percentile variable just describes where, more or less, #the user's current usage percentage is. :if (([$percentage] >=75) && ([$percentage] < 80)) do={ :set percentile 7580; : set warninglevel 75 } :if (([$percentage] >=80) && ([$percentage] < 85)) do={ :set percentile 8085; : set warninglevel 80 } :if (([$percentage] >=85) && ([$percentage] < 90)) do={ :set percentile 8590; : set warninglevel 85 } :if (([$percentage] >=90) && ([$percentage] < 95)) do={ :set percentile 9095; : set warninglevel 90 } :if ([$percentage] >=95 ) do={ :set percentile 9599; : set warninglevel 95 } :if ([$warninglevel] > $lastwarning) do={ :set warn true ; :set update true } :if ([$warninglevel] = $lastwarning) do={ :set warn false ; :set update false } :if ([$warninglevel] < $lastwarning) do={ :set warn false ; :set update true } :if ([$update] = true) do={ :set newwarning $warninglevel ; :set newmonth $lastmonth } else={ :set newwarning $lastwarning ; :set newmonth $lastmonth } :if ([$warn] = true) do={ :if ([$warninglevel]=75) do={:set newgroupname "GOLD" } :if ([$warninglevel]=80) do={:set newgroupname "BRONZE" } :if ([$warninglevel]=85) do={:set newgroupname "SILVER" } :if ([$warninglevel]=90) do={:set newgroupname "STONE" } :if ([$warninglevel]=95) do={:set newgroupname "STRAW" } /tool user-manager user set $i group-name=$newgroupname :log info "User $username in group $groupname downgrade to $newgroupname . Total MB Used=$megstotal for today" /tool e-mail send to=$email from="wifi.mtamobile@gmail.com" password="haiti2009" server=$server subject="Usage Warning: Usage at $percentage" body="Dear $username $surname This message is to inform you of your current usage. The current warning trigger is $warninglevel%. You have downloaded $megstotal MB, which is $percentage% of your $cap MB cap. This is an Automatically generated E-mail that is sent out when users reach 75%, 80%, 85%, 90% , 95% and 100% of their cap. If any information contained in this E-mail is incorrect, please inform us immediately. If you have received this E-mail in error, please reply to this E-mail stating that you are not the intended recipient, and delete this message. Thank You Auto Billing & Accounting MTA-Mobile.net MikroTik Ayiti wifi.mtamobile@gmail.com 9,Route de l'Aeroport rue des Nimes Port-au-Prince, Haiti " :log info "Sent Warning Level $warninglevel% to $email" } :set newcomment "$day$newmonth$newwarning" /tool user-manager user set $i comment=$newcomment } }