Mikrotik RouterOS – GPS Tracking – Busreisen, Autofahrten, Urlaubsreisen, Wohnmobile weltweit tracken mit GPS Antenne

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

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):

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