Inhoudsopgave
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”);
}