Turinys
Atnaujinta - sausio 20, 2023
Įrašyti orų duomenis naudojant "SmartHome" ir juos vizualizuoti mobiliajame telefone ar planšetiniame kompiuteryje naudojant "AIO Creator" paprastai nėra būtina, tačiau tai yra naudinga.
Internetinė orų tarnyba weatherstack.com siūlo iki 250 užklausų per mėnesį - ribotai nemokamai. Jei tikrai norite gauti naujausius orų duomenis, turėtumėte rinktis standartinį paketą. 50 000 užklausų leidžia minutės intervalais.
Kiti siūlomi paketai pirmiausia skiriasi užklausų skaičiumi ir 7 arba 14 dienų orų prognoze.
Į visus paketus įtraukti šie duomenys:
- Geografinė ilguma ir platuma
- Vieta
- Regionas
- Šalis
- Laiko juosta
- Vietinis laikas ir data
- UTC poslinkis
- Dabartinis duomenų rinkimo laikas
- Oro temperatūra
- Orų aprašymas
- Vėjo greitis
- Vėjo kryptis skaitinė / geografinė
- Oro slėgis
- Lietaus krituliai
- Drėgmė
- Debesų tankis
- Atvėsinimo temperatūra
- UV indeksas
- Peržiūrėti
Registruojantis, nepriklausomai nuo paketo, reikia pateikti įprastą informaciją ir mokėjimo duomenis. Metinei prenumeratai, o ne mėnesinei, taikoma 20% nuolaida.
Sėkmingai atlikę šią procedūrą, gausite vadinamąjį API kodą (Application Programming Interface), kurį nukopijuokite į užklausos url. Atsakymas yra XML išvestis, kurioje yra pirmiau minėtos duomenų kategorijos ir reikšmės. Duomenys išgaunami naudojant atitinkamus scenarijus ir saugomi kintamuosiuose. Vėliau juos galima naudoti vizualizavimui "AIO Creator" programoje.
Išsamus visų galimų XML išvesties parametrų, taip pat neprivalomų užklausos parinkčių, įtrauktų į brangesnius paketus, aprašymas, įskaitant įvairius kodo pavyzdžius, čia galima peržiūrėti.
Programa
Dėl didelio duomenų kiekio programa yra gana plati. Todėl atskiri skyriai čia išvardyti iš eilės. Visas kodo atkarpas galiausiai galima sujungti į vieną programą.
Be pirmiau minėtų duomenų, programoje apskaičiuojami papildomi duomenys, kuriuos galima vizualizuoti:
- Saulės aukštis ir azimutas
- Apsaugos nuo šviesos faktoriaus rekomendacija

Programos antraštė
Antraštėje pateikiamas tik URL adresas, kurį reikia papildyti API raktu, čia nurodytu kaip xxx, ir vieta (paprastu tekstu arba kableliu atskirta geografine ilguma ir platuma, pažymėta yyy):
var url = "http://api.weatherstack.com/current?access_key=xxx&query=yyy";
JAV į DE laiko formato konvertavimas
Kadangi nemokamame ir standartiniame tarife nėra galimybės pasirinkti rodymo kalbos, todėl galimas tik AM / PM laiko formatas, jis konvertuojamas į 24 valandų formatą.
Kuriamas kintamasis:
W_LDU
tipo eilutė
Kodas:
! AM/PM konvertavimas - Išsaugojimas W_LDU
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':"';
sveikasis skaičius word_length = word.Length();
integer word_position = wetter_xml.Find(word);
string data = wetter_xml.Substr((word_position + word_laenge), 5);
sveikasis skaičius word_position = data.Find(word);
data = data.Substr(0, (word_position -2));
string word = 'observation_time':"';
sveikasis skaičius word_length = word.Length();
integer word_position = wetter_xml.Find(word);
string PM = wetter_xml.Substr((word_position + word_laenge +6), 2);
sveikasis skaičius word_position = PM.Find(word);
PM = PM.Substr(0, (word_position -2));
WriteLine("AM/PM");WriteLine(PM);
string word = 'observation_time':"';
sveikasis skaičius word_length = word.Length();
integer word_position = wetter_xml.Find(word);
string HH = wetter_xml.Substr((word_position + word_laenge) + 1, 1);
sveikasis skaičius word_position = HH.Find(word);
HH = HH.Substr(0, (word_position -2));
WriteLine("HH");WriteLine(HH);
string word = 'observation_time':"';
sveikasis skaičius word_length = word.Length();
integer word_position = wetter_xml.Find(word);
eilutė MM = wetter_xml.Substr((word_position + word_laenge) +3, 2);
sveikasis skaičius word_position = MM.Find(word);
MM = MM.Substr(0, (word_position -2));
WriteLine("MM");WriteLine(MM);
jei (PM == "PM")
{
sveikasis skaičius Diff = 12;
WriteLine("Diff");WriteLine(Diff);
var HH_i = HH.ToInteger();
sveikasis skaičius H = (HH_i + Diff);
WriteLine("HHi + Diff is = H)");WriteLine(H);
eilutė HHMM = H #":";
WriteLine("H_+ : ");WriteLine(HHMM);
eilutė HM = HHMM # MM;
WriteLine("HH_+12+MM");WriteLine(HM);
dom.GetObject("W_LDU").State(HM);
}
kitaip
{
WriteLine("LDU_daten");WriteLine(daten);
dom.GetObject("W_LDU").State(data);
}
Šalis - Šalies kodas
Šalies kodas taip pat išvedamas anglų kalba ir čia konvertuojamas į tarptautinį kodą. Jei reikia, pagal šį šabloną galima pridėti daugiau šalių. Dabartinė šalis automatiškai nustatoma pagal Weatherstack pasirinktą miestą.
Kuriamas kintamasis:
W_country_code
tipo eilutė
Kodas:
! Šalies_kodas
pos = 0;
posStart = "country":"';
posEnd = '", "regionas";
posValueStart = stdout.Find(posStart) + posStart.Length();
posValueEnd = stdout.Find(posEnd)-posValueStart;
string country_code = stdout.Substr(posValueStart, posValueEnd);
jei (šalies kodas == "Vokietija")
{
string country_code = "DE";
}
jei (country_code == "Sweden")
{
string country_code = "SE";
}
WriteLine("country_code");WriteLine(country_code);
dom.GetObject("W_country_code").State(country_code);
Regionas
Regionas reiškia, pavyzdžiui, "Žemutinę Saksoniją" Vokietijoje ir taip pat nustatomas automatiškai "Weatherstack".
Kuriamas kintamasis:
W_regionas
tipo eilutė
Kodas:
! Regionas
pos = 0;
posStart = 'region":"';
posEnd = '", "lat";
posValueStart = stdout.Find(posStart) + posStart.Length();
posValueEnd = stdout.Find(posEnd)-posValueStart;
string region = stdout.Substr(posValueStart, posValueEnd);
WriteLine("regionas");WriteLine(regionas);
dom.GetObject("W_region").State(region);
Miestas
Įvedant miestą, "Weatherstack" automatiškai nustato atitinkamus geografinės ilgumos ir platumos duomenis, o miestas nustatomas pagal įvestus geoduomenis.
Kuriamas kintamasis:
W_city_name
tipo eilutė
Kodas:
! City_name
pos = 0;
posStart = 'name':"';
posEnd = '", "country";
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);
Platuma - geogr. Platuma
Kuriamas kintamasis:
W_Lat
tipo eilutė
Kodas:
! Lat
pos = 0;
posStart = "query": "Lat";
posEnd = 'ir 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);
Geografinė ilguma - geografinė ilguma
Kuriamas kintamasis:
W_Lon
tipo eilutė
Kodas:
! Lon
pos = 0;
posStart = 'ir Lon';
posEnd = '", "language";
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);
Peržiūrėti - matomumas
Kuriamas kintamasis:
W_vis
tipo eilutė
Kodas:
! Matomumas
pos = 0;
posStart = "matomumas":';
posEnd = ', "is_day";
posValueStart = stdout.Find(posStart) + posStart.Length();
posValueEnd = stdout.Find(posEnd)-posValueStart;
string vis_daten = stdout.Substr(posValueStart, posValueEnd);
WriteLine("vis_Daten");WriteLine(vis_daten);
dom.GetObject("W_vis").State(vis_data);
Oro slėgis ir tendencija
Be pateikto oro slėgio, šiame scenarijuje oro slėgio tendencija nustatoma išsaugant išmatuotą vertę kaip "dabartinę" ir ankstesnę vertę kaip "seną". Abi vertės lyginamos tarpusavyje ir taip gaunama tendencija.
Kuriamas kintamasis:
W_air_pressure_act
tipo eilutėW_air_pressure_old
tipo eilutėW_Airinio slėgio tendencija
tipo eilutė
Kodas:
! Spausdinti
var W_mb_alt;
var W_mb_akt;
pos = 0;
posStart = "slėgis":";
posEnd = ', "precip";
posValueStart = stdout.Find(posStart) + posStart.Length();
posValueEnd = stdout.Find(posEnd)-posValueStart;
data = stdout.Substr(posValueStart, posValueEnd);WriteLine(data);
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);
jei (W_mb_akt > W_mb_alt)
{
dom.GetObject("W_air_pressure_old").State(W_mb_akt);
dom.GetObject("W_Air pressure trend").State("S");
}
jei (W_mb_akt < W_mb_alt)
{
dom.GetObject("W_air_pressure_old").State(W_mb_akt);
dom.GetObject("W_Air pressure trend").State("F");
}
jei (W_mb_akt == W_mb_alt)
{
dom.GetObject("W_air_pressure_old").State(W_mb_akt);
dom.GetObject("W_Air pressure trend").State("N");
}
Atvėsinimo temperatūra
Vėjo šaltis priklauso nuo vėjo greičio ir temperatūros. Vandens sporto šakose papildomas veiksnys (į kurį čia neatsižvelgiama) yra garuojančio vėsinimo dėl purslų poveikis. Atšalimas reiškia suvokiamą temperatūrą, kuri labai šaltoje aplinkoje gali būti iki pusantro karto didesnė už neigiamą temperatūrą, palyginti su faktine, ir gali greitai sukelti nušalimus.
Kuriamas kintamasis:
W_chill
tipo eilutė
Kodas:
! 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);
Apsaugos nuo ultravioletinių spindulių ir šviesos rekomendacija
Pagal UV indeksą nustatomas UV spindulių poveikis, todėl rekomenduojama naudoti apsaugos nuo šviesos priemones.
Kuriamas kintamasis:
W_UV
tipo eilutėW_LSF
tipo eilutė
Kodas:
! UV
pos = 0;
posStart = 'uv_index":';
posEnd = ', "matomumas";
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));
realus skaičius = data.ToInteger();
WriteLine("UV skaičius");WriteLine(skaičius);
eilutė LSF = "";
jei (skaičius = "3") && (skaičius = "6") && (skaičius = "8") && (number = "10") {LSF = "PRIVALOMA" ;}
dom.GetObject("W_LSF").State(LSF);WriteLine("LSF");WriteLine(LSF);
Vėjo greitis
Kuriamas kintamasis:
W_WdSpd
tipo mokėti
Kodas:
! Vėjo greitis
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);
Vėjo greitis - Konversijos
Kadangi skirtinguose regionuose, šalyse ir įvairiose srityse vėjo greitis matuojamas skirtingai, čia pateikiamas m/s perskaičiavimas į km/h, mazgus ir Boforto skalę.
Kuriamas kintamasis:
W_Wind_kmh
tipo mokėtiW_Wind_knh
tipo mokėti- W_Wind_Bft tipo mokėti
Kodas:
realus 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);
realus 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);
jei (x < 0,30)
{
dom.GetObject("W_Wind_Bft").State(0);
}
jei ((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);
}
jei (x > 32,6)
{
dom.GetObject("W_Wind_Bft").State(12);
}
Vėjo greitis - nušalimų rizika
Keliaujantiems labai šaltose zonose, jei dėl vėjo greičio ir numanomos lauko temperatūros kyla nušalimų pavojus, jei nenaudojami tinkami apsauginiai drabužiai, šiame scenarijuje pateikiamas įspėjimas.
Skaičiavimai grindžiami prielaida, kad odos temperatūra gali nukristi iki -4,8 °C, jei oda yra 30 minučių ar trumpiau, o tai reiškia, kad nušalimai pasireiškia 5% žmonių.
Kuriamas kintamasis:
- W_Wind_danger tipo boolean
Kodas:
jei ((((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);
}
kitaip
{
dom.GetObject("W_Wind_Danger").State(false);
}
Vėjo kryptis (geografinė)
Kuriamas kintamasis:
W_wind_dir
tipo eilutė
Kodas:
! Geografinė vėjo kryptis
pos = 0;
posStart = 'wind_dir":"';
posEnd = '", "slėgis";
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);
Vėjo kryptis (skaitinė)
Kuriamas kintamasis:
W_Wind_rchtg
tipo eilutė
Kodas:
! Vėjo krypties skaitinis
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);
Debesų danga
"Weatherstack" debesuotumą taip pat pateikia anglų kalba, todėl čia pateikiamas vertimas į vokiečių kalbą.
Kuriamas kintamasis:
W_description
tipo eilutė
Kodas:
! Debesų dangos aprašymas
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);
jei (clouds_description == "Debesuota")
{
string clouds_description_DE = "Debesuota";
WriteLine("clouds_description_DE");WriteLine(clouds_description_DE);
dom.GetObject("W_description").State(clouds_description_DE);
}
jei (clouds_description == "Lengvas lietus")
{
string clouds_description_EN = "Lengvas lietus";
WriteLine("clouds_description_DE");WriteLine(clouds_description_DE);
dom.GetObject("W_description").State(clouds_description_DE);
}
if (clouds_description == "Lengvas lietus")
{
string clouds_description_EN = "Lengvas lietus";
WriteLine("clouds_description_DE");WriteLine(clouds_description_DE);
dom.GetObject("W_description").State(clouds_description_DE);
}
jei (clouds_description == "Lengva dulksna")
{
string clouds_description_DE = "Dulksna";
WriteLine("clouds_description_DE");WriteLine(clouds_description_DE);
dom.GetObject("W_description").State(clouds_description_DE);
}
jei (clouds_description == "Mis")
{
string clouds_description_DE = "haze";
WriteLine("clouds_description_DE");WriteLine(clouds_description_DE);
dom.GetObject("W_description").State(clouds_description_DE);
}
jei (clouds_description == "Lengvos sniego liūtys")
{
string clouds_description_EN = "Lengvos sniego liūtys";
WriteLine("clouds_description_DE");WriteLine(clouds_description_DE);
dom.GetObject("W_description").State(clouds_description_DE);
}
jei (clouds_description == "Sunny")
{
string clouds_description_DE = "Linksmas";
WriteLine("clouds_description_DE");WriteLine(clouds_description_DE);
dom.GetObject("W_description").State(clouds_description_DE);
}
jei (clouds_description == "Overcast")
{
string clouds_description_DE = "Debesuota";
WriteLine("clouds_description");WriteLine(clouds_description_EN);
dom.GetObject("W_description").State(clouds_description_DE);
}
jei (clouds_description == "Iš dalies debesuota")
{
string clouds_description_DE = "Iš dalies debesuota";
WriteLine("clouds_description_DE");WriteLine(clouds_description_DE);
dom.GetObject("W_description").State(clouds_description_DE);
}
jei (clouds_description == "Clear")
{
string clouds_description_DE = "Clear";
WriteLine("clouds_description_DE");WriteLine(clouds_description_DE);
dom.GetObject("W_description").State(clouds_description_DE);
}
jei (clouds_description == "Fog")
{
string clouds_description_DE = "Migla";
WriteLine("clouds_description_DE");WriteLine(clouds_description_DE);
dom.GetObject("W_description").State(clouds_description_DE);
}
if (clouds_description == "Galimas nestiprus lietus")
{
string clouds_description_EN = "Galimas nedidelis lietus";
WriteLine("clouds_description");WriteLine(clouds_description_EN);
dom.GetObject("W_description").State(clouds_description_DE);
}
jei (clouds_description == "Vidutinis lietus")
{
string clouds_description_DE = "Vidutinio intensyvumo krituliai";
WriteLine("clouds_description");WriteLine(clouds_description_EN);
dom.GetObject("W_description").State(clouds_description_DE);
}
Debesų danga
Kuriamas kintamasis:
W_clouds
tipo eilutė
Kodas:
! Debesų danga
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);
Lietaus prognozė
Kuriamas kintamasis:
W_Precipitation
tipo eilutė
Kodas:
! Prognozuojamas lietus
var x;
pos = 0;
posStart = 'precip":';
posEnd = ', "humidity";
posValueStart = stdout.Find(posStart) + posStart.Length();
posValueEnd = stdout.Find(posEnd)-posValueStart;
string precip = stdout.Substr(posValueStart, posValueEnd);
WriteLine("Krituliai");WriteLine(precip);
dom.GetObject("W_Precipitation").State(precip);
Aukštis - Azimutas
Scenarijų parašė radijo švyturys ir pateikta Homematic forumas puslapyje 10 iš susietos temos.
Turi būti sukurti du sistemos kintamieji:
sun_elevation
tipo Numerissun_azimutas
tipo Numeris
Kodėl 4 minutės? Todėl, kad Žemė apsuka 360° ratą aplink Saulę kartą per 24 valandas. 360° / 24 val. = 15° per valandą, t. y. 60 minučių / 15° = 4 minutės.
Šis scenarijus turėtų būti naudojamas nepriklausomai nuo pirmiau nurodytų scenarijų arba susijusios programos, jei atnaujinimo intervalas skiriasi nuo 4 minučių.
Programa:

Kintamieji, kuriuos reikia sukurti:
sun_azimutas
tipo mokėtisun_elevation
tipo mokėti
Kodas:
! Gauti platumąrealus phi = system.Latitude();
phi = 0,017453292 * phi;
! Konversija į radianais
! apskaičiuoti sin_phi ir cos_phi naudojant Tayloro serijąreal temp = phi * phi;
realus sin_phi =phi * ((temp * temp * 0,0083334) +1,0 - (temp * 0,16666667));
! sinusoidinė aproksimacija
real cos_phi = (temp *temp *0,0416667) + 1,0 - (temp * 0,5);
! kosinuso aproksimacija
! Saulės laiko apskaičiavimas, visi laikai minutėmissveikasis skaičius 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;}
jei (suntime 720) {suntime =suntime - 720; afternoon = true; }
else {sonnenzeit =720 -sonnenzeit;}
! Sin_tau ir cos_tau skaičiavimasrealus tau = 0.00436332313 * Saulės laikas; ! 15/60 * pi /180 * saulės laikas [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));}
! Apskaičiavimas deltainteger tageszahl = system.Date("%j").ToInteger(); tageszahl = tageszahl +10; if (tageszahl > 365) {tageszahl = tageszahl - 365;}
if (tageszahl 91) && (tageszahl 183) && (number of days 274) && (tageszahl < 366)) {dienų skaičius = 365 - dienų skaičius; tikroji diena = 0,0172142 *dienų skaičius; temp = diena * diena; tikroji delta = (-0,410152) *((temp *temp *0,041666) + 1,0 - (temp * 0,5));}! skaičiavimas sin_delta, cos_delta
temp = delta * delta; real sin_delta =delta * ((temp * temp * 0,0083334) +1,0 - (temp * 0,1666667)); !sinusinė aproksimacija real cos_delta = (temp *temp *0,0416667) + 1,0 - (temp * 0,5);
! kosinuso aproksimacija
! Skaičiavimas tan_delta su gabaliniu linijiniu tanboolean vsign = true; if (delta=0,2618) {tan_delta = (1,1822*delta) - 0,0416;}
if (vsign == false) {tan_delta = (-1.0) * tan_delta;}
! Sin_elevacijos ir tan_azimuto apskaičiavimasrealus sin_elevation = (sin_phi * sin_delta) +( cos_phi * cos_delta * cos_tau);
temp = sin_aukštis * sin_aukštis;
realus sun_elevation = sin_elevation * (1,0 + (0,1666667 * temp) + (0,075 * temp * temp));
sun_elevation = 57.29577951 * sun_elevation;
realusis vardiklis = (sin_phi*cos_tau) - (cos_phi * tan_delta);
if (vardiklis < 0,0) {boolean plus180 = true;} real tan_azimut = sin_tau / vardiklis;
! Saulės_azimuto skaičiavimas, taikant arktano linijinį skaičiavimą pagal gabalinį metodą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,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;}
! Išsaugoti dienos laiko korekciją ir vertes sistemos kintamuosiuoseif (afternoon == false)
{sonne_azimut = 180.0 - sonne_azimut; sonnenzeit = 720 - sonnenzeit;}
kitaip
{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);