Skoči na vsebino

Vremenski podatki SmartHome

Vsebina

Čas branja 9 minute

Posodobljeno - 20. januar 2023

Beleženje vremenskih podatkov s programom SmartHome in njihova vizualizacija na mobilnem telefonu ali tabličnem računalniku prek programa AIO Creator na splošno nista nujna, vendar ju je dobro imeti.

Spletna vremenska služba weatherstack.com ponuja do 250 poizvedb na mesec - v omejenem obsegu brezplačno. Če res želite najnovejše vremenske podatke, izberite standardni paket. 50.000 poizvedb omogoča minutne intervale.

Drugi paketi, ki so na voljo, se razlikujejo predvsem po številu poizvedb in vremenski napovedi za 7 ali 14 dni.

V vseh paketih so vključeni naslednji podatki:

  • Geografska dolžina in širina
  • Lokacija
  • Regija
  • Država
  • Časovni pas
  • Lokalni čas in datum
  • Odmik UTC
  • Trenutni čas zbiranja podatkov
  • Temperatura zraka
  • Opis vremena
  • Hitrost vetra
  • Smer vetra numerično/geografsko
  • Zračni tlak
  • Padavine
  • Vlaga
  • Gostota oblakov
  • Temperatura hlajenja
  • Indeks UV
  • Oglejte si

Ob registraciji, ne glede na paket, so potrebni običajni podatki in podrobnosti o plačilu. Letna naročnina je v nasprotju z mesečno naročnino znižana z 20%.

Ko je ta postopek uspešno zaključen, prejmete tako imenovano kodo API (Application Programming Interface), ki jo kopirate v url poizvedbe. Odziv je izpis XML, ki vsebuje zgoraj navedene podatkovne kategorije in vrednosti. Podatki se pridobijo z uporabo ustreznih skript in shranijo v spremenljivke. Te lahko nato uporabite za vizualizacijo v programu AIO Creator.

Podroben opis vseh možnih parametrov v izpisu XML in izbirnih možnosti poizvedb, ki so vključene v dražje pakete, vključno z različnimi primeri kode, tukaj vidno.

Program

Program je zaradi velike količine podatkov precej obsežen. Posamezni deli so zato tukaj navedeni zaporedno. Vse dele kode je mogoče na koncu združiti v en sam program.

Poleg zgoraj navedenih podatkov se v programu izračunajo dodatni podatki, ki so na voljo za vizualizacijo:

  • Višina in azimut sonca
  • Priporočilo faktorja svetlobne zaščite
Program - W_Data - Poizvedba po vremenskih podatkih

Naslov programa

Glava vsebuje samo naslov URL, ki ga je treba dopolniti s ključem API, tukaj prikazanim kot xxx, in lokacijo (v navadnem besedilu ali ločeno z vejico, kot zemljepisna dolžina in širina, označena kot yyy):

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

Pretvorba ZDA v DE časovno obliko

Ker pri brezplačni in standardni tarifi ni možnosti izbire jezika prikaza in je zato na voljo le format časa AM / PM, se ta pretvori v 24-urni format.

Spremenljivka, ki jo je treba ustvariti:

  • W_LDU vrste niz

Koda:

! Pretvorba AM/PM - Shranjevanje v 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':"';
celo število beseda_dolžina = beseda.Dolžina();
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':"';
celo število beseda_dolžina = beseda.Dolžina();
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':"';
celo število beseda_dolžina = beseda.Dolžina();
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':"';
celo število beseda_dolžina = beseda.Dolžina();
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);

če (PM == "PM")
{
celo število Diff = 12;
WriteLine("Razlika");WriteLine(Razlika);
var HH_i = HH.ToInteger();
celo število H = (HH_i + Diff);
WriteLine("HHi + Diff is = H)");WriteLine(H);
niz HHMM = H #":";
WriteLine("H_+ : ");WriteLine(HHMM);
niz HM = HHMM # MM;
WriteLine("HH_+12+MM");WriteLine(HM);
dom.GetObject("W_LDU").State(HM);
}
drugače
{
WriteLine("LDU_daten");WriteLine(daten);
dom.GetObject("W_LDU").State(data);
}


Država - koda države

Koda države se izpiše tudi v angleščini in se tukaj pretvori v mednarodno kodo. Po potrebi lahko po tem vzorcu dodate še druge države. Trenutna država se samodejno določi glede na mesto, ki ga je izbral Weatherstack.

Spremenljivka, ki jo je treba ustvariti:

W_country_code vrste niz

Koda:

! Country_code

pos = 0;
posStart = 'country':"';
posEnd = '", "regija";
posValueStart = stdout.Find(posStart) + posStart.Length();
posValueEnd = stdout.Find(posEnd)-posValueStart;
string country_code = stdout.Substr(posValueStart, posValueEnd);

če (koda države == "Nemčija")
{
string country_code = "DE";
}
če (šifra države == "Švedska")
{
string country_code = "SE";
}

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


Regija

Regija označuje na primer "Spodnjo Saško" v Nemčiji in je prav tako določena samodejno s programom Weatherstack.

Spremenljivka, ki jo je treba ustvariti:

  • W_regija vrste niz

Koda:

! Regija

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


Mesto

Pri vnosu mesta Weatherstack samodejno določi ustrezne podatke o zemljepisni dolžini in širini, mesto pa se določi na podlagi vnesenih geopodatkov.

Spremenljivka, ki jo je treba ustvariti:

  • W_city_name vrste niz

Koda:

! Ime_mesta

pos = 0;
posStart = 'ime':"';
posEnd = '", "country";
posValueStart = stdout.Find(posStart) + posStart.Length();
posValueEnd = stdout.Find(posEnd)-posValueStart;
string city_name = stdout.Substr(posValueStart, posValueEnd);
WriteLine("ime_mesta");WriteLine(ime_mesta);
dom.GetObject("W_city_name").State(city_name);


Zemljepisna širina - geogr. Latitude

Spremenljivka, ki jo je treba ustvariti:

  • W_Lat vrste niz

Koda:

! Lat

pos = 0;
posStart = "query": "Lat";
posEnd = 'in 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);


Zemljepisna dolžina - zemljepisna dolžina

Spremenljivka, ki jo je treba ustvariti:

  • W_Lon vrste niz

Koda:

! Lon

pos = 0;
posStart = 'in Lon';
posEnd = '", "jezik";
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);


Pogled - vidljivost

Spremenljivka, ki jo je treba ustvariti:

  • W_vis vrste niz

Koda:

! Vidljivost

pos = 0;
posStart = 'vidljivost':';
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);


Zračni tlak in težnja

Poleg zagotovljenega zračnega tlaka se v tej skripti določi tudi trend zračnega tlaka, tako da se izmerjena vrednost shrani kot "trenutna", prejšnja vrednost pa kot "stara". Obe vrednosti se primerjata med seboj in tako dobimo trend.

Spremenljivka, ki jo je treba ustvariti:

  • W_air_pressure_act vrste niz
  • W_air_pressure_old vrste niz
  • W_Air pressure trend vrste niz

Koda:

! Natisni

var W_mb_alt;
var W_mb_akt;
pos = 0;
posStart = 'tlak':';
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);

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

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

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


Temperatura hlajenja

Hladnost vetra je odvisna od hitrosti vetra in temperature. Pri vodnih športih je dodatni dejavnik tudi učinek hlajenja zaradi izhlapevanja zaradi pršenja (ki ga tukaj ne upoštevamo). Hlad se nanaša na zaznano temperaturo, ki je v zelo mrzlih okoljih lahko tudi do poldrugi krat višja od negativne temperature v primerjavi z dejansko temperaturo in lahko hitro privede do omrzlin.

Spremenljivka, ki jo je treba ustvariti:

  • W_chill vrste niz

Koda:

! 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);


Priporočilo za zaščito pred UV žarki in svetlobo

Izpostavljenost UV sevanju, določena na podlagi UV indeksa, privede do priporočila za morebitno uporabo potrebnih ukrepov za zaščito pred svetlobo.

Spremenljivka, ki jo je treba ustvariti:

  • W_UV vrste niz
  • W_LSF vrste niz

Koda:

! UV

pos = 0;
posStart = 'uv_index':';
posEnd = ', "vidnost";
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));
realno število = data.ToInteger();
WriteLine("UV številka");WriteLine(številka);

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


Hitrost vetra

Spremenljivka, ki jo je treba ustvariti:

  • W_WdSpd vrste plačilo .

Koda:

! Hitrost vetra

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);


Hitrost vetra - Pretvorbe

Ker se v različnih regijah, državah in aplikacijah hitrost vetra meri različno, je tukaj prikazana pretvorba iz m/s v km/h, vozle in Beaufortovo lestvico.

Spremenljivka, ki jo je treba ustvariti:

  • W_Wind_kmh vrste plačilo .
  • W_Wind_knh vrste plačilo .
  • W_Wind_Bft tipa plačilo .

Koda:

realno 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);


realno 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 (x < 0,30)
{
dom.GetObject("W_Wind_Bft").State(0);
}
če ((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);
}
če ((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 ((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 (x > 32,6)
{
dom.GetObject("W_Wind_Bft").State(12);
}

Hitrost vetra - nevarnost omrzlin

Potniki, ki potujejo na zelo mrzlih območjih, bodo s tem skriptom prejeli opozorilo, če obstaja nevarnost omrzlin zaradi hitrosti vetra in zaznane zunanje temperature, razen če uporabljajo ustrezna zaščitna oblačila.

Izračun temelji na predpostavki, da se temperatura kože lahko zniža na -4,8 °C pri 30-minutni ali krajši izpostavljenosti kože, kar pomeni, da se omrzline pojavijo pri 5% ljudi.

Spremenljivka, ki jo je treba ustvariti:

  • W_Wind_danger tipa Boolean

Koda:

če (((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);
}
drugače
{
dom.GetObject("W_Wind_Danger").State(false);
}


Smer vetra (geografska)

Spremenljivka, ki jo je treba ustvariti:

  • W_wind_dir vrste niz

Koda:

! Geografska smer vetra

pos = 0;
posStart = 'wind_dir':"';
posEnd = '", "tlak";
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);


Smer vetra (numerično)

Spremenljivka, ki jo je treba ustvariti:

  • W_Wind_rchtg vrste niz

Koda:

! Numerična smer vetra

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


Oblačnost

Podjetje Weatherstack je napisalo podatke o oblačnosti tudi v angleščini, zato je tu na voljo prevod v nemščino.

Spremenljivka, ki jo je treba ustvariti:

  • W_description vrste niz

Koda:

! Opis pokritosti z oblaki

pos = 0;
posStart = "vremenski_opisi":["';
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);

če (clouds_description == "Oblačno")
{
string clouds_description_DE = "Oblačno";
WriteLine("clouds_description_DE");WriteLine(clouds_description_DE);
dom.GetObject("W_description").State(clouds_description_DE);
}
če (clouds_description == "Rahlo deževje")
{
string clouds_description_EN = "Rahlo deževje";
WriteLine("clouds_description_DE");WriteLine(clouds_description_DE);
dom.GetObject("W_description").State(clouds_description_DE);
}
če (clouds_description == "Rahlo deževje")
{
string clouds_description_EN = "Rahli deževni nalivi";
WriteLine("clouds_description_DE");WriteLine(clouds_description_DE);
dom.GetObject("W_description").State(clouds_description_DE);
}
če (clouds_description == "Rahla ploha")
{
string clouds_description_DE = "Drizzle";
WriteLine("clouds_description_DE");WriteLine(clouds_description_DE);
dom.GetObject("W_description").State(clouds_description_DE);
}
če (clouds_description == "Mis")
{
string clouds_description_DE = "haze";
WriteLine("clouds_description_DE");WriteLine(clouds_description_DE);
dom.GetObject("W_description").State(clouds_description_DE);
}
če (clouds_description == "Rahli snežni nalivi")
{
string clouds_description_EN = "Rahli snežni nalivi";
WriteLine("clouds_description_DE");WriteLine(clouds_description_DE);
dom.GetObject("W_description").State(clouds_description_DE);
}
če (clouds_description == "Sunny")
{
string clouds_description_DE = "Veselo";
WriteLine("clouds_description_DE");WriteLine(clouds_description_DE);
dom.GetObject("W_description").State(clouds_description_DE);
}
če (clouds_description == "Overcast")
{
string clouds_description_DE = "Overcast";
WriteLine("clouds_description");WriteLine(clouds_description_EN);
dom.GetObject("W_description").State(clouds_description_DE);
}
če (clouds_description == "Delno oblačno")
{
string clouds_description_DE = "Delno oblačno";
WriteLine("clouds_description_DE");WriteLine(clouds_description_DE);
dom.GetObject("W_description").State(clouds_description_DE);
}
če (clouds_description == "Clear")
{
string clouds_description_DE = "Clear";
WriteLine("clouds_description_DE");WriteLine(clouds_description_DE);
dom.GetObject("W_description").State(clouds_description_DE);
}
če (clouds_description == "Fog")
{
string clouds_description_DE = "Megla";
WriteLine("clouds_description_DE");WriteLine(clouds_description_DE);
dom.GetObject("W_description").State(clouds_description_DE);
}
če (clouds_description == "Možno je občasno deževje")
{
string clouds_description_EN = "Možen rahel dež";
WriteLine("clouds_description");WriteLine(clouds_description_EN);
dom.GetObject("W_description").State(clouds_description_DE);
}
če (clouds_description == "Zmerno deževje")
{
string clouds_description_DE = "Zmerne padavine";
WriteLine("clouds_description");WriteLine(clouds_description_EN);
dom.GetObject("W_description").State(clouds_description_DE);
}


Oblačnost

Spremenljivka, ki jo je treba ustvariti:

  • W_clouds vrste niz

Koda:

! Oblačnost

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);


Napoved dežja

Spremenljivka, ki jo je treba ustvariti:

  • W_Precipitation vrste niz

Koda:

! Napovedan dež

var x;
pos = 0;
posStart = 'precip":';
posEnd = ', "vlažnost";
posValueStart = stdout.Find(posStart) + posStart.Length();
posValueEnd = stdout.Find(posEnd)-posValueStart;
string precip = stdout.Substr(posValueStart, posValueEnd);
WriteLine("Padavine");WriteLine(precip);
dom.GetObject("W_Precipitation").State(precip);


Elevation - Azimut

Scenarij je napisal radijski svetilnik in predložena Homematični forum na strani 10 povezano nit.

Ustvariti je treba dve sistemski spremenljivki:

  • sun_elevation vrste Številka
  • sun_azimut vrste Številka

Zakaj 4 minute? Ker Zemlja vsakih 24 ur obkroži Sonce za 360°. 360° / 24 ur = 15° na uro, kar pomeni 60 minut / 15° = 4 minute.

Skripto je treba uporabljati neodvisno od zgornjih skript ali povezanega programa, če je interval posodabljanja drugačen od 4 minut.

Program:

Program - Določanje višine/azimuta

Spremenljivke, ki jih je treba ustvariti:

  • sun_azimut vrste plačilo .
  • sun_elevation vrste plačilo .

Koda:

! Pridobite zemljepisno širino
realni phi = system.Latitude();
phi = 0,017453292 * phi;


! Pretvorba v radiane
! izračunajte sin_phi in cos_phi s Taylorjevo serijo
real temp = phi * phi;
realni sin_phi =phi * ((temp * temp * 0,0083334) +1,0 - (temp * 0,1666667));


! sinusni približek
real cos_phi = (temp *temp *0,0416667) + 1,0 - (temp * 0,5);


! kosinusni približek
! Izračun sončnega časa, vsi časi v minutah
celo število 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();
celo število sonnenzeit =time_min + 720 - 0,5 *(tagesbeginn_min +tagesende_min);
if (suntime > 1440) {suntime = suntime -1440;}
če (sončni čas 720) {suntime =suntime - 720; afternoon = true; }
drugače {sonnenzeit =720 -sonnenzeit;}


! Izračun sin_tau in cos_tau
realno tau = 0,00436332313 * sončni čas; ! 15/60 * pi /180 * sončni čas [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);} sicer {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));}

! Izračun delta
integer tageszahl = system.Date("%j").ToInteger(); tageszahl = tageszahl +10; if (tageszahl > 365) {tageszahl = tageszahl - 365;}
if (tageszahl 91) && (tageszahl 183) && (število dni 274) && (tageszahl < 366)) {tageszahl = 365 - tageszahl; realna oznaka = 0,0172142 *tageszahl; temp = oznaka * oznaka; realna delta = (-0,410152) *((temp *temp *0,041666) + 1,0 - (temp * 0,5));}

! izračun sin_delta, cos_delta
temp = delta * delta; real sin_delta =delta * ((temp * temp * 0,0083334) +1,0 - (temp * 0,1666667)); !sinusna aproksimacija real cos_delta = (temp *temp *0,0416667) + 1,0 - (temp * 0,5);

! kosinusni približek
! Izračun tan_delta s koščeno linearizacijo funkcije tan
boolean vsign = true; if (delta=0,2618) {tan_delta = (1,1822*delta) - 0,0416;}
if (vsign == false) {tan_delta = (-1,0) * tan_delta;}


! Izračun sin_elevacije in tan_azimuta
realni sin_elevacija = (sin_phi * sin_delta) +( cos_phi * cos_delta * cos_tau);
temp = sin_višanje * sin_višanje;
realno sun_elevation = sin_elevation * (1,0 + (0,1666667 * temp) + (0,075 * temp * temp));
sun_elevation = 57,29577951 * sun_elevation;
realni imenovalec = (sin_phi*cos_tau) - (cos_phi * tan_delta);
if (imenovalec < 0,0) {boolean plus180 = true;} real tan_azimut = sin_tau / imenovalec;


! Izračun sončnega_azimuta z linearizacijo arctana po delih
boolean sign = true; if (tan_azimut =0,2679)&&(tan_azimut = 0,5774)&&(tan_azimut = 1,0)&&(tan_azimut = 1,3032)&&(tan_azimut = 1,7321)&&(tan_azimut = 2,4142)&&(tan_azimut = 2,9459)&&(tan_azimut = 3,7321)&&(tan_azimut = 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;}


! Shranjevanje popravka časa dneva in vrednosti v sistemske spremenljivke
če (popoldne == false)
{sonne_azimut = 180,0 - sonne_azimut; sonnenzeit = 720 - sonnenzeit;}
drugače
{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);

Dodaj odgovor

Vaš e-naslov ne bo objavljen. * označuje zahtevana polja

sl_SISlovenian