Přeskočit na obsah

SmartHome - změny dat GPS

Obsah

Doba čtení 2 minuty

Údaje GPS se při cestování neustále mění. Cílem je použít SmartHome na HomeMaticu nebo RaspberryMaticu k zaznamenávání těchto dat a v případě potřeby aktualizovat další parametry, které na nich závisí.

Mohli byste samozřejmě průběžně určovat polohu, a tak vždy načítat údaje o počasí ve vztahu k dané poloze, ale to by generovalo zbytečný online provoz a zatížení procesoru. Proto systém kontroluje pouze změnu polohy a údaje o počasí ve vztahu k aktuální poloze určuje pouze tehdy, když je změna polohy rozpoznána, a podle toho údaje aktualizuje.

Úprava údajů GPS pro srovnání

Vzhledem k tomu, že souřadnice GPS vždy kolísají na posledních dvou číslicích hodnot zeměpisné délky a šířky v důsledku záměrné nepřesnosti poskytovatelů služeb GPS, i když zůstáváte na stejném místě beze změny, berou se pro porovnání v úvahu pouze čtyři desetinná místa. Změna polohy je tedy rozpoznána pouze tehdy, pokud se změní alespoň čtvrté desetinné místo.

Doplněk skriptu (GPS_Data)

Následující řádky skriptu jsou přidány do zde diskutovaný scénář GPS_Data přidáno. Řádky začínající vykřičníkem představují komentáře. Příkazy WriteLine slouží pouze k řízení výstupu a lze je smazat.

Je třeba vytvořit nové proměnné typu DRAWING CHAIN:

  • W_Lat_short_act (Pro uložení aktuální zeměpisné šířky zkrácené na čtyři desetinná místa)
  • W_Lon_short_act (Uložení aktuální zeměpisné délky zkrácené na čtyři desetinná místa)
  • W_Lat_short_old (Pro uložení - staré - zeměpisné šířky zkrácené na čtyři desetinná místa)
  • W_Lon_short_old (Pro uložení - staré - zeměpisné délky zkrácené na čtyři desetinná místa)

Skript

! Uložit geodata zkrácená na 4 desetinná místa (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);

! Srovnání současné a staré polohy

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

! Sestavte URL s aktuálními údaji GPS - AppID "... xxx ..." musí být vyplněno vaším vlastním ID.

var url = "https://api.openweathermap.org/geo/1.0/reverse?lat="#Latitude#"&lon="#Longitude#"&limit=5&appid=[xxxxxxxxxxxxxxxxxxxxxxxxxxx]";
WriteLine("nová adresa URL pro nová geodata");WriteLine(url);

! Odeslání požadavku na adresu URL

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

! Extrakce dat

! Název_města

pos = 0;
posStart = 'name':"';
posEnd = '", "local_names";
posValueStart = stdout.Find(posStart) + posStart.Length();
posValueEnd = stdout.Find(posEnd)-posValueStart;
string city_name = stdout.Substr(posValueStart, posValueEnd);
WriteLine("jméno_města");WriteLine(jméno_města);
dom.GetObject("W_city_name").State(city_name);

! Kód země

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

}

! Větev ELSE lze vynechat a slouží pouze k ověření, zda byl skript spuštěn až do konce, pokud se umístění nezměnilo.

jinak
{
WriteLine("Data se rovnají");
}

Napsat komentář

Vaše e-mailová adresa nebude zveřejněna. Vyžadované informace jsou označeny *

cs_CZCzech
We've detected you might be speaking a different language. Do you want to change to:
en_US English
de_DE German
en_US English
fr_FR French
sv_SE Swedish
es_ES Spanish
pt_PT Portuguese
it_IT Italian
nl_NL Dutch
nb_NO Norwegian
fi Finnish
da_DK Danish
cs_CZ Czech
hu_HU Hungarian
el Greek
ru_RU Russian
tr_TR Turkish
ja Japanese
lt_LT Lithuanian
lv Latvian
sl_SI Slovenian
sk_SK Slovak
Close and do not switch language