Ga naar de inhoud

SmartHome – Bepaal GPS-gegevens

Leestijd 4 minuten

Bijgewerkt - maart 10, 2025

Als u GPS-gegevens wilt bepalen met SmartHome, bijvoorbeeld om lokale weergegevens op te vragen, kunt u dit doen met een Teltonika-router RUTX50 zonder extra hardware of software met behulp van Homematic / RaspberryMatic.

Basisprincipes

Met de Teltonika-routers RUTX.. kunnen sms-berichten worden verzonden en ontvangen via de geactiveerde simkaart. Op dezelfde manier verzendt u positiegegevens als reactie op een sms met de inhoud “GPS-wachtwoord„.

U kunt de lijst met inkomende sms-berichten en de sms-inhoud bekijken via een HTTP-verzoek. De huidige lengte- en breedtegraadinformatie kan worden gelezen uit de SMS die is ontvangen als reactie op het SMS-verzoek.

Deze kunnen nu via script verder worden verwerkt binnen de Smart Home-automatisering met behulp van HomeMatic of RaspberryMatic. Tijdens het reizen kunnen de voortdurend veranderende geodata worden gebruikt voor een voortdurend bijgewerkte weeropvraag op basis van de huidige locatie, bijvoorbeeld via de gratis service van openweathermap.org gebruiken.

Provider SMS-instellingen

Afhankelijk van de provider moet de SIM-kaart die in de router wordt gebruikt mogelijk worden geactiveerd voor SMS. Dit wordt meestal gedaan in de relevante instellingen na het inloggen op de website van de provider.

Terwijl zogenaamde multi-kaart aanbiedingen kunnen worden gebruikt om te bellen en gebeld te worden op alle apparaten die zijn uitgerust met een dergelijke SIM-kaart, wordt SMS alleen ondersteund op EEN van de SIM-kaarten!

Installatie – Teltonika-router

Diensten – Mobiele nutsvoorzieningen – SMS-gateway

  • Instellingen voor mobiel posten/ophalen – Ingeschakeld
  • Gebruikersnaam: Loginnaam
  • Wachtwoord: LoginWachtwoord

Diensten – Invoer/uitvoer – Post/Get

  • I/O Post/Get-instellingen – Ingeschakeld
  • Gebruikersnaam: Loginnaam
  • Wachtwoord: LoginWachtwoord

Installatie – RaspberryMatic

Installeer de CUx-daemon

De CUx-daemon is een add-on die virtuele apparaten binnen HomeMatic / RaspberryMatic ter beschikking stelt, die onder meer kunnen worden gebruikt als een minder belastende vervanging voor systeemoproepen, hier bijvoorbeeld voor het verzenden van sms via een HTTP-verzoek naar de router.

De AddOn wordt geïnstalleerd via Instellingen - Extra software, daar in het onderste gedeelte kunt u het AddOn-bestand downloaden door op de knop te klikken Selecteer bestand in de overeenkomstige downloadmap op de computer en klik op de knop Installeren in het midden worden geladen en geïnstalleerd.

CUx-daemon – apparaat maken

De CUx-daemon wordt via het systeem aangeroepen door op de knop te klikken CUx-daemon.

Klik rechtsboven op de knop Apparaten opent de interface. Linksboven, onder CUxD Device Type, komt uit de onderstaande lijst systeem gekozen.

Als functie wordt de functie Exec geselecteerd, een overeenkomstige naam in het veld Naam, b.v GPS, ingevoerd en vervolgens op de knop geklikt Apparaat maken op de CCU, het apparaat opgeslagen.

Het aangemaakte apparaat verschijnt dan in het rechtervenster met zijn ID, bijvoorbeeld CUX2801001, en kan met behulp van deze ID in scripts worden aangesproken.

Scripts

Stuur een SMS voor uitvoer van GPS-gegevens

De informatie tussen vierkante haken moet worden vervangen door uw eigen gegevens:

string url=“‘http://[IP-adres van de router]/cgi-bin/sms_send?gebruikersnaam=[Gebruikersnaam]&wachtwoord=[wachtwoord]&nummer=[Internationaal telefoonnummer]&tekst=[GPS-wachtwoord]'“;
dom.GetObject(“CUxD.CUX2801001:1.CMD_EXEC”).State(“wget -q -O – “#url);

Houd er rekening mee dat de string tussen dubbele (“) EN enkele (‘) aanhalingstekens staat!

Dit script bevindt zich in het te maken programma GPS_Loc_Update gebeld en het volgende script, dat op zijn beurt het programma GPS_Data oproept, wordt gecompenseerd door 30 seconden om te wachten op de ontvangst van de sms met de PÜS-gegevens:

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

programma GPS_Loc_Update Kan één keer per dag of met kortere tussenpozen worden gepland.

Uitvoer SMS-lijst

Om de GPS-gegevens uit te lezen, wordt de router gevraagd om de SMS-lijst via een HTTP-verzoek uit te voeren.

Dit script vereist twee variabelen van het type STRING, die moeten worden aangemaakt onder Instellingen - Systeemvariabelen hieronder door op de knop Nieuw te klikken:

  • W_Lat (om de geografische breedtegraad op te slaan)
  • W_Lon (voor het opslaan van de geografische lengtegraad)

De inhoud van het script (regels met regelafstand uitroepteken zijn opmerkingen; Schrijflijn-Instructies worden alleen gebruikt voor uitvoercontrole en kunnen worden verwijderd.)):

var-URL = “http://[IP-adres van de router]/cgi-bin/sms_list?gebruikersnaam=[Gebruikersnaam]&wachtwoord=[wachtwoord]“;

! Declaratie van de variabele
var posWaardeStart;
var posValueEnd;
var pos;
var-gegevens;
var posStart;
var posEnd; tekenreeks stderr; tekenreeks stdout;

! WGET-opdracht om de HTTP-verzoekreeks naar de router te verzenden
system.Exec(“wget -q -O – ‘“#url#“‚”, &stdout, &stderr);

! Uitvoer van het zoekresultaat ter controle
WriteLine(stdout);

! Indexering: 1
! Datum: vrijdag 26 januari 11:01:02 2024
! Afzender: +49xxxxxxxxxxxxx
! Tekst: Fixtijd: 26-01-2024, 11:01:01 Breedte: 54.834682 Lengte: 12.040196 http://maps.google.com/?
! q=54.834682,12.040196&om=1snelheid:0
! Status: gelezen

! GPS-gegevens uitlezen
pos = 0;
! Positie van het begin van de gezochte waarde
posStart = 'Breedtegraad: ';
! Positie van het einde van de gezochte waarde
posEnd = 'Lengtegraad:';
posValueStart = stdout.Find(posStart) + posStart.Lengte();
posValueEnd = stdout.Find(posEnd)-posValueStart;
! de string die je zoekt is:
string Latitude = stdout.Substr(posValueStart, posValueEnd);
! Conversie van de string (tekenreeks) in een drijvende-kommagetal
var lat = Latitude.ToFloat();
! Uitvoer van de geografische lengtegraad voor controle
WriteLine(“Breedtegraad”);WriteLine(Breedtegraad);

! Sla de geografische lengtegraad op in de variabele W_Lat
dom.GetObject('W_Lat').State(lat);

pos = 0;
posStart = 'Lengtegraad: ';
posEnd = 'http';
posValueStart = stdout.Find(posStart) + posStart.Lengte();
posValueEnd = stdout.Find(posEnd)-posValueStart;
string Lengtegraad = stdout.Substr(posValueStart, posValueEnd);
var lon = Lengtegraad.ToFloat();
WriteLine(“Lengtegraad”);WriteLine(lon);

dom.GetObject('W_Lon').State(lon);

Het programma bevat geen voorwaarden voor uitvoering omdat het via bovenstaand programma of script wordt gestart.

Nu kan de geografische informatie worden gebruikt om de weergegevens voor deze locatie op te vragen. Voor dit doel wordt een ander programma gemaakt dat periodiek wordt gestart met behulp van een timer, dat een script gebruikt om de twee waarden in de HTTP-requeststring van de bovengenoemde weerdienst in te voegen en zo bij de zoekopdracht rekening houdt met de veranderende locaties .

Programma W_Data_OWM

Het samenstellen van de URL

! Laden van de ingevulde variabelen GPS_Data W_Lat En W_Lon en toewijzen aan de variabelen URL_1 En 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);

! Het samenstellen van de URL met behulp van de variabele inhoud URL_1 En URL_2
! [xxxxxxxxxxxxxxxxxxxxxxxxx] vertegenwoordigt de API-sleutel voor de weerservice die is ontvangen na registratie
var url = “https://api.openweathermap.org/data/2.5/weather?lat=”#url_1#”&lon=”#url_2#”&appid=[xxxxxxxxxxxxxxxxxxxxxxxxxxx]&units=metrisch”;
! Uitvoer van de volledige string ter controle
Schrijfregel(url);

Dit wordt gevolgd door dezelfde procedure voor het declareren van de variabelen, het WGET-commando, het uitvoeren van de queryresultaten voor het controleren en uitlezen van de gewenste weergegevens (zie. documentatie) volgens de procedure voor GPS-gegevens.

Geef een reactie

Het e-mailadres wordt niet gepubliceerd. Vereiste velden zijn gemarkeerd met *

nl_NLDutch