Zum Inhalt springen

SmartHome – GPS-Daten ermitteln

Lesedauer 4 Minuten

Aktualisiert – Januar 29, 2024

Wer GPS-Daten mittels SmartHome ermitteln möchte, um z.B. die lokalen Wetterdaten abzufragen, kann dies mit einem Teltonika Router RUTX50 ohne zusätzliche Hard- oder Software mit Homematic / RaspberryMatic realisieren.

Grundlagen

Die Teltonika-Router RUTX.. ermöglichen das Senden und Empfangen von SMS über die aktivierte SIM-Karte. Ebenso das Senden von Positionsdaten als Antwort auf eine SMS mit dem Inhalt „Passwort gps„.

Per HTTP-Request kann Einblick in die SMS Eingangsliste und SMS Inhalte genommen werden. Aus der, auf den SMS-Request per SMS hin, empfangenen SMS lassen sich die aktuellen Längen- und Breiten-Angaben auslesen.

Diese können nun via Script innerhalb der SmarttHome-Automation mittels HomeMatic oder RaspberryMatic weiter verarbeiten. So lassen sich auf Reisen die stetig wechselnden Geo-Daten für eine laufend auf den aktuellen Standort bezogene, aktualisierte Wetterabfrage, z.B. über den kostenfreien Service von openweathermap.org nutzen.

Setup – Teltonika Router

Services – Mobile Utilities – SMS Gateway

  • Mobile Post/Get Settings – Enabled
  • Username: Anmeldename
  • Password: AnmeldePasswort

Services – Input/Output – Post/Get

  • I/O Post/Get Settings – Enabled
  • Username: Anmeldename
  • Password: AnmeldePasswort

Setup – RaspberryMatic

CUx-Daemon installieren

Der CUx-Daemon ist ein AddOn, das virtuelle Geräte innerhalb HomeMatic / RaspberryMatic zur Verfügung stellt, die u.a. als weniger belastender Ersatz für System-Aufrufe genutzt werden können, hier z.B. zwecks SMS-Versand über einen HTTP-Request an den Router.

Die Installation des AddOn erfolgt über Einstellungen – Zusatzsoftware, dort im untersten Bereich kann die AddOn-Datei mittels Klick auf den Button Datei auswählen im entsprechenden Download-Ordner des Rechners gewählt und mit Klick auf den Button Installieren auf die Zentraöe geladen und installiert werden.

CUx-Daemon – Gerät erstellen

Der Aufruf des CUx-Daemon erfolgt über System mittels Klick auf den Button CUx-Daemon.

Klick oben rechts auf den Button Geräte öffnet die Oberfläche. Oben links, unter CUxD Gerätetyp, wird aus der Liste unten System ausgewählt.

Als Funktion wird die Funktion Exec gewählt, im Feld Name eine entsprechende Bezeichnung, z.B. GPS, eingegeben und anschließend mit Klick auf den Button Gerät auf der CCU erzeugen, das Gerät gespeichert.

Daraufhin erscheint das angelegte Gerät mit seiner ID in dem rechten Fenster, z.B. CUX2801001 und kann über dies ID in Scripten angesprochen werden.

Skripte

SMS zur GPS-Datenausgabe senden

Die in eckigen Klammern gesetzten Angaben sind durch eigene Daten zu ersetzen:

string url=“‚http://[IP des Routers]/cgi-bin/sms_send?username=[BenutzerName]&password=[Passwort]&number=[InternationaleRufnummer]&text=[Passwort gps]'“;
dom.GetObject(„CUxD.CUX2801001:1.CMD_EXEC“).State(„wget -q -O – „#url);

Zu beachten ist, dass der String in doppelte („) UND einfache (‚) Anführungsstriche gesetzt ist!

Dieses Skript wird in dem zu erstellenden Programm GPS_Loc_Update aufgerufen und das folgende Skript, das seinerseits das Programm GPS_Data aufruft, um 30 Sekunden versetzt, um den Empfang der SMS mit den PÜS-Daten abzuwarten:

var programObj = dom.GetObject(„GPS_Data“);
programObj.ProgramExecute();

Programm GPS_Loc_Update kann einmal täglich oder in kürzeren Intervallen, je nach Erfordernis, per Zeitsteuerung ausgeführt werden.

SMS Liste ausgeben

Zwecks Auslesen der GPS-Daten wird per HTTP-Request der Router zur Ausgabe der SMS-Liste aufgefordert.

Dieses Skript benötigt zwei Variablen vom Typ ZEICHENKETTE, die unter Einstellungen – Systemvariablen unten mit Klick auf den Button Neu angelegt werden müssen:

  • W_Lat (zur Speicherung der geograrfischen Breite)
  • W_Lon (zur Speicherung der geograrfischen Länge)

Der Inhalt des Skripts (Zeilen mit führendem Ausrufezeichen sind Kommentare; WriteLine-Anweisungen dienen lediglich der Ausgabe-Kontrolle und können gelöscht werden.)):

var url = „http://[IP des Routers]/cgi-bin/sms_list?username=[BenutzerName]&password=[Passwort]“;

! Deklaration der Variablen
var posValueStart;
var posValueEnd;
var pos;
var daten;
var posStart;
var posEnd; string stderr; string stdout;

! WGET-Kommando zur Übermittlung des HTTP-Request-Strings an den Router
system.Exec(„wget -q -O – ‚“#url#“‚“, &stdout, &stderr);

! Ausgabe des Abfrage-Ergebnisses zur Kontrolle
WriteLine(stdout);

! Index: 1
! Date: Fri Jan 26 11:01:02 2024
! Sender: +49xxxxxxxxxxxxx
! Text: Fix time: 2024-01-26, 11:01:01 Latitude: 54.834682 Longitude: 12.040196 http://maps.google.com/?
! q=54.834682,12.040196&om=1speed:0
! Status: read

! GPS Daten auslesen
pos = 0;
! Position des Beginns des gesuchten Wertes
posStart = ‚Latitude: ‚;
! Position des Endes des gesuchten Wertes
posEnd = ‚ Longitude: ‚;
posValueStart = stdout.Find(posStart) + posStart.Length();
posValueEnd = stdout.Find(posEnd)-posValueStart;
! die gesuchte Zeichenkette lautet:
string Latitude = stdout.Substr(posValueStart, posValueEnd);
! Umwandlung des Strings (Zeichenkette) in eine Fließkomma-Zahl
var lat = Latitude.ToFloat();
! Ausgabe der geografischen Länge zur Kontrolle
WriteLine(„Latitude“);WriteLine(Latitude);

! Speichern der geografischen Länge in die Variable W_Lat
dom.GetObject(‚W_Lat‘).State(lat);

pos = 0;
posStart = ‚Longitude: ‚;
posEnd = ‚ http‘;
posValueStart = stdout.Find(posStart) + posStart.Length();
posValueEnd = stdout.Find(posEnd)-posValueStart;
string Longitude = stdout.Substr(posValueStart, posValueEnd);
var lon = Longitude.ToFloat();
WriteLine(„Longitude“);WriteLine(lon);

dom.GetObject(‚W_Lon‘).State(lon);

Das Programm enthält keine Bedingung zur Ausführung, da es über das vorstehende Programm, bzw. Skript initiiert wird.

Jetzt können die geografischen Angaben zur Abfrage der Wetterdaten für diesen Ort genutzt werden. Hierzu wird ein weiteres, periodisch per Zeitsteuerung gestartetes Programm angelegt, das mittels Skript die beiden Werte in den HTTP-Request-String des o.g. Wetterdienstes einfügt und somit jeweils die sich ändernden Örtlichkeiten in der Abfrage berücksichtigt.

Programm W_Daten_OWM

Zusammensetzen der URL

! Laden der in GPS_Data befüllten Variablen W_Lat und W_Lon und Zuordnen zu den Variablen url_1 und url_2

var url_1 = dom.GetObject(„W_Lat“).Value();
WriteLine(„Lat=“);WriteLine(url_1);
var url_2 = dom.GetObject(„W_Lon“).Value();
WriteLine(„Lon=“);WriteLine(url_2);

! Zusammensetzen der URL unter Verwendung der Variablen-Inhalte aus url_1 und url_2
! [xxxxxxxxxxxxxxxxxxxxxxxxx] repräsentiert den – nach Registrierung – erhaltenen API-Key des Wetterdienstes
var url = „https://api.openweathermap.org/data/2.5/weather?lat=“#url_1#“&lon=“#url_2#“&appid=[xxxxxxxxxxxxxxxxxxxxxxxxx]&units=metric“;
! Ausgabe des kompletten Strings zur Kontrolle
WriteLine(url);

Es folgt die selbe Prozedur der Deklaration der Variablen, des WGET-Kommandos, der Ausgabe des Abfrage-Ergebnisses zur Kontrolle und das Auslesen der jeweils gewünschten Wetterdaten (s. Dokumentation) nach dem bzgl. GPS-Daten gegebenen Vorgehen.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert

de_DEDeutsch