Информация из лога в Телеграм

Здесь выкладываем скрипты
Правила форума
Уважаемые Пользователи форума, обратите внимание!
Ни при каких обстоятельствах, Администрация форума, не несёт ответственности за какой-либо, прямой или косвенный, ущерб причиненный в результате использования материалов, взятых на этом Сайте или на любом другом сайте, на который имеется гиперссылка с данного Сайта. Возникновение неисправностей, потерю программ или данных в Ваших устройствах, даже если Администрация будет явно поставлена в известность о возможности такого ущерба.
Просим Вас быть предельно осторожными и внимательными, в использовании материалов раздела. Учитывать не только Ваши пожелания, но и границы возможностей вашего оборудования.
Ответить
bobvis
Сообщения: 4
Зарегистрирован: 06 апр 2023, 09:21

Добрый день!
Пользуюсь вот таким скриптом для отправки информации в Телеграм:

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

:global lastTime;
:global output;
:global ChatId;
:global TelegramApi;
:set TelegramApi ХХХХХХХХХХХХХХХХХХХХХХХХХХХХХХХХ
:set ChatId ХХХХХХХХХ
:global mtIdentity [/system identity get name];

:local LogGet [ :toarray [ /log find topics~"system" || message~"login failure" || message~"logged" || message~"connected" || message~"[Ff]ailure" ]];

:local LogtLineCount [ :len $LogGet ];

if ($LogtLineCount > 0) do={
:local currentTime "$[ /log get [ :pick $LogGet ($LogtLineCount -1) ] time ]";
:if ([:len $currentTime] = 10 ) do={
:set currentTime [ :pick $currentTime 0 10 ];
}
:set output "$currentTime - $[/log get [ :pick $LogGet ($LogtLineCount-1) ] message]";
:if (([:len $lastTime] < 1) || (([:len $lastTime] > 0) && ($lastTime != $currentTime))) do={
:set lastTime $currentTime ;
:tool fetch url=("https://api.telegram.org/bot$TelegramApi/sendmessage\?chat_id=$ChatId&text=%F0%9F%93%A1\"$mtIdentity\" :  $output") keep-result=no 
}

}
Найдено здесь: https://blog.unixhost.pro/ru/2022/11/te ... a769208476
Работает нормально, но приходят не все сообщения из Log.
Например перезагрузка, подключение клиентов приходит, а инфа о состоянии роутера по результатам выполнения скрипта: viewtopic.php?f=14&t=7924 - нет.
Что надо поправить, чтоб приходила инфа о состоянии роутера, которая отражается в Log, а не только сообщения системы?


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

Если в тексте отправки будет хотя бы один символ, не поддерживаемый Телеграмм (например символ русского языка), то в чат ничего отправлено не будет.
Чтобы не парить себе мозг можно воспользоваться готовыми функциями перекодировки или библиотеками функций на выбор:

Функция-конвертер строки для отправки сообщений в Телеграмм viewtopic.php?f=14&t=11996
Функция перекодирования с пересылкой FuncTelegramSender viewtopic.php?p=81457#p81457
Telegram active Runner and Notifyer (TaRaN) viewtopic.php?f=14&t=14281
Удаленный запуск скриптов через Телеграм (совместно с drpioneer) viewtopic.php?f=14&t=12659
Библиотека скриптовых функций SATELLITE для TLGRM viewtopic.php?f=14&t=13648
Функция-массив для отправки сообщения в Телеграмм, SMS через модем, SMS через API sms.ru, SMS через шлюзы устройств Laurent-5G, Netping, сообщений на почту viewtopic.php?f=14&t=13440

Вот изолировано самая нормальная функция перекодирования, через нее нужно пропустить Ваш выхлоп, а потом отправить его в Телеграмм:

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

# Function of converting CP1251 to UTF8
    # https://forummikrotik.ru/viewtopic.php?p=81457#p81457
    :local CP1251toUTF8 do={
        :local cp1251 [:toarray {"\20";"\01";"\02";"\03";"\04";"\05";"\06";"\07";"\08";"\09";"\0A";"\0B";"\0C";"\0D";"\0E";"\0F"; \
                                 "\10";"\11";"\12";"\13";"\14";"\15";"\16";"\17";"\18";"\19";"\1A";"\1B";"\1C";"\1D";"\1E";"\1F"; \
                                 "\21";"\22";"\23";"\24";"\25";"\26";"\27";"\28";"\29";"\2A";"\2B";"\2C";"\2D";"\2E";"\2F";"\3A"; \
                                 "\3B";"\3C";"\3D";"\3E";"\3F";"\40";"\5B";"\5C";"\5D";"\5E";"\5F";"\60";"\7B";"\7C";"\7D";"\7E"; \
                                 "\C0";"\C1";"\C2";"\C3";"\C4";"\C5";"\C7";"\C7";"\C8";"\C9";"\CA";"\CB";"\CC";"\CD";"\CE";"\CF"; \
                                 "\D0";"\D1";"\D2";"\D3";"\D4";"\D5";"\D6";"\D7";"\D8";"\D9";"\DA";"\DB";"\DC";"\DD";"\DE";"\DF"; \
                                 "\E0";"\E1";"\E2";"\E3";"\E4";"\E5";"\E6";"\E7";"\E8";"\E9";"\EA";"\EB";"\EC";"\ED";"\EE";"\EF"; \
                                 "\F0";"\F1";"\F2";"\F3";"\F4";"\F5";"\F6";"\F7";"\F8";"\F9";"\FA";"\FB";"\FC";"\FD";"\FE";"\FF"; \
                                 "\A8";"\B8";"\B9"}];
        :local utf8   [:toarray {"0020";"0020";"0020";"0020";"0020";"0020";"0020";"0020";"0020";"0020";"000A";"0020";"0020";"000D";"0020";"0020"; \
                                 "0020";"0020";"0020";"0020";"0020";"0020";"0020";"0020";"0020";"0020";"0020";"0020";"0020";"0020";"0020";"0020"; \
                                 "0021";"0022";"0023";"0024";"0025";"0026";"0027";"0028";"0029";"002A";"002B";"002C";"002D";"002E";"002F";"003A"; \
                                 "003B";"003C";"003D";"003E";"003F";"0040";"005B";"005C";"005D";"005E";"005F";"0060";"007B";"007C";"007D";"007E"; \
                                 "D090";"D091";"D092";"D093";"D094";"D095";"D096";"D097";"D098";"D099";"D09A";"D09B";"D09C";"D09D";"D09E";"D09F"; \
                                 "D0A0";"D0A1";"D0A2";"D0A3";"D0A4";"D0A5";"D0A6";"D0A7";"D0A8";"D0A9";"D0AA";"D0AB";"D0AC";"D0AD";"D0AE";"D0AF"; \
                                 "D0B0";"D0B1";"D0B2";"D0B3";"D0B4";"D0B5";"D0B6";"D0B7";"D0B8";"D0B9";"D0BA";"D0BB";"D0BC";"D0BD";"D0BE";"D0BF"; \
                                 "D180";"D181";"D182";"D183";"D184";"D185";"D186";"D187";"D188";"D189";"D18A";"D18B";"D18C";"D18D";"D18E";"D18F"; \
                                 "D001";"D191";"2116"}];
        :local convStr ""; 
        :local code    "";
        :for i from=0 to=([:len $1]-1) do={
            :local symb [:pick $1 $i ($i+1)]; 
            :local idx  [:find $cp1251 $symb];
            :local key  ($utf8->$idx);
            :if ([:len $key] != 0) do={
                :set $code ("%$[:pick ($key) 0 2]%$[:pick ($key) 2 4]");
                :if ([pick $code 0 3] = "%00") do={ :set $code ([:pick $code 3 6]); }
            } else={ :set code ($symb); }; 
            :set $convStr ($convStr.$code);
        }
        :return ($convStr);
    }


фрагменты скриптов, готовые работы, статьи, полезные приемы, ссылки
viewtopic.php?f=14&t=13947
Ответить