İçindekiler tablosu
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 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 DizeW_air_pressure_old
türünün DizeW_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 DizeW_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 ödemeW_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:

Oluşturulacak değişkenler:
sun_azimuth
türünün ödemesun_elevation
türünün ödeme
Kod:
! Enlemi alreal phi = system.Latitude();
phi = 0.017453292 * phi;
! Radyana dönüştürme
taylor serileri ile sin_phi ve cos_phi hesaplamareal 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 cinsindeninteger 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_taureal 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 deltainteger 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 kaydedinif (öğ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);