Vsebina
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

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 nizW_air_pressure_old
vrste nizW_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 nizW_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 Številkasun_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:

Spremenljivke, ki jih je treba ustvariti:
sun_azimut
vrste plačilo .sun_elevation
vrste plačilo .
Koda:
! Pridobite zemljepisno širinorealni phi = system.Latitude();
phi = 0,017453292 * phi;
! Pretvorba v radiane
! izračunajte sin_phi in cos_phi s Taylorjevo serijoreal 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 minutahcelo š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_taurealno 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 deltainteger 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 tanboolean 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_azimutarealni 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 delihboolean 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);