Obsah
Aktualizované - január 20, 2023
Zaznamenávanie údajov o počasí pomocou aplikácie SmartHome a ich vizualizácia v mobilnom telefóne alebo tablete prostredníctvom aplikácie AIO Creator nie je vo všeobecnosti nevyhnutnosťou, ale je to príjemné.
Online meteorologická služba weatherstack.com ponúka až 250 dotazov mesačne - v obmedzenom rozsahu bezplatne. Ak chcete naozaj aktuálne údaje o počasí, mali by ste si vybrať štandardný balík. 50 000 dopytov umožňujú minútové intervaly.
Ostatné dostupné balíky sa líšia predovšetkým počtom dopytov a predpoveďou počasia na 7 alebo 14 dní.
Všetky balíky obsahujú tieto údaje:
- Zemepisná dĺžka a šírka
- Umiestnenie
- Región
- Krajina
- Časové pásmo
- Miestny čas a dátum
- Posun UTC
- Aktuálny čas zberu údajov
- Teplota vzduchu
- Popis počasia
- Rýchlosť vetra
- Smer vetra numerický / geografický
- Tlak vzduchu
- Zrážky
- Vlhkosť
- Hustota mrakov
- Chladiaca teplota
- UV index
- Zobraziť
Pri registrácii, bez ohľadu na balík, sú potrebné obvyklé informácie a platobné údaje. Pri ročnom predplatnom sa na rozdiel od mesačného predplatného poskytuje zľava 20%.
Po úspešnom dokončení tohto postupu dostanete takzvaný kód API (Application Programming Interface), ktorý skopírujete do url adresy dotazu. Odpoveďou je výstup XML obsahujúci vyššie uvedené kategórie údajov a hodnoty. Údaje sa extrahujú pomocou vhodných skriptov a ukladajú sa do premenných. Tie sa potom môžu použiť na vizualizáciu v aplikácii AIO Creator.
Podrobný opis všetkých možných parametrov vo výstupe XML, ako aj voliteľných možností dopytovania, ktoré sú súčasťou balíkov s vyššou cenou, vrátane rôznych príkladov kódu, tu zobraziteľné.
Program
Program je pomerne rozsiahly vzhľadom na veľké množstvo údajov. Jednotlivé časti sú tu preto uvedené postupne. Všetky úryvky kódu možno nakoniec spojiť do jedného programu.
Okrem uvedených údajov sa v programe vypočítavajú aj ďalšie údaje, ktoré sú k dispozícii na vizualizáciu:
- Výška a azimut slnka
- Odporúčanie faktora ochrany pred svetlom

Záhlavie programu
Hlavička obsahuje iba adresu URL, ktorú je potrebné doplniť kľúčom API, ktorý je tu uvedený ako xxx, a polohu (v obyčajnom texte alebo oddelenú čiarkou ako zemepisná dĺžka a šírka, označenú ako yyy):
var url = "http://api.weatherstack.com/current?access_key=xxx&query=yyy";
Prevod formátu času z USA do DE
Keďže vo voľnej a štandardnej tarife nie je možnosť výberu jazyka zobrazenia, a preto je k dispozícii len formát času AM/PM, tento sa prepočíta na 24-hodinový formát.
Premenná, ktorá sa má vytvoriť:
W_LDU
typu reťazec
Kód:
! Prevod AM/PM - ukladanie do 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':"';
celé číslo word_length = word.Length();
integer word_position = wetter_xml.Find(word);
string data = wetter_xml.Substr((word_position + word_laenge), 5);
celé číslo word_position = data.Find(word);
data = data.Substr(0, (word_position -2));
string word = 'observation_time':"';
celé číslo word_length = word.Length();
integer word_position = wetter_xml.Find(word);
string PM = wetter_xml.Substr((word_position + word_laenge +6), 2);
celé číslo word_position = PM.Find(word);
PM = PM.Substr(0, (word_position -2));
WriteLine("AM/PM");WriteLine(PM);
string word = 'observation_time':"';
celé číslo word_length = word.Length();
integer word_position = wetter_xml.Find(word);
string HH = wetter_xml.Substr((word_position + word_laenge) + 1, 1);
celé číslo word_position = HH.Find(word);
HH = HH.Substr(0, (word_position -2));
WriteLine("HH");WriteLine(HH);
string word = 'observation_time':"';
celé číslo word_length = word.Length();
integer word_position = wetter_xml.Find(word);
string MM = wetter_xml.Substr((word_position + word_laenge) +3, 2);
celé číslo word_position = MM.Find(word);
MM = MM.Substr(0, (word_position -2));
WriteLine("MM");WriteLine(MM);
ak (PM == "PM")
{
celé číslo Diff = 12;
WriteLine("Diff");WriteLine(Diff);
var HH_i = HH.ToInteger();
celé číslo H = (HH_i + Diff);
WriteLine("HHi + Diff is = H)");WriteLine(H);
reťazec HHMM = H #":";
WriteLine("H_+ : ");WriteLine(HHMM);
reťazec HM = HHMM # MM;
WriteLine("HH_+12+MM");WriteLine(HM);
dom.GetObject("W_LDU").State(HM);
}
inak
{
WriteLine("LDU_daten");WriteLine(daten);
dom.GetObject("W_LDU").State(data);
}
Krajina - Kód krajiny
Kód krajiny sa tiež vypíše v angličtine a tu sa prevedie na medzinárodný kód. V prípade potreby je možné podľa tohto vzoru pridať ďalšie krajiny. Aktuálna krajina sa automaticky určí podľa mesta vybraného programom Weatherstack.
Premenná, ktorá sa má vytvoriť:
W_country_code
typu reťazec
Kód:
! Country_code
pos = 0;
posStart = 'country':"';
posEnd = '", "region";
posValueStart = stdout.Find(posStart) + posStart.Length();
posValueEnd = stdout.Find(posEnd)-posValueStart;
string country_code = stdout.Substr(posValueStart, posValueEnd);
ak (country_code == "Germany")
{
string country_code = "DE";
}
ak (country_code == "Sweden")
{
string country_code = "SE";
}
WriteLine("country_code");WriteLine(country_code);
dom.GetObject("W_country_code").State(country_code);
Región
Región sa vzťahuje napríklad na "Dolné Sasko" v Nemecku a je tiež automaticky určený programom Weatherstack.
Premenná, ktorá sa má vytvoriť:
W_region
typu reťazec
Kód:
! Región
pos = 0;
posStart = 'region':"';
posEnd = '", "lat";
posValueStart = stdout.Find(posStart) + posStart.Length();
posValueEnd = stdout.Find(posEnd)-posValueStart;
string region = stdout.Substr(posValueStart, posValueEnd);
WriteLine("región");WriteLine(región);
dom.GetObject("W_region").State(region);
Mesto
Pri zadávaní mesta Weatherstack automaticky určí príslušné údaje o zemepisnej dĺžke a šírke, zatiaľ čo mesto sa určí zo zadaných geodát.
Premenná, ktorá sa má vytvoriť:
W_city_name
typu reťazec
Kód:
! Názov_mesta
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("názov_mesta");WriteLine(názov_mesta);
dom.GetObject("W_city_name").State(city_name);
Zemepisná šírka - geogr. Latitude
Premenná, ktorá sa má vytvoriť:
W_Lat
typu reťazec
Kód:
! Lat
pos = 0;
posStart = "query": "Lat";
posEnd = 'a 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);
Zemepisná dĺžka - longitude
Premenná, ktorá sa má vytvoriť:
W_Lon
typu reťazec
Kód:
! Lon
pos = 0;
posStart = 'a Lon';
posEnd = '", "jazyk";
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);
Zobrazenie - viditeľnosť
Premenná, ktorá sa má vytvoriť:
W_vis
typu reťazec
Kód:
! Viditeľnosť
pos = 0;
posStart = 'visibility':';
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);
Tlak vzduchu a tendencia
Okrem poskytovaného tlaku vzduchu sa v tomto skripte určuje trend tlaku vzduchu uložením nameranej hodnoty ako "aktuálnej" a predchádzajúcej hodnoty ako "starej". Obe hodnoty sa navzájom porovnajú, čím vznikne trend.
Premenná, ktorá sa má vytvoriť:
W_air_pressure_act
typu reťazecW_air_pressure_old
typu reťazecW_Trend tlaku vzduchu
typu reťazec
Kód:
! Tlač
var W_mb_alt;
var W_mb_akt;
pos = 0;
posStart = 'pressure':';
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);
ak (W_mb_akt > W_mb_alt)
{
dom.GetObject("W_air_pressure_old").State(W_mb_akt);
dom.GetObject("W_Air pressure trend").State("S");
}
ak (W_mb_akt < W_mb_alt)
{
dom.GetObject("W_air_pressure_old").State(W_mb_akt);
dom.GetObject("W_Air pressure trend").State("F");
}
ak (W_mb_akt == W_mb_alt)
{
dom.GetObject("W_air_pressure_old").State(W_mb_akt);
dom.GetObject("W_Air pressure trend").State("N");
}
Chladiaca teplota
Ochladenie vetrom závisí od rýchlosti vetra a teploty. Pri vodných športoch je ďalším faktorom (ktorý sa tu nezohľadňuje) aj účinok odparovacieho ochladzovania v dôsledku postreku. Chlad sa vzťahuje na vnímanú teplotu, ktorá môže byť vo veľmi chladnom prostredí až jedenapolnásobne vyššia ako záporná teplota v porovnaní so skutočnou teplotou a môže viesť k rýchlemu omrznutiu.
Premenná, ktorá sa má vytvoriť:
W_chill
typu reťazec
Kód:
! 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_data);
Odporúčanie na ochranu pred UV žiarením a svetlom
Výsledkom vystavenia UV žiareniu určeného na základe UV indexu je odporúčanie na prípadné použitie opatrení na ochranu pred svetlom.
Premenná, ktorá sa má vytvoriť:
W_UV
typu reťazecW_LSF
typu reťazec
Kód:
! UV
pos = 0;
posStart = 'uv_index':';
posEnd = ', "visibility";
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));
real number = data.ToInteger();
WriteLine("UV číslo");WriteLine(číslo);
reťazec LSF = "";
if (number = "3") && (number = "6") && (číslo = "8") && (number = "10") {LSF = "MUSÍ" ;}
dom.GetObject("W_LSF").State(LSF);WriteLine("LSF");WriteLine(LSF);
Rýchlosť vetra
Premenná, ktorá sa má vytvoriť:
W_WdSpd
typu zaplatiť
Kód:
! Rýchlosť 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);
Rýchlosť vetra - Prevody
Keďže v rôznych regiónoch, krajinách a aplikáciách sa uprednostňujú rôzne miery rýchlosti vetra, tu je uvedený prevod z m/s na km/h, uzly a Beaufortovu stupnicu.
Premenná, ktorá sa má vytvoriť:
W_Wind_kmh
typu zaplatiťW_Wind_knh
typu zaplatiť- W_Wind_Bft typu zaplatiť
Kód:
real 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);
reálny 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);
ak (x < 0,30)
{
dom.GetObject("W_Wind_Bft").State(0);
}
ak ((0,29 < x) && (x < 1,51))
{
dom.GetObject("W_Wind_Bft").State(1);
}
ak ((1,59 < x) && ( x < 3,31))
{
dom.GetObject("W_Wind_Bft").State(2);
}
ak ((3,39 < x) && ( x < 5,41))
{
dom.GetObject("W_Wind_Bft").State(3);
}
ak ((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);
}
ak ((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);
}
ak ((20.79 < x) && (x < 24.41))
{
dom.GetObject("W_Wind_Bft").State(9);
}
ak ((24.49 < x) && (x < 28.41))
{
dom.GetObject("W_Wind_Bft").State(10);
}
ak ((28.49 < x) && (x < 32.61))
{
dom.GetObject("W_Wind_Bft").State(11);
}
ak (x > 32,6)
{
dom.GetObject("W_Wind_Bft").State(12);
}
Rýchlosť vetra - riziko omrzlín
Každý, kto cestuje vo veľmi chladných zónach, dostane s týmto skriptom upozornenie, ak existuje riziko omrzlín v dôsledku rýchlosti vetra a vnímanej vonkajšej teploty, pokiaľ nepoužije vhodný ochranný odev.
Výpočet je založený na predpoklade, že pri vystavení pokožky 30 minútám alebo kratšiemu času možno predpokladať pokles teploty pokožky na -4,8 °C, čo znamená, že omrzliny sa vyskytujú u 5% ľudí.
Premenná, ktorá sa má vytvoriť:
- W_Wind_danger typu boolean
Kód:
if (((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);
}
inak
{
dom.GetObject("W_Wind_Danger").State(false);
}
Smer vetra (zemepisný)
Premenná, ktorá sa má vytvoriť:
W_wind_dir
typu reťazec
Kód:
! Geografický 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 (číselný)
Premenná, ktorá sa má vytvoriť:
W_Wind_rchtg
typu reťazec
Kód:
! Číselný smer vetra
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);
Oblačnosť
Weatherstack píše o oblačnosti aj v angličtine, preto je tu uvedený preklad do nemčiny.
Premenná, ktorá sa má vytvoriť:
W_description
typu reťazec
Kód:
! Popis oblačnosti
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);
ak (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);
}
ak (clouds_description == "Light rain")
{
string clouds_description_EN = "Ľahký dážď";
WriteLine("clouds_description_DE");WriteLine(clouds_description_DE);
dom.GetObject("W_description").State(clouds_description_DE);
}
ak (clouds_description == "Slabý dážď")
{
string clouds_description_EN = "Ľahké dažďové prehánky";
WriteLine("clouds_description_DE");WriteLine(clouds_description_DE);
dom.GetObject("W_description").State(clouds_description_DE);
}
ak (clouds_description == "Light drizzle")
{
string clouds_description_DE = "Drizzle";
WriteLine("clouds_description_DE");WriteLine(clouds_description_DE);
dom.GetObject("W_description").State(clouds_description_DE);
}
ak (clouds_description == "Mis")
{
string clouds_description_DE = "haze";
WriteLine("clouds_description_DE");WriteLine(clouds_description_DE);
dom.GetObject("W_description").State(clouds_description_DE);
}
ak (clouds_description == "Slabé snehové prehánky")
{
string clouds_description_EN = "Slabé snehové prehánky";
WriteLine("clouds_description_DE");WriteLine(clouds_description_DE);
dom.GetObject("W_description").State(clouds_description_DE);
}
ak (clouds_description == "Sunny")
{
string clouds_description_DE = "Veselý";
WriteLine("clouds_description_DE");WriteLine(clouds_description_DE);
dom.GetObject("W_description").State(clouds_description_DE);
}
ak (clouds_description == "Overcast")
{
string clouds_description_DE = "Overcast";
WriteLine("clouds_description");WriteLine(clouds_description_EN);
dom.GetObject("W_description").State(clouds_description_DE);
}
ak (clouds_description == "Čiastočne zamračené")
{
string clouds_description_DE = "Čiastočne zamračené";
WriteLine("clouds_description_DE");WriteLine(clouds_description_DE);
dom.GetObject("W_description").State(clouds_description_DE);
}
ak (clouds_description == "Clear")
{
string clouds_description_DE = "Clear";
WriteLine("clouds_description_DE");WriteLine(clouds_description_DE);
dom.GetObject("W_description").State(clouds_description_DE);
}
ak (clouds_description == "Fog")
{
string clouds_description_DE = "Fog";
WriteLine("clouds_description_DE");WriteLine(clouds_description_DE);
dom.GetObject("W_description").State(clouds_description_DE);
}
ak (clouds_description == "Možný miestami dážď")
{
string clouds_description_EN = "Možný slabý dážď";
WriteLine("clouds_description");WriteLine(clouds_description_EN);
dom.GetObject("W_description").State(clouds_description_DE);
}
ak (clouds_description == "Mierny dážď")
{
string clouds_description_DE = "Mierne zrážky";
WriteLine("clouds_description");WriteLine(clouds_description_EN);
dom.GetObject("W_description").State(clouds_description_DE);
}
Oblačnosť
Premenná, ktorá sa má vytvoriť:
W_clouds
typu reťazec
Kód:
! Oblačnosť
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);
Predpoveď dažďa
Premenná, ktorá sa má vytvoriť:
W_Precipitation
typu reťazec
Kód:
! Predpoveď dažďa
var x;
pos = 0;
posStart = 'precip":';
posEnd = ', "vlhkosť";
posValueStart = stdout.Find(posStart) + posStart.Length();
posValueEnd = stdout.Find(posEnd)-posValueStart;
string precip = stdout.Substr(posValueStart, posValueEnd);
WriteLine("Zrážky");WriteLine(precip);
dom.GetObject("W_Precipitation").State(precipitation);
Výška - azimut
Scenár napísal rádiový maják a predložené Homematic Forum na strane 10 prepojeného vlákna.
Musia sa vytvoriť dve systémové premenné:
sun_elevation
typu Číslosun_azimuth
typu Číslo
Prečo 4 minúty? Pretože Zem obíde okolo Slnka o 360° raz za 24 hodín. 360° / 24h = 15° za hodinu, čo zodpovedá 60 minútam / 15° = 4 minútam.
Tento skript by sa mal používať nezávisle od vyššie uvedených skriptov alebo súvisiaceho programu, ak je interval aktualizácie iný ako 4 minúty.
Program:

Premenné, ktoré sa majú vytvoriť:
sun_azimuth
typu zaplatiťsun_elevation
typu zaplatiť
Kód:
! Získajte zemepisnú šírkureal phi = system.Latitude();
phi = 0,017453292 * phi;
! Prevod na radiány
! vypočítať sin_phi a cos_phi pomocou Taylorovho radureal temp = phi * phi;
real sin_phi =phi * ((temp * temp * 0,0083334) +1,0 - (temp * 0,1666667));
! sínusová aproximácia
real cos_phi = (temp *temp *0,0416667) + 1,0 - (temp * 0,5);
! kosínusová aproximácia
! Výpočet slnečného času, všetky časy v minútachcelé číslo 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();
celé číslo sonnenzeit =time_min + 720 - 0,5 *(tagesbeginn_min +tagesende_min);
if (suntime > 1440) {suntime = suntime -1440;}
if (suntime 720) {suntime =suntime - 720; afternoon = true; }
inak {sonnenzeit =720 -sonnenzeit;}
! Výpočet sin_tau a cos_taureálny tau = 0.00436332313 * slnečný čas; ! 15/60 * pi /180 * slnečný č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);} inak {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));}
! Výpočet deltacelé číslo tageszahl = system.Date("%j").ToInteger(); tageszahl = tageszahl +10; if (tageszahl > 365) {tageszahl = tageszahl - 365;}
if (tageszahl 91) && (tageszahl 183) && (počet dní 274) && (tageszahl < 366)) {tageszahl = 365 - tageszahl; real tag = 0,0172142 *tageszahl; temp = tag * tag; real delta = (-0,410152) *((temp *temp *0,041666) + 1,0 - (temp * 0,5));}! výpočet sin_delta, cos_delta
temp = delta * delta; real sin_delta =delta * ((temp * temp * 0,0083334) +1,0 - (temp * 0,1666667)); !sínusová aproximácia real cos_delta = (temp *temp *0,0416667) + 1,0 - (temp * 0,5);
! kosínusová aproximácia
! Výpočet tan_delta s kusovou linearizáciou tanboolean vsign = true; if (delta=0.2618) {tan_delta = (1.1822*delta) - 0.0416;}
if (vsign == false) {tan_delta = (-1.0) * tan_delta;}
! Výpočet sin_elevácie a tan_azimutureal sin_elevation = (sin_phi * sin_delta) +( cos_phi * cos_delta * cos_tau);
temp = sin_elevácia * sin_elevácia;
real sun_elevation = sin_elevation * (1,0 + (0,1666667 * temp) + (0,075 * temp * temp));
sun_elevation = 57.29577951 * sun_elevation;
reálny menovateľ = (sin_phi*cos_tau) - (cos_phi * tan_delta);
if (menovateľ < 0,0) {boolean plus180 = true;} real tan_azimut = sin_tau / menovateľ;
! Výpočet slnka_azimutu s kusovou linearizáciou arctanuboolean 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,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;}
! Uloženie korekcie denného času a hodnôt do systémových premennýchak (popoludnie == false)
{sonne_azimut = 180.0 - sonne_azimut; sonnenzeit = 720 - sonnenzeit;}
inak
{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);