Spring til indhold

SmartHome - ændringer i GPS-data

Læsetid 2 minutter

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

Skriv et svar

Din e-mailadresse vil ikke blive publiceret. Krævede felter er markeret med *

da_DKDanish