Ga naar de inhoud

SmartHome – GPS-gegevens veranderen

Inhoudsopgave

Leestijd 2 minuten

GPS-gegevens veranderen voortdurend tijdens het reizen. Het registreren hiervan en eventueel het actualiseren van andere daarvan afhankelijke parameters moet hier met behulp van SmartHome op HomeMatic of RaspberryMatic gebeuren.

Uiteraard kun je continu de locatie bepalen en dus altijd de weergegevens op basis van de locatie raadplegen, maar dit zou onnodig online verkeer en processorbelasting opleveren. Daarom wordt alleen een verandering in positie gecontroleerd en alleen wanneer een verandering in locatie wordt gedetecteerd, worden de weergegevens bepaald op basis van de huidige locatie en worden de gegevens dienovereenkomstig bijgewerkt.

Aanpassing van GPS-gegevens voor vergelijking

Omdat GPS-coördinaten altijd fluctueren in de laatste twee cijfers van de lengte- en breedtegraadinformatie vanwege de beoogde onnauwkeurigheid van de GPS-serviceproviders, worden er bij de vergelijking slechts vier decimalen in aanmerking genomen, zelfs als u op dezelfde locatie onveranderd blijft. Een verandering van locatie wordt pas herkend als minimaal het vierde cijfer achter de komma verandert.

Scripttoevoeging (GPS_gegevens)

De volgende scriptregels zijn: hier besproken script GPS_gegevens bijgevoegd. Regels die beginnen met een uitroepteken vertegenwoordigen opmerkingen.

Het volgende moet worden aangemaakt als nieuwe variabelen van het type STRING:

  • W_Lat_short_akt (Om de huidige geografische breedtegraad op te slaan, ingekort tot vier decimalen)
  • W_Lon_short_akt (Om de huidige geografische lengte op te slaan, ingekort tot vier decimalen)
  • W_Lat_short_alt (Om de oude geografische breedte te behouden, ingekort tot vier decimalen)
  • W_Lon_short_alt (Om de oude geografische lengte op te slaan, ingekort tot vier decimalen)

script

! Bewaar geodata ingekort tot 4 decimalen (ToString(4)).

var lat_short_akt = lat.ToString(4);
WriteLine(“lat_short_akt”);WriteLine(lat_short_akt);
dom.GetObject('W_Lat_short_akt').State(lat_short_akt);

var lon_short_akt = lon.ToString(4);
WriteLine(“lon_short”);WriteLine(lon_short_akt);
dom.GetObject('W_Lon_short_akt').State(lon_short_akt);

! Vergelijking van huidige en oude locaties

var W_lat_short_alt = dom.GetObject(“W_Lat_short_alt”).Value();WriteLine(W_lat_short_alt);
var W_lon_short_alt = dom.GetObject(“W_Lon_short_alt”).Value();WriteLine(W_lon_short_alt);

als ((lat_short_akt <> W_lat_short_alt) && (lon_short_akt <> W_lon_short_alt))
{
dom.GetObject(“W_Lat_short_alt”).State(lat_short_akt);
dom.GetObject(“W_Lon_short_alt”).State(lon_short_akt);

! De URL samenstellen met de huidige. GPS-gegevens – de AppID “.. xxx ..” moet worden gevuld met uw eigen ID

var url = “https://api.openweathermap.org/geo/1.0/reverse?lat=”#Latitude#”&lon=”#Longitude#”&limit=5&appid=[xxxxxxxxxxxxxxxxxxxxxxxx]”;
WriteLine(“nieuwe URL voor nieuwe geodata”);WriteLine(url);

! Het URL-verzoek verzenden

var posWaardeStart;
var posValueEnd;
var pos;
var-gegevens;
var posStart;
var posEnd; tekenreeks stderr; tekenreeks stdout;
system.Exec(“wget -q -O – ‘“#url#“‚”, &stdout, &stderr);
WriteLine(stdout);

! Het extraheren van de gegevens

! Stadnaam

pos = 0;
posStart = 'naam“:“‚;
posEnd = '","lokale_namen';
posValueStart = stdout.Find(posStart) + posStart.Lengte();
posValueEnd = stdout.Find(posEnd)-posValueStart;
string stadsnaam = stdout.Substr(posValueStart, posValueEnd);
WriteLine(“stadsnaam”);WriteLine(stadsnaam);
dom.GetObject(“W_stadsnaam”).State(stadsnaam);

! Landcode

pos = 0;
posStart = 'land':';
posEnd = '","staat';
posValueStart = stdout.Find(posStart) + posStart.Lengte();
posValueEnd = stdout.Find(posEnd)-posValueStart;
string landcode = stdout.Substr(posValueStart, posValueEnd);
WriteLine(“landcode”);WriteLine(landcode);
dom.GetObject(“W_country_code”).State(landcode);

! regio

pos = 0;
posStart = 'staat“:“‚;
posEnd = '"}]';
posValueStart = stdout.Find(posStart) + posStart.Lengte();
posValueEnd = stdout.Find(posEnd)-posValueStart;
string W_region = stdout.Substr(posValueStart, posValueEnd);
WriteLine(“W_regio”);WriteLine(W_regio);
dom.GetObject(“W_region”).State(W_region);

}

! De ELSE-tak kan worden weggelaten en wordt alleen gebruikt om te verifiëren dat het script tot het einde is uitgevoerd als de locatie niet is gewijzigd

anders
{
WriteLine(“Gegevens zijn gelijk aan”);
}

Geef een reactie

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

nl_NLDutch