Страница 1 из 1

Нужна помьщь, скрипт отслеживает регистрацию пользователя

Добавлено: 03 апр 2020, 10:31
VerMorr
Доброе время суток!
Мне необходимо перезаписывать последнее значение ChekNow в LastValueChe, для того чтобы при следующем запуске скрипта отследить изменилось или нет значение. В зависимости от этого определяется направление пользователя пришёл или ушёл, отправляется сообщение на web сервис. При первом запуске в переменную LastValueChek записывается значение, при последующих запусках значение не перезаписывается, хранит первоначальное значение. Возможно подскажите, почему может не перезаписываться значение в переменную? Владелец скрипта Administrator, Policy - всё кроме dude.

:global mac "XX:XX:XX:XX:XX:XX"
:global LastValueChek
:global ChekNow
if ([/caps-man registration-table find mac-address=$mac] != "") do={set ChekNow true} else={set ChekNow false}

if (($LastValueChek = false) and ($ChekNow = true)) do={
/tool fetch url="<URL url="http://192.168.5.241:55500/">http://192 ... 5500/</URL>" http-data="I_came_home"
}

if (($LastValueChek = true) and ($ChekNow = false)) do={
/tool fetch url="<URL url="http://192.168.5.241:55500/">http://192 ... 5500/</URL>" http-data="I_left_home"
}

:set LastValueChek $ChekNow;

Re: Нужна помьщь, скрипт отслеживает регистрацию пользователя

Добавлено: 03 апр 2020, 20:32
podarok66
Не знаю. У меня вот эта часть вашего скрипта

Код: Выделить всё

:global mac "XX:XX:XX:XX:XX:XX"
:global LastValueChek
:global ChekNow
if ([/caps-man registration-table find mac-address=$mac] != "") do={set ChekNow true} else={set ChekNow false}
:set LastValueChek $ChekNow;
:log info $LastValueChek;
исправно выдаёт true при подключенном устройстве и false при отключённом. Делайте дебагинг ваших условий хотя бы простейшим логированием каждого шага, авось найдёте затык. Любое из ваших if имеет по два условия, то есть есть лишь один из четырёх вариантов (true/true; true/false; false/true; false/false) вам подходит и приводит к выполнению команды в do Возможно что-то идёт не так в этот момент. Может свести количество условий к минимуму, там будет легче отследить, что не работает?

Код: Выделить всё

:if ($LastValueChek = false) do={
   :if ($ChekNow = true) do={
   /tool fetch url="<URL url="http://192.168.5.241:55500/">http://192 ... 5500/</URL>" http-data="I_came_home"
   }
} elce={
   :if ($ChekNow = false) do={
   /tool fetch url="<URL url="http://192.168.5.241:55500/">http://192 ... 5500/</URL>" http-data="I_left_home"
   }
}
Единственное, в этом варианте нужно изначально задать переменной $LastValueChek значение false , чтобы даже при первом старте проверялся учтённый вариант. Это не очень корректно. Или ставить дополнительное условие на случай рестарта роутера, типа там весь блок заключить в

Код: Выделить всё

 :if ($LastValueChek != "") do={ 
 дальше предыдущий блок
 } else={
:if ($ChekNow = true) do={ 
/tool fetch url="<URL url="http://192.168.5.241:55500/">http://192 ... 5500/</URL>" http-data="Router_restart_I_home"
} else={
/tool fetch url="<URL url="http://192.168.5.241:55500/">http://192 ... 5500/</URL>" http-data="Router_restart_Im_not_at_home"
}
}
Что-то я разболтался :smu:sche_nie: Простите. Мне сложновато воспроизвести ваши условия на тестовой железке, но примерный взгляд на решение проблемы я описал...