Pereiti prie turinio

"SmartHome" orų duomenys

Skaitymo laikas 9 minutės

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
Programa - W_Data - Orų duomenų užklausa

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ėti
  • W_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 Numeris
  • sun_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:

Programa - Aukščio / azimuto nustatymas

Kintamieji, kuriuos reikia sukurti:

  • sun_azimutas tipo mokėti
  • sun_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ėmis
sveikasis 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čiavimas
realus 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 delta
integer 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 tan
boolean 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čiavimas
realus 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 kintamuosiuose
if (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);

Parašykite komentarą

El. pašto adresas nebus skelbiamas. Būtini laukeliai pažymėti *

lt_LTLithuanian
We've detected you might be speaking a different language. Do you want to change to:
en_US English
de_DE German
en_US English
fr_FR French
sv_SE Swedish
es_ES Spanish
pt_PT Portuguese
it_IT Italian
nl_NL Dutch
nb_NO Norwegian
fi Finnish
da_DK Danish
cs_CZ Czech
hu_HU Hungarian
el Greek
ru_RU Russian
tr_TR Turkish
ja Japanese
lt_LT Lithuanian
lv Latvian
sl_SI Slovenian
sk_SK Slovak
Close and do not switch language