İçeriğe geç

SmartHome - GPS veri değişiklikleri

İçindekiler tablosu

Okuma süresi 2 dakika

GPS verileri seyahat sırasında sürekli değişir. Buradaki amaç, bu verileri kaydetmek ve gerekirse buna bağlı diğer parametreleri güncellemek için HomeMatic veya RaspberryMatic üzerinde SmartHome kullanmaktır.

Elbette konumu sürekli olarak belirleyebilir ve böylece hava durumu verilerini her zaman konuma göre alabilirsiniz, ancak bu gereksiz çevrimiçi trafik ve işlemci yükü oluşturacaktır. Bu nedenle, sistem yalnızca konum değişikliğini kontrol eder ve yalnızca bir konum değişikliği algılandığında mevcut konumla ilgili hava durumu verilerini belirler ve verileri buna göre günceller.

Karşılaştırma için GPS verilerinin ayarlanması

GPS koordinatları, GPS hizmet sağlayıcılarının kasıtlı yanlışlıkları nedeniyle enlem ve boylam değerlerinin son iki basamağına kadar her zaman dalgalandığından, aynı konumda değişmeden kalsanız bile, karşılaştırma için yalnızca dört ondalık basamak dikkate alınır. Bu nedenle bir konum değişikliği ancak en az dördüncü ondalık basamak değiştiğinde tanınır.

Senaryo eki (GPS_Veri)

Aşağıdaki komut dosyası satırları Burada tartışılan senaryo GPS_Veri eklendi. Ünlem işaretiyle başlayan satırlar yorumları temsil eder. WriteLine deyimleri yalnızca çıktı kontrolü için kullanılır ve silinebilir.

ÇİZİM ZİNCİRİ türünde yeni değişkenler oluşturulmalıdır:

  • W_Lat_short_act (Geçerli enlemi dört ondalık basamağa kadar kesilmiş olarak saklamak için)
  • W_Lon_short_act (Geçerli coğrafi boylamı dört ondalık basamağa kadar kesilmiş olarak kaydetmek için)
  • W_Lat_short_old (Dört ondalık basamağa kesilmiş -eski- coğrafi enlemi saklamak için)
  • W_Lon_short_old (Dört ondalık basamağa kesilmiş -eski- coğrafi boylamı saklamak için)

Senaryo

! Coğrafi verileri 4 ondalık basamağa kadar kesilmiş olarak kaydet (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);

! Mevcut ve eski konumun karşılaştırılması

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

! URL'yi mevcut GPS verileriyle birleştirin - AppID "... xxx ..." kendi kimliğinizle doldurulmalıdır

var url = "https://api.openweathermap.org/geo/1.0/reverse?lat="#Latitude#"&lon="#Longitude#"&limit=5&appid=[xxxxxxxxxxxxxxxxxxxxxxxxx]";
WriteLine("yeni coğrafi veri için yeni URL");WriteLine(url);

! URL isteğini gönderme

var posValueStart;
var posValueEnd;
var pos;
var veri;
var posStart;
var posEnd; string stderr; string stdout;
system.Exec("wget -q -O - '"#url#"'", &stdout, &stderr);
WriteLine(stdout);

! Verilerin çıkarılması

! Şehir_adı

pos = 0;
posStart = 'name":"';
posEnd = '", "local_names';
posValueStart = stdout.Find(posStart) + posStart.Length();
posValueEnd = stdout.Find(posEnd)-posValueStart;
string şehir_adı = stdout.Substr(posValueStart, posValueEnd);
WriteLine("şehir_adı");WriteLine(şehir_adı);
dom.GetObject("W_city_name").State(city_name);

! Ülke Kodu

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

! Bölge

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 dalı atlanabilir ve yalnızca konum değişmediyse kodun sonuna kadar çalıştırıldığını doğrulamak için kullanılır

başka
{
WriteLine("Veri eşittir");
}

Bir yanıt yazın

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir

tr_TRTurkish