Siirry suoraan sisältöön

SmartHome - GPS-tietojen muutokset

Lukuaika 2 minuuttia

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

Vastaa

Sähköpostiosoitettasi ei julkaista. Pakolliset kentät on merkitty *