Indholdsfortegnelse
GPS-data ændrer sig konstant, når man rejser. Målet her er at bruge SmartHome på HomeMatic eller RaspberryMatic til at registrere disse data og om nødvendigt opdatere andre parametre, der er afhængige af dem.
Man kunne selvfølgelig løbende bestemme positionen og dermed altid hente vejrdataene i forhold til positionen, men det ville generere unødvendig onlinetrafik og processorbelastning. Derfor tjekker systemet kun for en ændring af positionen og bestemmer kun vejrdataene i forhold til den aktuelle placering, når en ændring af placeringen genkendes, og opdaterer dataene i overensstemmelse hermed.
Justering af GPS-data til sammenligning
Da GPS-koordinater altid svinger på de sidste to cifre i længde- og breddegradsværdierne på grund af GPS-udbydernes bevidste unøjagtighed, tages der kun hensyn til fire decimaler i sammenligningen, selv om du forbliver på samme sted. En ændring af positionen registreres derfor kun, hvis mindst den fjerde decimal ændres.
Script-supplement (GPS_Data)
Følgende scriptlinjer tilføjes til her diskuteret manuskript GPS_Data tilføjet. Linjer, der begynder med et udråbstegn, repræsenterer kommentarer. WriteLine-sætninger bruges kun til outputkontrol og kan slettes.
Der skal oprettes nye variabler af typen DRAWING CHAIN:
- W_Lat_short_act (For at gemme den aktuelle breddegrad afkortet til fire decimaler)
- W_Lon_kort_handling (For at gemme den aktuelle geografiske længdegrad afkortet til fire decimaler)
- W_Lat_short_old (For at gemme den - gamle - geografiske breddegrad afkortet til fire decimaler)
- W_Lon_short_old (For at gemme den - gamle - geografiske længdegrad afkortet til fire decimaler)
Manuskript
! Gem geodata afkortet til 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);
! Sammenligning af nuværende og gammel placering
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);
! Sammensæt URL'en med de aktuelle GPS-data - AppID "... xxx ..." skal udfyldes med dit eget ID
var url = "https://api.openweathermap.org/geo/1.0/reverse?lat="#Latitude#"&lon="#Longitude#"&limit=5&appid=[xxxxxxxxxxxxxxxxxxxxxxxxx]";
WriteLine("ny URL til nye geodata");WriteLine(url);
! Afsendelse af URL-anmodning
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);
! Udtræk af data
! 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("city_name");WriteLine(city_name);
dom.GetObject("W_city_name").State(city_name);
! Landekode
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("country_code");WriteLine(country_code);
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 udelades og bruges kun til at kontrollere, at scriptet er blevet kørt til ende, hvis placeringen ikke er blevet ændret
ellers
{
WriteLine("Data er lig med");
}