+ Responder ao Tópico



  1. #1

    Padrão Finalmente consegui controle de banda por horário

    Depois de bater a cabeça consegui em um único script o controle de banda ou qualquer outro comando por horário mesmo em routerboards.

    A minha grande dificuldade era que nos conceitos normais de script para esta funcionalidade usariamos o comando ":totime" para alterar o tipo de variável da data que é uma string para um tipo de variável contendo data (:local time [/system clock get time]), mas sempre deu errado em diversas versões que testei. Resolvi inventar um pouco...

    segue abaixo um exemplo de script que compara o horário atual com o horário que iniciará e finalizará a execução do script, caso o horário atual corresponda com as condições, ele roda os comandos, do contrário ele executa outros comandos que desazem que foi executado no horário previsto, fica assim:

    para começar vamos configurar um cliente ntp:

    /system ntp client
    set enabled=yes mode=unicast primary-ntp=200.160.0.8 secondary-ntp=\
    200.189.40.8

    neste script de exemplo, a hora inicial dos comandos é de 22:00 e a hora final é de 07:00, ou seja das 22:00 às 07:00 os clientes que acessam a 129k de download e upload serão modificados automaticamente para 400k, da mesma forma os clientes que navegam a 123k passarão a acessar com 256k respectivamente, fora deste horário o comandos de desativação serão executados e os clientes voltam às velocidades originais.
    os comandos dentro de do={} rodam se as condições são verdadeiras, e os comandos dentro de else={} rodas os comandos caso as condições sejam falsas.


    :local btini 22
    :local btfim 7
    :if ([:tonum [ick [/system clock get time] 0 2 ]] >= $btini \
    || [:tonum [ick [/system clock get time] 0 2 ]] < $btfim ) \
    do={
    /que sim set [find limit-at="129k/129k"] limit-at="400k/400k" \
    max-limit="400k/400k"
    /que sim set [find limit-at="123k/123k"] limit-at="256k/256k" \
    max-limit="256k/256k"
    } else={
    /que sim set [find limit-at="400k/400k"] \
    limit-at="129k/129k" max-limit="129k/129k"
    /que sim set [find limit-at="256k/256k"] \
    limit-at="123k/123k" max-limit="123k/123k"
    }

    Por fim coloquem um agendamento para rodar este script a cada 5 minutos por assim:

    /system scheduler
    add comment="" disabled=no interval=5m name=#nomedoagendamento# \
    on-event=#nomedoscript# policy=\
    reboot,read,write,policy,test,password,sniff start-date=jan/01/1970 \
    start-time=00:00:00

    Modifiquem à vontade e me ajudem a colocar este script para rodar com precisão de minutos e segundos.

    Se tiverem dificuldade em manter a hora sincronizada com o ntp server adicione estas linhas no script dos comandos bem abaixo da sessão das variáveis:

    :delay 10s
    /sys ntp client set enabled=no
    /sys ntp client set enabled=yes

    pronto! se gostar agradece.
    Última edição por VictorOliveira; 05-06-2009 às 17:07. Razão: smiles atrapalhando o script, alguém retire por favor ":pick"

  2. #2

    Padrão

    Valeu pela sua enorme contribuição vou testar aqui e volto a postar o resultado mas achei fantastico seu post, parabens!

  3. #3

    Padrão

    Amigo pintou uma duvida, quanto a questão de controle do usuario eu uso por queues, para cada usuario com ip fixo não por dhcp seria a mesma coisa daria certo também?

    Desde já agradeço sua atenção!

    Valeu.

  4. #4
    Moderador Avatar de minelli
    Ingresso
    Aug 2006
    Localização
    Pres. Venceslau - SP | Pres. Prudente - SP
    Posts
    1.412
    Posts de Blog
    10

    Padrão Hora / Minuto / Segundo

    Citação Postado originalmente por VictorOliveira Ver Post
    Depois de bater a cabeça consegui em um único script o controle de banda ou qualquer outro comando por horário mesmo em routerboards.

    A minha grande dificuldade era que nos conceitos normais de script para esta funcionalidade usariamos o comando ":totime" para alterar o tipo de variável da data que é uma string para um tipo de variável contendo data (:local time [/system clock get time]), mas sempre deu errado em diversas versões que testei. Resolvi inventar um pouco...

    segue abaixo um exemplo de script que compara o horário atual com o horário que iniciará e finalizará a execução do script, caso o horário atual corresponda com as condições, ele roda os comandos, do contrário ele executa outros comandos que desazem que foi executado no horário previsto, fica assim:

    para começar vamos configurar um cliente ntp:

    /system ntp client
    set enabled=yes mode=unicast primary-ntp=200.160.0.8 secondary-ntp=\
    200.189.40.8

    neste script de exemplo, a hora inicial dos comandos é de 22:00 e a hora final é de 07:00, ou seja das 22:00 às 07:00 os clientes que acessam a 129k de download e upload serão modificados automaticamente para 400k, da mesma forma os clientes que navegam a 123k passarão a acessar com 256k respectivamente, fora deste horário o comandos de desativação serão executados e os clientes voltam às velocidades originais.
    os comandos dentro de do={} rodam se as condições são verdadeiras, e os comandos dentro de else={} rodas os comandos caso as condições sejam falsas.


    :local btini 22
    :local btfim 7
    :if ([:tonum [ick [/system clock get time] 0 2 ]] >= $btini \
    || [:tonum [ick [/system clock get time] 0 2 ]] < $btfim ) \
    do={
    /que sim set [find limit-at="129k/129k"] limit-at="400k/400k" \
    max-limit="400k/400k"
    /que sim set [find limit-at="123k/123k"] limit-at="256k/256k" \
    max-limit="256k/256k"
    } else={
    /que sim set [find limit-at="400k/400k"] \
    limit-at="129k/129k" max-limit="129k/129k"
    /que sim set [find limit-at="256k/256k"] \
    limit-at="123k/123k" max-limit="123k/123k"
    }

    Por fim coloquem um agendamento para rodar este script a cada 5 minutos por assim:

    /system scheduler
    add comment="" disabled=no interval=5m name=#nomedoagendamento# \
    on-event=#nomedoscript# policy=\
    reboot,read,write,policy,test,password,sniff start-date=jan/01/1970 \
    start-time=00:00:00

    Modifiquem à vontade e me ajudem a colocar este script para rodar com precisão de minutos e segundos.

    Se tiverem dificuldade em manter a hora sincronizada com o ntp server adicione estas linhas no script dos comandos bem abaixo da sessão das variáveis:

    :delay 10s
    /sys ntp client set enabled=no
    /sys ntp client set enabled=yes

    pronto! se gostar agradece.
    Amigo parabéns pelo script tenho um aqui que pega e separa a data talvez te ajude a ter uma idéia de como fazer com a hora.
    Código :
    [B]#Pega a data e separa mês dia e ano.[/B]
    :local date [/system clock get date]
    :local month [:pick $date 0 3]
    :local day [:pick $date 4 6]
    :local year [:pick $date 7 11]
     
    [B]#Define valor numérico do mês.[/B]
    :if ([$month] = "jan") do={ :set month "01" }
    :if ([$month] = "feb") do={ :set month "02" }
    :if ([$month] = "mar") do={ :set month "03" }
    :if ([$month] = "apr") do={ :set month "04" }
    :if ([$month] = "mai") do={ :set month "05" }
    :if ([$month] = "jun") do={ :set month "06" }
    :if ([$month] = "jul") do={ :set month "07" }
    :if ([$month] = "aug") do={ :set month "08" }
    :if ([$month] = "sep") do={ :set month "09" }
    :if ([$month] = "out") do={ :set month "10" }
    :if ([$month] = "nov") do={ :set month "11" }
    :if ([$month] = "des") do={ :set month "12" }

    Talvez a primeira parta do script "#Pega a data e separa mês dia e ano." seja o que te interesse pois ai da pra você ver como separa a data por mês, dia e ano. Sendo assim você também pode separar a hora por hora, minutos e segundos.

  5. #5

    Padrão

    Citação Postado originalmente por minelli Ver Post
    Amigo parabéns pelo script tenho um aqui que pega e separa a data talvez te ajude a ter uma idéia de como fazer com a hora.
    Código :
    [B]#Pega a data e separa mês dia e ano.[/B]
    :local date [/system clock get date]
    :local month [:pick $date 0 3]
    :local day [:pick $date 4 6]
    :local year [:pick $date 7 11]
     
    [B]#Define valor numérico do mês.[/B]
    :if ([$month] = "jan") do={ :set month "01" }
    :if ([$month] = "feb") do={ :set month "02" }
    :if ([$month] = "mar") do={ :set month "03" }
    :if ([$month] = "apr") do={ :set month "04" }
    :if ([$month] = "mai") do={ :set month "05" }
    :if ([$month] = "jun") do={ :set month "06" }
    :if ([$month] = "jul") do={ :set month "07" }
    :if ([$month] = "aug") do={ :set month "08" }
    :if ([$month] = "sep") do={ :set month "09" }
    :if ([$month] = "out") do={ :set month "10" }
    :if ([$month] = "nov") do={ :set month "11" }
    :if ([$month] = "des") do={ :set month "12" }

    Talvez a primeira parta do script "#Pega a data e separa mês dia e ano." seja o que te interesse pois ai da pra você ver como separa a data por mês, dia e ano. Sendo assim você também pode separar a hora por hora, minutos e segundos.
    Boa idéia, vou atualizar o script acima para melhorar para o pessol aê, valeu.

  6. #6

    Padrão

    Citação Postado originalmente por adepad Ver Post
    Amigo pintou uma duvida, quanto a questão de controle do usuario eu uso por queues, para cada usuario com ip fixo não por dhcp seria a mesma coisa daria certo também?

    Desde já agradeço sua atenção!

    Valeu.
    Tanto faz, queues estáticos ou dinamicos, adicionados manualmente ou por hotspot, o que este script faz é pegar todo mundo com uma determinada velocidade e mudar para outra velocidade, somente tome cuidado para não colocar a mesma velocidade para grupos diferentes, por exemplo o script que postei tem dois grupos, os que tem 129k e passam para 400k e os que tem 1k e passa para 128k, note que acrescentei 1k a mais no primeiro grupo (129k) somente para que o script saiba quem é quem, valeu?

  7. #7
    Moderador Avatar de minelli
    Ingresso
    Aug 2006
    Localização
    Pres. Venceslau - SP | Pres. Prudente - SP
    Posts
    1.412
    Posts de Blog
    10

    Padrão Script

    Você conseguiu fazer a divisão da hora????? Utilize como no exemplo "pick"

  8. #8

    Padrão

    Quero perguntar se alguem conseguiu fazer funcionar o script?
    Pois,coloquei ele aqui no mikrotik alterando as limites de velocidade, colocando o agendamento de tempo, mais nao funcionou, fiz tudo o que pude.
    Por isto gostaria de saber alguem conseguiu fazer rodar.

    Muito obrigado pela atenção