Přeskočit na obsah

Údaje o počasí SmartHome

Obsah

Doba čtení 9 minuty

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
Program - W_Data - Dotaz na data o počasí

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ězec
  • W_air_pressure_old typu řetězec
  • W_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ězec
  • W_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 platit
  • W_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 Číslo
  • sun_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:

Program - Určení výšky / azimutu

Proměnné, které mají být vytvořeny:

  • sun_azimuth typu platit
  • sun_elevation typu platit

Kód:

! Získat zeměpisnou šířku
real phi = system.Latitude();
phi = 0,017453292 * phi;


! Převod na radiány
! výpočet sin_phi a cos_phi pomocí Taylorovy řady
real 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ách
celé čí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_tau
reá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 delta
integer 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í tan
boolean 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_azimutu
reá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í arctanu
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,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ých
if (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);

Napsat komentář

Vaše e-mailová adresa nebude zveřejněna. Vyžadované informace jsou označeny *

cs_CZCzech