İçeriğe geç

SmartHome hava durumu verileri

İçindekiler tablosu

Okuma süresi 9 dakika

Güncellendi - 20 Ocak 2023

SmartHome ile hava durumu verilerini kaydetmek ve AIO Creator aracılığıyla cep telefonunuzda veya tabletinizde görselleştirmek genellikle bir gereklilik değildir, ancak sahip olunması güzel bir şeydir.

Çevrimiçi hava durumu hizmeti weatherstack.com ayda 250 sorguya kadar - sınırlı ölçüde ücretsiz olarak sunar. Eğer gerçekten güncel hava durumu verileri istiyorsanız, standart paketi seçmelisiniz. 50.000 sorgu dakika aralıklarını etkinleştirir.

Mevcut diğer paketler öncelikle sorgulama sayısı ve 7 veya 14 günlük hava durumu tahmini açısından farklılık göstermektedir.

Aşağıdaki veriler tüm paketlere dahildir:

  • Coğrafi boylam ve enlem
  • Konum
  • Bölge
  • Ülke
  • Saat dilimi
  • Yerel saat ve tarih
  • UTC Ofseti
  • Mevcut veri toplama zamanı
  • Hava sıcaklığı
  • Hava durumu açıklaması
  • Rüzgar hızı
  • Rüzgar yönü sayısal / coğrafi
  • Hava basıncı
  • Yağış
  • Nem
  • Bulut yoğunluğu
  • Soğutma sıcaklığı
  • UV İndeksi
  • Görünüm

Kayıt, paketten bağımsız olarak, olağan bilgi ve ödeme ayrıntılarını gerektirir. Aylık abonelik yerine yıllık abonelik 20% ile indirimli.

Bu prosedür başarıyla tamamlandığında, sorgu url'sine kopyaladığınız API kodu (Uygulama Programlama Arayüzü) olarak adlandırılan bir kod alırsınız. Yanıt, yukarıda belirtilen veri kategorilerini ve değerlerini içeren bir XML çıktısıdır. Veriler uygun komut dosyaları kullanılarak çıkarılır ve değişkenlerde saklanır. Bunlar daha sonra AIO Creator'da görselleştirme için kullanılabilir.

XML çıktısındaki tüm olası parametrelerin ayrıntılı bir açıklaması ve çeşitli kod örnekleri de dahil olmak üzere daha yüksek fiyatlı paketlerde bulunan isteğe bağlı sorgu seçenekleri, Burada görüntülenebilir.

Program

Program, büyük miktardaki veri nedeniyle oldukça kapsamlıdır. Bu nedenle münferit bölümler burada sırayla listelenmiştir. Tüm kod parçacıkları sonuçta tek bir programda birleştirilebilir.

Yukarıda belirtilen verilere ek olarak, programda ek veriler hesaplanır ve görselleştirme için kullanılabilir hale getirilir:

  • Güneş yüksekliği ve azimut
  • Işık koruma faktörü önerisi
Program - W_Data - Hava durumu verileri sorgusu

Program başlığı

Başlık yalnızca URL'yi içerir ve burada xxx olarak gösterilen API anahtarı ve konum (düz metin olarak veya virgülle ayrılmış, yyy olarak etiketlenmiş enlem ve boylam olarak) ile desteklenmelidir:

var url = "http://api.weatherstack.com/current?access_key=xxx&query=yyy";

ABD saat formatını DE saat formatına dönüştürme

Serbest ve standart tarifede ekran dili seçimi olmadığından ve bu nedenle yalnızca AM / PM saat formatı mevcut olduğundan, bu 24 saatlik formata dönüştürülür.

Oluşturulacak değişken:

  • W_LDU türünün Dize

Kod:

! AM/PM dönüşümü - W_LDU'da kaydetme

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

string word = 'observation_time":"';
integer word_length = word.Length();
integer word_position = wetter_xml.Find(word);
string data = wetter_xml.Substr((word_position + word_laenge), 5);
integer word_position = data.Find(word);
data = data.Substr(0, (word_position -2));

string word = 'observation_time":"';
integer word_length = word.Length();
integer word_position = wetter_xml.Find(word);
string PM = wetter_xml.Substr((word_position + word_laenge +6), 2);
integer word_position = PM.Find(word);
PM = PM.Substr(0, (word_position -2));
WriteLine("AM/PM");WriteLine(PM);

string word = 'observation_time":"';
integer word_length = word.Length();
integer word_position = wetter_xml.Find(word);
string HH = wetter_xml.Substr((word_position + word_laenge) + 1, 1);
integer word_position = HH.Find(word);
HH = HH.Substr(0, (word_position -2));
WriteLine("HH");WriteLine(HH);

string word = 'observation_time":"';
integer word_length = word.Length();
integer word_position = wetter_xml.Find(word);
string MM = wetter_xml.Substr((word_position + word_laenge) +3, 2);
integer word_position = MM.Find(word);
MM = MM.Substr(0, (word_position -2));
WriteLine("MM");WriteLine(MM);

if (PM == "PM")
{
tamsayı Diff = 12;
WriteLine("Diff");WriteLine(Diff);
var HH_i = HH.ToInteger();
tamsayı H = (HH_i + Diff);
WriteLine("HHi + Diff is = H)");WriteLine(H);
string HHMM = H #":";
WriteLine("H_+ : ");WriteLine(HHMM);
string HM = HHMM # MM;
WriteLine("HH_+12+MM");WriteLine(HM);
dom.GetObject("W_LDU").State(HM);
}
başka
{
WriteLine("LDU_daten");WriteLine(daten);
dom.GetObject("W_LDU").State(data);
}


Ülke - Ülke kodu

Ülke kodu da İngilizce olarak çıkarılır ve burada uluslararası koda dönüştürülür. Gerekirse bu modele göre başka ülkeler de eklenebilir. Mevcut ülke, Weatherstack tarafından seçilen şehir tarafından otomatik olarak belirlenir.

Oluşturulacak değişken:

W_country_code türünün Dize

Kod:

! Ülke_kodu

pos = 0;
posStart = 'ülke":"';
posEnd = '", "region';
posValueStart = stdout.Find(posStart) + posStart.Length();
posValueEnd = stdout.Find(posEnd)-posValueStart;
string ülke_kodu = stdout.Substr(posValueStart, posValueEnd);

if (country_code == "Germany")
{
string country_code = "DE";
}
if (country_code == "Sweden")
{
string country_code = "SE";
}

WriteLine("ülke_kodu");WriteLine(ülke_kodu);
dom.GetObject("W_country_code").State(country_code);


Bölge

Bölge, örneğin Almanya'daki "Aşağı Saksonya "yı ifade eder ve Weatherstack tarafından otomatik olarak belirlenir.

Oluşturulacak değişken:

  • W_region türünün Dize

Kod:

! Bölge

pos = 0;
posStart = 'region":"';
posEnd = '", "lat';
posValueStart = stdout.Find(posStart) + posStart.Length();
posValueEnd = stdout.Find(posEnd)-posValueStart;
string bölge = stdout.Substr(posValueStart, posValueEnd);
WriteLine("bölge");WriteLine(bölge);
dom.GetObject("W_region").State(region);


Şehir

Şehir girilirken, Weatherstack ilgili enlem ve boylam verilerini otomatik olarak belirler, şehir ise girilen coğrafi verilerden belirlenir.

Oluşturulacak değişken:

  • W_şehir_adı türünün Dize

Kod:

! Şehir_adı

pos = 0;
posStart = 'name":"';
posEnd = '", "ülke';
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);


Enlem - geogr. Enlem

Oluşturulacak değişken:

  • W_Lat türünün Dize

Kod:

! Lat

pos = 0;
posStart = 'query": "Lat';
posEnd = 've Lon';
posValueStart = stdout.Find(posStart) + posStart.Length();
posValueEnd = stdout.Find(posEnd)-posValueStart;
string Lat = stdout.Substr(posValueStart, posValueEnd);
WriteLine("Lat");WriteLine(Lat);
dom.GetObject("W_Lat").State(Lat);


Boylam - boylam

Oluşturulacak değişken:

  • W_Lon türünün Dize

Kod:

! Lon

pos = 0;
posStart = 've Lon';
posEnd = '", "dil';
posValueStart = stdout.Find(posStart) + posStart.Length();
posValueEnd = stdout.Find(posEnd)-posValueStart;
string Lon = stdout.Substr(posValueStart, posValueEnd);
WriteLine("Lon");WriteLine(Lon);
dom.GetObject("W_Lon").State(Lon);


Görünüm - görünürlük

Oluşturulacak değişken:

  • W_vis türünün Dize

Kod:

! Görünürlük

pos = 0;
posStart = 'görünürlük":';
posEnd = ', "is_day';
posValueStart = stdout.Find(posStart) + posStart.Length();
posValueEnd = stdout.Find(posEnd)-posValueStart;
string vis_daten = stdout.Substr(posValueStart, posValueEnd);
WriteLine("vis_data");WriteLine(vis_data);
dom.GetObject("W_vis").State(vis_data);


Hava basıncı ve eğilimi

Sağlanan hava basıncına ek olarak, bu kodda ölçülen bir değer "güncel" ve önceki bir değer "eski" olarak kaydedilerek hava basıncı eğilimi belirlenir. Her ikisi de birbiriyle karşılaştırılarak trend elde edilir.

Oluşturulacak değişken:

  • W_air_pressure_act türünün Dize
  • W_air_pressure_old türünün Dize
  • W_Hava basıncı trendi türünün Dize

Kod:

! Yazdır

var W_mb_alt;
var W_mb_akt;
pos = 0;
posStart = 'basınç":';
posEnd = ', "precip";
posValueStart = stdout.Find(posStart) + posStart.Length();
posValueEnd = stdout.Find(posEnd)-posValueStart;
veri = stdout.Substr(posValueStart, posValueEnd);WriteLine(veri);
real W_mb_akt = daten.ToInteger();WriteLine("W_mb_akt");WriteLine(W_mb_akt);
dom.GetObject("W_air_pressure_act").State(W_mb_act);
W_mb_alt = dom.GetObject("W_Luftdruck_alt").Value();WriteLine(W_mb_alt);

if (W_mb_akt > W_mb_alt)
{
dom.GetObject("W_air_pressure_old").State(W_mb_akt);
dom.GetObject("W_Air pressure trend").State("S");
}

if (W_mb_akt < W_mb_alt)
{
dom.GetObject("W_air_pressure_old").State(W_mb_akt);
dom.GetObject("W_Air pressure trend").State("F");
}

if (W_mb_akt == W_mb_alt)
{
dom.GetObject("W_air_pressure_old").State(W_mb_akt);
dom.GetObject("W_Air pressure trend").State("N");
}


Soğutma sıcaklığı

Rüzgar soğuğu rüzgar hızına ve sıcaklığa bağlıdır. Su sporlarında, sprey nedeniyle buharlaşarak soğumanın etkisi de ek bir faktördür (burada dikkate alınmamıştır). Soğuk, algılanan sıcaklığı ifade eder ve çok soğuk ortamlarda gerçek sıcaklığa kıyasla negatif sıcaklığın bir buçuk katına kadar çıkabilir ve hızla donmaya yol açabilir.

Oluşturulacak değişken:

  • W_chill türünün Dize

Kod:

! Chill

pos = 0;
posStart = 'feelslike":';
posEnd = ', "uv_index';
posValueStart = stdout.Find(posStart) + posStart.Length();
posValueEnd = stdout.Find(posEnd)-posValueStart;
string app_temp_daten = stdout.Substr(posValueStart, posValueEnd);
WriteLine("app_temp_data");WriteLine(app_temp_data);
dom.GetObject("W_chill").State(app_temp_daten);


UV ve ışık koruması önerisi

UV indeksi temelinde belirlenen UV maruziyeti, gerekli ışık koruma önlemlerinin kullanımı için bir tavsiyeyle sonuçlanır.

Oluşturulacak değişken:

  • W_UV türünün Dize
  • W_LSF türünün Dize

Kod:

! UV

pos = 0;
posStart = 'uv_index":';
posEnd = ', "görünürlük";
posValueStart = stdout.Find(posStart) + posStart.Length();
posValueEnd = stdout.Find(posEnd)-posValueStart;
var uv_daten = stdout.Substr(posValueStart, posValueEnd);
dom.GetObject("W_UV").State(uv_daten);
data = uv_data.Substr(0, (word_position -2));
gerçek sayı = data.ToInteger();
WriteLine("UV numarası");WriteLine(sayı);

string LSF = "";
if (number = "3") && (number = "6") && (number = "8") && (number = "10") {LSF = "ZORUNLU" ;}
dom.GetObject("W_LSF").State(LSF);WriteLine("LSF");WriteLine(LSF);


Rüzgar hızı

Oluşturulacak değişken:

  • W_WdSpd türünün ödeme

Kod:

! Rüzgar hızı

pos = 0;
posStart = 'wind_speed":';
posEnd = ', "wind_degree';
posValueStart = stdout.Find(posStart) + posStart.Length();
posValueEnd = stdout.Find(posEnd)-posValueStart;
var wind_spd_daten = stdout.Substr(posValueStart, posValueEnd);
real x = wind_spd_daten.ToFloat();
dom.GetObject("W_WdSpd").State(x);


Rüzgar hızı - Dönüşümler

Farklı bölgelerde, ülkelerde ve uygulamalarda farklı rüzgar hızı ölçümleri tercih edildiğinden, burada m/s'den km/s'ye, knot'a ve Beaufort'a dönüşüm verilmiştir.

Oluşturulacak değişken:

  • W_Wind_kmh türünün ödeme
  • W_Wind_knh türünün ödeme
  • W_Wind_Bft türünde ödeme

Kod:

real W_Wind_kmh = (wind_spd_daten.ToFloat() * 3.6);WriteLine("W_Wind_kmh");WriteLine(W_Wind_kmh);
dom.GetObject("W_Wind_kmh").State(W_Wind_kmh);


real W_Wind_knh = (W_Wind_kmh / 1.852);WriteLine("W_Wind_knh");WriteLine(W_Wind_knh);
dom.GetObject("W_Wind_knh").State(W_Wind_knh);

eğer (x < 0,30)
{
dom.GetObject("W_Wind_Bft").State(0);
}
if ((0.29 < x) && (x < 1.51))
{
dom.GetObject("W_Wind_Bft").State(1);
}
if ((1.59 < x) && ( x < 3.31))
{
dom.GetObject("W_Wind_Bft").State(2);
}
if ((3,39 < x) && ( x < 5,41))
{
dom.GetObject("W_Wind_Bft").State(3);
}
if ((5,49 < x) && ( x < 7,91))
{
dom.GetObject("W_Wind_Bft").State(4);
}
if ((7,99 < x) && (x < 10,71))
{
dom.GetObject("W_Wind_Bft").State(5);
}
if ((10.79 < x) && (x < 13.81))
{
dom.GetObject("W_Wind_Bft").State(6);
}
if ((12,89 < x) && (x < 17,11))
{
dom.GetObject("W_Wind_Bft").State(7);
}
if ((17,19 < x) && (x < 20,71))
{
dom.GetObject("W_Wind_Bft").State(8);
}
if ((20,79 < x) && (x < 24,41))
{
dom.GetObject("W_Wind_Bft").State(9);
}
eğer ((24,49 < x) && (x < 28,41))
{
dom.GetObject("W_Wind_Bft").State(10);
}
eğer ((28,49 < x) && (x < 32,61))
{
dom.GetObject("W_Wind_Bft").State(11);
}
eğer (x > 32,6)
{
dom.GetObject("W_Wind_Bft").State(12);
}

Rüzgar hızı - donma riski

Çok soğuk bölgelerde seyahat eden herkes, uygun koruyucu giysiler kullanılmadığı takdirde rüzgar hızı ve algılanan dış sıcaklık nedeniyle donma riski varsa bu senaryo ile bir uyarı alacaktır.

Hesaplama, 30 dakika veya daha kısa süreli cilt maruziyeti için cilt sıcaklığının -4,8 °C'ye düşeceği varsayımına dayanmaktadır; bu da insanların 5%'sinde donma meydana geldiği anlamına gelmektedir.

Oluşturulacak değişken:

  • W_Wind_danger türünde boolean

Kod:

if (((app_temp_data == -27.2) && (8 > W_Wind_kmh W_Wind_kmh W_Wind_kmh W_Wind_kmh W_Wind_kmh W_Wind_kmh W_Wind_kmh W_Wind_kmh W_Wind_kmh W_Wind_kmh W_Wind_kmh <60.1))
{
dom.GetObject("W_Wind_Danger").State(true);
}
başka
{
dom.GetObject("W_Wind_Danger").State(false);
}


Rüzgar yönü (coğrafi)

Oluşturulacak değişken:

  • W_wind_dir türünün Dize

Kod:

! Coğrafi rüzgar yönü

pos = 0;
posStart = 'wind_dir":"';
posEnd = '", "pressure';
posValueStart = stdout.Find(posStart) + posStart.Length();
posValueEnd = stdout.Find(posEnd)-posValueStart;
string wind_dir_daten = stdout.Substr(posValueStart, posValueEnd);
WriteLine("W_wind_dir");WriteLine(wind_dir_data);
dom.GetObject("W_wind_dir").State(wind_dir_daten);


Rüzgar yönü (sayısal)

Oluşturulacak değişken:

  • W_Wind_rchtg türünün Dize

Kod:

! Rüzgar yönü sayısal

pos = 0;
posStart = 'wind_degree":';
posEnd = ', "wind_dir';
posValueStart = stdout.Find(posStart) + posStart.Length();
posValueEnd = stdout.Find(posEnd)-posValueStart;
string W_wind_rchtg = stdout.Substr(posValueStart, posValueEnd);
WriteLine("W_wind_rchtg");WriteLine(W_wind_rchtg);
dom.GetObject("W_wind_rchtg").State(W_wind_rchtg);


Bulut örtüsü

Bulut örtüsü Weatherstack tarafından İngilizce olarak da yazılmıştır, bu nedenle burada Almanca çevirisi verilmiştir.

Oluşturulacak değişken:

  • W_description türünün Dize

Kod:

! Bulut örtüsü açıklaması

pos = 0;
posStart = 'weather_descriptions":["';
posEnd = '"], "wind_speed';
posValueStart = stdout.Find(posStart) + posStart.Length();
posValueEnd = stdout.Find(posEnd)-posValueStart;
string clouds_description = stdout.Substr(posValueStart, posValueEnd);
WriteLine("clouds_description_EN");WriteLine(clouds_description);

if (clouds_description == "Bulutlu")
{
string clouds_description_DE = "Bulutlu";
WriteLine("clouds_description_DE");WriteLine(clouds_description_DE);
dom.GetObject("W_description").State(clouds_description_DE);
}
if (clouds_description == "Light rain")
{
string clouds_description_EN = "Hafif yağmur";
WriteLine("clouds_description_DE");WriteLine(clouds_description_DE);
dom.GetObject("W_description").State(clouds_description_DE);
}
if (clouds_description == "Light rain shower")
{
string clouds_description_EN = "Hafif sağanak yağmur";
WriteLine("clouds_description_DE");WriteLine(clouds_description_DE);
dom.GetObject("W_description").State(clouds_description_DE);
}
if (clouds_description == "Light drizzle")
{
string clouds_description_DE = "Çiseleme";
WriteLine("clouds_description_DE");WriteLine(clouds_description_DE);
dom.GetObject("W_description").State(clouds_description_DE);
}
if (clouds_description == "Mis")
{
string clouds_description_DE = "pus";
WriteLine("clouds_description_DE");WriteLine(clouds_description_DE);
dom.GetObject("W_description").State(clouds_description_DE);
}
if (clouds_description == "Hafif kar yağışı")
{
string clouds_description_EN = "Hafif kar yağışı";
WriteLine("clouds_description_DE");WriteLine(clouds_description_DE);
dom.GetObject("W_description").State(clouds_description_DE);
}
if (clouds_description == "Sunny")
{
string clouds_description_DE = "Neşeli";
WriteLine("clouds_description_DE");WriteLine(clouds_description_DE);
dom.GetObject("W_description").State(clouds_description_DE);
}
if (clouds_description == "Overcast")
{
string clouds_description_DE = "Bulutlu";
WriteLine("clouds_description");WriteLine(clouds_description_EN);
dom.GetObject("W_description").State(clouds_description_DE);
}
if (clouds_description == "Partly cloudy")
{
string clouds_description_DE = "Parçalı bulutlu";
WriteLine("clouds_description_DE");WriteLine(clouds_description_DE);
dom.GetObject("W_description").State(clouds_description_DE);
}
if (clouds_description == "Clear")
{
string clouds_description_DE = "Temizle";
WriteLine("clouds_description_DE");WriteLine(clouds_description_DE);
dom.GetObject("W_description").State(clouds_description_DE);
}
if (clouds_description == "Fog")
{
string clouds_description_DE = "Sis";
WriteLine("clouds_description_DE");WriteLine(clouds_description_DE);
dom.GetObject("W_description").State(clouds_description_DE);
}
if (clouds_description == "Patchy rain possible")
{
string clouds_description_EN = "Hafif yağmur olası";
WriteLine("clouds_description");WriteLine(clouds_description_EN);
dom.GetObject("W_description").State(clouds_description_DE);
}
if (clouds_description == "Moderate rain")
{
string clouds_description_DE = "Orta derecede yağış";
WriteLine("clouds_description");WriteLine(clouds_description_EN);
dom.GetObject("W_description").State(clouds_description_DE);
}


Bulut örtüsü

Oluşturulacak değişken:

  • W_clouds türünün Dize

Kod:

! Bulut örtüsü

pos = 0;
posStart = 'cloudcover":';
posEnd = ', "feelslike";
posValueStart = stdout.Find(posStart) + posStart.Length();
posValueEnd = stdout.Find(posEnd)-posValueStart;
string clouds_data = stdout.Substr(posValueStart, posValueEnd);
WriteLine("clouds_data");WriteLine(clouds_data);
dom.GetObject("W_clouds").State(clouds_data);


Yağmur tahmini

Oluşturulacak değişken:

  • W_Çökelme türünün Dize

Kod:

! Tahmini yağmur

var x;
pos = 0;
posStart = 'precip":';
posEnd = ', "nem';
posValueStart = stdout.Find(posStart) + posStart.Length();
posValueEnd = stdout.Find(posEnd)-posValueStart;
string precip = stdout.Substr(posValueStart, posValueEnd);
WriteLine("Yağış");WriteLine(precip);
dom.GetObject("W_Precipitation").State(precip);


Yükseklik - Azimut

Senaryo tarafından yazıldı radyo feneri ve aşağıdaki adrese gönderilir Homematik Forum linkteki başlığın 10. sayfasında.

İki sistem değişkeni oluşturulmalıdır:

  • sun_elevation türünün Sayı
  • sun_azimuth türünün Sayı

Neden 4 dakika? Çünkü dünya güneş etrafındaki 360°'lik turunu her 24 saatte bir tamamlar. 360° / 24 saat = saatte 15°, bu da 60 dakika / 15° = 4 dakikaya karşılık gelir.

Güncelleme aralığı 4 dakikadan farklıysa, bu komut dosyası yukarıdaki komut dosyalarından veya ilgili programdan bağımsız olarak kullanılmalıdır.

Program:

Program - Yükseklik / azimut belirleme

Oluşturulacak değişkenler:

  • sun_azimuth türünün ödeme
  • sun_elevation türünün ödeme

Kod:

! Enlemi al
real phi = system.Latitude();
phi = 0.017453292 * phi;


! Radyana dönüştürme
taylor serileri ile sin_phi ve cos_phi hesaplama
real temp = phi * phi;
real sin_phi =phi * ((temp * temp * 0.0083334) +1.0 - (temp * 0.1666667));


Sinüzoidal yaklaşım
real cos_phi = (temp *temp *0,0416667) + 1,0 - (temp * 0,5);


! kosinüs yaklaşımı
! Güneş zamanının hesaplanması, tüm zamanlar dakika cinsinden
integer time_min = system.Date("%M").ToInteger() + 60system.Date("%H").ToInteger(); integer tagesbeginn_min = system.SunriseTime("%M").ToInteger() + 60system.SunriseTime("%H").ToInteger();
integer tagesende_min = system.SunsetTime("%M").ToInteger() + 60* system.SunsetTime("%H").ToInteger();
integer sonnenzeit =time_min + 720 - 0,5 *(tagesbeginn_min +tagesende_min);
if (suntime > 1440) {suntime = suntime -1440;}
if (suntime 720) {suntime =suntime - 720; afternoon = true; }
else {sonnenzeit =720 -sonnenzeit;}


! Hesaplama sin_tau ve cos_tau
real tau = 0.00436332313 * güneş zamanı; ! 15/60 * pi /180 * güneş zamanı [0 < tau < pi ] if (tau < 1.570796327) {temp = tau * tau; real sin_tau =tau * ((temp * temp * 0.0083334) +1.0 - (temp * 0.1666667)); tau= 1.570796327 - tau; temp = tau * tau; real cos_tau =tau * ((temp * temp * 0.0083334) +1.0 - (temp * 0.1666667));} else {real tau1 =3.141592654 - tau; temp = tau1 * tau1; real sin_tau =tau1 * ((temp * temp * 0.0083334) +1.0 - (temp * 0.1666667)); tau = tau - 1.570796327; temp = tau * tau; real cos_tau = (tau) (-1.0) ((temp * temp * 0.0083334) +1.0 - (temp * 0.1666667));}

! Hesaplama delta
integer tageszahl = system.Date("%j").ToInteger(); tageszahl = tageszahl +10; if (tageszahl > 365) {tageszahl = tageszahl - 365;}
if (tageszahl 91) && (tageszahl 183) && (gün sayısı 274) && (tageszahl < 366)) {tageszahl = 365 - tageszahl; gerçek etiket = 0.0172142 *tageszahl; temp = etiket * etiket; gerçek delta = (-0.410152) *((temp *temp *0.041666) + 1.0 - (temp * 0.5));}

! hesaplama sin_delta, cos_delta
temp = delta * delta; real sin_delta = delta * ((temp * temp * 0.0083334) +1.0 - (temp * 0.1666667)); !sinüs yaklaşımı real cos_delta = (temp *temp *0.0416667) + 1.0 - (temp * 0.5);

! kosinüs yaklaşımı
! tan_delta'nın parçalı doğrusallaştırma ile hesaplanması
boolean vsign = true; if (delta=0.2618) {tan_delta = (1.1822*delta) - 0.0416;}
if (vsign == false) {tan_delta = (-1.0) * tan_delta;}


! sin_elevation ve tan_azimuth'un hesaplanması
real sin_elevation = (sin_phi * sin_delta) +( cos_phi * cos_delta * cos_tau);
temp = sin_elevation * sin_elevation;
real sun_elevation = sin_elevation * (1.0 + (0.1666667 * temp) + (0.075 * temp * temp));
sun_elevation = 57.29577951 * sun_elevation;
gerçek payda = (sin_phi*cos_tau) - (cos_phi * tan_delta);
if (payda < 0.0) {boolean plus180 = true;} real tan_azimut = sin_tau / payda;


! Arctan'ın parçalı doğrusallaştırılması ile sun_azimuth'un hesaplanması
boolean sign = true; if (tan_azimut =0.2679)&&(tan_azimut = 0.5774)&&(tan_azimut = 1.0)&&(tan_azimuth = 1.3032)&&(tan_azimuth = 1.7321)&&(tan_azimut = 2.4142)&&(tan_azimut = 2.9459)&&(tan_azimuth = 3.7321)&&(tan_azimuth = 5.0)&&(tan_azimuth = 7.0)&&(tan_azimuth = 12.0)&&(tan_azimuth = 20.0)&&(tan_azimuth = 50.0) {sonne_azimuth = (0.000099983* tan_azimuth) + 1.54579974;}
if (sun_azimuth> 1.5707963278) {sun_azimuth = 1.5707963278;}
if (sign == false) {sun_azimuth = (-1.0) * sun_azimuth;}
sun_azimuth = 57.29577951 * sun_azimuth;
if (plus180 == true) {sonne_azimut = sonne_azimut + 180.0;}


! Günün saati düzeltmesini ve değerleri sistem değişkenlerine kaydedin
if (öğleden sonra == false)
{sonne_azimut = 180.0 - sonne_azimut; sonnenzeit = 720 - sonnenzeit;}
başka
{sun_azimuth = sun_azimuth + 180.0;sun_time = 720 + sun_time;}
sun_azimuth = 0.1 ((sun_azimut10.0) .ToInteger());
sun_elevation = 0.1 ((sun_elevation10.0) .ToInteger());
dom.GetObject("sonne_elevation").State(sonne_elevation);
dom.GetObject("sonne_azimut").State(sonne_azimut);

Bir yanıt yazın

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

tr_TRTurkish