Ugrás a tartalomra

SmartHome időjárási adatok

Tartalomjegyzék

Olvasási idő 9 percek

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 - W_Data - Időjárási adatok lekérdezése

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ú string
  • W_levegőnyomás_régi típusú string
  • W_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ú string
  • W_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ú fizetni
  • W_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ám
  • sun_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:

Program - Magasság/azimut meghatározás

Létrehozandó változók:

  • sun_azimuth típusú fizetni
  • sun_elevation típusú fizetni

Kód:

! Szélesség lekérdezése
real phi = system.Latitude();
phi = 0,017453292 * phi;


! Átváltás radiánokra
! sin_phi és cos_phi kiszámítása Taylor-sorozattal
real 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 kifejezve
integer 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ása
real 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 delta
integer 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ával
boolean 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ása
való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ával
boolean 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ókba
if (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);

Vélemény, hozzászólás?

Az e-mail címet nem tesszük közzé. A kötelező mezőket * karakterrel jelöltük

hu_HUHungarian
We've detected you might be speaking a different language. Do you want to change to:
en_US English
de_DE German
en_US English
fr_FR French
sv_SE Swedish
es_ES Spanish
pt_PT Portuguese
it_IT Italian
nl_NL Dutch
nb_NO Norwegian
fi Finnish
da_DK Danish
cs_CZ Czech
hu_HU Hungarian
el Greek
ru_RU Russian
tr_TR Turkish
ja Japanese
lt_LT Lithuanian
lv Latvian
sl_SI Slovenian
sk_SK Slovak
Close and do not switch language