оповещение в телегу

Здесь выкладываем скрипты
Правила форума
Уважаемые Пользователи форума, обратите внимание!
Ни при каких обстоятельствах, Администрация форума, не несёт ответственности за какой-либо, прямой или косвенный, ущерб причиненный в результате использования материалов, взятых на этом Сайте или на любом другом сайте, на который имеется гиперссылка с данного Сайта. Возникновение неисправностей, потерю программ или данных в Ваших устройствах, даже если Администрация будет явно поставлена в известность о возможности такого ущерба.
Просим Вас быть предельно осторожными и внимательными, в использовании материалов раздела. Учитывать не только Ваши пожелания, но и границы возможностей вашего оборудования.
Ответить
Аватара пользователя
Virtue
Сообщения: 142
Зарегистрирован: 07 мар 2014, 10:17

max.kalinkin писал(а): 27 янв 2021, 14:30 а не пашет (((
куда копать ?
айдишки должны быть вида
:local botID "bot1000075423:AAEYn0eWtjTRKKg_BGF7fQiY5UjrTsdMfhl"
:local chatID "-1001422750080"

как я и писал в первом посту, у вас почемуто я вижу совсем другое, это что? имя бота?а чат айди у вас без минуса?


max.kalinkin
Сообщения: 2
Зарегистрирован: 27 янв 2021, 14:20

Virtue писал(а): 27 янв 2021, 16:28
max.kalinkin писал(а): 27 янв 2021, 14:30 а не пашет (((
куда копать ?
айдишки должны быть вида
:local botID "bot1000075423:AAEYn0eWtjTRKKg_BGF7fQiY5UjrTsdMfhl"
:local chatID "-1001422750080"

как я и писал в первом посту, у вас почемуто я вижу совсем другое, это что? имя бота?а чат айди у вас без минуса?
Спасибо !!! нашел толковую доку и все заработало
еще раз спасибо !


Sertik
Сообщения: 1598
Зарегистрирован: 15 сен 2017, 09:03

При парсинге лога оперировать временем в Микротик это плохо, из-за кривой реализации времени логирования разработчиками Микротик.
Данный материал обсужден детально тут:

https://habr.com/ru/post/532086/

Автор статьи указывает, что для корректной работы парсера лучше использовать .id событий в логе.

Там же приводится хороший вариант парсера лога автора, в том числе с выдачей новых сообщений в Телеграмм.


фрагменты скриптов, готовые работы, статьи, полезные приемы, ссылки
viewtopic.php?f=14&t=13947
Аватара пользователя
drpioneer
Сообщения: 142
Зарегистрирован: 30 май 2013, 10:20

Virtue писал(а): 23 сен 2020, 14:48 При наличии комментарий статик дхцп лесс записей, маки, содержащиеся в логах, будут присылаться с этими комментариями.
Для отключения отслеживания вайфай подключений, стираем из кода $topics ~"wireless"
Добрый день, уважаемый Virtue!
Недавно начал пользоваться твоим скриптом - очень удобная штука! Спасибо за твои труды!
Возникло пожелание к работе скрипта: Можно ли сделать, чтобы оповещения ~WIRELESS (~CAPS) отправлялись ТОЛЬКО в случае подключения нового клиента, не прописанного в DHCP LEASES ?

Заранее спасибо.


Аватара пользователя
Virtue
Сообщения: 142
Зарегистрирован: 07 мар 2014, 10:17

drpioneer писал(а): 18 фев 2021, 09:47 Добрый день, уважаемый Virtue!
Здравствуйте, а не проще ли в вашем случае занести маки своих вайфай устройств в строку скрипта для исключений?


Аватара пользователя
drpioneer
Сообщения: 142
Зарегистрирован: 30 май 2013, 10:20

Virtue писал(а): 18 фев 2021, 18:00 а не проще ли в вашем случае занести маки своих вайфай устройств в строку скрипта для исключений?
Если б речь шла о единицах wifi-клиентов, тогда занёс бы и вопросов не задавал.
В моем случае речь идёт о десятках wifi-клиентов на роутерах в разных локациях.

Проблему решил.
Код ниже:

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


# Telegram notification script by Virtue
# https://forummikrotik.ru/viewtopic.php?f=14&t=12043
# tested on ROS 6.48
# updated 2021/02/18

:do {
    :local botID "bot1111111111:XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX";
    :local chatID "-111111111";
    :local nameID  [/system identity get name];
    :delay 10;
    :local timeNow [/system clock    get time];
    :local logs;
    :if ([:pick $timeNow 0 2] < 03) do={
        :local date [/system clock get date];
        :foreach h in=[/log find] do={
            :local htime [/log get $h time];
            :if (($htime ~ [:pick $date 0 6]) and ([:pick $htime 7 15] > ($timeNow - 00:01:00))) do={ :set logs ($logs, $h); }
        }
    } else={ :set logs [/log find time >= ($timeNow - 00:01:00)]; }
    :if ([:len $logs] > 0 ) do={
        :local messages;
        :local presence false;
        :foreach i in=$logs do={
            :local imessage [/log get $i message];
            :local topics   [/log get $i topics];
            :if ($imessage ~"telnet" and $imessage ~"logged in") do={} else={
                :if ($topics ~"caps" || $topics ~"wireless") do={
                    :if ($imessage ~ "[0-F][0-F]:[0-F][0-F]:[0-F][0-F]:[0-F][0-F]:[0-F][0-F]:[0-F][0-F]") do={
                        :foreach k  in=[/ip dhcp-server lease find dynamic=no disabled=no] do={
                            :local mac [/ip dhcp-server lease get $k mac-address];
                            :if ($imessage ~ "$mac") do={ :set presence true; }
                        }
                    }
                    :if (presence = false) do={
                        :local currentTime [ /log get $i time ];
                        :set messages ($messages.$currentTime." ".$imessage."%0A%0A");
                    }
                }
                :if ($topics ~"warning" || $topics ~"error" || $topics ~"critical" || $imessage ~"logged in") do={
                    :if ($imessage ~ "[0-F][0-F]:[0-F][0-F]:[0-F][0-F]:[0-F][0-F]:[0-F][0-F]:[0-F][0-F]") do={
                        :foreach k  in=[/ip dhcp-server lease find dynamic=no disabled=no] do={
                            :local mac [/ip dhcp-server lease get $k mac-address];
                            :if ($imessage ~ "$mac") do={ :set imessage ($imessage." / ".[/ip dhcp-server lease get $k comment]); }
                        }
                    }
                    :local currentTime [ /log get $i time ];
                    :set messages ($messages.$currentTime." ".$imessage."%0A%0A");
                }
            }
        }
        :if ([:len $messages] > 0 ) do={
            put ($messages);
            /tool fetch keep-result=no url="https://api.telegram.org/$botID/sendmessage?chat_id=$chatID&text= $nameID : %0A$messages";
        }
    }
}

Еще раз большое спасибо за твой труд.


Аватара пользователя
Virtue
Сообщения: 142
Зарегистрирован: 07 мар 2014, 10:17

drpioneer писал(а): 18 фев 2021, 22:12 Еще раз большое спасибо за твой труд.
И вам спасибо за доработку.


Lurker
Сообщения: 159
Зарегистрирован: 29 апр 2021, 10:45

Спасибо. Если у кого не заработает.
1)попробуйте через браузер ссылку открыть... тогда ошибку можно посмотреть.
2)если будете копировать\писать ссылку в консоль микротика, то там знак вопроса не ставится и не копируется. Будьте осторожны Я почти час убил на то, чтобы понять почему в браузере работает, а в терминале с микротика нет.

Начал разбирать скрипт..

вот до этого я всё понял
:if (($htime ~ [:pick $date 0 6]) and ([:pick $htime 7 15] > ($timeNow - 00:01:00))) do={
но это что за условие такое?

UPD я так и не разобрался, но у меня появилась гипотеза... микротик криво хранит время логов(для текущего дня не хранит дату+ не учитывает часовые пояса), возможно это костыли чтобы обойти это.


vovvw
Сообщения: 20
Зарегистрирован: 25 янв 2021, 10:18

drpioneer писал(а): 18 фев 2021, 22:12 Проблему решил.
Код ниже:
Добрый день!
А на 7-ке это работает?
Если вручную в fetch пишу botID и chatID, а также убираю из текста %0A$messages, то присылает в телегу сообщение, иначе ничего не шлет...
Lurker писал(а): 26 июл 2021, 14:53 Спасибо. Если у кого не заработает.
1)попробуйте через браузер ссылку открыть... тогда ошибку можно посмотреть.
2)если будете копировать\писать ссылку в консоль микротика, то там знак вопроса не ставится и не копируется. Будьте осторожны Я почти час убил на то, чтобы понять почему в браузере работает, а в терминале с микротика нет.
Не заработало :-):
Чет про ссылку не понял, как проверить в браузере?
Знак вопроса есть.


Lurker
Сообщения: 159
Зарегистрирован: 29 апр 2021, 10:45

Просто ссылку в адресную строку браузера вставляете и жмёте энтер. Естественно чистым текстом без переменных. И без кирилицы.
Если вручную в fetch пишу botID и chatID, а также убираю из текста %0A$messages, то присылает в телегу сообщение, иначе ничего не шлет...
либо ID неправильные(объявите глобально и попробуйте через fetch) либо $mesages либов скрипте ошибка. Попробуйте скрипты выполнить из командной строки, а не кнопкой run script, тогда вывод ошибок можно увидеть


Ответить