Mikrotik RouterOS – GPS Tracking – Busreisen, Autofahrten, Urlaubsreisen, Wohnmobile uvm mit Internet versorgen und weltweit tracken
Der folgende Artikel erklärt, wie man ein einfaches Fahrzeugortungssystem mit der RouterOS GPS-Funktion und Skripting erstellt.
Vorteile der Fahrzeugortung
- Dies kann das führen eines Fahrtenbuches ersetzen
- Man kann auch zu späteren Zeitpunkten nachvollziehen wo man sich in einem vorangegangenen Urlaub bewegt hat
- Man kann Freunden über eine Webseite anzeigen, wo man sich gerade befindet
- Diebstahlschutz und Spurenauswertung bei Diebstahl
- Es lassen sich Kosten durch genauere Planung sparen
- Man kann jederzeit nachvollziehen, wo sich z.B. Busse oder LKWs befinden
- Aktuelle Standortdaten
- Routenplanung
- Management für die Kraftstoffersparnis
- Geschwindigkeitskontrolle
Mögliche Geräte für die Umsetzung:
Mikrotik LTE
- LTE: https://www.mikrotik-store.eu/de/mikrotik-lte
- Hier insbesondere die LtAP-Versionen: https://www.mikrotik-store.eu/de/mikrotik-lte/ltap
Mikrotik GPS Antenne
Der folgende Post aus dem Mikrotik-Forum legt nahe, dass bei LTE-Nutzung, am Gerät, es sinnvoll sein kann, eine externe GPS-Antenne anzuschließen und zu nutzen, da es sonst wohl zu Empfangsproblemen kommen kann: https://forum.mikrotik.com/viewtopic.php?t=136444#p674674
(ganz davon abgesehen, dass die externe GPS-Antenne auch deutlich leistungsfähiger ist als eine bereits onboard-Antenne):
- Zusätzlich Mikrotik GPS-Antenne: https://www.mikrotik-store.eu/de/mikrotik-gps-antenne-acgpsa
Für den Zusammenhang sind einige Bilder in unserem LTE-Artikel zu finden: https://blog.mikrotik-store.eu/2018/09/21/mikrotik-lte-einsatzszenarien-zubehoer-und-moeglichkeiten/
Anforderungen:
- Webserver Ihrer Wahl
- PHP
- SQLite3-Modul für PHP
- RouterOS-Gerät mit einem funktionierenden GPS-Modul
- RouterOS v6.40rc30 oder höher
- Stellen Sie das GPS-Format in RouterOS auf dd ein.
RouterOS-Skript
Sie können dieses Skript im Scheduler-Tool mit einem Intervall von 1s ausführen, um Ihre Koordinaten alle 1 Sekunde zu senden.
{ :global lat :global lon /system gps monitor once do={ :set $lat $("latitude") :set $lon $("longitude") } tool fetch mode=http url="http://YOURSERVER.com/index.php" port=80 http-method=post http-data=("{\"lat\":\"" . $lat . "\",\"lon\":\"" . $lon . "\"}") http-header-field="Content-Type: application/json" :put ("{\"lat\":\"" . $lat . "\",\"lon\":\"" . $lon . "\"}") }
index.php Datei
Erstellen Sie ein leeres Verzeichnis namens sqlite_db neben der Datei index.php. Stellen Sie sicher, dass Verzeichnis und Dateien von der Gruppe mit chmod -R a+w sqlite_db/ beschreibbar sind.
<?php $loc = dirname(__FILE__).'/sqlite_db/coord.db'; $db = new SQLite3($loc,SQLITE3_OPEN_READWRITE | SQLITE3_OPEN_CREATE); $raw = file_get_contents('php://input'); $raw = preg_replace('/\\x00/','',$raw); $data = json_decode($raw); if (!empty($data) && is_object($data) && property_exists($data,'lat') && property_exists($data,'lon')){ if(file_exists($loc)) echo 'exists!'.chr(0xa); $src = 'SELECT name FROM sqlite_master WHERE type=\'table\' AND name=\'coordinates\''; $res = $db->querySingle($src); if (count($res)==0){ $db->exec('CREATE TABLE coordinates (latitude TEXT, longitude TEXT, time TIMESTAMP DEFAULT CURRENT_TIMESTAMP, added TIMESTAMP DEFAULT CURRENT_TIMESTAMP ) '); } $regex = '/^(|\-)([0-9]{2,3}\.[0-9]{0,8})$/'; if (preg_match($regex,$data->lat) && preg_match($regex,$data->lon) ) { $lat = $data->lat; $lon = $data->lon; } $ins = 'INSERT INTO coordinates (latitude,longitude) VALUES (\''.SQLite3::escapeString($lat).'\',\''.SQLite3::escapeString($lon).'\')'; $db->exec($ins); die(); } ?> <!DOCTYPE html> <html> <head> <link rel="stylesheet" href="https://unpkg.com/leaflet@1.3.1/dist/leaflet.css" integrity="sha512-Rksm5RenBEKSKFjgI3a41vrjkw4EVPlJ3+OiI65vTjIdo9brlAacEuKOiQ5OFh7cOI1bkDwLqdLw3Zg0cRJAAQ==" crossorigin=""/> <script src="https://unpkg.com/leaflet@1.3.1/dist/leaflet.js" integrity="sha512-/Nsx9X4HebavoBvEBuyp3I7od5tA0UzAxs+j83KgC8PU0kgB4XiK4Lfe4y4cgBtaRJQEIFCW+oC506aPT2L1zw==" crossorigin=""></script> </head> <body> <div id="map" style="width: 800px; height: 600px;"></div> <script> var map = L.map('map').setView([0,0], 4); L.tileLayer('http://{s}.tile.osm.org/{z}/{x}/{y}.png', {attribution: '<a href="http://osm.org/copyright">OSM</a>'}).addTo(map); <?php if($result = $db->query('SELECT latitude,longitude FROM coordinates')){ echo ' var latlngs = [ '; while($obj = $result->fetchArray()){ if (!is_array($obj) || !isset($obj['latitude']) || !isset($obj['longitude']) || empty($obj['latitude']) || empty($obj['longitude'])) continue; echo '["'. $obj['latitude'].'","'.$obj['longitude'].'"],'; } echo ']; '; } else echo('//'.$db->lastErrorMsg().chr(0xa)); echo($data); ?> var polyline = L.polyline(latlngs, {color: 'red'}).addTo(map); map.fitBounds(polyline.getBounds()); </script> </body> </html>
Resultat
- https://wiki.mikrotik.com/wiki/File:Gpstracker.png (Beispielbild von Mikrotik, wie dann eine in der Karte eingezeichnete Bewegung aussehen kann)
–
Gerne sind wir Ihnen bei der Umsetzung dieser Lösung behilflich. Kommen Sie gerne unverbindlich mit Ihren Anforderungen oder Wünschen auf uns zu: sales at mikrotik-store [dot] eu
–
Quelle: https://wiki.mikrotik.com/wiki/Manual:GPS-tracking