NEWS
Mikrotik Anwesenheitskontrollskript
-
Mikrotik-Router-Skript zur zuverlässigen Erkennung des WLAN-Clients und zum Senden von HTTP-Anfragen, wenn Geräte im Netzwerk registriert oder abgemeldet werden. Dieser Ansatz funktioniert sehr zuverlässig mit Apple iPhone, iPad und anderen Geräten, die nicht mit TCP oder UDP erreichbar sind, aber dennoch im Netzwerk angemeldet sind.
Wie das funktioniert
Der Mikrotik-Scheduler ruft das Anwesenheitskontrollskript mit einem angegebenen Intervall auf, um zu überprüfen, ob die gewünschten Geräte im WiFi-Netzwerk registriert sind. Wenn das Skript eine Änderung des Gerätestatus im Netzwerk erkennt, sendet es eine HTTP-Anfrage an einen gewünschten Server, um zu melden, dass das Gerät registriert ist, auch wenn das Gerät nicht mehr im WiFi-Netzwerk vorhanden ist. Um die Zuverlässigkeit bei der Einrichtung mehrerer Zugangspunkte zu verbessern, sendet das Skript beim Registrieren des Geräts bis ankommenSendTimes-Anforderungen an den Server, da es vorkommen kann, dass der Zugangspunkt, an dem das Gerät nicht registriert war, ein Leave-Ereignis an den Server sendet, nachdem das Gerät an einem anderen Zugangspunkt registriert wurde , was dazu führt, dass das Gerät vom Server als nicht vorhanden behandelt wird.
Installation und Konfiguration
Variables
arriveSendTimes - wie oft Anfragen an einen Server gesendet werden, wenn das Gerät im WLAN-Netzwerk registriert ist
subjects - Array von Geräten, um das Vorhandensein zu überprüfen, jeder Eintrag enthält Name, Mac und Status
name - Name der Person, die ein bestimmtes Gerät besitzt, ist optional und wird nur beim Senden von HTTP-Anfragen verwendet
mac - MAC-Adresse des überwachten Geräts, sollte in Großbuchstaben sein
state - interne Zustandsvariable zur Erkennung von Zustandsänderungen, sollte auf 0 gesetzt werdenÄndern Sie die folgenden Zeilen basierend auf Ihren Anforderungen, im aktuellen Beispiel wurde es verwendet, um den Status über Simple RESTful API zu melden:
/tool fetch url="http://192.168.0.113:8087/set/MyVariable.0.Anwesenheit.$name\?value=false" mode=http ... /tool fetch url="http://192.168.0.113:8087/set/MyVariable.0.Anwesenheit.$name\?value=true" mode=http
Installation
Von Mikrotik Winbox:
-
Neues Skript erstellen System -> Skripte -> Registerkarte Skripte -> Neu hinzufügen
-
Setzen Sie den Namen auf Presence_control
-
Fügen Sie den Inhalt von script in Source . ein
-
Innerhalb des Skripts: Geräte-Array ändern und Werte der URL anpassen
-
Lassen Sie andere Optionen unverändert
-
Klicken Sie auf Übernehmen
-
Neuen schedule erstellen System -> Schedulers -> Neu hinzufügen
-
Aktivieren Sie das Häkchen
-
Setzen Sie den Namen auf Presence_control
-
Intervall eingestellt auf 00:00:05
-
Bei Ereignis "Presence_control" einfügen
-
Klicken Sie auf Übernehmen
Mikrotik Script
:local arriveSendTimes 5 :global subjects {{name="StratosAtHome";mac="08:C5:E1:05:EE:06";state=0};{name="AspaAtHome";mac="A4:4B:D5:26:B1:40";state=0}} :put "Subjects:" :foreach entry in=$subjects do={ :put ($entry) } :local clients [:toarray ""] :put "Registered WiFi clients:" :foreach i in=[ / caps-man registration-table find] do={ :local mac [ / caps-man registration-table get $i value-name=mac-address] :set $clients ($clients, "$mac") :put $mac } :put "Checking subject presence..." :foreach entry in=$subjects do={ :local state ($entry->"state") :local name ($entry->"name") :foreach mac in=$clients do={ :if ($mac = $entry->"mac") do={ :set $state ($state + 1) :put "$name present" } } if ((($entry->"state") = $state) and ($state != 0)) do={ :put "$name left" :set ($entry->"state") 0 /tool fetch url="http://192.168.0.113:8087/set/MyVariable.0.Anwesenheit.$name\?value=false" mode=http /log warning "[Checking subject presence...] $name" } else={ if ((($entry->"state") != $state) and ($state <= $arriveSendTimes)) do={ :put "$name arrived" :set ($entry->"state") $state /tool fetch url="http://192.168.0.113:8087/set/MyVariable.0.Anwesenheit.$name\?value=true" mode=http /log warning "[Checking subject presence...] $name" } } }
-