Integracja Node-RED z mikrotikiem i możesz wszystko :)

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ć?

  1. Wyświetlić Status mikrotika w HA ( pamięć, %procesora, i inne statystyki)
  2. blokować dzieciakom Internet (www, telewizor, komputery ) w godzinach szkoły zwłaszcza w okresie nauki - czyli zabawa regułami na firewallu
  3. czytać logi z routera i informować o błędach.

Tyle w planach a teraz co będzie potrzebne.

  1. Wymagany działający nodered. tego nie będę opisywał.
  2. 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.

  1. 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.

  1. 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

  2. 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 :slight_smile: 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.

3 polubienia

Do integracji HA z Mikrotikiem używam dodatku HACS: GitHub - tomaae/homeassistant-mikrotik_router: Mikrotik router integration for Home Assistant a do podstawowego blokowania dostępu do internetu dzieciom korzystam z funkcjonalności Kid control na Mikrotiku obsługiwanej z aplikacji mobilnej MikroTika. Do kontroli komórek (Android) młodszych dzieci u mnie sprawdziła się aplikacja Family Link od Googla.
Mikrotika można jeszcze zintegrować z HA korzystając z SNMP lub ssh.

Problem jest taki że nie jestem w stanie odpalić poprawnie add-onów na których mi zależy po ostatnich zmianach w HA nagle przestała działać integracja z samsung TV, integracja o której mówisz oczywiście się uruchamia ale jedyne co jest w stanie sprawdzić to model mojego routera reszta jest “unavaliable”. Zrezygnowałem z fibaro właśnie z tego samego powodu że ciągle grzebali w systemie i po updateach wiele rzeczy mi nie działało tak jak chciałem i ciągle musiałem nadzorować czy coś nowego nie zrąbali … znaczy nie wprowadzili nowego “feature-sa”. Jeżeli coś sobie zaprogramuje z node-reda to raczej jest marna szansa na to że w kolejnej aktualizacji coś przeniosą z config.yaml do xyz.yaml i znowu treba poświęcać czas na poprawki. Ja tego czasu nie mam dlatego chcę zrobić coś raz a porządnie. Kiedy już przestaną przenosić z miejsca na miejsce to mozę się zastanowię.

Supervisor

Version 2020.12.7
Newest Version 2020.12.7
Channel stable

Host System

Operating System Home Assistant OS 5.9
Deployment production

co do konfiguracji mikrotika to kilka screanów.

i tak każda z 61 encji jest niedostępna. z góry uprzedzę ze restarty były kilkukrotne.

Sprawdź czy masz najnowszą wersję HACS, używam 1.6.2.
W celu weryfikacji zrób integrację na koncie admin Mikrotika wpisując port 8728.

Właśnie to miałem na myśli mówiąc “nie mam na to czasu”. Ale ok zobaczmy gdzie to nas doprowadzi :slight_smile:

oto dane z mojego HA

Home Assistant Community Store

**Integration version:** 1.9.0
**Frontend version:**  20201205162459
**Repositories:** 767

nie ma potrzeby włączać admina bo w mikrotiku mam potwierdzenie na koncie API że loguje się co jakieś 30 sek. wiec integracja zczytuje dane tylko znowu “coś” się zwaliło w HA. co to portu to w dokumentacji pisze wyraźnie

  • "Name of the integration" - Friendly name for this router
  • "Host" - Use hostname or IP
  • "Port" - Leave at 0 for defaults

Dla testu włączyłem admina i wpisałem port zamiast 0 i dalej nie działa. pewnie trzeba zgłosić problem poczekać aż ktoś kto napisał tego adona zobaczy, zdiagnozuje i naprawi.

Hej, ja trochę z innej beczki. Widzę, że masz ustawiony limit czasu na telewizor. możesz pokazać jak to poustawiałeś?

Jeszcze nie domończone. mam zamiar zrobić to w wolne dni kolo nowego roku to dam ci znać.

@BohdanGut postanowiłem odwzorować Twoje środowisko u siebie dlatego odtworzyłem stary backup konfiguracji HA (bez integracji z Mikrotkiem) na starej maszynie wirtualnej z oficjalnym obrazem HA, zrobiłem update do najnowszych wersji:

Supervisor
Version 2020.12.7

Host System
Operating System
Home Assistant OS 5.9

Home Assistant Community Store
Wersja integracji: 1.9.0

Potem zainstalowałem integrację w HACS:

Mikrotik Router v1.5.10

zrestartowałem HA, dodałem integrację w HA i podałem dane dostępowe do Mikrotika (RouterOS v6.46.4 stable - Ty masz nowszą ) i “u mnie działa”:

pewnie trzeba zgłosić problem poczekać aż ktoś kto napisał tego adona zobaczy, zdiagnozuje i naprawi.

Chyba masz pecha, że nie działa to u Ciebie.

Faktycznie mam nowszy system na mikrotiku, może to ten problem. Świeżo zainstalowany bo 22 grudnia. niestety nie będę się cofał już do starego aby sprawdzić czy mi też zadziała tym bardziej że i tak nie zamierzam korzystać z integracji z hacs czy HA. Ale dzięki za próbę pomocy może ktoś na forum będzie tego potrzebował.

mikrotik7

Integracja działa bez problemu na najnowszym MT V.6.48


Musisz mieć tak jak na zdjęciu

Po nowej Aktualizacji Mikrotik Router 1.6 trzeba usunąć zintegrowane MT i zainstalować na nowo, pozmieniały się nazwy encji wiec stare nie działają, trzeba tez zaznaczyć na MT dla HA policy

Mam pytanko pojawił mi się od kilku dni błąd w tej integracji, takie mam informacje w logu:
The following integrations and platforms could not be set up:

  • mikrotik_router.sensor
    Please check your config and logs.

Logger: custom_components.mikrotik_router.mikrotik_controller
Source: custom_components/mikrotik_router/mikrotik_controller.py:968
Integration: Mikrotik Router (documentation, issues)
First occurred: 2:54:56 PM (6 occurrences)
Last logged: 3:14:00 PM

  • Mikrotik 192.168.XX.1 duplicate Mangle rule mark-connection,any:any, entity will be unavailable.
  • Mikrotik 192.168.XX.1 duplicate Mangle rule mark-routing,any:any, entity will be unavailable.

Logger: custom_components.mikrotik_router.mikrotikapi
Source: custom_components/mikrotik_router/mikrotikapi.py:98
Integration: Mikrotik Router (documentation, issues)
First occurred: 2:50:25 PM (4 occurrences)
Last logged: 2:58:36 PM

  • Mikrotik 192.168.XX.1 error while arp_ping : unknown
  • Mikrotik 192.168.XX.1 error while building list for path : unknown

Logger: custom_components.mikrotik_router.mikrotikapi
Source: custom_components/mikrotik_router/mikrotikapi.py:170
Integration: Mikrotik Router (documentation, issues)
First occurred: 2:51:26 PM (4 occurrences)
Last logged: 2:59:56 PM

Mikrotik Reconnected to 192.168.XX.1

Ja korzystam wciąż z wersji 1.6.1 każda nowa wersja była skopana . Nie wiem jakie jest teraz i jakie są wymagania wersji MT dla nowej integracji w HA. Ja chcesz wrócić do poprzedniej wersji integracji to HACS i instalacja do wcześniejszej wersji integracji MT lub poszukać rozwiązania w issues

Na Mikrotiku mam 6.49.1 Stable.
Integracja w wersji 1.7.2 ( a są dwie w tym jedna w ogóle nie chodzi ) u mnie jak najbardziej działa :
image

niestety u mnie wygląda to tak

Logger: homeassistant.config_entries
Source: components/mikrotik/hub.py:259
First occurred: 12:13:50 (2 occurrences)
Last logged: 12:18:33

Error setting up entry Mikrotik for mikrotik
Traceback (most recent call last):
File “/usr/src/homeassistant/homeassistant/config_entries.py”, line 304, in async_setup
result = await component.async_setup_entry(hass, self) # type: ignore
File “/usr/src/homeassistant/homeassistant/components/mikrotik/init.py”, line 73, in async_setup_entry
if not await hub.async_setup():
File “/usr/src/homeassistant/homeassistant/components/mikrotik/hub.py”, line 387, in async_setup
await self.hass.async_add_executor_job(self._mk_data.update)
File “/usr/local/lib/python3.9/concurrent/futures/thread.py”, line 52, in run
result = self.fn(*self.args, **self.kwargs)
File “/usr/src/homeassistant/homeassistant/components/mikrotik/hub.py”, line 283, in update
self.update_devices()
File “/usr/src/homeassistant/homeassistant/components/mikrotik/hub.py”, line 178, in update_devices
self.all_devices = self.get_list_from_interface(DHCP)
File “/usr/src/homeassistant/homeassistant/components/mikrotik/hub.py”, line 165, in get_list_from_interface
result = self.command(MIKROTIK_SERVICES[interface])
File “/usr/src/homeassistant/homeassistant/components/mikrotik/hub.py”, line 259, in command
response = list(self.api(cmd=cmd))
File “/usr/local/lib/python3.9/site-packages/librouteros/api.py”, line 28, in call
yield from self.readResponse()
File “/usr/local/lib/python3.9/site-packages/librouteros/api.py”, line 60, in readResponse
reply_word, words = self.readSentence()
File “/usr/local/lib/python3.9/site-packages/librouteros/api.py”, line 46, in readSentence
reply_word, words = self.protocol.readSentence()
File “/usr/local/lib/python3.9/site-packages/librouteros/protocol.py”, line 189, in readSentence
sentence = tuple(word for word in iter(self.readWord, ‘’))
File “/usr/local/lib/python3.9/site-packages/librouteros/protocol.py”, line 189, in
sentence = tuple(word for word in iter(self.readWord, ‘’))
File “/usr/local/lib/python3.9/site-packages/librouteros/protocol.py”, line 206, in readWord
return word.decode(encoding=self.encoding, errors=‘strict’)
UnicodeDecodeError: ‘utf-8’ codec can’t decode byte 0xf3 in position 15: invalid continuation byte

Mi to wygląda że używasz właśnie tej niewłaściwej bo tylko ona sypie błędami.

jak widać jest tylko jedna:(

image
Są dwie i Ty pewnie widzisz te skopaną.
Uaktualnij HACS:
image
Ma być tylko taka:



@BohdanGut a po zainstalowaniu “Mikrotik Router” zrobiłeś restart HA? Może to także wina cache przegladarki.

Dla mnie też to na cuda wygląda bo dokładnie mam tę integracje i przyczepia mi się tylko do jednego tj niby zdublowane wpisy w Firewall-u.