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