Sisällysluettelo
GPS-tiedot muuttuvat jatkuvasti matkalla. Tarkoituksena on käyttää SmartHome-ohjelmaa HomeMaticissa tai RaspberryMaticissa näiden tietojen tallentamiseen ja tarvittaessa muiden niistä riippuvaisten parametrien päivittämiseen.
Sijainnin voisi tietysti määrittää jatkuvasti ja siten hakea säätiedot aina suhteessa sijaintiin, mutta tämä aiheuttaisi tarpeetonta verkkoliikennettä ja prosessorikuormitusta. Siksi järjestelmä tarkistaa vain sijainnin muutoksen ja määrittää säätiedot suhteessa nykyiseen sijaintiin vasta, kun sijainnin muutos tunnistetaan, ja päivittää tiedot sen mukaisesti.
GPS-tietojen mukauttaminen vertailua varten
Koska GPS-koordinaatit vaihtelevat aina pituus- ja leveysasteiden kahden viimeisen numeron osalta GPS-palveluntarjoajien tarkoituksellisen epätarkkuuden vuoksi, vaikka pysyisitkin samassa paikassa muuttumattomana, vertailussa otetaan huomioon vain neljä desimaalia. Sijainnin muutos tunnistetaan siis vain, jos vähintään neljäs desimaali muuttuu.
Käsikirjoituslisäys (GPS_Data)
Lisätään seuraavat komentosarjarivit täällä keskusteltu käsikirjoitus GPS_Data lisätty. Huutomerkillä alkavat rivit ovat kommentteja. WriteLine-lauseita käytetään vain tulostuksen ohjaukseen, ja ne voidaan poistaa.
On luotava uusia muuttujia tyyppiä DRAWING CHAIN:
- W_Lat_short_act (Nykyisen leveysasteen tallentaminen neljään desimaaliin lyhennettynä)
- W_Lon_short_act (Nykyisen maantieteellisen pituusasteen tallentaminen neljän desimaalin tarkkuudella)
- W_Lat_short_old (Vanhan maantieteellisen leveysasteen tallentaminen neljään desimaaliin lyhennettynä).
- W_Lon_short_old (Vanhan maantieteellisen pituuden tallentaminen neljään desimaaliin lyhennettynä).
Käsikirjoitus
! Tallenna paikkatiedot lyhennettyinä 4 desimaaliin (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);
! Nykyisen ja vanhan sijainnin vertailu
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);
if ((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);
! Kokoa URL-osoite nykyisillä GPS-tiedoilla - AppID "... xxx ..." on täytettävä omalla tunnuksellasi.
var url = "https://api.openweathermap.org/geo/1.0/reverse?lat="#Latitude#"&lon="#Longitude#"&limit=5&appid=[xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx";]
WriteLine("uusi URL-osoite uusille paikkatiedoille");WriteLine(url);
! URL-pyynnön lähettäminen
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);
! Tietojen poimiminen
! Kaupungin_nimi
pos = 0;
posStart = 'name':"';
posEnd = '", "local_names';
posValueStart = stdout.Find(posStart) + posStart.Length();
posValueEnd = stdout.Find(posEnd)-posValueStart;
string city_name = stdout.Substr(posValueStart, posValueEnd);
WriteLine("kaupungin_nimi");WriteLine(kaupungin_nimi);
dom.GetObject("W_city_name").State(city_name);
! Maakoodi
pos = 0;
posStart = 'maa':"';
posEnd = '", "state";
posValueStart = stdout.Find(posStart) + posStart.Length();
posValueEnd = stdout.Find(posEnd)-posValueStart;
string country_code = stdout.Substr(posValueStart, posValueEnd);
WriteLine("maa_koodi");WriteLine(maa_koodi);
dom.GetObject("W_country_code").State(country_code);
! Alue
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_alue");WriteLine(W_alue);
dom.GetObject("W_region").State(W_region);
}
! ELSE-haara voidaan jättää pois, ja sitä käytetään vain varmistamaan, että skripti on ajettu loppuun asti, jos sijainti ei ole muuttunut.
else
{
WriteLine("Tieto vastaa");
}