Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Praktische Anwendungen (Showcase)
    4. Mikrotik Anwesenheitskontrollskript

    NEWS

    • Wir empfehlen: Node.js 22.x

    • Neuer Blog: Fotos und Eindrücke aus Solingen

    • ioBroker goes Matter ... Matter Adapter in Stable

    Mikrotik Anwesenheitskontrollskript

    This topic has been deleted. Only users with topic management privileges can see it.
    • Stratos Gkrekidis
      Stratos Gkrekidis last edited by Stratos Gkrekidis

      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:

      1. Neues Skript erstellen System -> Skripte -> Registerkarte Skripte -> Neu hinzufügen

      2. Setzen Sie den Namen auf Presence_control

      3. Fügen Sie den Inhalt von script in Source . ein

      4. Innerhalb des Skripts: Geräte-Array ändern und Werte der URL anpassen

      5. Lassen Sie andere Optionen unverändert

      6. Klicken Sie auf Übernehmen

      7. Neuen schedule erstellen System -> Schedulers -> Neu hinzufügen

      8. Aktivieren Sie das Häkchen

      9. Setzen Sie den Namen auf Presence_control

      10. Intervall eingestellt auf 00:00:05

      11. Bei Ereignis "Presence_control" einfügen

      12. Klicken Sie auf Übernehmen

      script.png

      schedule.png

      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"
          }
        }
      }
      
      1 Reply Last reply Reply Quote 0
      • First post
        Last post

      Support us

      ioBroker
      Community Adapters
      Donate

      842
      Online

      32.0k
      Users

      80.5k
      Topics

      1.3m
      Posts

      1
      1
      491
      Loading More Posts
      • Oldest to Newest
      • Newest to Oldest
      • Most Votes
      Reply
      • Reply as topic
      Log in to reply
      Community
      Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen
      The ioBroker Community 2014-2023
      logo