Slaan oor na inhoud

SmartHome – GPS-dataveranderinge

Leestyd 2 minute

GPS-data verander voortdurend terwyl jy reis. Die opname van hierdie data en, indien nodig, die opdatering van ander afhanklike parameters sal geïmplementeer word met behulp van SmartHome op HomeMatic of RaspberryMatic.

Natuurlik kan 'n mens die ligging voortdurend bepaal en dus altyd die weerdata op grond van daardie ligging ophaal, maar dit sou onnodige aanlynverkeer en verwerkerlas genereer. Daarom kyk dit slegs vir veranderinge in posisie, en slegs wanneer 'n verandering in ligging bespeur word, bepaal dit die weerdata op grond van die huidige ligging en werk die data dienooreenkomstig op.

Aanpassing van GPS-data vir vergelyking

Omdat GPS-koördinate altyd in die laaste twee syfers van die lengtegraad en breedtegraad wissel as gevolg van die opsetlike onakkuraatheid van GPS-diensverskaffers, word slegs vier desimale plekke vir vergelyking in ag geneem, selfs al bly jy op dieselfde plek. 'n Verandering van ligging word dus slegs bespeur as ten minste die vierde desimale plek verander.

Skripaanvulling (GPS-data)

Die volgende skrifreëls word bygevoeg tot die hier bespreekte draaiboek GPS-data aangeheg. Lyne wat met 'n uitroepteken begin, verteenwoordig kommentaar. WriteLine-stellings word slegs vir uitvoerbeheer gebruik en kan verwyder word.

Die volgende nuwe veranderlikes van tipe STRING moet geskep word:

  • W_Lat_kort_akt (Om die huidige breedtegraad verkort tot vier desimale plekke te stoor)
  • W_Lon_kort_akt (Om die huidige geografiese lengtegraad verkort tot vier desimale plekke te stoor)
  • W_Lat_kort_alt (Om die ou geografiese breedtegraad verkort tot vier desimale plekke te stoor)
  • W_Lon_kort_alt (Vir die berging van die ou geografiese lengtegraad verkort tot vier desimale plekke)

skrif

! Stoor geodata afgekort tot 4 desimale plekke (ToString(4))

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

var lon_short_akt = lon.ToString(4);
SkryfLyn("lon_short"); SkryfLyn(lon_short_akt);
dom.GetObject('W_Lon_short_akt').State(lon_short_akt);

Vergelyk ligging naak en oud

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

as ((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);

Kombineer die URL met die huidige GPS-data – die AppID ".. xxx .." moet met jou eie ID gevul word.

var url = “https://api.openweathermap.org/geo/1.0/reverse?lat=”#Lattitude#”&lon=”#Lengtegraad#”&limit=5&appid=[xxxxxxxxxxxxxxxxxxxxxxxxxx]”;
SkryfLyn("nuwe URL vir nuwe geodata"); SkryfLyn(url);

Stuur die URL-versoek

var posWaardeBegin;
var posWaardeEinde;
var pos;
var data;
var posBegin;
var posEnd; string stderr; string stdout;
stelsel.Exec(“wget -q -O – ‘“#url#“‚”, &stdout, &stderr);
SkryfLyn(stdout);

Onttrek die data

Stadsnaam

pos = 0;
posBegin = 'naam“:“‘;
posEnd = '", "plaaslike_name';
posWaardeBegin = stdout.Vind(posBegin) + posBegin.Lengte();
posWaardeEinde = stdout.Vind(posEinde)-posWaardeBegin;
string stad_naam = stdout.Substr(posWaardeBegin, posWaardeEinde);
SkryfLyn("stad_naam"); SkryfLyn(stad_naam);
dom.GetObject(“W_stad_naam”).Staat(stad_naam);

Landkode

pos = 0;
posBegin = 'land':"';
posEnd = ‚“,“toestand';
posWaardeBegin = stdout.Vind(posBegin) + posBegin.Lengte();
posWaardeEinde = stdout.Vind(posEinde)-posWaardeBegin;
string land_kode = stdout.Substr(posWaardeBegin, posWaardeEinde);
SkryfLyn("land_kode"); SkryfLyn(land_kode);
dom.GetObject(“W_land_kode”).Staat(land_kode);

! Streek

pos = 0;
posBegin = 'toestand“:“‘;
posEnd = '“}]';
posWaardeBegin = stdout.Vind(posBegin) + posBegin.Lengte();
posWaardeEinde = stdout.Vind(posEinde)-posWaardeBegin;
string W_streek = stdout.Substr(posWaardeBegin, posWaardeEinde);
SkryfLyn(“W_streek”); SkryfLyn(W_streek);
dom.GetObject(“W_streek”).Staat(W_streek);

}

Die ELSE-tak kan weggelaat word en word slegs gebruik om te verifieer dat die skrip tot die einde uitgevoer is as die ligging nie verander het nie.

anders
{
SkryfLyn("Data gelyk");
}

Maak 'n opvolg-bydrae

Jou e-posadres sal nie gepubliseer word nie. Verpligte velde word met * aangedui

afAfrikaans