Spring til indhold

SmartHome vejrdata

Læsetid 9 minutter

Opdateret - 20. januar 2023

At registrere vejrdata med SmartHome og visualisere dem på din mobiltelefon eller tablet via AIO Creator er generelt ikke en nødvendighed, men det er rart at have.

Online-vejrtjenesten weatherstack.com tilbyder op til 250 forespørgsler pr. måned - gratis i begrænset omfang. Hvis du virkelig vil have opdaterede vejrdata, bør du vælge standardpakken. 50.000 forespørgsler muliggør minutintervaller.

De andre tilgængelige pakker adskiller sig primært ved antallet af forespørgsler og en vejrudsigt på 7 eller 14 dage.

Følgende data er inkluderet i alle pakker:

  • Geografisk længde- og breddegrad
  • Beliggenhed
  • Region
  • Land
  • Tidszone
  • Lokal tid og dato
  • UTC-offset
  • Aktuelt tidspunkt for dataindsamling
  • Lufttemperatur
  • Beskrivelse af vejret
  • Vindhastighed
  • Vindretning numerisk / geografisk
  • Lufttryk
  • Nedbør
  • Fugtighed
  • Skytæthed
  • Køletemperatur
  • UV-indeks
  • Udsigt

Registrering, uanset pakke, kræver de sædvanlige oplysninger og betalingsdetaljer. Et årligt abonnement, i modsætning til et månedligt abonnement, er nedsat med 20%.

Når denne procedure er gennemført, modtager du en såkaldt API-kode (Application Programming Interface), som du kopierer ind i forespørgsels-url'en. Svaret er et XML-output, der indeholder de ovennævnte datakategorier og værdier. Dataene udtrækkes ved hjælp af passende scripts og gemmes i variabler. Disse kan derefter bruges til visualisering i AIO Creator.

En detaljeret beskrivelse af alle mulige parametre i XML-outputtet samt de valgfrie forespørgselsmuligheder, der er inkluderet i de dyrere pakker, inklusive forskellige kodeeksempler, her kan ses.

Program

Programmet er ret omfattende på grund af den store mængde data. De enkelte afsnit er derfor listet i rækkefølge her. Alle kodestykker kan i sidste ende kombineres til et enkelt program.

Ud over de data, der er nævnt ovenfor, beregnes yderligere data i programmet og stilles til rådighed for visualisering:

  • Solens højde og azimut
  • Anbefaling af lysbeskyttelsesfaktor
Program - W_Data - Forespørgsel på vejrdata

Programoverskrift

Headeren indeholder kun URL'en, som skal suppleres med API-nøglen, her vist som xxx, og lokationen (i almindelig tekst eller, adskilt af et komma, som længdegrad og breddegrad, mærket yyy):

var url = "http://api.weatherstack.com/current?access_key=xxx&query=yyy";

Konvertering af tidsformat fra US til DE

Da der ikke er noget valg af displaysprog i gratis- og standardtariffen, og der derfor kun er AM/PM-tidsformatet til rådighed, konverteres dette til 24-timers format.

Variabel, der skal oprettes:

  • W_LDU af typen streng

Kode:

! AM/PM-konvertering - lagring i 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':"';
heltal 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':"';
heltal 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':"';
heltal 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':"';
heltal 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);

hvis (PM == "PM")
{
heltal Diff = 12;
WriteLine("Diff");WriteLine(Diff);
var HH_i = HH.ToInteger();
heltal H = (HH_i + Diff);
WriteLine("HHi + Diff er = 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);
}
ellers
{
WriteLine("LDU_data");WriteLine(daten);
dom.GetObject("W_LDU").State(data);
}


Land - Landekode

Landekoden udskrives også på engelsk og konverteres til den internationale kode her. Yderligere lande kan tilføjes efter dette mønster, hvis det er nødvendigt. Det aktuelle land bestemmes automatisk af den by, der er valgt af Weatherstack.

Variabel, der skal oprettes:

W_landekode af typen streng

Kode:

! Land_kode

pos = 0;
posStart = 'country':"';
posEnd = '", "region";
posValueStart = stdout.Find(posStart) + posStart.Length();
posValueEnd = stdout.Find(posEnd)-posValueStart;
string country_code = stdout.Substr(posValueStart, posValueEnd);

if (landekode == "Tyskland")
{
string country_code = "DE";
}
if (landekode == "Sverige")
{
string country_code = "SE";
}

WriteLine("country_code");WriteLine(country_code);
dom.GetObject("W_country_code").State(country_code);


Region

Regionen betegner f.eks. "Niedersachsen" i Tyskland og bestemmes også automatisk af Weatherstack.

Variabel, der skal oprettes:

  • W_region af typen streng

Kode:

! Region

pos = 0;
posStart = 'region":"';
posEnd = '", "lat";
posValueStart = stdout.Find(posStart) + posStart.Length();
posValueEnd = stdout.Find(posEnd)-posValueStart;
string region = stdout.Substr(posValueStart, posValueEnd);
WriteLine("region");WriteLine(region);
dom.GetObject("W_region").State(region);


By

Når du indtaster byen, bestemmer Weatherstack automatisk de tilsvarende længde- og breddegradsdata, mens byen bestemmes ud fra de indtastede geodata.

Variabel, der skal oprettes:

  • W_city_name af typen streng

Kode:

! By_navn

pos = 0;
posStart = 'navn':"';
posEnd = '", "land";
posValueStart = stdout.Find(posStart) + posStart.Length();
posValueEnd = stdout.Find(posEnd)-posValueStart;
string city_name = stdout.Substr(posValueStart, posValueEnd);
WriteLine("city_name");WriteLine(city_name);
dom.GetObject("W_city_name").State(city_name);


Breddegrad - geogr. Breddegrad

Variabel, der skal oprettes:

  • W_Lat af typen streng

Kode:

! Lat

pos = 0;
posStart = 'query': 'Lat';
posEnd = 'og 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);


Længdegrad - længdegrad

Variabel, der skal oprettes:

  • W_Lon af typen streng

Kode:

! Lon

pos = 0;
posStart = 'og Lon';
posEnd = '", "sprog";
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);


Udsigt - synlighed

Variabel, der skal oprettes:

  • W_vis af typen streng

Kode:

! Synlighed

pos = 0;
posStart = 'synlighed':';
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);


Lufttryk og tendens

Ud over det angivne lufttryk bestemmes lufttrykstrenden i dette script ved at gemme en målt værdi som "aktuel" og en tidligere værdi som "gammel". Begge sammenlignes med hinanden, hvilket resulterer i tendensen.

Variabel, der skal oprettes:

  • W_lufttryk_akt af typen streng
  • W_lufttryk_gammelt af typen streng
  • W_Lufttrykstrend af typen streng

Kode:

! Print

var W_mb_alt;
var W_mb_akt;
pos = 0;
posStart = 'pressure":';
posEnd = ', "nedbør";
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");
}

hvis (W_mb_akt == W_mb_alt)
{
dom.GetObject("W_air_pressure_old").State(W_mb_akt);
dom.GetObject("W_Air pressure trend").State("N");
}


Køletemperatur

Vindafkølingen afhænger af vindhastigheden og temperaturen. I vandsport er effekten af fordampningskøling på grund af vandsprøjt også en ekstra faktor (som der ikke er taget højde for her). Chill refererer til den opfattede temperatur, som i meget kolde omgivelser kan være op til halvanden gang den negative temperatur i forhold til den faktiske temperatur og hurtigt kan føre til forfrysninger.

Variabel, der skal oprettes:

  • W_chill af typen streng

Kode:

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


Anbefaling om UV- og lysbeskyttelse

Den UV-eksponering, der bestemmes på baggrund af UV-indekset, resulterer i en anbefaling om eventuel brug af lysbeskyttelsesforanstaltninger.

Variabel, der skal oprettes:

  • W_UV af typen streng
  • W_LSF af typen streng

Kode:

! UV

pos = 0;
posStart = 'uv_index":';
posEnd = ', "synlighed";
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-nummer");WriteLine(nummer);

string LSF = "";
if (number = "3") && (number = "6") && (number = "8") && (number = "10") {LSF = "MUST" ;}
dom.GetObject("W_LSF").State(LSF);WriteLine("LSF");WriteLine(LSF);


Vindhastighed

Variabel, der skal oprettes:

  • W_WdSpd af typen betale

Kode:

! Vindhastighed

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


Vindhastighed - omregninger

Da der er forskellige foretrukne mål for vindhastighed i forskellige regioner, lande og anvendelser, er her en omregning fra m/s til km/t, knob og Beaufort.

Variabel, der skal oprettes:

  • W_Wind_kmh af typen betale
  • W_Wind_knh af typen betale
  • W_Wind_Bft af typen betale

Kode:

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

hvis (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);
}
hvis (x > 32,6)
{
dom.GetObject("W_Wind_Bft").State(12);
}

Vindhastighed - risiko for forfrysninger

Alle, der rejser i meget kolde områder, vil modtage en advarsel med dette script, hvis der er risiko for forfrysninger på grund af vindhastigheden og den opfattede udetemperatur, medmindre man bruger passende beskyttelsestøj.

Beregningen er baseret på den antagelse, at et fald i hudtemperaturen til -4,8 °C kan antages ved hudeksponering i 30 minutter eller mindre, hvilket betyder, at forfrysninger forekommer hos 5% af mennesker.

Variabel, der skal oprettes:

  • W_Wind_danger af typen boolsk

Kode:

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);
}
ellers
{
dom.GetObject("W_Wind_Danger").State(false);
}


Vindretning (geografisk)

Variabel, der skal oprettes:

  • W_wind_dir af typen streng

Kode:

! Geografisk vindretning

pos = 0;
posStart = 'wind_dir':"';
posEnd = '", "tryk";
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);


Vindretning (numerisk)

Variabel, der skal oprettes:

  • W_Wind_rchtg af typen streng

Kode:

! Vindretning numerisk

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


Skydække

Skydækket er også skrevet på engelsk af Weatherstack, hvorfor oversættelsen til tysk findes her.

Variabel, der skal oprettes:

  • W_beskrivelse af typen streng

Kode:

! Beskrivelse af skydække

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 == "Skyet")
{
string clouds_description_DE = "Skyet";
WriteLine("clouds_description_DE");WriteLine(clouds_description_DE);
dom.GetObject("W_description").State(clouds_description_DE);
}
if (clouds_description == "Let regn")
{
string clouds_description_EN = "Let regn";
WriteLine("clouds_description_DE");WriteLine(clouds_description_DE);
dom.GetObject("W_description").State(clouds_description_DE);
}
if (clouds_description == "Let regnbyge")
{
string clouds_description_EN = "Lette regnbyger";
WriteLine("clouds_description_DE");WriteLine(clouds_description_DE);
dom.GetObject("W_description").State(clouds_description_DE);
}
if (clouds_description == "Let støvregn")
{
string clouds_description_DE = "Drypregn";
WriteLine("clouds_description_DE");WriteLine(clouds_description_DE);
dom.GetObject("W_description").State(clouds_description_DE);
}
if (clouds_description == "Mis")
{
string clouds_description_DE = "dis";
WriteLine("clouds_description_DE");WriteLine(clouds_description_DE);
dom.GetObject("W_description").State(clouds_description_DE);
}
if (clouds_description == "Lette snebyger")
{
string clouds_description_EN = "Lette snebyger";
WriteLine("clouds_description_DE");WriteLine(clouds_description_DE);
dom.GetObject("W_description").State(clouds_description_DE);
}
if (clouds_description == "Sunny")
{
string clouds_description_DE = "Munter";
WriteLine("clouds_description_DE");WriteLine(clouds_description_DE);
dom.GetObject("W_description").State(clouds_description_DE);
}
if (clouds_description == "Overskyet")
{
string clouds_description_DE = "Overskyet";
WriteLine("clouds_description");WriteLine(clouds_description_EN);
dom.GetObject("W_description").State(clouds_description_DE);
}
if (clouds_description == "Delvis overskyet")
{
string clouds_description_DE = "Delvis overskyet";
WriteLine("clouds_description_DE");WriteLine(clouds_description_DE);
dom.GetObject("W_description").State(clouds_description_DE);
}
if (clouds_description == "Clear")
{
string clouds_description_DE = "Klar";
WriteLine("clouds_description_DE");WriteLine(clouds_description_DE);
dom.GetObject("W_description").State(clouds_description_DE);
}
if (clouds_description == "Tåge")
{
string clouds_description_DE = "Tåge";
WriteLine("clouds_description_DE");WriteLine(clouds_description_DE);
dom.GetObject("W_description").State(clouds_description_DE);
}
if (clouds_description == "Pletvis regn mulig")
{
string clouds_description_EN = "Let regn mulig";
WriteLine("clouds_description");WriteLine(clouds_description_EN);
dom.GetObject("W_description").State(clouds_description_DE);
}
if (clouds_description == "Moderat regn")
{
string clouds_description_DE = "Moderat nedbør";
WriteLine("clouds_description");WriteLine(clouds_description_EN);
dom.GetObject("W_description").State(clouds_description_DE);
}


Skydække

Variabel, der skal oprettes:

  • W_clouds af typen streng

Kode:

! Skydække

pos = 0;
posStart = 'cloudcover":';
posEnd = ', "føles som";
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);


Vejrudsigt for regn

Variabel, der skal oprettes:

  • W_Fældning af typen streng

Kode:

! Udsigt til regn

var x;
pos = 0;
posStart = 'precip":';
posEnd = ', "fugtighed";
posValueStart = stdout.Find(posStart) + posStart.Length();
posValueEnd = stdout.Find(posEnd)-posValueStart;
string precip = stdout.Substr(posValueStart, posValueEnd);
WriteLine("Nedbør");WriteLine(nedbør);
dom.GetObject("W_Precipitation").State(precip);


Elevation - Azimut

Manuskriptet er skrevet af radiofyrtårn og sendt til Homematisk forum på side 10 i den linkede tråd.

Der skal oprettes to systemvariabler:

  • sol_højden af typen Antal
  • sol_azimut af typen Antal

Hvorfor 4 minutter? Fordi jorden fuldfører sin 360°-cirkel omkring solen en gang hver 24. time. 360° / 24h = 15° i timen, hvilket svarer til 60 minutter / 15° = 4 minutter.

Scriptet skal bruges uafhængigt af ovenstående scripts eller det tilhørende program, hvis opdateringsintervallet er anderledes end 4 minutter.

Program:

Program - Bestemmelse af højde/azimut

Variabler, der skal oprettes:

  • sol_azimut af typen betale
  • sol_højde af typen betale

Kode:

! Hent breddegrad
real phi = system.Latitude();
phi = 0,017453292 * phi;


! Omregning til radianer
! beregn sin_phi og cos_phi med taylor-serien
real temp = phi * phi;
real sin_phi =phi * ((temp * temp * 0,0083334) +1,0 - (temp * 0,1666667));


! sinusformet tilnærmelse
real cos_phi = (temp *temp *0,0416667) + 1,0 - (temp * 0,5);


! cosinus-tilnærmelse
! Beregning af soltid, alle tider i minutter
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();
integer 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;}


! Beregning af sin_tau og cos_tau
real tau = 0,00436332313 * soltid; ! 15/60 * pi /180 * soltid [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));} temp = tau * tau.1666667));} else {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));}

! Beregning af delta
integer tageszahl = system.Date("%j").ToInteger(); tageszahl = tageszahl +10; if (tageszahl > 365) {tageszahl = tageszahl - 365;}
if (tageszahl 91) && (tageszahl 183) && (antal dage 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));}

! beregning sin_delta, cos_delta
temp = delta * delta; real sin_delta =delta * ((temp * temp * 0,0083334) +1,0 - (temp * 0,1666667)); !sinus-tilnærmelse real cos_delta = (temp *temp *0,0416667) + 1,0 - (temp * 0,5);

! cosinus-tilnærmelse
! Beregning af tan_delta med stykkevis linearisering af tan
boolean vsign = true; if (delta=0,2618) {tan_delta = (1,1822*delta) - 0,0416;}
if (vsign == false) {tan_delta = (-1,0) * tan_delta;}


! Beregning af sin_elevation og tan_azimuth
real sin_elevation = (sin_phi * sin_delta) +( cos_phi * cos_delta * cos_tau);
temp = sin_elevation * sin_elevation;
real sun_elevation = sin_elevation * (1,0 + (0,1666667 * temp) + (0,075 * temp * temp));
sol_højde = 57,29577951 * sol_højde;
reel nævner = (sin_phi*cos_tau) - (cos_phi * tan_delta);
if (denominator < 0.0) {boolean plus180 = true;} real tan_azimut = sin_tau / denominator;


! Beregning af sun_azimuth med stykkevis linearisering af arctan
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;}


! Gem time-of-day-korrektion og værdier i systemvariabler
hvis (eftermiddag == falsk)
{sonne_azimut = 180.0 - sonne_azimut; sonnenzeit = 720 - sonnenzeit;}
ellers
{sun_azimuth = sun_azimuth + 180.0;sun_time = 720 + sun_time;}
sol_azimut = 0,1 ((sun_azimut10.0) .ToInteger());
sol_højde = 0,1 ((sol_højde10.0) .ToInteger());
dom.GetObject("sonne_elevation").State(sonne_elevation);
dom.GetObject("sonne_azimut").State(sonne_azimut);

Skriv et svar

Din e-mailadresse vil ikke blive publiceret. Krævede felter er markeret med *