Siirry suoraan sisältöön

SmartHome säätiedot

Lukuaika 9 minuuttia

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
Ohjelma - W_Data - Säätiedot-kysely

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_LDU tyyppiä 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_alue tyyppiä 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_name tyyppiä 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_Lat tyyppiä 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_Lon tyyppiä 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_vis tyyppiä 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_act tyyppiä merkkijono
  • W_ilmanpaine_vanha tyyppiä merkkijono
  • W_ilmanpaineen suuntaus tyyppiä 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_chill tyyppiä 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_UV tyyppiä merkkijono
  • W_LSF tyyppiä 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_WdSpd tyyppiä 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_kmh tyyppiä maksaa
  • W_Wind_knh tyyppiä 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_dir tyyppiä 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_rchtg tyyppiä 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_description tyyppiä 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_clouds tyyppiä 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_Precipitation tyyppiä 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_elevation tyyppiä Numero
  • sun_azimuth tyyppiä 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:

Ohjelma - Korkeuden / atsimuutin määrittäminen

Luodut muuttujat:

  • sun_azimuth tyyppiä maksaa
  • auringon_korkeus tyyppiä maksaa

Koodi:

! Hae leveysaste
real 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 minuutteina
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();
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 laskeminen
real 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 delta
integer 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_delta
temp = 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 laskeminen
real 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 kappaleittain
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;}


! 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);

Vastaa

Sähköpostiosoitettasi ei julkaista. Pakolliset kentät on merkitty *