Sisällysluettelo
Päivitetty - tammikuu 20, 2023
Säätietojen tallentaminen SmartHomen avulla ja niiden visualisointi matkapuhelimeen tai tablettiin AIO Creatorin avulla ei yleensä ole välttämätöntä, mutta se on mukava olla.
Online-sääpalvelu weatherstack.com tarjoaa jopa 250 kyselyä kuukaudessa - rajoitetusti ilmaiseksi. Jos todella haluat ajantasaiset säätiedot, kannattaa valita vakiopaketti. 50 000 kyselyä mahdollistaa minuutin välein.
Muut saatavilla olevat paketit eroavat toisistaan lähinnä tiedustelujen määrän ja 7 tai 14 päivän sääennusteen osalta.
Seuraavat tiedot sisältyvät kaikkiin paketteihin:
- Maantieteellinen pituus- ja leveysaste
- Sijainti
- Alue
- Maa
- Aikavyöhyke
- Paikallinen aika ja päivämäärä
- UTC Offset
- Tietojen keruun ajankohta
- Ilman lämpötila
- Sään kuvaus
- Tuulen nopeus
- Tuulen suunta numeerinen / maantieteellinen
- Ilmanpaine
- Sademäärä
- Kosteus
- Pilvien tiheys
- Jäähdytyslämpötila
- UV-indeksi
- Näytä
Ilmoittautuminen edellyttää paketista riippumatta tavanomaisia tietoja ja maksutietoja. 20% tarjoaa alennusta vuositilauksesta kuukausitilauksen sijaan.
Kun tämä menettely on suoritettu onnistuneesti, saat niin sanotun API-koodin (Application Programming Interface), jonka kopioit kysely-url-osoitteeseen. Vastaus on XML-tuloste, joka sisältää edellä mainitut tietoluokat ja arvot. Tiedot poimitaan sopivilla skripteillä ja tallennetaan muuttujiin. Näitä voidaan sitten käyttää visualisointiin AIO Creatorissa.
Yksityiskohtainen kuvaus kaikista mahdollisista XML-tulosteen parametreista sekä kalliimpiin paketteihin sisältyvistä valinnaisista kyselyvaihtoehdoista, mukaan lukien useita koodiesimerkkejä, täällä nähtävissä.
Ohjelma
Ohjelma on melko laaja, koska aineisto on suuri. Sen vuoksi yksittäiset osat luetellaan tässä peräkkäin. Kaikki koodinpätkät voidaan lopulta yhdistää yhdeksi ohjelmaksi.
Edellä mainittujen tietojen lisäksi ohjelmassa lasketaan muita tietoja, jotka ovat saatavilla visualisointia varten:
- Auringon korkeus ja atsimuutti
- Valonsuojakertoimen suositus

Ohjelman otsikko
Otsikko sisältää vain URL-osoitteen, jota on täydennettävä API-avaimella, joka tässä näytetään muodossa xxx, ja sijainnilla (tavallisena tekstinä tai pilkulla erotettuna pituus- ja leveysasteena, merkintä yyy):
var url = "http://api.weatherstack.com/current?access_key=xxx&query=yyy";
Muunnos US to DE aikamuoto
Koska ilmaisessa ja vakiotariffissa ei ole valittavissa näyttökieltä, ja siksi käytettävissä on vain AM/PM-aikaformaatti, tämä muunnetaan 24 tunnin muotoon.
Luottava muuttuja:
W_LDUtyyppiä merkkijono
Koodi:
! AM/PM-muunnos - Tallentaminen W_LDU-muodossa
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 = 'havainnointiaika':'';
kokonaisluku word_length = word.Length();
kokonaisluku word_position = wetter_xml.Find(word);
string data = wetter_xml.Substr((word_position + word_laenge), 5);
kokonaisluku word_position = data.Find(word);
data = data.Substr(0, (word_position -2));
string word = 'havainnointiaika':'';
kokonaisluku word_length = word.Length();
kokonaisluku word_position = wetter_xml.Find(word);
string PM = wetter_xml.Substr((word_position + word_laenge +6), 2);
kokonaisluku word_position = PM.Find(word);
PM = PM.Substr(0, (word_position -2));
WriteLine("AM/PM");WriteLine(PM);
string word = 'havainnointiaika':'';
kokonaisluku word_length = word.Length();
kokonaisluku word_position = wetter_xml.Find(word);
string HH = wetter_xml.Substr((word_position + word_laenge) + 1, 1);
kokonaisluku word_position = HH.Find(word);
HH = HH.Substr(0, (word_position -2));
WriteLine("HH");WriteLine(HH);
string word = 'havainnointiaika':'';
kokonaisluku word_length = word.Length();
kokonaisluku word_position = wetter_xml.Find(word);
string MM = wetter_xml.Substr((word_position + word_laenge) +3, 2);
kokonaisluku word_position = MM.Find(word);
MM = MM.Substr(0, (word_position -2));
WriteLine("MM");WriteLine(MM);
if (PM == "PM")
{
kokonaisluku Diff = 12;
WriteLine("Diff");WriteLine(Diff);
var HH_i = HH.ToInteger();
kokonaisluku H = (HH_i + Diff);
WriteLine("HHi + Diff on = H)");WriteLine(H);
merkkijono HHMM = H #":";
WriteLine("H_+ : ");WriteLine(HHMM);
merkkijono HM = HHMM # MM;
WriteLine("HH_+12+MM");WriteLine(HM);
dom.GetObject("W_LDU").State(HM);
}
else
{
WriteLine("LDU_daten");WriteLine(daten);
dom.GetObject("W_LDU").State(data);
}
Maa - Maakoodi
Maakoodi tulostetaan myös englanniksi ja muunnetaan kansainväliseksi koodiksi tässä. Tarvittaessa voidaan lisätä muita maita tämän mallin mukaisesti. Nykyinen maa määräytyy automaattisesti Weatherstackin valitseman kaupungin mukaan.
Luottava muuttuja:
W_country_code tyyppiä merkkijono
Koodi:
! Maa_koodi
pos = 0;
posStart = 'maa':"';
posEnd = '", "region";
posValueStart = stdout.Find(posStart) + posStart.Length();
posValueEnd = stdout.Find(posEnd)-posValueStart;
string country_code = stdout.Substr(posValueStart, posValueEnd);
if (country_code == "Saksa")
{
string country_code = "DE";
}
if (country_code == "Ruotsi")
{
string country_code = "SE";
}
WriteLine("maa_koodi");WriteLine(maa_koodi);
dom.GetObject("W_country_code").State(country_code);
Alue
Alue tarkoittaa esimerkiksi "Niedersachsen" Saksassa, ja Weatherstack määrittää sen automaattisesti.
Luottava muuttuja:
W_aluetyyppiä merkkijono
Koodi:
! Alue
pos = 0;
posStart = "region":"";
posEnd = '", "lat';
posValueStart = stdout.Find(posStart) + posStart.Length();
posValueEnd = stdout.Find(posEnd)-posValueStart;
string region = stdout.Substr(posValueStart, posValueEnd);
WriteLine("alue");WriteLine(alue);
dom.GetObject("W_region").State(region);
Kaupunki
Kun syötät kaupungin, Weatherstack määrittää automaattisesti vastaavat pituus- ja leveysasteet, kun taas kaupunki määritetään syötettyjen paikkatietojen perusteella.
Luottava muuttuja:
W_city_nametyyppiä merkkijono
Koodi:
! Kaupungin_nimi
pos = 0;
posStart = 'name':"';
posEnd = '", "maa";
posValueStart = stdout.Find(posStart) + posStart.Length();
posValueEnd = stdout.Find(posEnd)-posValueStart;
string city_name = stdout.Substr(posValueStart, posValueEnd);
WriteLine("kaupungin_nimi");WriteLine(kaupungin_nimi);
dom.GetObject("W_city_name").State(city_name);
Leveysaste - geogr. Leveysaste
Luottava muuttuja:
W_Lattyyppiä merkkijono
Koodi:
! Lat
pos = 0;
posStart = "query": "Lat";
posEnd = 'ja 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);
Pituusaste - pituusaste
Luottava muuttuja:
W_Lontyyppiä merkkijono
Koodi:
! Lon
pos = 0;
posStart = "ja 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äkymä - näkyvyys
Luottava muuttuja:
W_vistyyppiä merkkijono
Koodi:
! Näkyvyys
pos = 0;
posStart = 'näkyvyys':';
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);
Ilmanpaine ja taipumus
Toimitetun ilmanpaineen lisäksi tässä komentosarjassa määritetään ilmanpaineen suuntaus tallentamalla mitattu arvo "nykyiseksi" ja edellinen arvo "vanhaksi". Molempia verrataan toisiinsa, jolloin saadaan trendi.
Luottava muuttuja:
W_air_pressure_acttyyppiä merkkijonoW_ilmanpaine_vanhatyyppiä merkkijonoW_ilmanpaineen suuntaustyyppiä merkkijono
Koodi:
! Tulosta
var W_mb_alt;
var W_mb_akt;
pos = 0;
posStart = 'paine':';
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");
}
Jäähdytyslämpötila
Tuulen kylmyys riippuu tuulen nopeudesta ja lämpötilasta. Vesiurheilulajeissa myös suihkun aiheuttama haihtumisjäähdytys on lisätekijä (jota ei ole otettu tässä huomioon). Kylmyys viittaa koettuun lämpötilaan, joka hyvin kylmissä ympäristöissä voi olla jopa puolitoistakertainen negatiivinen lämpötila todelliseen lämpötilaan verrattuna ja voi johtaa nopeasti paleltumiseen.
Luottava muuttuja:
W_chilltyyppiä merkkijono
Koodi:
! 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- ja valonsuojaussuositus
UV-indeksin perusteella määritetty UV-altistus johtaa suositukseen valonsuojaustoimenpiteiden käytöstä.
Luottava muuttuja:
W_UVtyyppiä merkkijonoW_LSFtyyppiä merkkijono
Koodi:
! UV
pos = 0;
posStart = 'uv_index':';
posEnd = ', "näkyvyys";
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-numero");WriteLine(numero);
string LSF = "";
if (numero = "3") && (numero = "6") && (luku = "8") && (number = "10") {LSF = "PAKOLLINEN" ;}
dom.GetObject("W_LSF").State(LSF);WriteLine("LSF");WriteLine(LSF);
Tuulen nopeus
Luottava muuttuja:
W_WdSpdtyyppiä maksaa
Koodi:
! Tuulen nopeus
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);
Tuulen nopeus - Muunnokset
Koska eri alueilla, eri maissa ja eri sovelluksissa käytetään eri tuulennopeusmittareita, tässä on muunnos m/s:stä km/h:ksi, solmuiksi ja Beaufortin asteikoksi.
Luottava muuttuja:
W_Wind_kmhtyyppiä maksaaW_Wind_knhtyyppiä maksaa- W_Wind_Bft, tyyppi maksaa
Koodi:
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);
jos (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);
}
jos (x > 32,6)
{
dom.GetObject("W_Wind_Bft").State(12);
}
Tuulen nopeus - paleltumavaara
Hyvin kylmillä alueilla matkustavat saavat tämän käsikirjoituksen yhteydessä varoituksen, jos tuulen nopeuden ja ulkolämpötilan perusteella on olemassa paleltumisvaara, ellei asianmukaista suojavaatetusta käytetä.
Laskelma perustuu oletukseen, että ihon lämpötilan voidaan olettaa laskevan -4,8 °C:een, kun iho altistuu 30 minuuttia tai vähemmän, mikä tarkoittaa, että paleltumia esiintyy 5%:lla ihmisistä.
Luottava muuttuja:
- W_Wind_danger, tyyppi boolean
Koodi:
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);
}
Tuulen suunta (maantieteellinen)
Luottava muuttuja:
W_wind_dirtyyppiä merkkijono
Koodi:
! Maantieteellinen tuulen suunta
pos = 0;
posStart = 'wind_dir':"';
posEnd = '", "paine";
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);
Tuulen suunta (numeerinen)
Luottava muuttuja:
W_Wind_rchtgtyyppiä merkkijono
Koodi:
! Tuulen suunta numeerinen
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);
Pilvipeite
Weatherstack on kirjoittanut pilvipeitteen myös englanniksi, minkä vuoksi tässä on käännös saksaksi.
Luottava muuttuja:
W_descriptiontyyppiä merkkijono
Koodi:
! Pilvipeitteen kuvaus
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("pilvien_kuvaus_EN");WriteLine(pilvien_kuvaus);
if (clouds_description == "Pilvinen")
{
string clouds_description_DE = "Pilvinen";
WriteLine("pilvet_kuvaus_DE");WriteLine(pilvet_kuvaus_DE);
dom.GetObject("W_description").State(clouds_description_DE);
}
if (clouds_description == "Kevyt sade")
{
string clouds_description_DE = "Kevyt sade";
WriteLine("pilvet_kuvaus_DE");WriteLine(pilvet_kuvaus_DE);
dom.GetObject("W_description").State(clouds_description_DE);
}
if (clouds_description == "Kevyt sadekuuro")
{
string clouds_description_EN = "Kevyet sadekuurot";
WriteLine("pilvet_kuvaus_DE");WriteLine(pilvet_kuvaus_DE);
dom.GetObject("W_description").State(clouds_description_DE);
}
if (clouds_description == "Kevyt tihkusade")
{
string clouds_description_DE = "tihkusade";
WriteLine("pilvet_kuvaus_DE");WriteLine(pilvet_kuvaus_DE);
dom.GetObject("W_description").State(clouds_description_DE);
}
if (clouds_description == "Mis")
{
string clouds_description_DE = "usva";
WriteLine("pilvet_kuvaus_DE");WriteLine(pilvet_kuvaus_DE);
dom.GetObject("W_description").State(clouds_description_DE);
}
if (clouds_description == "Kevyet lumisateet")
{
string clouds_description_EN = "Kevyet lumisateet";
WriteLine("pilvet_kuvaus_DE");WriteLine(pilvet_kuvaus_DE);
dom.GetObject("W_description").State(clouds_description_DE);
}
if (clouds_description == "Sunny")
{
string clouds_description_DE = "Iloinen";
WriteLine("pilvet_kuvaus_DE");WriteLine(pilvet_kuvaus_DE);
dom.GetObject("W_description").State(clouds_description_DE);
}
if (pilvien_kuvaus == "Pilvinen")
{
string clouds_description_DE = "Pilvinen";
WriteLine("pilvien_kuvaus");WriteLine(pilvien_kuvaus_EN);
dom.GetObject("W_description").State(clouds_description_DE);
}
if (clouds_description == "Osittain pilvistä")
{
string clouds_description_DE = "Osittain pilvistä";
WriteLine("pilvet_kuvaus_DE");WriteLine(pilvet_kuvaus_DE);
dom.GetObject("W_description").State(clouds_description_DE);
}
if (clouds_description == "Clear")
{
string clouds_description_DE = "Tyhjä";
WriteLine("pilvet_kuvaus_DE");WriteLine(pilvet_kuvaus_DE);
dom.GetObject("W_description").State(clouds_description_DE);
}
if (clouds_description == "Sumu")
{
string clouds_description_DE = "Sumu";
WriteLine("pilvet_kuvaus_DE");WriteLine(pilvet_kuvaus_DE);
dom.GetObject("W_description").State(clouds_description_DE);
}
if (pilvien_kuvaus == "Sataa mahdollisesti")
{
string clouds_description_EN = "Kevyt sade mahdollinen";
WriteLine("pilvien_kuvaus");WriteLine(pilvien_kuvaus_EN);
dom.GetObject("W_description").State(clouds_description_DE);
}
if (clouds_description == "Kohtalainen sade")
{
string clouds_description_DE = "Kohtalainen sademäärä";
WriteLine("pilvien_kuvaus");WriteLine(pilvien_kuvaus_EN);
dom.GetObject("W_description").State(clouds_description_DE);
}
Pilvipeite
Luottava muuttuja:
W_cloudstyyppiä merkkijono
Koodi:
! Pilvipeite
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);
Sade ennuste
Luottava muuttuja:
W_Precipitationtyyppiä merkkijono
Koodi:
! Ennuste sade
var x;
pos = 0;
posStart = 'precip':';
posEnd = ', "kosteus";
posValueStart = stdout.Find(posStart) + posStart.Length();
posValueEnd = stdout.Find(posEnd)-posValueStart;
string precip = stdout.Substr(posValueStart, posValueEnd);
WriteLine("Sademäärä");WriteLine(precip);
dom.GetObject("W_Precipitation").State(precip);
Korkeus - atsimuutti
Käsikirjoituksen on kirjoittanut radiomajakka ja toimitettu Homemaattinen foorumi linkitetyn viestiketjun sivulla 10.
On luotava kaksi järjestelmämuuttujaa:
sun_elevationtyyppiä Numerosun_azimuthtyyppiä Numero
Miksi 4 minuuttia? Koska maa kiertää 360°:n ympyrän auringon ympäri kerran 24 tunnissa. 360° / 24h = 15° tunnissa, mikä vastaa 60 minuuttia / 15° = 4 minuuttia.
Skriptiä olisi käytettävä riippumatta edellä mainituista skripteistä tai niihin liittyvästä ohjelmasta, jos päivitysväli on muu kuin 4 minuuttia.
Ohjelma:

Luodut muuttujat:
sun_azimuthtyyppiä maksaaauringon_korkeustyyppiä maksaa
Koodi:
! Hae leveysastereal phi = system.Latitude();
phi = 0,017453292 * phi;
! Muunnos radiaaneiksi
! laske sin_phi ja cos_phi Taylor-sarjan avulla.real temp = phi * phi;
real sin_phi =phi * ((temp * temp * temp * 0.0083334) +1.0 - (temp * 0.1666667));
! sinimuotoinen approksimaatio
real cos_phi = (temp *temp *0,0416667) + 1,0 - (temp * 0,5);
! kosinuksen approksimaatio
! Auringon ajan laskeminen, kaikki ajat minuutteinainteger 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();
kokonaisluku 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 ja cos_tau laskeminenreal tau = 0.00436332313 * auringon aika; ! 15/60 * pi /180 * aurinkoaika [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.1666667));}
! Laskenta deltainteger tageszahl = system.Date("%j").ToInteger(); tageszahl = tageszahl +10; if (tageszahl > 365) {tageszahl = tageszahl - 365;}
if (tageszahl 91) && (tageszahl 183) && (päivien lukumäärä 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));}! laskenta sin_delta, cos_deltatemp = delta * delta; real sin_delta =delta * ((temp * temp * temp * 0.0083334) +1.0 - (temp * 0.1666667)); !sini-lähestymistapa real cos_delta = (temp *temp *0.0416667) + 1.0 - (temp * 0.5);
! kosinuksen approksimaatio
! Laskenta tan_delta, jossa tan on linearisoitu kappaleittain.boolean vsign = true; if (delta=0.2618) {tan_delta = (1.1822*delta) - 0.0416;}
if (vsign == false) {tan_delta = (-1.0) * tan_delta;}! Sin_korkeuden ja tan_atsimuutin laskeminenreal sin_korkeus = (sin_phi * sin_delta) +( cos_phi * cos_delta * cos_tau);
temp = sin_korkeus * sin_korkeus;
real sun_elevation = sin_elevation * (1.0 + (0.1666667 * temp) + (0.075 * temp * temp));
sun_elevation = 57.29577951 * sun_elevation;
todellinen nimittäjä = (sin_phi*cos_tau) - (cos_phi * tan_delta);
if (nimittäjä < 0.0) {boolean plus180 = true;} real tan_azimut = sin_tau / nimittäjä;
! Sun_azimuthin laskeminen arctan-arvon linearisoinnilla kappaleittainboolean 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;}! Tallenna kellonaikakorjaus ja arvot järjestelmämuuttujiin.if (iltapäivä == false)
{sonne_azimut = 180.0 - sonne_azimut; sonnenzeit = 720 - sonnenzeit;}
else
{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_korkeus").State(sonne_korkeus);
dom.GetObject("sonne_azimut").State(sonne_azimut);