Obsah
Aktualizováno - Leden 20, 2023
Zaznamenávání údajů o počasí pomocí aplikace SmartHome a jejich vizualizace v mobilním telefonu nebo tabletu prostřednictvím aplikace AIO Creator není obecně nutností, ale je vhodné je mít.
Online meteorologická služba weatherstack.com nabízí až 250 dotazů měsíčně - v omezeném rozsahu zdarma. Pokud chcete opravdu aktuální údaje o počasí, měli byste zvolit standardní balíček. 50 000 dotazů umožňuje minutové intervaly.
Ostatní dostupné balíčky se liší především počtem dotazů a předpovědí počasí na 7 nebo 14 dní.
Následující údaje jsou součástí všech balíčků:
- Zeměpisná délka a šířka
- Místo
- Region
- Země
- Časové pásmo
- Místní čas a datum
- Posun UTC
- Aktuální čas sběru dat
- Teplota vzduchu
- Popis počasí
- Rychlost větru
- Směr větru numerický / geografický
- Tlak vzduchu
- Srážky
- Vlhkost
- Hustota mraků
- Teplota chlazení
- UV index
- Zobrazit
Registrace bez ohledu na balíček vyžaduje obvyklé informace a platební údaje. Roční předplatné, na rozdíl od měsíčního předplatného, je zvýhodněno u 20%.
Po úspěšném dokončení tohoto postupu obdržíte takzvaný kód API (Application Programming Interface), který zkopírujete do url adresy dotazu. Odpovědí je výstup XML obsahující výše uvedené kategorie dat a hodnoty. Data jsou extrahována pomocí vhodných skriptů a uložena do proměnných. Ty pak lze použít pro vizualizaci v nástroji AIO Creator.
Podrobný popis všech možných parametrů ve výstupu XML a volitelných možností dotazu, které jsou součástí dražších balíčků, včetně různých příkladů kódu, zde zobrazitelné.
Program
Program je vzhledem k velkému množství dat poměrně rozsáhlý. Jednotlivé části jsou zde proto uvedeny postupně. Všechny úryvky kódu lze nakonec spojit do jednoho programu.
Kromě výše uvedených údajů se v programu vypočítávají další údaje, které jsou k dispozici pro vizualizaci:
- Výška a azimut Slunce
- Doporučení faktoru ochrany proti světlu

Záhlaví programu
Hlavička obsahuje pouze adresu URL, která musí být doplněna klíčem API, zde uvedeným jako xxx, a polohou (v prostém textu nebo oddělenou čárkou jako zeměpisná délka a šířka, označenou jako yyy):
var url = "http://api.weatherstack.com/current?access_key=xxx&query=yyy";
Převod formátu času z USA do DE
Vzhledem k tomu, že u volného a standardního tarifu není možnost volby jazyka zobrazení, a proto je k dispozici pouze formát času AM/PM, je tento formát převeden na 24hodinový.
Proměnná, která má být vytvořena:
W_LDU
typu řetězec
Kód:
! Převod AM/PM - ukládání 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);
if (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);
řetězec HHMM = H #":";
WriteLine("H_+ : ");WriteLine(HHMM);
řetězec HM = HHMM # MM;
WriteLine("HH_+12+MM");WriteLine(HM);
dom.GetObject("W_LDU").State(HM);
}
jinak
{
WriteLine("LDU_daten");WriteLine(daten);
dom.GetObject("W_LDU").State(data);
}
Země - Kód země
Kód země je rovněž vypsán v angličtině a zde převeden na mezinárodní kód. Podle tohoto vzoru lze v případě potřeby přidat další země. Aktuální země je automaticky určena podle města vybraného Weatherstackem.
Proměnná, která má být vytvořena:
W_country_code
typu řetězec
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);
if (country_code == "Germany")
{
string country_code = "DE";
}
if (country_code == "Sweden")
{
string country_code = "SE";
}
WriteLine("country_code");WriteLine(country_code);
dom.GetObject("W_country_code").State(country_code);
Region
Region označuje například "Dolní Sasko" v Německu a je rovněž automaticky určen programem Weatherstack.
Proměnná, která má být vytvořena:
W_region
typu řetězec
Kód:
! Region
pos = 0;
posStart = 'region':"';
posEnd = '", "lat";
posValueStart = stdout.Find(posStart) + posStart.Length();
posValueEnd = stdout.Find(posEnd)-posValueStart;
string region = stdout.Substr(posValueStart, posValueEnd);
WriteLine("region");WriteLine(region);
dom.GetObject("W_region").State(region);
Město
Při zadávání města Weatherstack automaticky určí odpovídající údaje o zeměpisné délce a šířce, zatímco město se určí ze zadaných geodat.
Proměnná, která má být vytvořena:
W_city_name
typu řetězec
Kód:
! Název_města
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("jméno_města");WriteLine(jméno_města);
dom.GetObject("W_city_name").State(city_name);
Zeměpisná šířka - geogr. Latitude
Proměnná, která má být vytvořena:
W_Lat
typu řetězec
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);
Zeměpisná délka - longitude
Proměnná, která má být vytvořena:
W_Lon
typu řetězec
Kód:
! Lon
pos = 0;
posStart = 'a 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);
Zobrazení - viditelnost
Proměnná, která má být vytvořena:
W_vis
typu řetězec
Kód:
! Viditelnost
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_data");WriteLine(vis_data);
dom.GetObject("W_vis").State(vis_data);
Tlak vzduchu a tendence
Kromě poskytovaného tlaku vzduchu se v tomto skriptu určuje trend tlaku vzduchu uložením naměřené hodnoty jako "aktuální" a předchozí hodnoty jako "staré". Obě hodnoty se vzájemně porovnají, čímž vznikne trend.
Proměnná, která má být vytvořena:
W_air_pressure_act
typu řetězecW_air_pressure_old
typu řetězecW_Air pressure trend
typu řetězec
Kód:
! Tisk
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);
if (W_mb_akt > W_mb_alt)
{
dom.GetObject("W_air_pressure_old").State(W_mb_akt);
dom.GetObject("W_Air pressure trend").State("S");
}
if (W_mb_akt < W_mb_alt)
{
dom.GetObject("W_air_pressure_old").State(W_mb_akt);
dom.GetObject("W_Air pressure trend").State("F");
}
if (W_mb_akt == W_mb_alt)
{
dom.GetObject("W_air_pressure_old").State(W_mb_akt);
dom.GetObject("W_Air pressure trend").State("N");
}
Teplota chlazení
Chladivost větru závisí na rychlosti větru a teplotě. Při vodních sportech je dalším faktorem (který zde není brán v úvahu) ochlazování odpařováním v důsledku postřiku. Chladem se rozumí vnímaná teplota, která může být ve velmi chladném prostředí až jedenapůlkrát vyšší než záporná teplota ve srovnání se skutečnou teplotou a může rychle vést k omrzlinám.
Proměnná, která má být vytvořena:
W_chill
typu řetězec
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_daten);
Doporučení pro ochranu proti UV záření a světlu
Výsledkem expozice UV záření stanovené na základě UV indexu je doporučení pro případné použití ochranných opatření proti světlu.
Proměnná, která má být vytvořena:
W_UV
typu řetězecW_LSF
typu řetězec
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);
string LSF = "";
if (number = "3") && (number = "6") && (číslo = "8") && (number = "10") {LSF = "MUSÍ" ;}
dom.GetObject("W_LSF").State(LSF);WriteLine("LSF");WriteLine(LSF);
Rychlost větru
Proměnná, která má být vytvořena:
W_WdSpd
typu platit
Kód:
! Rychlost větru
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);
Rychlost větru - Převody
Vzhledem k tomu, že v různých oblastech, zemích a aplikacích jsou upřednostňovány různé míry rychlosti větru, je zde uveden převod z m/s na km/h, uzly a Beaufortovu stupnici.
Proměnná, která má být vytvořena:
W_Wind_kmh
typu platitW_Wind_knh
typu platit- W_Wind_Bft typu platit
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);
real 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);
if (x < 0,30)
{
dom.GetObject("W_Wind_Bft").State(0);
}
if ((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);
}
if (x > 32,6)
{
dom.GetObject("W_Wind_Bft").State(12);
}
Rychlost větru - riziko omrzlin
Pokud cestujete ve velmi chladných oblastech a vzhledem k rychlosti větru a vnímané venkovní teplotě hrozí nebezpečí omrzlin, obdržíte v tomto skriptu varování, pokud nepoužijete vhodný ochranný oděv.
Výpočet vychází z předpokladu, že při expozici kůže po dobu 30 minut nebo kratší lze předpokládat pokles teploty kůže na -4,8 °C, což znamená, že k omrzlinám dochází u 5% osob.
Proměnná, která má být vytvořena:
- 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);
}
jinak
{
dom.GetObject("W_Wind_Danger").State(false);
}
Směr větru (zeměpisný)
Proměnná, která má být vytvořena:
W_wind_dir
typu řetězec
Kód:
! Zeměpisný směr větru
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);
Směr větru (číselný)
Proměnná, která má být vytvořena:
W_Wind_rchtg
typu řetězec
Kód:
! Číselný směr větru
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čnost
Weatherstack píše o oblačnosti také v angličtině, proto je zde uveden překlad do němčiny.
Proměnná, která má být vytvořena:
W_description
typu řetězec
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);
if (clouds_description == "Cloudy")
{
string clouds_description_DE = "Zataženo";
WriteLine("clouds_description_DE");WriteLine(clouds_description_DE);
dom.GetObject("W_description").State(clouds_description_DE);
}
if (clouds_description == "Slabý déšť")
{
string clouds_description_EN = "Slabý déšť";
WriteLine("clouds_description_DE");WriteLine(clouds_description_DE);
dom.GetObject("W_description").State(clouds_description_DE);
}
if (clouds_description == "Slabý déšť")
{
string clouds_description_EN = "Lehké dešťové přeháňky";
WriteLine("clouds_description_DE");WriteLine(clouds_description_DE);
dom.GetObject("W_description").State(clouds_description_DE);
}
if (clouds_description == "Lehké mrholení")
{
string clouds_description_DE = "Drizzle";
WriteLine("clouds_description_DE");WriteLine(clouds_description_DE);
dom.GetObject("W_description").State(clouds_description_DE);
}
if (clouds_description == "Mis")
{
string clouds_description_DE = "haze";
WriteLine("clouds_description_DE");WriteLine(clouds_description_DE);
dom.GetObject("W_description").State(clouds_description_DE);
}
if (clouds_description == "Slabé sněhové přeháňky")
{
string clouds_description_EN = "Slabé sněhové přeháňky";
WriteLine("clouds_description_DE");WriteLine(clouds_description_DE);
dom.GetObject("W_description").State(clouds_description_DE);
}
if (clouds_description == "Sunny")
{
string clouds_description_DE = "Veselý";
WriteLine("clouds_description_DE");WriteLine(clouds_description_DE);
dom.GetObject("W_description").State(clouds_description_DE);
}
if (clouds_description == "Overcast")
{
string clouds_description_DE = "Zataženo";
WriteLine("clouds_description");WriteLine(clouds_description_EN);
dom.GetObject("W_description").State(clouds_description_DE);
}
if (clouds_description == "Částečně oblačno")
{
string clouds_description_DE = "Částečně zataženo";
WriteLine("clouds_description_DE");WriteLine(clouds_description_DE);
dom.GetObject("W_description").State(clouds_description_DE);
}
if (clouds_description == "Clear")
{
string clouds_description_DE = "Clear";
WriteLine("clouds_description_DE");WriteLine(clouds_description_DE);
dom.GetObject("W_description").State(clouds_description_DE);
}
if (clouds_description == "Fog")
{
string clouds_description_DE = "Fog";
WriteLine("clouds_description_DE");WriteLine(clouds_description_DE);
dom.GetObject("W_description").State(clouds_description_DE);
}
if (clouds_description == "Možný občasný déšť")
{
string clouds_description_EN = "Možný slabý déšť";
WriteLine("clouds_description");WriteLine(clouds_description_EN);
dom.GetObject("W_description").State(clouds_description_DE);
}
if (clouds_description == "Mírný déšť")
{
string clouds_description_DE = "Mírné srážky";
WriteLine("clouds_description");WriteLine(clouds_description_EN);
dom.GetObject("W_description").State(clouds_description_DE);
}
Oblačnost
Proměnná, která má být vytvořena:
W_clouds
typu řetězec
Kód:
! 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);
Předpověď deště
Proměnná, která má být vytvořena:
W_Precipitation
typu řetězec
Kód:
! Předpověď deště
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("Srážky");WriteLine(precip);
dom.GetObject("W_Precipitation").State(precipitation);
Výška - azimut
Scénář napsal rádiový maják a předloženy Homematic Forum na straně 10 odkazovaného vlákna.
Je třeba vytvořit dvě systémové proměnné:
sun_elevation
typu Číslosun_azimuth
typu Číslo
Proč 4 minuty? Protože Země oběhne kolem Slunce o 360° jednou za 24 hodin. 360° / 24h = 15° za hodinu, což odpovídá 60 minutám / 15° = 4 minutám.
Tento skript by měl být používán nezávisle na výše uvedených skriptech nebo na souvisejícím programu, pokud je interval aktualizace jiný než 4 minuty.
Program:

Proměnné, které mají být vytvořeny:
sun_azimuth
typu platitsun_elevation
typu platit
Kód:
! Získat zeměpisnou šířkureal phi = system.Latitude();
phi = 0,017453292 * phi;
! Převod na radiány
! výpočet sin_phi a cos_phi pomocí Taylorovy řadyreal temp = phi * phi;
real sin_phi =phi * ((temp * temp * 0,0083334) +1,0 - (temp * 0,1666667));
! sinusová aproximace
real cos_phi = (temp *temp *0,0416667) + 1,0 - (temp * 0,5);
! kosinová aproximace
! Výpočet slunečního času, všechny časy v minutáchcelé čí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; }
jinak {sonnenzeit =720 -sonnenzeit;}
! Výpočet sin_tau a cos_taureálný tau = 0.00436332313 * sluneční čas; ! 15/60 * pí /180 * sluneční čas [0 < tau < pí ] 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));}
! Výpočet deltainteger 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)); !sinusová aproximace real cos_delta = (temp *temp *0,0416667) + 1,0 - (temp * 0,5);
! kosinová aproximace
! Výpočet tan_delta s kusovou linearizací 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_elevace a tan_azimutureálná sin_elevace = (sin_phi * sin_delta) +( cos_phi * cos_delta * cos_tau);
temp = sin_elevation * sin_elevation;
real sun_elevation = sin_elevation * (1.0 + (0.1666667 * temp) + (0.075 * temp * temp));
sun_elevation = 57.29577951 * sun_elevation;
reálný jmenovatel = (sin_phi*cos_tau) - (cos_phi * tan_delta);
if (jmenovatel < 0,0) {boolean plus180 = true;} real tan_azimut = sin_tau / jmenovatel;
! Výpočet slunečního_azimutu s kouskovou linearizací 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žení korekce denního času a hodnot do systémových proměnnýchif (odpoledne == false)
{sonne_azimut = 180.0 - sonne_azimut; sonnenzeit = 720 - sonnenzeit;}
jinak
{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);