Hopp til innholdet

SmartHome - endringer i GPS-data

Lesetid 2 minutter

GPS-dataene endres hele tiden når du er på reise. Målet her er å bruke SmartHome på HomeMatic eller RaspberryMatic til å registrere disse dataene og, om nødvendig, oppdatere andre parametere som er avhengige av dem.

Man kunne selvfølgelig bestemme posisjonen kontinuerlig og dermed alltid hente værdataene i forhold til posisjonen, men dette ville generere unødvendig nettrafikk og prosessorbelastning. Derfor sjekker systemet bare om posisjonen er endret, og henter bare værdataene i forhold til den aktuelle posisjonen når en endring av posisjonen oppdages, og oppdaterer dataene deretter.

Justering av GPS-data for sammenligning

Siden GPS-koordinatene alltid svinger på de to siste sifrene i lengde- og breddegradsverdiene på grunn av GPS-tjenesteleverandørenes bevisste unøyaktighet, blir bare fire desimaler tatt med i sammenligningen selv om du befinner deg på samme sted uten endringer. En endring av posisjonen gjenkjennes derfor bare hvis minst den fjerde desimalen endres.

Tillegg for skript (GPS_Data)

Følgende skriptlinjer er lagt til i her diskutert manus GPS_Data lagt til. Linjer som begynner med et utropstegn, representerer kommentarer. WriteLine-setninger brukes bare til utdatakontroll og kan slettes.

Det må opprettes nye variabler av typen DRAWING CHAIN:

  • W_Lat_short_act (For å lagre gjeldende breddegrad trunkert til fire desimaler)
  • W_Lon_short_act (For å lagre den aktuelle geografiske lengdegraden trunkert til fire desimaler)
  • W_Lat_short_old (For å lagre den - gamle - geografiske breddegraden trunkert til fire desimaler)
  • W_Lon_short_old (For å lagre den - gamle - geografiske lengdegraden trunkert til fire desimaler)

Manus

! Lagre geodata trunkert til 4 desimaler (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);

! Sammenligning av nåværende og gammel plassering

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

! Sett sammen URL-en med gjeldende GPS-data - AppID "... xxx ..." må fylles ut med din egen ID

var url = "https://api.openweathermap.org/geo/1.0/reverse?lat="#Latitude#"&lon="#Longitude#"&limit=5&appid=[xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx]";
WriteLine("ny URL for nye geodata");WriteLine(url);

! Sende URL-forespørselen

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

! Henter ut dataene

! By_navn

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

! Landskode

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("land_kode");WriteLine(land_kode);
dom.GetObject("W_country_code").State(country_code);

! Region

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_region");WriteLine(W_region);
dom.GetObject("W_region").State(W_region);

}

! ELSE-grenen kan utelates og brukes bare for å verifisere at skriptet er kjørt til slutten hvis plasseringen ikke har endret seg

ellers
{
WriteLine("Data er lik");
}

Legg igjen en kommentar

Din e-postadresse vil ikke bli publisert. Obligatoriske felt er merket med *

nb_NONorwegian