Witam.
Jestem nowy w temacie HA i nodereda ale jak już sobie coś ubzduram to dążę konsekwentnie do zakończenia. Widziałem w HA integrację z Mikrotikiem ale szczerze mówiąc nic ona nie daje takiego co było mi potrzebne. A co konkretnie chciałem zrobić?
- Wyświetlić Status mikrotika w HA ( pamięć, %procesora, i inne statystyki)
- blokować dzieciakom Internet (www, telewizor, komputery ) w godzinach szkoły zwłaszcza w okresie nauki - czyli zabawa regułami na firewallu
- czytać logi z routera i informować o błędach.
Tyle w planach a teraz co będzie potrzebne.
- Wymagany działający nodered. tego nie będę opisywał.
- uruchomienie na mikrotiku api oraz (bo jestem faszystą jeżeli chodzi o bezpieczeństwo) założenie użytkownika o nazwie API oraz ograniczenie go do adresu naszego HA aby nikt inny nie mógł się nam wbić na router.
Wszystko co tu opisuję jest banalne i pewnie wielu macherów z forum zrobi znacznie więcej niż ja.
Cytując Artura … “A więc zaczynamy”
uruchomienie usługi API
Logujemy się do mikrotika i przechodzimy do IP → services → uruchamiamy usługę api na porcie 8728.
WIEM! lepiej było by uruchomić api-ssl ale tego nie udało mi się zintegorwać z noderedem wiec pozostajemy przy nieszyfrowanym API.
- założenie konta i ograniczenie go.
Przechodzimy do zakładki system → users
klikamy add i wypałeniamy… w miejscu allowed Address podajemy ip naszego HA.
koniec zabawy na mikrotiku (na razie) teraz do nodereda.
-
dodanie noda do łączenia się z mikrotikiem
klikamy menu → manage pallete → install
tam w wyszukiwarce znajdujemy node-red-contrib-mikrotik i instalujemy.
teraz w zakładce network powinniśmy mieć noda o nazwie mikrotik
-
konfiguracja noda mikrotik.
klikamy na noda i klikamy w add new mikrotik device
i uzupełniamy danymi naszego routera oraz danymi konta do logowania
A teraz czas na zabawę. mamy od razu kilka możliwości
------Przeglądanie logów.-------------
w polu action wybieramy z listy rozwijalnej log
po czym uruchamiamy noda injectem i w zmiennej msg.payload otrzymujemy informację o lagach w postaci tablicy
-----Zasoby systemowe -------
z zakładki actions wybieramy system resources i dostajemy taką odpowiedz w msg.payload
aby to przenieść do dashbordu HA wystarczy stworzyć odpowiednią liczbę pomocników w konfiguracja->pomocnicy i tu można wybrać pomocników typu tekst lub numer/licznik w zależności od preferencji a potem wypełnić tego pomocnika danymi z node-reda wykorzystując node call service.
w przykładzie wybrałem 2 pomocników typu licznik z ustawieniami
dla CPU - max 101 min 0 step 1.
dla Memory max 1000000000000000 min 0 step 1
dodajemy tych pomocników do dashbordu a w nodered robimy tak
po nodzie mikrotik dodajemy nod function i tam wpisujemy (dla tego to robię bo nie potrafię przerobić danych z tablicy na dane w formacie JSON. Mądrzejsi ode mnie proszeni są o komentarz jak można pominąć nod function):
msg.cpu_load = msg.payload[0]['cpu-load'];
msg.free_memory = msg.payload[0]['free-memory'];
return msg;
z tego noda prowadzimy połączenie do dwóch nodów typu call service i tam wpisujemy takie dane
dla CPU
Dla Memory
po uruchomieniu node inject otrzymamy efekt
łatwo jest sobie potem przerobić w dowolny sposób aby wyciągnąć inne dane.
—Conected WiFi —
U mnie to nie działa bo mam access pointy podłączone do CAPS więc … ni ma msg.payload dostaję empty.
— Rebot jest oczywiste ----
Największa miodność to Raw Command or use msg.payload.
generalnie w msg.payload podajemy komendy takie jak wydajemy w terminalu z drobnymi zmianami wynikającymi z dokumentacji API mikrotika i notacji JSON.
Jest to bardzo intuicyjne więc nie powinno sprawić trudności.
Dla przykładu żeby z terminala mikrotika wyłączyć w firewallu regułę numer 1 w chainie filter wydamy następujące polecenie:
/ip firewall filter disable numbers=1
a w nodered zrobimy to tak
msg.payload=[’/ip/firewall/filter/disable’,’=numbers=1’];
więc żeby to zadziałało to przed node mikrotik dajemy node function tam wpisujemy tak
a w node mikrotik wpisujemy tak:
po uruchomieniu node inject możemy sprawdzić czy się wykonało poprawnie w interface mikrotika oraz mamy potwierdzenie w node red w postaci takiej
i to by było na tyle. Resztę pozostawiam wyobraźni kolegów forumowiczów.