Skip to content

Instantly share code, notes, and snippets.

@dolifer
Last active June 24, 2024 20:12
Show Gist options
  • Save dolifer/8fe6f3fe94a64648dbf47ef4b7e99e9c to your computer and use it in GitHub Desktop.
Save dolifer/8fe6f3fe94a64648dbf47ef4b7e99e9c to your computer and use it in GitHub Desktop.
Lua скрипт для збору телеметрії з Mikrotik

Intro

З дозволу автора викладаю скрипт збору телеметрії відлючень світла

хочете допомогти проекту? автор волонтер - http://resolute.org.ua тому хай буде донат, котрий піде на створення девайсів для ЗСУ

Requirements

Щоб скрипт працював тре mikrotik або будь-який роутер що вміє LUA який-небуть мережевий девайс що підключений у окрему розетку (без резервного живлення)

але цей скрипт не робить ті графіки що у твітері, він лише збирає телеметрію до файлів та відправляє у ТГ-канал за допомогою бота

Create files

на MikroTik створити два файли

/file print detail file="currentStatus.txt"
/file set currentStatus.txt contents="ON"
/file print detail file="journal.log"
/file set journal.log contents=""

перший файл для поточного значення ON/OFF у другий файл буде записуватись телеметрія з часом та датою

Chart

графік можна побудувати з даних журналу, там у скрипті на 7 строці підключається для цього файл

image

календар потім можна намалювати через https://fullcalendar.io/ або будь-яку іншу бібліотеку

image

Telegram

строки 29 та 40 там стартує ще один скрипт - у ньому у мене запускається гостьовий wifi та надсилається повідовлення у ТГ-канал тож можна видалити, а сповіщення можна змінити у строках 25 та 36 вони будуть надсилатись у 48 строці

як налаштувати канал

  1. створюєте бота за допомогою бот-фазеру
  2. створюєте канал, додаєте до нього бота
  3. активуєте бота у каналі чи приватно
  4. запрошуєте інформацію через посилання https://api.telegram.org/тут-треба-вказати-id-вашого-бота/getUpdates
  5. у запрошених даних побачите id каналу до котрого додан бот, далі ці дані будуть використовуватись у скрипті
:local ipInt 'INTERNAL-NETWORK-DEVICE-WITH-STATIC-IP'
:local ipExt 8.8.8.8
:local prInt [ping $ipInt count=3]
:local prExt [ping $ipExt count=3]
:local msg ""
:local file "FILE-WITH-CURRENT-STATUS.ext"
:local journal "FILE-WITH-JOURNAL.ext"
:local date [/system clock get date]
:local time [/system clock get time]
:local changed 0
:local debugLogStatus
# ID de bot y canal de Telegram
:local botid "YOUR-TELEGRAM-BOT-ID"
:local chatId "YOUR-TELEGRAM-CHANNEL-ID"
# Leer datos de archivos
:local statusContent [/file get $file contents]
:local journalContent [/file get $journal contents]
# Compruebe si hay ping en ambas direcciones IP
:if ( ($prInt > 1) and ($prExt > 1) ) do={
# Encendido
:if ($statusContent = "OFF") do={
:set msg ($msg . "%0A" . "Cambiar el estado en el archivo a <ON>")
/file set $file contents="ON"
/file set $journal contents=($journalContent . "\n" . "ON - $date $time")
:set changed "1"
# /system script run EM-Svitlo_1
# ^ esta es mi script - no probleta a comento
}
} else={
# Apagado
:if ($statusContent = "ON") do={
:set msg ($msg . "%0A" . "Cambiar el estado en el archivo a <OFF>")
/file set $file contents="OFF"
/file set $journal contents=($journalContent . "\n" . "OFF - $date $time")
:set changed "1"
# /system script run EM-Svitlo_0
# ^ esta es mi script - no probleta a comento
}
}
#Intenta enviar un mensaje a Telegram-Bot
:if ($changed = 1) do={
/tool fetch url="https://api.telegram.org/bot$botid/sendmessage\?chat_id=$chatId&text=$msg " keep-result=no
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment