Tartalomjegyzék
Frissítve - január 20, 2023
Az időjárási adatok rögzítése a SmartHome segítségével és megjelenítése mobiltelefonján vagy táblagépén az AIO Creator segítségével általában nem szükségszerű, de jó, ha van.
Az online időjárási szolgálat weatherstack.com havonta legfeljebb 250 lekérdezést kínál - korlátozott mértékben ingyenesen. Ha valóban naprakész időjárási adatokat szeretne, akkor a standard csomagot kell választania. Az 50 000 lekérdezés lehetővé teszi a percenkénti lekérdezést.
A többi elérhető csomag elsősorban a lekérdezések számában és a 7 vagy 14 napos időjárás-előrejelzésben különbözik.
A következő adatokat minden csomag tartalmazza:
- Földrajzi hosszúság és szélesség
- Helyszín
- Régió
- Ország
- Időzóna
- Helyi idő és dátum
- UTC-eltolódás
- Az adatgyűjtés aktuális időpontja
- A levegő hőmérséklete
- Időjárás leírás
- Szélsebesség
- Szél iránya numerikus / földrajzi
- Légnyomás
- Esőmennyiség
- Páratartalom
- Felhősűrűség
- Hűtési hőmérséklet
- UV index
- A megtekintése
A regisztrációhoz - a csomagtól függetlenül - a szokásos információk és fizetési részletek szükségesek. Az éves előfizetés a havi előfizetéssel szemben a 20% kedvezményes.
Ha ez a művelet sikeresen befejeződött, kap egy úgynevezett API-kódot (Application Programming Interface), amelyet bemásol a lekérdezési url-be. A válasz egy XML kimenet, amely a fent említett adatkategóriákat és értékeket tartalmazza. Az adatokat megfelelő szkriptek segítségével vonjuk ki és tároljuk változókban. Ezeket aztán az AIO Creatorban vizualizáláshoz lehet használni.
Az XML-kimenet összes lehetséges paraméterének részletes leírása, valamint a magasabb árú csomagokban szereplő opcionális lekérdezési lehetőségek, beleértve különböző kódpéldákat is, itt megtekinthető.
Program
A program a nagy mennyiségű adat miatt meglehetősen kiterjedt. Az egyes szakaszok ezért itt egymás után kerülnek felsorolásra. Az összes kódrészlet végül egyetlen programban egyesíthető.
A fent említett adatokon kívül a program további adatokat is kiszámít, és elérhetővé teszi azokat a megjelenítéshez:
- Nap magassága és azimutja
- Fényvédelmi tényező ajánlás

Program fejléc
A fejléc csak az URL-t tartalmazza, amelyet ki kell egészíteni az API-kulccsal, itt xxx-ként szerepel, valamint a helyszínt (egyszerű szövegben vagy vesszővel elválasztva hosszúsági és szélességi fokként, yyy jelöléssel):
var url = "http://api.weatherstack.com/current?access_key=xxx&query=yyy";
Konvertálás Amerikai idő formátum to DE idő formátum
Mivel az ingyenes és a standard tarifában nincs lehetőség a kijelző nyelvének kiválasztására, és ezért csak a délelőtti/közbeni időformátum áll rendelkezésre, a rendszer itt a 24 órás formátumra konvertál.
Létrehozandó változó:
W_LDU
típusú string
Kód:
! AM/PM konverzió - Mentés W_LDU-ban
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':"';
integer word_length = word.Length();
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':"';
integer word_length = word.Length();
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':"';
integer word_length = word.Length();
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':"';
integer word_length = word.Length();
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);
if (PM == "PM")
{
egész Diff = 12;
WriteLine("Diff");WriteLine(Diff);
var HH_i = HH.ToInteger();
egész H = (HH_i + Diff);
WriteLine("HHi + Diff is = H)");WriteLine(H);
string HHMM = H #":";
WriteLine("H_+ : ");WriteLine(HHMM);
string HM = HHMM # MM;
WriteLine("HH_+12+MM");WriteLine(HM);
dom.GetObject("W_LDU").State(HM);
}
else
{
WriteLine("LDU_adatok");WriteLine(daten);
dom.GetObject("W_LDU").State(data);
}
Ország - Országkód
Az országkódot angolul is kiadja, és itt konvertálja a nemzetközi kódra. Szükség esetén további országok adhatók hozzá e minta szerint. Az aktuális országot automatikusan a Weatherstack által kiválasztott város határozza meg.
Létrehozandó változó:
W_country_code
típusú string
Kód:
! Országkód
pos = 0;
posStart = "ország":"";
posEnd = '", "region";
posValueStart = stdout.Find(posStart) + posStart.Length();
posValueEnd = stdout.Find(posEnd)-posValueStart;
string country_code = stdout.Substr(posValueStart, posValueEnd);
if (country_code == "Németország")
{
string country_code = "DE";
}
if (country_code == "Svédország")
{
string country_code = "SE";
}
WriteLine("országkód");WriteLine(országkód);
dom.GetObject("W_country_code").State(country_code);
Régió
A régió például a németországi "Alsó-Szászországot" jelöli, és a Weatherstack automatikusan meghatározza.
Létrehozandó változó:
W_region
típusú string
Kód:
! Régió
pos = 0;
posStart = 'region":"';
posEnd = '", "lat';
posValueStart = stdout.Find(posStart) + posStart.Length();
posValueEnd = stdout.Find(posEnd)-posValueStart;
string region = stdout.Substr(posValueStart, posValueEnd);
WriteLine("régió");WriteLine(régió);
dom.GetObject("W_region").State(region);
Város
A város megadásakor a Weatherstack automatikusan meghatározza a megfelelő hosszúsági és szélességi adatokat, míg a várost a megadott földrajzi adatokból határozza meg.
Létrehozandó változó:
W_város_név
típusú string
Kód:
! Városnév
pos = 0;
posStart = 'name':"';
posEnd = '", "country";
posValueStart = stdout.Find(posStart) + posStart.Length();
posValueEnd = stdout.Find(posEnd)-posValueStart;
string városnév = stdout.Substr(posValueStart, posValueEnd);
WriteLine("városnév");WriteLine(városnév);
dom.GetObject("W_city_name").State(city_name);
Szélesség - geogr. Szélesség
Létrehozandó változó:
W_Lat
típusú string
Kód:
! Lat
pos = 0;
posStart = "query": "Lat";
posEnd = 'és 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);
Hosszúság - hosszúság
Létrehozandó változó:
W_Lon
típusú string
Kód:
! Lon
pos = 0;
posStart = 'és 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);
Nézet - láthatóság
Létrehozandó változó:
W_vis
típusú string
Kód:
! Láthatóság
pos = 0;
posStart = 'láthatóság':';
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);
Légnyomás és tendencia
A megadott légnyomáson kívül a légnyomás trendje is meghatározásra kerül ebben a szkriptben, egy mért érték "aktuális" és egy korábbi érték "régi" értékként történő elmentésével. Mindkettőt összehasonlítjuk egymással, így kapjuk meg a trendet.
Létrehozandó változó:
W_air_pressure_act
típusú stringW_levegőnyomás_régi
típusú stringW_Légnyomás alakulása
típusú string
Kód:
! Nyomtatás
var W_mb_alt;
var W_mb_akt;
pos = 0;
posStart = "nyomás":";
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");
}
Hűtési hőmérséklet
A szélhűlés a szélsebességtől és a hőmérséklettől függ. A vízi sportoknál a permetezés miatti párolgás okozta hűtés hatása is további tényező (amelyet itt nem veszünk figyelembe). A chill az érzékelt hőmérsékletre utal, amely nagyon hideg környezetben a tényleges hőmérséklethez képest akár másfélszeres negatív hőmérséklet is lehet, és gyorsan fagyási sérülésekhez vezethet.
Létrehozandó változó:
W_chill
típusú string
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);
UV- és fényvédelmi ajánlás
Az UV-index alapján meghatározott UV-expozíció alapján a fényvédelmi intézkedések szükséges alkalmazására vonatkozó ajánlás születik.
Létrehozandó változó:
W_UV
típusú stringW_LSF
típusú string
Kód:
! UV
pos = 0;
posStart = 'uv_index":';
posEnd = ', "láthatóság";
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 szám");WriteLine(szám);
string LSF = "";
if (szám = "3") && (szám = "6") && (szám = "8") && (szám = "10") {LSF = "KELL" ;}
dom.GetObject("W_LSF").State(LSF);WriteLine("LSF");WriteLine(LSF);
Szélsebesség
Létrehozandó változó:
W_WdSpd
típusú fizetni
Kód:
! Szélsebesség
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);
Szélsebesség - Átváltások
Mivel a különböző régiókban, országokban és alkalmazásokban különböző szélsebesség-mérőszámokat használnak, itt találja a m/s-ról km/h-ra, csomóra és Beaufortra történő átváltást.
Létrehozandó változó:
W_Wind_kmh
típusú fizetniW_Wind_knh
típusú fizetni- W_Wind_Bft típusú fizetni
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);
ha (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);
}
ha (x > 32,6)
{
dom.GetObject("W_Wind_Bft").State(12);
}
Szélsebesség - fagyási kockázat
A nagyon hideg zónákban utazók figyelmeztetést kapnak ezzel a forgatókönyvvel, ha a szélsebesség és az észlelt külső hőmérséklet miatt fennáll a fagyási kockázat, kivéve, ha megfelelő védőruházatot használnak.
A számítás azon a feltételezésen alapul, hogy a bőr hőmérsékletének -4,8 °C-ra történő csökkenése feltételezhető 30 perces vagy annál rövidebb ideig tartó bőrterhelés esetén, ami azt jelenti, hogy a fagyási sérülések az emberek 5%-jénél fordulnak elő.
Létrehozandó változó:
- W_Wind_danger típusa 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);
}
else
{
dom.GetObject("W_Wind_Danger").State(false);
}
Szél iránya (földrajzi)
Létrehozandó változó:
W_wind_dir
típusú string
Kód:
! Földrajzi szélirány
pos = 0;
posStart = 'wind_dir":"';
posEnd = '", "pressure';
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);
Szél iránya (numerikus)
Létrehozandó változó:
W_Wind_rchtg
típusú string
Kód:
! Szél iránya numerikus
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);
Felhőtakaró
A felhőborítást a Weatherstack angolul is megírta, ezért a német nyelvű fordítás itt található.
Létrehozandó változó:
W_description
típusú string
Kód:
! Felhőtakaró leírása
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 == "Felhős")
{
string clouds_description_DE = "Felhős";
WriteLine("felhők_leírása_DE");WriteLine(felhők_leírása_DE);
dom.GetObject("W_description").State(clouds_description_DE);
}
if (clouds_description == "Könnyű eső")
{
string clouds_description_EN = "Könnyű eső";
WriteLine("felhők_leírása_DE");WriteLine(felhők_leírása_DE);
dom.GetObject("W_description").State(clouds_description_DE);
}
if (clouds_description == "Könnyű zápor")
{
string clouds_description_EN = "Könnyű záporok";
WriteLine("felhők_leírása_DE");WriteLine(felhők_leírása_DE);
dom.GetObject("W_description").State(clouds_description_DE);
}
if (clouds_description == "Könnyű szitálás")
{
string clouds_description_DE = "Szitálás";
WriteLine("felhők_leírása_DE");WriteLine(felhők_leírása_DE);
dom.GetObject("W_description").State(clouds_description_DE);
}
if (clouds_description == "Mis")
{
string clouds_description_DE = "köd";
WriteLine("felhők_leírása_DE");WriteLine(felhők_leírása_DE);
dom.GetObject("W_description").State(clouds_description_DE);
}
if (clouds_description == "Könnyű hózápor")
{
string clouds_description_EN = "Könnyű hózáporok";
WriteLine("felhők_leírása_DE");WriteLine(felhők_leírása_DE);
dom.GetObject("W_description").State(clouds_description_DE);
}
if (clouds_description == "Sunny")
{
string clouds_description_DE = "Vidám";
WriteLine("felhők_leírása_DE");WriteLine(felhők_leírása_DE);
dom.GetObject("W_description").State(clouds_description_DE);
}
if (clouds_description == "Borult")
{
string clouds_description_DE = "Borult";
WriteLine("clouds_description");WriteLine(clouds_description_EN);
dom.GetObject("W_description").State(clouds_description_DE);
}
if (clouds_description == "Részben felhős")
{
string clouds_description_DE = "Részben felhős";
WriteLine("felhők_leírása_DE");WriteLine(felhők_leírása_DE);
dom.GetObject("W_description").State(clouds_description_DE);
}
if (clouds_description == "Clear")
{
string clouds_description_DE = "Tiszta";
WriteLine("felhők_leírása_DE");WriteLine(felhők_leírása_DE);
dom.GetObject("W_description").State(clouds_description_DE);
}
if (clouds_description == "Köd")
{
string clouds_description_DE = "Köd";
WriteLine("felhők_leírása_DE");WriteLine(felhők_leírása_DE);
dom.GetObject("W_description").State(clouds_description_DE);
}
if (clouds_description == "Foltos eső lehetséges")
{
string clouds_description_EN = "Könnyű eső lehetséges";
WriteLine("clouds_description");WriteLine(clouds_description_EN);
dom.GetObject("W_description").State(clouds_description_DE);
}
if (clouds_description == "Mérsékelt eső")
{
string clouds_description_DE = "Mérsékelt csapadék";
WriteLine("clouds_description");WriteLine(clouds_description_EN);
dom.GetObject("W_description").State(clouds_description_DE);
}
Felhőtakaró
Létrehozandó változó:
W_felhők
típusú string
Kód:
! Felhőtakaró
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);
Eső előrejelzés
Létrehozandó változó:
W_Precipitation
típusú string
Kód:
! Előre jelzett eső
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("Csapadék");WriteLine(precip);
dom.GetObject("W_Precipitation").State(precip);
Magasság - Azimut
A forgatókönyvet írta rádiós világítótorony és benyújtották a Homematic Fórum a hivatkozott téma 10. oldalán.
Két rendszerváltozót kell létrehozni:
sun_elevation
típusú Számsun_azimuth
típusú Szám
Miért 4 perc? Mert a Föld 24 óránként egyszer tesz meg 360°-os kört a Nap körül. 360° / 24 óra = 15° óránként, ami 60 perc / 15° = 4 percnek felel meg.
A szkriptet a fenti szkriptektől vagy a kapcsolódó programtól függetlenül kell használni, ha a frissítési időköz eltér a 4 perctől.
Program:

Létrehozandó változók:
sun_azimuth
típusú fizetnisun_elevation
típusú fizetni
Kód:
! Szélesség lekérdezésereal phi = system.Latitude();
phi = 0,017453292 * phi;
! Átváltás radiánokra
! sin_phi és cos_phi kiszámítása Taylor-sorozattalreal temp = phi * phi;
real sin_phi =phi * ((temp * temp * temp * 0,0083334) +1,0 - (temp * 0,1666667));
! szinuszos közelítés
real cos_phi = (temp *temp *0,0416667) + 1,0 - (temp * 0,5);
! koszinusz közelítés
! Napidő számítása, minden idő percben kifejezveinteger 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();
egész sonnenzeit =time_min + 720 - 0,5 *(tagesbeginn_min +tagesende_min);
if (suntime > 1440) {suntime = suntime -1440;}
if (suntime 720) {suntime =suntime - 720; afternoon = true; }
else {sonnenzeit =720 -sonnenzeit;}
! Sin_tau és cos_tau számításareal tau = 0.00436332313 * napidő; ! 15/60 * pi /180 * napidő [0 < tau < pi ] if (tau < 1.570796327) {temp = tau * tau; real sin_tau =tau * ((temp * temp * temp * 0.0083334) +1.0 - (temp * 0.1666667)); tau= 1.570796327 - tau; temp = tau * tau; real cos_tau =tau * ((temp * temp * temp * 0.0083334) +1.0 - (temp * 0.1666667));} else {real tau1 =3.141592654 - tau; temp = tau1 * tau1; real sin_tau =tau1 * ((temp * temp * temp * 0.0083334) +1.0 - (temp * 0.1666667)); tau = tau - 1.570796327; temp = tau * tau; real cos_tau = (tau) (-1.0) ((temp * temp * temp * 0.0083334) +1.0 - (temp * 0.166666667));}
! Számítási deltainteger tageszahl = system.Date("%j").ToInteger(); tageszahl = tageszahl +10; if (tageszahl > 365) {tageszahl = tageszahl - 365;}
if (tageszahl 91) && (tageszahl 183) && (napok száma 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));}! számítás sin_delta, cos_delta
temp = delta * delta; real sin_delta =delta * ((temp * temp * temp * 0.0083334) +1.0 - (temp * 0.1666667)); !szinusz-közelítés real cos_delta = (temp *temp *0.0416667) + 1.0 - (temp * 0.5);
! koszinusz közelítés
! A tan_delta számítása a tan darabonkénti linearizálásávalboolean vsign = true; if (delta=0.2618) {tan_delta = (1.1822*delta) - 0.0416;}
if (vsign == false) {tan_delta = (-1.0) * tan_delta;}
! A sin_magasság és tan_azimut számításavalós sin_magasság = (sin_phi * sin_delta) +( cos_phi * cos_delta * cos_tau);
temp = sin_magasság * sin_magasság;
real sun_elevation = sin_elevation * (1,0 + (0,1666667 * temp) + (0,075 * temp * temp));
sun_elevation = 57.29577951 * sun_elevation;
valós nevező = (sin_phi*cos_tau) - (cos_phi * tan_delta);
if (nevező < 0.0) {boolean plus180 = true;} real tan_azimut = sin_tau / nevező;
! A sun_azimut számítása az arctan darabonkénti linearizálásávalboolean 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_azimut = 7.0)&&(tan_azimut = 12.0)&&(tan_azimut = 20.0)&&(tan_azimuth = 50.0) {sonne_azimut = (0.000099983* tan_azimut) + 1.54579974;}
if (sun_azimuth> 1.5707963278) {sun_azimuth = 1.5707963278;}
if (sign == false) {sun_azimut = (-1.0) * sun_azimut;}
sun_azimuth = 57.29577951 * sun_azimuth;
if (plus180 == true) {sonne_azimut = sonne_azimut + 180.0;}
! Napszak-korrekció és értékek mentése a rendszerváltozókbaif (délután == false)
{sonne_azimut = 180.0 - sonne_azimut; sonnenzeit = 720 - sonnenzeit;}
else
{sonne_azimut = sonne_azimut + 180.0;sonnenzeit = 720 + sonnenzeit;}
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);