Indholdsfortegnelse
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

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_LDUaf 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_regionaf 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_nameaf 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_Lataf 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_Lonaf 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_visaf 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_aktaf typen strengW_lufttryk_gammeltaf typen strengW_Lufttrykstrendaf typen streng
Kode:
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_chillaf 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_UVaf typen strengW_LSFaf 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_WdSpdaf 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_kmhaf typen betaleW_Wind_knhaf 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_diraf 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_rchtgaf 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_beskrivelseaf 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_cloudsaf 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ældningaf 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øjdenaf typen Antalsol_azimutaf 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:

Variabler, der skal oprettes:
sol_azimutaf typen betalesol_højdeaf typen betale
Kode:
! Hent breddegradreal phi = system.Latitude();
phi = 0,017453292 * phi;
! Omregning til radianer
! beregn sin_phi og cos_phi med taylor-serienreal 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 minutterinteger 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_taureal 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 deltainteger 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_deltatemp = 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 tanboolean 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_azimuthreal 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 arctanboolean 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 systemvariablerhvis (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);