Satura rādītājs
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");
}