Preskočiť na obsah

Údaje o počasí v službe SmartHome

Čas čítania 9 zápisnice

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
Program - W_Data - Vyhľadávanie údajov o počasí

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ťazec
  • W_air_pressure_old typu reťazec
  • W_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ťazec
  • W_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 Číslo
  • sun_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:

Program - Určenie výšky / azimutu

Premenné, ktoré sa majú vytvoriť:

  • sun_azimuth typu zaplatiť
  • sun_elevation typu zaplatiť

Kód:

! Získajte zemepisnú šírku
real phi = system.Latitude();
phi = 0,017453292 * phi;


! Prevod na radiány
! vypočítať sin_phi a cos_phi pomocou Taylorovho radu
real 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útach
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; }
inak {sonnenzeit =720 -sonnenzeit;}


! Výpočet sin_tau a cos_tau
reá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 delta
celé čí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 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_elevácie a tan_azimutu
real 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 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ženie korekcie denného času a hodnôt do systémových premenných
ak (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);

Pridaj komentár

Vaša e-mailová adresa nebude zverejnená. Vyžadované polia sú označené *

sk_SKSlovak