Телеграмма для Mikrotik...

Здесь выкладываем скрипты
Правила форума
Уважаемые Пользователи форума, обратите внимание!
Ни при каких обстоятельствах, Администрация форума, не несёт ответственности за какой-либо, прямой или косвенный, ущерб причиненный в результате использования материалов, взятых на этом Сайте или на любом другом сайте, на который имеется гиперссылка с данного Сайта. Возникновение неисправностей, потерю программ или данных в Ваших устройствах, даже если Администрация будет явно поставлена в известность о возможности такого ущерба.
Просим Вас быть предельно осторожными и внимательными, в использовании материалов раздела. Учитывать не только Ваши пожелания, но и границы возможностей вашего оборудования.
Ответить
Аватара пользователя
Brook
Сообщения: 127
Зарегистрирован: 24 май 2022, 00:29

-13- писал(а): 25 авг 2022, 18:23 В скрипте teSetMyCommands нет значения переменной $endCommand, так задумано?
:-): Осталось после рефакторинга. Она не используется уже. Закрывается переменной :local end "\5D".

Изображение

В цикле for собирается команда из массива. В результате получается лишняя запятая в конце строки. Она убирается после цикла

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

:set cmdItems [:pick $cmdItems 0 ([:len $cmdItems] - 1)]
$endCommand я уберу в следующем билде. Спасибо за внимательность. Чистота кода очень важна.


-13-
Сообщения: 124
Зарегистрирован: 18 мар 2021, 12:45

Спасибо за скрипт teSetMyCommands, утащил в копилку))

Чуть причесал под своих ботов, свой вариант выложу тут, если автор не против
 

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

# Name: teSetMyCommands
# Description: Set commands & description to Main botTelegram

:global fnParse

:set $dbCmd [[$fnParse script="dbCmd"]]
:set $botID ($dbCmd->"botID")
#:set $mainCmd ($dbCmd->"mainCmd")
:set $mainCmd "interfaces - Get interfaces list,users - Get users list"; #test mainCmd List
:set $apiTg ($dbCmd->"apiTg")

:set $mainCmd [:toarray $mainCmd]
:foreach i in=$mainCmd do={
    :set $Description [:pick $i ([find $i "-"] + 2) [:len $i]]
    :set $Description ",\22description\22:\22$Description\22\7D,"
    :set $Cmd [:pick $i 0 ([find $i "-"] - 1)]
    :set $Cmd "\7B\22command\22:\22$Cmd\22"
    :set $Cmd ($Cmd . $Description)
    :set $listCmd ($listCmd . $Cmd)
}
:set $mainCmd [:pick $listCmd 0 ([:len $listCmd] - 1)]
:set $mainCmd ("\5B" . $mainCmd . "\5D")

:set $fetchCmd "/setMyCommands\?commands=$mainCmd"
:set $fetchCmd ($apiTg . $botID . $fetchCmd)
/tool fetch url=$fetchCmd output=user

# End


Аватара пользователя
Brook
Сообщения: 127
Зарегистрирован: 24 май 2022, 00:29

-13- писал(а): 26 авг 2022, 13:15 Спасибо за скрипт teSetMyCommands, утащил в копилку))

Чуть причесал под своих ботов, свой вариант выложу тут, если автор не против
Пожалуйста. Я не против. Этот скрипт, кстати, давно лежит в первом сообщении этого поста.

Подскажите, у Вас бот заработал на ROS 7?


-13-
Сообщения: 124
Зарегистрирован: 18 мар 2021, 12:45

Brook писал(а): 26 авг 2022, 14:19
-13- писал(а): 26 авг 2022, 13:15 Спасибо за скрипт teSetMyCommands, утащил в копилку))

Чуть причесал под своих ботов, свой вариант выложу тут, если автор не против
Пожалуйста. Я не против. Этот скрипт, кстати, давно лежит в первом сообщении этого поста.

Подскажите, у Вас бот заработал на ROS 7?
не заработал, пока не разбирался


Аватара пользователя
Brook
Сообщения: 127
Зарегистрирован: 24 май 2022, 00:29

Друзья, написал небольшую статью о том, как я пришел к разработке на RouterOS.

Если кому интересно узнать на что ещё способен Микротик, то статья доступна по ссылке.
Выложил её на Хабре, но пока она на модерации. Может кто укажет на неточности или что-то добавит...


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

Прочитал статью. Она адресована друзьям (но прочитать могут и "враги" :-) ...) Хорошо, но на мой взгляд слишком обобщающе, мало интересных подробностей. Хотелось бы просить автора немного "развернуть" описание отдельных модулей и подпрограмм ... (Хотя может быть он этого не хочет, т.к. продукт вполне может стать коммерческим). Отдельное спасибо автору за то, что он поддержал давно высказываемую мною (в частности) мысль - возможности микротик шире обычного роутера. За это меня много ругали, говоря о том, что роутер должен быть только роутером ... Очень интересна идея использовать РоутерОС как среду программирования, среду управления процессами, например на виртуальном роутере с большой библиотекой скриптов. Или, например, можно использовать виртуальный роутер как библиотеку скриптов и функций... (в которую будут "ходить" другие роутеры по мере надобности).

Искренне желаю автору удачи и новых проектов ! Не бросайте начатого и очень рад "читать Вас" на форуме.


фрагменты скриптов, готовые работы, статьи, полезные приемы, ссылки
viewtopic.php?f=14&t=13947
Аватара пользователя
Brook
Сообщения: 127
Зарегистрирован: 24 май 2022, 00:29

Sertik писал(а): 29 авг 2022, 15:04 Прочитал статью. Она адресована друзьям (но прочитать могут и "враги" :-) ...) Хорошо, но на мой взгляд слишком обобщающе, мало интересных подробностей. Хотелось бы просить автора немного "развернуть" описание отдельных модулей и подпрограмм ... (Хотя может быть он этого не хочет, т.к. продукт вполне может стать коммерческим). Отдельное спасибо автору за то, что он поддержал давно высказываемую мною (в частности) мысль - возможности микротик шире обычного роутера. За это меня много ругали, говоря о том, что роутер должен быть только роутером ... Очень интересна идея использовать РоутерОС как среду программирования, среду управления процессами, например на виртуальном роутере с большой библиотекой скриптов. Или, например, можно использовать виртуальный роутер как библиотеку скриптов и функций... (в которую будут "ходить" другие роутеры по мере надобности).

Искренне желаю автору удачи и новых проектов ! Не бросайте начатого и очень рад "читать Вас" на форуме.
Эта статья как раз и задумывалась для того, чтобы показать на сколько RouterOS недооценена. Ведь это в первую очередь OS, т.е. операционная система. А раз это OS, то под неё можно писать код. И это не обязательно должен быть код, который управляет самим устройством.

Полностью согласен с Вашим тезисом "использовать РоутерОС как среду программирования, среду управления процессами" и т.д. Для этого даже не нужно использовать всевозможные адрес-листы или другие элементы управления роутером.

Например, если в адрес-листах около 300 тыс. элементов, то система начинает тормозить. Такое поведение, скорее всего, связано с внутренней реализацией хранения данных. Но при работе с глобальным массивом, где более 500 тыс. элементов, я вообще не увидел никаких "тормозов", главное чтобы памяти было достаточно. Массивы вообще очень мощный инструмент, в Микротике у них достаточно не плохая реализация. Это по сути БД, нужно только написать систему управления.

В общем, возможности по созданию бэк-эндов под различные системы, достаточные. Я это покажу на примере своего следующего проекта в скором времени.

Что касается mikRobotа, то вопросы о том, как это всё работает можно задавать здесь. Я постараюсь развернуто на них отвечать. К сожалению, написать полноценный мануал, нет времени. Для этого, в идеале, нужен технический писатель, которого пока в наличии нет.

Целью создания бота было не только управление своими устройствами. В основе - дать сообществу готовую базу для разработки своего функционала в виде алгоритмов и библиотечных функций. Кстати, они тоже будут пополняться. Сейчас в разработке функции для работы в inline режиме. Это позволит создавать ещё более привлекательный и удобный интерфейс.

И большое спасибо за пожелания. Я постараюсь по максимуму делиться информацией с сообществом.


Аватара пользователя
Brook
Сообщения: 127
Зарегистрирован: 24 май 2022, 00:29

Задача: :du_ma_et:

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

:global arraydata [:toarray ""]
:set arraydata ({{"0"={"callbackquery"={"id"=0;"from"={"username"="name";"id"=0};"message"={"chat"={"id"=0}}}}}})
В глобальной переменной лежит многомерный ассоциативный массив. Кроме него в environment ничего больше нет.
Команда :environment print выводит его в таком же виде, как он инициализируется.

Код ниже, сохраняет этот массив в файл, чтобы потом сразу из него развернуть, без танцев с бубном.

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

:execute script=":put \":global newArray [:toarray \\\"\\\"]\r\n:set (\\\$newArray) ({\"; [:environment print]; :put \"})\"" file=newarray.txt
Если переменных в окружении много, то в файл добавятся все.
Может кто доведет до ума? Чтобы можно было этот массив из файла достать и развернуть. А то ну никак времени нет...

upd: 04.09.2022 Хабр опубликовал мою статью...


Аватара пользователя
Brook
Сообщения: 127
Зарегистрирован: 24 май 2022, 00:29

Сейчас инспектирую RouterOS v.7

Появилось несколько новых возможностей.

1. Наконец-то завезли тип данных timestamp - это время в Unix формате. Даты теперь можно сравнивать без преобразования. :co_ol:

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

:put [:timestamp]
2735w21:41:43.481891543
2. Появилась команда retry - пытается выполнить код заданное количество раз. Если не получилось, то выполняется код из блока on-error :bra_vo:

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

:retry command={abc} delay=1 max=2 on-error={:put "got error"}
got error
3. Так же завезли генератор случайных чисел. Команда rndnum генерирует рандомное число из интервала.

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

:put [:rndnum from=1 to=99];
4. Еще один генератор. Команда rndstr генерирует строку из указанных символов.

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

:put [:rndnum from="abcdef%^&" length=33];
5. Появился RestAPI. Крутится на сервисе www-ssl. Работает в формате JSON. Поддерживает все необходимые запросы, в том числе и PUT, POST. Теперь рулить микротиком можно проще.

Всё это расширяет возможности скриптов. К сожалению так и не добавили числа с плавающей точкой :ny_tik:. Это наверное единственное чего сейчас не хватает.

Так или иначе, новый проект будет под семерку.


Inner
Сообщения: 248
Зарегистрирован: 01 июл 2020, 16:02

Пока для тестов обновил домашний hap ac2. Долго сидел на 7.3 Впечатления были крайне смешанные. Сегодня обновился до 7.5 Пока что непонятно. Я бы рекомендовал сильно не спешить работать с ros7. Ну или потерпеть пару месяцев. Вроде как опросы показывают, что в организациях все на 6 сидят. Да и домашние мало кто на 7 перевёл


Ответить