Skoči na vsebino

SmartHome - spremembe podatkov GPS

Vsebina

Čas branja 2 minute

Podatki GPS se med potovanjem nenehno spreminjajo. Cilj je uporabiti program SmartHome v sistemu HomeMatic ali RaspberryMatic za beleženje teh podatkov in po potrebi posodobiti druge parametre, ki so od njih odvisni.

Seveda bi lahko stalno določali lokacijo in tako vedno pridobivali vremenske podatke glede na lokacijo, vendar bi to povzročilo nepotreben spletni promet in obremenitev procesorja. Zato sistem preverja le spremembo položaja in določi vremenske podatke glede na trenutno lokacijo šele, ko je prepoznana sprememba lokacije, ter ustrezno posodobi podatke.

Prilagoditev podatkov GPS za primerjavo

Ker koordinate GPS zaradi namerne nenatančnosti ponudnikov storitev GPS vedno nihajo do zadnjih dveh številk vrednosti zemljepisne dolžine in širine, se za primerjavo upoštevajo le štiri decimalna mesta, tudi če ostajate na isti lokaciji nespremenjeni. Sprememba lokacije je zato prepoznana le, če se spremeni vsaj četrto decimalno mesto.

Dodatek k skriptom (GPS_podatki)

Naslednje vrstice skripte so dodane v tukaj obravnavani scenarij GPS_podatki dodano. Vrstice, ki se začenjajo z izklicnikom, predstavljajo komentarje. Stavki WriteLine se uporabljajo samo za nadzor izpisa in jih je mogoče izbrisati.

Ustvariti je treba nove spremenljivke vrste DRAWING CHAIN:

  • W_Lat_short_act (za shranjevanje trenutne zemljepisne širine, skrajšane na štiri decimalna mesta)
  • W_Lon_short_act (za shranjevanje trenutne geografske dolžine, skrajšane na štiri decimalna mesta)
  • W_Lat_short_old (Za shranjevanje stare geografske širine, skrajšane na štiri decimalna mesta)
  • W_Lon_short_old (Za shranjevanje stare geografske dolžine, skrajšane na štiri decimalna mesta)

Scenarij

! Shranite geopodatke, skrajšane na 4 decimalna mesta (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);

! Primerjava trenutne in stare lokacije

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

če ((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);

! Sestavite URL s trenutnimi podatki GPS - AppID "... xxx ..." mora biti izpolnjen z vašim ID

var url = "https://api.openweathermap.org/geo/1.0/reverse?lat="#Latitude#"&lon="#Longitude#"&limit=5&appid=[xxxxxxxxxxxxxxxxxxxxxxxxx]";
WriteLine("nov URL za nove geopodatke");WriteLine(url);

! Pošiljanje zahteve URL

var posValueStart;
var posValueEnd;
var pos;
var data;
var posStart;
var posEnd; string stderr; string stdout;
system.Exec("wget -q -O - '"#url#"'", &stdout, &stderr);
WriteLine(stdout);

! Pridobivanje podatkov

! Ime_mesta

pos = 0;
posStart = 'ime':"';
posEnd = '", "local_names";
posValueStart = stdout.Find(posStart) + posStart.Length();
posValueEnd = stdout.Find(posEnd)-posValueStart;
string city_name = stdout.Substr(posValueStart, posValueEnd);
WriteLine("ime_mesta");WriteLine(ime_mesta);
dom.GetObject("W_city_name").State(city_name);

! Koda države

pos = 0;
posStart = 'country':"';
posEnd = '", "state";
posValueStart = stdout.Find(posStart) + posStart.Length();
posValueEnd = stdout.Find(posEnd)-posValueStart;
string country_code = stdout.Substr(posValueStart, posValueEnd);
WriteLine("country_code");WriteLine(country_code);
dom.GetObject("W_country_code").State(country_code);

! Regija

pos = 0;
posStart = "state":"';
posEnd = '"}]";
posValueStart = stdout.Find(posStart) + posStart.Length();
posValueEnd = stdout.Find(posEnd)-posValueStart;
string W_region = stdout.Substr(posValueStart, posValueEnd);
WriteLine("W_regija");WriteLine(W_regija);
dom.GetObject("W_region").State(W_region);

}

! Vejo ELSE lahko izpustite in se uporablja samo za preverjanje, ali je bila skripta izvedena do konca, če se lokacija ni spremenila

drugače
{
WriteLine("Podatki so enaki");
}

Dodaj odgovor

Vaš e-naslov ne bo objavljen. * označuje zahtevana polja

sl_SISlovenian