Pāriet uz saturu

SmartHome - GPS datu izmaiņas

Satura rādītājs

Lasīšanas laiks 2 protokols

Ceļojot GPS dati pastāvīgi mainās. Mērķis ir izmantot SmartHome uz HomeMatic vai RaspberryMatic, lai reģistrētu šos datus un vajadzības gadījumā atjauninātu citus parametrus, kas no tiem atkarīgi.

Protams, jūs varētu nepārtraukti noteikt atrašanās vietu un tādējādi vienmēr iegūt laikapstākļu datus saistībā ar atrašanās vietu, taču tas radītu nevajadzīgu tiešsaistes datplūsmu un procesora noslodzi. Tāpēc sistēma pārbauda tikai atrašanās vietas maiņu un nosaka laikapstākļu datus attiecībā pret pašreizējo atrašanās vietu tikai tad, kad tiek konstatēta atrašanās vietas maiņa, un attiecīgi atjaunina datus.

GPS datu pielāgošana salīdzināšanai

Tā kā GPS koordinātas vienmēr svārstās līdz garuma un platuma vērtību pēdējiem diviem cipariem GPS pakalpojumu sniedzēju apzinātas neprecizitātes dēļ, pat ja nemainīgi atrodaties tajā pašā atrašanās vietā, salīdzināšanai tiek ņemtas vērā tikai četras zīmes aiz komata. Tāpēc atrašanās vietas maiņa tiek atzīta tikai tad, ja mainās vismaz ceturtā zīme aiz komata.

Skripta papildinājums (GPS_dati)

Šādas skripta rindas tiek pievienotas šeit apspriestais scenārijs GPS_dati pievienots. Ar izsaukuma zīmi sākas rindiņas, kas apzīmē komentārus. RakstietLine paziņojumus izmanto tikai izvades kontrolei, un tos var dzēst.

Jāizveido jauni DRAWING CHAIN tipa mainīgie:

  • W_Lat_short_act (Lai saglabātu pašreizējo ģeogrāfisko platumu, kas saīsināts līdz četrām zīmēm aiz komata)
  • W_Lon_short_act (Lai saglabātu pašreizējo ģeogrāfisko garumu, kas saīsināts līdz četrām zīmēm aiz komata)
  • W_Lat_short_old (Lai saglabātu - veco - ģeogrāfisko platumu, kas saīsināts līdz četrām zīmēm aiz komata)
  • W_Lon_short_old (Lai saglabātu veco ģeogrāfisko garumu, kas saīsināts līdz četrām zīmēm aiz komata)

Skripts

! Saglabāt ģeodatus, kas saīsināti līdz 4 zīmēm aiz komata (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);

! Pašreizējās un vecās atrašanās vietas salīdzinājums

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

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

! Salikt URL ar pašreizējiem GPS datiem - AppID "... xxx ..." jāaizpilda ar savu ID.

var url = "https://api.openweathermap.org/geo/1.0/reverse?lat="#Latitude#"&lon="#Longitude#"&limit=5&appid=[xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx]";
WriteLine("jauns URL jauniem ģeodatiem");WriteLine(url);

! URL pieprasījuma nosūtīšana

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

! Datu ieguve

! City_name

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("city_name");WriteLine(city_name);
dom.GetObject("W_city_name").State(city_name);

! Valsts kods

pos = 0;
posStart = 'country":"';
posEnd = '", "valsts";
posValueStart = stdout.Find(posStart) + posStart.Length();
posValueEnd = stdout.Find(posEnd)-posValueStart;
string country_code = stdout.Substr(posValueStart, posValueEnd);
WriteLine("valsts_kods");WriteLine(valsts_kods);
dom.GetObject("W_country_code").State(country_code);

! Reģions

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 atzaru var izlaist, un to izmanto tikai, lai pārbaudītu, vai skripts ir izpildīts līdz galam, ja vieta nav mainījusies.

citādi
{
WriteLine("Dati ir vienādi");
}

Atbildēt

Jūsu e-pasta adrese netiks publicēta. Obligātie lauki ir atzīmēti kā *

lvLatvian
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