Innehållsförteckning
GPS-data ändras ständigt under resan. Inspelning av dessa och vid behov uppdatering av andra parametrar som beror på dem bör göras här med SmartHome på HomeMatic eller RaspberryMatic.
Naturligtvis skulle du kontinuerligt kunna bestämma platsen och därmed alltid komma åt väderdata baserat på platsen, men detta skulle generera onödig onlinetrafik och processorbelastning. Därför kontrolleras endast en positionsändring och endast när en förändring av positionen upptäcks bestäms väderdata baserat på den aktuella platsen och data uppdateras därefter.
Justering av GPS-data för jämförelse
Eftersom GPS-koordinaterna alltid fluktuerar i de två sista siffrorna i longitud- och latitudinformationen på grund av den avsedda felaktigheten hos GPS-tjänsteleverantörerna, även om du förblir oförändrad på samma plats, beaktas endast fyra decimaler för jämförelse. En ändring av plats upptäcks endast när åtminstone den fjärde decimalen ändras.
Skripttillägg (GPS_Data)
Följande skriptrader är: här diskuterade manus GPS_Data bunden. Rader som börjar med ett utropstecken representerar kommentarer WriteLine-satser används endast för utdatakontroll och kan tas bort.
Följande måste skapas som nya variabler av typen STRING:
- W_Lat_short_akt (För att spara den aktuella geografiska latituden förkortad till fyra decimaler)
- W_Lon_short_akt (För att spara den aktuella geografiska längden förkortad till fyra decimaler)
- W_Lat_short_alt (För att spara den gamla geografiska latituden förkortad till fyra decimaler)
- W_Lon_short_alt (För att spara den gamla geografiska längden förkortad till fyra decimaler)
manus
! Spara geodata förkortad till 4 decimaler (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);
! Jämförelse av nuvarande och gamla platser
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);
! Komponera URL:en med de nuvarande. GPS-data – AppID ".. xxx .." måste fyllas i med ditt eget ID
var url = “https://api.openweathermap.org/geo/1.0/reverse?lat=”#Latitude#”&lon=”#Longitude#”&limit=5&appid=[xxxxxxxxxxxxxxxxxxxxxxxxxx]”;
WriteLine(”ny URL för ny geodata”);WriteLine(url);
! Skickar URL-begäran
var posValueStart;
var posValueEnd;
var pos;
var data;
var postStart;
var posEnd; sträng stderr; sträng stdout;
system.Exec(“wget -q -O – ‘“#url#“‚”, &stdout, &stderr);
WriteLine(stdout);
! Extrahera data
! Stadsnamn
pos = 0;
posStart = 'namn“:“‚;
posEnd = '","local_names';
posValueStart = stdout.Find(posStart) + posStart.Length();
posValueEnd = stdout.Find(posEnd)-posValueStart;
sträng stadsnamn = stdout.Substr(posValueStart, posValueEnd);
WriteLine(“stadsnamn”);WriteLine(stadsnamn);
dom.GetObject(“W_city_name”).State(city_name);
! Landskod
pos = 0;
postStart = 'land':"';
posEnd = '","tillstånd";
posValueStart = stdout.Find(posStart) + posStart.Length();
posValueEnd = stdout.Find(posEnd)-posValueStart;
sträng country_code = stdout.Substr(posValueStart, posValueEnd);
WriteLine(“country_code”);WriteLine(country_code);
dom.GetObject(“W_country_code”).State(country_code);
! område
pos = 0;
posStart = 'state':“‚;
posEnd = '"}]';
posValueStart = stdout.Find(posStart) + posStart.Length();
posValueEnd = stdout.Find(posEnd)-posValueStart;
sträng W_region = stdout.Substr(posValueStart, posValueEnd);
WriteLine(“W_region”);WriteLine(W_region);
dom.GetObject(“W_region”).State(W_region);
}
! ELSE-grenen kan utelämnas och används endast för att verifiera att skriptet har körts till slutet om platsen inte har ändrats
annan
{
WriteLine(“Data är lika med”);
}