İçindekiler
Güncellendi – 20 Ocak 2023
SmartHome ile hava durumu verilerini toplamak ve bunu AIO Creator aracılığıyla cep telefonunuzda veya tabletinizde görselleştirmek genellikle bir zorunluluk değildir, ancak buna sahip olmak güzeldir.
Çevrimiçi hava durumu hizmeti weatherstack.com ayda 250'ye kadar sorgu sunar - ücretsiz olarak sınırlıdır. Gerçekten güncel hava durumu verilerini istiyorsanız standart paketi seçmelisiniz. 50.000 sorgu dakikalık aralıklarla izin verir.
Halen mevcut olan paketler öncelikle talep sayısı ve 7 veya 14 günlük hava durumu tahminleri 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 farkı
- Veri toplamanın mevcut zamanı
- Hava sıcaklığı
- Hava durumu açıklaması
- rüzgar hızı
- Rüzgar yönü sayısal/coğrafi
- Hava basıncı
- Yağmur miktarı
- Nem
- Bulut yoğunluğu
- Soğutma sıcaklığı
- UV indeksi
- görüş
Kayıt, pakete bakılmaksızın, olağan ayrıntıları ve ödeme ayrıntılarını gerektirir. Aylık yerine yıllık abonelikte 20% indirim uygulanır.
Bu prosedürü başarıyla tamamladıktan sonra, sorgu URL'sine kopyalayacağınız API kodunu (Uygulama Programlama Arayüzü) alacaksınız. Yanıt, yukarıdaki 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ında mümkün olan tüm parametrelerin ayrıntılı açıklaması ve çeşitli kod örnekleri de dahil olmak üzere daha yüksek fiyatlı paketlerde yer alan isteğe bağlı sorgu seçenekleri, Burada görünür.
programı
Program, büyük miktarda veri nedeniyle oldukça kapsamlıdır. Bu nedenle burada ayrı ayrı bölümler 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ştirmeye sunulur:
- Güneş yüksekliği ve azimut
- Güneş koruma faktörü önerisi
Program başlığı
Başlık yalnızca, burada xxx ile gösterilen API anahtarıyla desteklenmesi gereken URL'yi ve konumu (düz metin olarak veya virgülle ayrılmış olarak, boylam ve enlem olarak yyy ile işaretlenmiş olarak) içerir:
var url = "http://api.weatherstack.com/current?access_key=xxx&query=yyy";
US'yi DE saat formatına dönüştürme
Ücretsiz ve standart tarifede ekran dili seçeneği olmadığından sadece AM/PM saat formatı mevcut olduğundan burada 24 saate çevrilmiştir.
Oluşturulacak değişken:
W_LDU
türün sicim
Kod:
! AM/PM dönüşümü – W_LDU'ya kaydedin
var posValueStart;
var posValueEnd;
var posBaşlangıç;
var posEnd; dize stderr; dize stdout'u;
system.Exec("wget -q -O - '"#url#"'", &stdout, &stderr);
WriteLine(stdout);
string weather_xml = stdout;
string word = 'gözlem_zamanı":"';
tamsayı kelime_uzunluğu = kelime.Length();
tamsayı word_position = weather_xml.Find(word);
dize verileri = weather_xml.Substr((kelime_konumu + kelime_uzunluğu), 5);
tamsayı kelime_konumu = veri.Find(kelime);
veri = data.Substr(0, (word_position -2));
string word = 'gözlem_zamanı":"';
tamsayı kelime_uzunluğu = kelime.Length();
tamsayı word_position = weather_xml.Find(word);
string PM = weather_xml.Substr((kelime_konumu + kelime_uzunluğu +6), 2);
tamsayı word_position = PM.Find(word);
PM = PM.Substr(0, (word_position -2));
WriteLine("AM/PM");WriteLine(PM);
string word = 'gözlem_zamanı":"';
tamsayı kelime_uzunluğu = kelime.Length();
tamsayı word_position = weather_xml.Find(word);
string HH = weather_xml.Substr((kelime_konumu + kelime_uzunluğu) + 1, 1);
tamsayı word_position = HH.Find(word);
HH = HH.Substr(0, (word_position -2));
WriteLine("HH");WriteLine(HH);
string word = 'gözlem_zamanı":"';
tamsayı kelime_uzunluğu = kelime.Length();
tamsayı word_position = weather_xml.Find(word);
string MM = weather_xml.Substr((kelime_konumu + kelime_uzunluğu) +3, 2);
tamsayı word_position = MM.Find(word);
MM = MM.Substr(0, (word_position -2));
WriteLine("MM");WriteLine(MM);
if (PM == "PM")
{
tamsayı Fark = 12;
WriteLine("Diff");WriteLine(Fark);
var HH_i = HH.ToInteger();
tamsayı H = (HH_i + Fark);
WriteLine("HHi + Fark = H'dir)");WriteLine(H);
dize HHMM = H #":";
WriteLine("H_+ : ");WriteLine(HHMM);
dize HM = HHMM # MM;
WriteLine("HH_+12+MM");WriteLine(HM);
dom.GetObject("W_LDU").State(HM);
}
başka
{
WriteLine("LDU_data");WriteLine(veri);
dom.GetObject("W_LDU").State(data);
}
Ülke – Ülke kodu
Ülke kodu da İngilizce olarak yayınlanır ve burada uluslararası koda dönüştürülür. Gerektiğinde bu kalıba göre ilave ülkeler de eklenebilir. Şehri seçtiğinizde mevcut ülke Weatherstack tarafından otomatik olarak belirlenir.
Oluşturulacak değişken:
W_country_code
türün sicim
Kod:
! Ülke_kodu
konum = 0;
posStart = 'ülke":"';
posEnd = ',”bölge';
posValueStart = stdout.Find(posStart) + posStart.Length();
posValueEnd = stdout.Find(posEnd)-posValueStart;
string ülke_kodu = stdout.Substr(posValueStart, posValueEnd);
if (ülke_kodu == "Almanya")
{
string ülke_kodu = "DE";
}
if (country_code == "İsveç")
{
string ülke_kodu = "SE";
}
WriteLine("ülke_kodu");WriteLine(ülke_kodu);
dom.GetObject("W_country_code").State(country_code);
bölge
Bölge, örneğin Almanya'da “Aşağı Saksonya” olarak adlandırılıyor ve Weatherstack tarafından da otomatik olarak belirleniyor.
Oluşturulacak değişken:
W_bölge
türün sicim
Kod:
! bölge
konum = 0;
posStart = 'bölge":"';
posEnd = ',”enlem';
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
Şehre girdiğinizde, Weatherstack ilgili enlemi ve enlemi otomatik olarak belirlerken, şehir girilen coğrafi verilerden belirlenir.
Oluşturulacak değişken:
W_şehir_adı
türün sicim
Kod:
! Şehir_adı
konum = 0;
posStart = 'ad":"';
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_şehir_adı").State(şehir_adı);
Enlem – coğrafi. Genişlik
Oluşturulacak değişken:
W_Enlem
türün sicim
Kod:
! Enlem
konum = 0;
posStart = 'query':"Lat';
posEnd = 've Boylam';
posValueStart = stdout.Find(posStart) + posStart.Length();
posValueEnd = stdout.Find(posEnd)-posValueStart;
string Lat = stdout.Substr(posValueStart, posValueEnd);
WriteLine("Enlem");WriteLine(Enlem);
dom.GetObject("W_Lat").State(Lat);
Boylam – coğrafi konum. uzunluk
Oluşturulacak değişken:
W_Lon
türün sicim
Kod:
! boylam
konum = 0;
posStart = 've Boylam';
posEnd = ',”dil';
posValueStart = stdout.Find(posStart) + posStart.Length();
posValueEnd = stdout.Find(posEnd)-posValueStart;
string Lon = stdout.Substr(posValueStart, posValueEnd);
WriteLine("Boylam");WriteLine(Boylam);
dom.GetObject("W_Lon").State(Lon);
Görünürlük – görünürlük
Oluşturulacak değişken:
W_vis
türün sicim
Kod:
! Görünürlük
konum = 0;
posStart = 'görünürlük':';
posEnd = ',"is_day';
posValueStart = stdout.Find(posStart) + posStart.Length();
posValueEnd = stdout.Find(posEnd)-posValueStart;
string vis_data = stdout.Substr(posValueStart, posValueEnd);
WriteLine("vis_data");WriteLine(vis_data);
dom.GetObject("W_vis").State(vis_data);
Hava basıncı ve trend
Bu komut dosyası, sağlanan hava basıncına ek olarak, ölçülen bir değeri “geçerli” ve bir önceki değeri “eski” olarak kaydederek hava basıncı eğilimini belirler. Her ikisi de birbiriyle karşılaştırılır ve bu da trendi ortaya çıkarır.
Oluşturulacak değişken:
W_hava basıncı_act
türün sicimW_hava basıncı_old
türün sicimW_Barometrik basınç eğilimi
türün sicim
Kod:
! Basınç
var W_mb_old;
var W_mb_akt;
konum = 0;
posStart = 'basınç':';
posEnd = ',"yağmur';
posValueStart = stdout.Find(posStart) + posStart.Length();
posValueEnd = stdout.Find(posEnd)-posValueStart;
veri = stdout.Substr(posValueStart, posValueEnd);WriteLine(data);
gerçek W_mb_akt = data.ToInteger();WriteLine("W_mb_akt");WriteLine(W_mb_akt);
dom.GetObject("W_Luftdruck_akt").State(W_mb_akt);
W_mb_alt = dom.GetObject("W_Luftdruck_alt").Value();WriteLine(W_mb_alt);
if (W_mb_akt > W_mb_old)
{
dom.GetObject("W_Luftdruck_old").State(W_mb_akt);
dom.GetObject("W_Hava basıncı eğilimi").State("S");
}
if (W_mb_akt < W_mb_old)
{
dom.GetObject("W_Luftdruck_old").State(W_mb_akt);
dom.GetObject("W_Hava basıncı eğilimi").State("F");
}
if (W_mb_akt == W_mb_old)
{
dom.GetObject("W_Luftdruck_old").State(W_mb_akt);
dom.GetObject("W_Hava basıncı eğilimi").State("N");
}
Soğutma sıcaklığı
Rüzgarın soğuması rüzgar hızına ve sıcaklığa bağlıdır. Su sporlarında spreyden kaynaklanan buharlaşmalı soğutmanın etkisi de artar (ancak bu burada dikkate alınmamıştır). Üşüme, çok soğuk bir ortamda, gerçek sıcaklığa kıyasla negatif sıcaklığın bir buçuk katına kadar çıkabilen ve hızlı donmaya yol açabilen algılanan sıcaklığı ifade eder.
Oluşturulacak değişken:
W_chill
türün sicim
Kod:
! Sakin olmak
konum = 0;
posStart = 'gibi hissettiriyor':';
posEnd = ',"uv_index';
posValueStart = stdout.Find(posStart) + posStart.Length();
posValueEnd = stdout.Find(posEnd)-posValueStart;
string app_temp_data = stdout.Substr(posValueStart, posValueEnd);
WriteLine("app_temp_data");WriteLine(app_temp_data);
dom.GetObject("W_chill").State(app_temp_data);
UV ve ışıktan koruma önerisi
UV indeksine göre belirlenen UV maruziyeti, gerekirse ışıktan korunma önlemlerinin kullanılmasına yönelik bir öneriyle sonuçlanır.
Oluşturulacak değişken:
W_UV
türün sicimW_LSF
türün sicim
Kod:
! UV
konum = 0;
posStart = 'uv_index":';
posEnd = ',"görünürlük";
posValueStart = stdout.Find(posStart) + posStart.Length();
posValueEnd = stdout.Find(posEnd)-posValueStart;
var uv_data = stdout.Substr(posValueStart, posValueEnd);
dom.GetObject("W_UV").State(uv_data);
veri = uv_data.Substr(0, (word_position -2));
gerçek sayı = data.ToInteger();
WriteLine("UV numarası");WriteLine(sayı);
dize LSF = "";
if (sayı <3) {LSF = "gereksiz" ;} elseif ((sayı >= "3") && (sayı <= "5")) {LSF = "önerilen" ;} elseif ((sayı >= "6) ") && (sayı <= "7")) {LSF = "gerekli" ;} elseif ((sayı >= "8") && (sayı <= "9")) {LSF = "gerekli" ;} elseif ( sayı >= "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 sayı
Kod:
! rüzgar hızı
konum = 0;
posStart = 'rüzgar_hızı':';
posEnd = ',"wind_degree';
posValueStart = stdout.Find(posStart) + posStart.Length();
posValueEnd = stdout.Find(posEnd)-posValueStart;
var rüzgar_spd_daten = stdout.Substr(posValueStart, posValueEnd);
gerçek x = rüzgar_spd_data.ToFloat();
dom.GetObject("W_WdSpd").State(x);
Rüzgar hızı dönüşümleri
Farklı bölge, ülke ve uygulamalarda tercih edilen rüzgar hızı ölçümleri farklı olduğundan m/s'den km/saat'e, knot'a ve Beaufort'a dönüşüm aşağıda verilmiştir.
Oluşturulacak değişken:
W_Rüzgar_kmh
türün sayıW_Rüzgar_knh
türün sayı- W_Wind_Bft türü sayı
Kod:
gerçek 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);
gerçek 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);
}
if ((24,49 < x) && (x < 28,41))
{
dom.GetObject(“W_Wind_Bft”).State(10);
}
if ((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 tehlikesi
Çok soğuk bölgelerde seyahat eden herkes, uygun koruyucu kıyafet kullanılmadığı takdirde rüzgar hızı ve algılanan dış sıcaklık nedeniyle donma riski varsa bu komut dosyasıyla uyarı alacaktır.
Hesaplama, cildin 30 dakika veya daha kısa süre maruz kalması durumunda cilt sıcaklığının -4,8 °C'ye düşmesinin beklenebileceğini ve 5%'de insanlarda donma meydana geleceğini varsaymaktadır.
Oluşturulacak değişken:
- W_Wind_Danger türü boolean
Kod:
if (((app_temp_data == -27,2) && (8 > W_Wind_kmh <10,1)) || ((app_temp_data == -22,9) && (12 > W_Wind_kmh <15,1)) || ((app_temp_data == -24,2) && ( 18 > W_wind_kmh <20,1)) || ((app_temp_data == -25,2) && (23 > W_wind_kmh <25,1)) || ((app_temp_data == -26,0) && (28 > W_wind_kmh <30,1)) || -26,8) && (32 > W_Wind_kmh <35,1)) || ((app_temp_data == -27,4) && (37 > W_Wind_kmh <40,1)) || )) || ((app_temp_data == -28,6) && (47) > W_Wind_kmh <50,1)) ||. && (57 > 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 sicim
Kod:
! Rüzgar yönü coğrafi olarak
konum = 0;
posStart = 'rüzgar_dizini":"';
posEnd = '',''basınç';
posValueStart = stdout.Find(posStart) + posStart.Length();
posValueEnd = stdout.Find(posEnd)-posValueStart;
string rüzgar_dir_data = stdout.Substr(posValueStart, posValueEnd);
WriteLine("W_wind_dir");WriteLine(wind_dir_daten);
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 sicim
Kod:
! Rüzgâr yönü sayısal olarak
konum = 0;
posStart = 'rüzgar_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ü de Weatherstack tarafından İngilizce olarak yazılmıştır, bu nedenle Almancaya çevirisi burada yapılmıştır.
Oluşturulacak değişken:
W_açıklama
türün sicim
Kod:
! Bulut örtüsü açıklaması
konum = 0;
posStart = 'hava durumu_açıklamaları":["';
posEnd = '"],"rüzgar_hızı';
posValueStart = stdout.Find(posStart) + posStart.Length();
posValueEnd = stdout.Find(posEnd)-posValueStart;
string cloud_description = stdout.Substr(posValueStart, posValueEnd);
WriteLine("clouds_description_TR");WriteLine(clouds_description);
if (clouds_description == "Bulutlu")
{
string cloud_description_DE = "Bulutlu";
WriteLine("clouds_description_DE");WriteLine(clouds_description_DE);
dom.GetObject("W_description").State(clouds_description_DE);
}
if (clouds_description == "Hafif yağmur")
{
string cloud_description_DE = "Hafif yağmur";
WriteLine("clouds_description_DE");WriteLine(clouds_description_DE);
dom.GetObject("W_description").State(clouds_description_DE);
}
if (clouds_description == "Hafif yağmur sağanak")
{
string cloud_description_DE = "Hafif yağmur sağanak";
WriteLine("clouds_description_DE");WriteLine(clouds_description_DE);
dom.GetObject("W_description").State(clouds_description_DE);
}
if (clouds_description == "Hafif çiseleyen yağmur")
{
string cloud_description_DE = "Çiseleyen yağmur";
WriteLine("clouds_description_DE");WriteLine(clouds_description_DE);
dom.GetObject("W_description").State(clouds_description_DE);
}
if (clouds_description == "Yanlış")
{
string cloud_description_DE = "Bulanıklık";
WriteLine("clouds_description_DE");WriteLine(clouds_description_DE);
dom.GetObject("W_description").State(clouds_description_DE);
}
if (clouds_description == "Hafif kar sağanak")
{
string cloud_description_DE = "Hafif kar sağanak";
WriteLine("clouds_description_DE");WriteLine(clouds_description_DE);
dom.GetObject("W_description").State(clouds_description_DE);
}
if (clouds_description == "Güneşli")
{
string cloud_description_DE = "Heiter";
WriteLine("clouds_description_DE");WriteLine(clouds_description_DE);
dom.GetObject("W_description").State(clouds_description_DE);
}
if (clouds_description == "Bulutlu")
{
string cloud_description_DE = "Bulutlu";
WriteLine("bulutların_açıklaması");WriteLine(bulutların_açıklaması_DE);
dom.GetObject("W_description").State(clouds_description_DE);
}
if (clouds_description == "Parçalı bulutlu")
{
string cloud_description_DE = "Parçalı bulutlu";
WriteLine("clouds_description_DE");WriteLine(clouds_description_DE);
dom.GetObject("W_description").State(clouds_description_DE);
}
if (clouds_description == "Temizle")
{
string cloud_description_DE = "Temizle";
WriteLine("clouds_description_DE");WriteLine(clouds_description_DE);
dom.GetObject("W_description").State(clouds_description_DE);
}
if (clouds_description == "Sis")
{
string cloud_description_DE = "Sis";
WriteLine("clouds_description_DE");WriteLine(clouds_description_DE);
dom.GetObject("W_description").State(clouds_description_DE);
}
if (clouds_description == "Yarım yamalak yağmur mümkün")
{
string cloud_description_DE = "Hafif yağmur mümkün";
WriteLine("bulutların_açıklaması");WriteLine(bulutların_açıklaması_DE);
dom.GetObject("W_description").State(clouds_description_DE);
}
if (clouds_description == "Orta şiddette yağmur")
{
string cloud_description_DE = "Orta şiddette yağış";
WriteLine("bulutların_açıklaması");WriteLine(bulutların_açıklaması_DE);
dom.GetObject("W_description").State(clouds_description_DE);
}
Bulut örtüsü
Oluşturulacak değişken:
W_clouds
türün sicim
Kod:
! Bulut örtüsü
konum = 0;
posStart = 'bulut örtüsü":';
posEnd = ',"gibi hissettiriyor';
posValueStart = stdout.Find(posStart) + posStart.Length();
posValueEnd = stdout.Find(posEnd)-posValueStart;
string cloud_data = stdout.Substr(posValueStart, posValueEnd);
WriteLine("bulutlar_verileri");WriteLine(bulutlar_verileri);
dom.GetObject("W_clouds").State(clouds_data);
Yağmur tahmini
Oluşturulacak değişken:
W_Yağış
türün sicim
Kod:
! Yağmur tahmini
varks;
konum = 0;
posStart = 'yağış':';
posEnd = ',"nem';
posValueStart = stdout.Find(posStart) + posStart.Length();
posValueEnd = stdout.Find(posEnd)-posValueStart;
string precip = stdout.Substr(posValueStart, posValueEnd);
WriteLine("Yağmur");WriteLine(yağış);
dom.GetObject("W_Precipitation").State(precip);
Yükseklik – Azimut
Senaryoyu yazan: radyo deniz feneri yazılı ve Homematic Forumu Bağlantılı konunun 10. sayfasından alınmıştır.
İki sistem değişkeni oluşturulmalıdır:
güneş_yüksekliği n
türün Sayısun_azimuth
türün Sayı
Neden sadece 4 dakika? Çünkü Dünya, Güneş etrafındaki 360 derecelik dönüşünü 24 saatte bir tamamlar. 360° / 24 saat = saatte 15°, 60 dakika / 15° = 4 dakikaya karşılık gelir.
Güncelleme aralığının 4 dakikadan farklı olması koşuluyla, 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 sayıgüneş_yüksekliği
türün sayı
Kod:
! Enlemi ediningerçek phi = system.Latitude();
fi = 0,017453292 * fi;
! Radyana dönüştürme
! Taylor serisiyle sin_phi ve cos_phi'yi hesaplayıngerçek sıcaklık = phi * phi;
gerçek sin_phi =phi * ((sıcaklık * sıcaklık * 0,0083334) +1,0 - (sıcaklık * 0,1666667));
! sinüs yaklaşımı
gerçek cos_phi = (sıcaklık *sıcaklık *0,0416667) + 1,0 - (sıcaklık * 0,5);
! kosinüs yaklaşımı
! Güneş zamanının hesaplanması, tüm zamanlar dakika cinsindentamsayı time_min = system.Date("%M").ToInteger() + 60system.Date("%H").ToInteger(); day_min'in tamsayı başlangıcı = system.SunriseTime("%M").ToInteger() + 60system.SunriseTime("%H").ToInteger();
day_min tamsayı sonu = system.SunsetTime("%M").ToInteger() + 60* system.SunsetTime("%H").ToInteger();
tamsayı güneş zamanı = time_min + 720 - 0,5 *(day_min başlangıcı + day_min sonu);
if (güneş zamanı > 1440) {güneş zamanı = güneş zamanı -1440;}
if (güneş zamanı < 1) {güneş zamanı = 1440 + güneş zamanı;} boolean öğleden sonra =false; if (solartime > 720) {solartime =solartime - 720; öğleden sonra = doğru; }
else {güneş zamanı =720 -güneş zamanı;}
! sin_tau ve cos_tau hesaplamasıgerçek tau = 0,00436332313 * güneş zamanı; ! 15/60 * pi /180 * güneş zamanı [0 < tau < pi ] if (tau < 1,570796327) {temp = tau * tau; gerçek sin_tau =tau * ((sıcaklık * sıcaklık * 0,0083334) +1,0 - (sıcaklık *0,1666667)); tau= 1,570796327 - tau; sıcaklık = tau * tau; gerçek cos_tau =tau * ((sıcaklık * sıcaklık * 0,0083334) +1,0 - (sıcaklık * 0,1666667));} else {gerçek tau1 =3,141592654 - tau; sıcaklık = tau1 * tau1; gerçek sin_tau =tau1 * ((sıcaklık * sıcaklık * 0,0083334) +1,0 - (sıcaklık * 0,1666667)); tau = tau - 1,570796327; sıcaklık = tau * tau; gerçek cos_tau = (tau) (-1,0) ((sıcaklık * sıcaklık * 0,0083334) +1,0 - (sıcaklık * 0,1666667));}
! Hesaplama deltasıtamsayı gün sayısı = system.Date("%j").ToInteger(); gün numarası = gün numarası +10; if (daynumber > 365) {daynumber = daynumber - 365;}
if (gün sayısı < 92) {gerçek gün = 0,0172142 * gün sayısı;temp = gün * gün; gerçek delta = (-0,410152) *((temp *temp *0,041666) + 1,0 - (temp * 0,5));} if ((gün numarası >91) && (gün numarası < 184)) {gün numarası = 183 - gün sayı; gerçek gün = 0,0172142 *gün sayısı; sıcaklık = gün * gün; gerçek delta = (0,410152) *((temp *temp *0,041666) + 1,0 - (temp * 0,5));} if ((gün numarası >183) && (gün numarası < 275)) {gün numarası = gün numarası - 183 ; gerçek gün = 0,0172142 *gün sayısı; sıcaklık = gün * gün; gerçek delta = (0,410152) *((temp *temp *0,041666) + 1,0 - (temp * 0,5));} if ((gün numarası >274) && (gün numarası < 366)) {gün numarası = 365 - gün numarası ; gerçek gün = 0,0172142 *gün sayısı; sıcaklık = gün * gün; gerçek delta = (-0,410152) *((sıcaklık *sıcaklık *0,041666) + 1,0 - (sıcaklık * 0,5));}! hesaplama sin_delta, cos_delta
sıcaklık = delta * delta; gerçek sin_delta =delta * ((sıcaklık * sıcaklık * 0,0083334) +1,0 - (sıcaklık * 0,1666667)); !sinüs yaklaşımı gerçek cos_delta = (temp *temp *0,0416667) + 1,0 - (temp * 0,5);
! kosinüs yaklaşımı
! Tan'ın parçalı doğrusallaştırılmasıyla tan_delta'nın hesaplanmasıboolean vssign = doğru; if (delta< 0.0) {vsign = false; delta = (-1,0) *delta;} gerçek tan_delta = 1,0233 * delta; 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ıgerçek günah_yüksekliği = (sin_phi * sin_delta) +( cos_phi * cos_delta * cos_tau);
temp = sin_elevation * sin_elevation;
gerçek güneş_yüksekliği = günah_yüksekliği * (1,0 + (0,1666667 * sıcaklık) + (0,075 * sıcaklık * sıcaklık));
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_azimuth = sin_tau / payda;
! Arktanın parçalı doğrusallaştırılmasıyla sun_azimut'un hesaplanmasıboole işareti = doğru; if (tan_azimuth < 0,0) { işaret = yanlış; tan_azimuth = (-1,0)*tan_azimuth;} gerçek sun_azimuth = 0,97723 * tan_azimuth; if ((tan_azimuth >=0,2679)&&(tan_azimuth < 0,5774)) {sun_azimuth = (0,84588* tan_azimuth) + 0,035189;} if ((tan_azimuth >= 0,5774)&&(tan_azimuth < 1,0)) {sun_azimuth = (0,6195* tan_azimuth) + 0,1659;} if ((tan_azimuth >= 1,0)&&(tan_azimuth < 1,3032)) {sun_azimuth = (0,43173* tan_azimuth) + 0,3537;} if ((tan_azimuth >= 1,3032)&&(tan_azimuth < 1,7321)) {sun_azimuth = ( 0,3052* tan_azimuth) + 0,51856;} if ((tan_azimuth >= 1,7321)&&(tan_azimuth < 2,4142)) {sun_azimuth = (0,123* tan_azimuth) + 0,88115;} if ((tan_azimuth >= 2,9459)&(tan_azimuth < 3,73) 21)) {sun_azimuth = (0,083312* tan_azimuth) + 0,9981;} if ((tan_azimuth >= 3,7321)&&(tan_azimuth < 5,0)) {sun_azimuth = (0,050792* tan_azimuth) + 1,1194;} if ((tan_azimuth >= 5,0)&&(tan_azimuth <7,0)) {sun_azimuth = (0,02775* tan_azimuth) + 1,23465;} if ((tan_azimuth >= 7,0 )&&(tan_azimuth <12,0)) {sun_azimuth = (0,01175117* tan_azimuth) + 1,346641;} if ((tan_azimuth >= 12,0) )&&(tan_azimuth <20,0)) {sun_azimuth = (0,004147854* tan_azimuth) + 1,437881;} if (( tan_azimuth >= 20,0)&&(tan_azimuth <50,0)) {sun_azimuth = (0,0009987* tan_azimuth) + 1,5008639;} if ( tan_azimuth >= 50,0) {sun_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) {sun_azimuth = sun_azimuth + 180.0;}
! Günlük düzeltme ve değerleri sistem değişkenlerine kaydetmeif (öğleden sonra == false)
{sun_azimuth = 180,0 - sun_azimuth; güneş zamanı = 720 - güneş zamanı;}
başka
{sun_azimuth = sun_azimuth + 180.0;güneş zamanı = 720 + güneş zamanı;}
güneş_azimut = 0,1 ((sun_azimuth10.0) .ToInteger());
güneş_yüksekliği = 0,1 ((sun_elevation10.0) .ToInteger());
dom.GetObject("sonne_elevation").State(sonne_elevation);
dom.GetObject("sun_azimuth").State(sun_azimuth);