Innholdsfortegnelse
Aktualisiert – Januar 20, 2023
Det er ikke nødvendig å registrere værdata med SmartHome og visualisere dem på mobiltelefonen eller nettbrettet via AIO Creator, men det er kjekt å ha.
Den nettbaserte værtjenesten weatherstack.com tilbyr opptil 250 spørringer per måned - gratis i begrenset omfang. Hvis du virkelig ønsker oppdaterte værdata, bør du velge standardpakken. 50 000 forespørsler muliggjør minuttintervaller.
De andre pakkene som er tilgjengelige, skiller seg først og fremst ut med hensyn til antall henvendelser og en værmelding på 7 eller 14 dager.
Følgende data er inkludert i alle pakkene:
- Geografisk lengde- og breddegrad
- Beliggenhet
- Region
- Land
- Tidssone
- Lokal tid og dato
- UTC-forskyvning
- Gjeldende tidspunkt for datainnsamling
- Lufttemperatur
- Beskrivelse av været
- Vindhastighet
- Vindretning numerisk / geografisk
- Lufttrykk
- Nedbør
- Luftfuktighet
- Skytetthet
- Nedkjølingstemperatur
- UV-indeks
- Utsikt
Registrering, uavhengig av pakke, krever de vanlige opplysningene og betalingsopplysningene. Et årsabonnement, i motsetning til et månedsabonnement, er rabattert med 20%.
Når denne prosedyren er fullført, mottar du en såkalt API-kode (Application Programming Interface), som du kopierer inn i spørringsadressen. Svaret er en XML-utdata som inneholder de ovennevnte datakategoriene og -verdiene. Dataene hentes ut ved hjelp av egnede skript og lagres i variabler. Disse kan deretter brukes til visualisering i AIO Creator.
En detaljert beskrivelse av alle mulige parametere i XML-utdataene, samt de valgfrie spørringsalternativene som inngår i de dyrere pakkene, inkludert ulike kodeeksempler, her synlig.
Program
Programmet er ganske omfattende på grunn av den store datamengden. De enkelte delene er derfor listet opp i rekkefølge her. Alle kodesnippene kan etter hvert settes sammen til ett program.
I tillegg til dataene som er nevnt ovenfor, beregnes ytterligere data i programmet og gjøres tilgjengelig for visualisering:
- Solens elevasjon og azimut
- Anbefalt lysbeskyttelsesfaktor

Programoverskrift
Headeren inneholder bare URL-adressen, som må suppleres med API-nøkkelen, som her vises som xxx, og lokasjonen (i klartekst eller, adskilt med komma, som lengde- og breddegrad, merket yyy):
var url = "http://api.weatherstack.com/current?access_key=xxx&query=yyy";
Konvertering av tidsformat fra US til DE
Ettersom det ikke er mulig å velge visningsspråk i gratis- og standardtariffen, og det derfor bare er AM/PM-tidsformatet som er tilgjengelig, konverterer systemet her til 24-timersformat.
Variabel som skal opprettes:
W_LDU
av 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 = 'observasjon_tid':"';
heltall word_length = word.Length();
integer word_position = wetter_xml.Find(word);
string data = wetter_xml.substr((word_position + word_laenge), 5);
heltall word_position = data.Find(word);
data = data.substr(0, (word_position -2));
string word = 'observasjon_tid':"';
heltall 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 = 'observasjon_tid':"';
heltall 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 = 'observasjon_tid':"';
heltall 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")
{
heltall Diff = 12;
WriteLine("Diff");WriteLine(Diff);
var HH_i = HH.ToInteger();
heltall 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 - Landskode
Landskoden skrives også ut på engelsk og konverteres til den internasjonale koden her. Flere land kan legges til i henhold til dette mønsteret hvis det er nødvendig. Det aktuelle landet bestemmes automatisk av byen som er valgt av Weatherstack.
Variabel som skal opprettes:
W_land_kode
av 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 (land_kode == "Tyskland")
{
string country_code = "DE";
}
if (land_kode == "Sverige")
{
string country_code = "SE";
}
WriteLine("land_kode");WriteLine(land_kode);
dom.GetObject("W_country_code").State(country_code);
Region
Regionen refererer for eksempel til "Niedersachsen" i Tyskland og bestemmes også automatisk av Weatherstack.
Variabel som skal opprettes:
W_region
av 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 legger inn byen, finner Weatherstack automatisk de tilsvarende lengde- og breddegradsdataene, mens byen bestemmes ut fra geodataene som er lagt inn.
Variabel som skal opprettes:
W_by_navn
av 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("bynavn");WriteLine(bynavn);
dom.GetObject("W_city_name").State(city_name);
Breddegrad - geogr. Breddegrad
Variabel som skal opprettes:
W_Lat
av 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);
Lengdegrad - lengdegrad
Variabel som skal opprettes:
W_Lon
av typen streng
Kode:
! Lon
pos = 0;
posStart = 'og 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);
Visning - synlighet
Variabel som skal opprettes:
W_vis
av typen streng
Kode:
! Synlighet
pos = 0;
posStart = 'synlighet':';
posEnd = ', "is_day";
posValueStart = stdout.Find(posStart) + posStart.Length();
posValueEnd = stdout.Find(posEnd)-posValueStart;
string vis_data = stdout.substr(posValueStart, posValueEnd);
WriteLine("vis_data");WriteLine(vis_data);
dom.GetObject("W_vis").State(vis_data);
Lufttrykk og tendens
I tillegg til det oppgitte lufttrykket bestemmes lufttrykkstrenden i dette skriptet ved å lagre en målt verdi som "current" og en tidligere verdi som "old". Begge sammenlignes med hverandre, noe som resulterer i trenden.
Variabel som skal opprettes:
W_lufttrykk_akt
av typen strengW_lufttrykk_gammel
av typen strengW_Lufttrykkutvikling
av typen streng
Kode:
! Skriv ut
var W_mb_alt;
var W_mb_akt;
pos = 0;
posStart = 'trykk":';
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_Lufttrykkutvikling").State("S");
}
if (W_mb_akt < W_mb_alt)
{
dom.GetObject("W_air_pressure_old").State(W_mb_akt);
dom.GetObject("W_Lufttrykkutvikling").State("F");
}
if (W_mb_akt == W_mb_alt)
{
dom.GetObject("W_air_pressure_old").State(W_mb_akt);
dom.GetObject("W_Lufttrykkutvikling").State("N");
}
Nedkjølingstemperatur
Vindavkjølingen avhenger av vindhastigheten og temperaturen. I vannsport er effekten av fordampningskjøling på grunn av spray også en tilleggsfaktor (som det ikke tas hensyn til her). Chill refererer til den opplevde temperaturen, som i svært kalde omgivelser kan være opptil halvannen gang den negative temperaturen sammenlignet med den faktiske temperaturen, og som raskt kan føre til forfrysninger.
Variabel som skal opprettes:
W_chill
av 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_data = stdout.substr(posValueStart, posValueEnd);
WriteLine("app_temp_data");WriteLine(app_temp_data);
dom.GetObject("W_chill").State(app_temp_data);
Anbefalt UV- og lysbeskyttelse
UV-eksponeringen som bestemmes på grunnlag av UV-indeksen, resulterer i en anbefaling om eventuell bruk av lysbeskyttelsestiltak.
Variabel som skal opprettes:
W_UV
av typen strengW_LSF
av typen streng
Kode:
! UV
pos = 0;
posStart = 'uv_index":';
posEnd = ', "synlighet";
posValueStart = stdout.Find(posStart) + posStart.Length();
posValueEnd = stdout.Find(posEnd)-posValueStart;
var uv_data = stdout.substr(posValueStart, posValueEnd);
dom.GetObject("W_UV").State(uv_data);
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);
Vindhastighet
Variabel som skal opprettes:
W_WdSpd
av typen betale
Kode:
! Vindhastighet
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);
Vindhastighet - Omregninger
Ettersom det finnes ulike foretrukne vindhastighetsmål i ulike regioner, land og bruksområder, følger her en omregning fra m/s til km/t, knop og Beaufort.
Variabel som skal opprettes:
W_Wind_kmh
av typen betaleW_Wind_knh
av typen betale- W_Wind_Bft av 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);
}
Vindhastighet - risiko for forfrysninger
Alle som reiser i svært kalde områder, vil få en advarsel med dette skriptet hvis det er fare for forfrysninger på grunn av vindhastighet og opplevd utetemperatur, med mindre det brukes egnede verneklær.
Beregningen er basert på at man kan anta et fall i hudtemperaturen til -4,8 °C ved hudeksponering i 30 minutter eller mindre, noe som betyr at forfrysninger forekommer hos 5% av befolkningen.
Variabel som skal opprettes:
- W_Wind_danger av 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 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 som skal opprettes:
W_wind_dir
av typen streng
Kode:
! Geografisk vindretning
pos = 0;
posStart = 'wind_dir':"';
posEnd = '", "trykk";
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 som skal opprettes:
W_Wind_rchtg
av typen streng
Kode:
! Vindretning numerisk
pos = 0;
posStart = 'vind_grad':';
posEnd = ', "wind_dir";
posValueStart = stdout.Find(posStart) + posStart.Length();
posValueEnd = stdout.Find(posEnd)-posValueStart;
string W_vind_rchtg = stdout.substr(posValueStart, posValueEnd);
WriteLine("W_wind_rchtg");WriteLine(W_wind_rchtg);
dom.GetObject("W_wind_rchtg").State(W_wind_rchtg);
Skydekke
Skydekket er også skrevet på engelsk av Weatherstack, og derfor er oversettelsen til tysk gjengitt her.
Variabel som skal opprettes:
W_description
av typen streng
Kode:
! Beskrivelse av skydekket
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 (sky_beskrivelse == "Skyet")
{
string clouds_description_DE = "Skyet";
WriteLine("clouds_description_DE");WriteLine(clouds_description_DE);
dom.GetObject("W_description").State(clouds_description_DE);
}
if (sky_beskrivelse == "Lett regn")
{
string clouds_description_EN = "Lett regn";
WriteLine("clouds_description_DE");WriteLine(clouds_description_DE);
dom.GetObject("W_description").State(clouds_description_DE);
}
if (sky_beskrivelse == "Lett regnbyge")
{
string clouds_description_EN = "Lette regnbyger";
WriteLine("clouds_description_DE");WriteLine(clouds_description_DE);
dom.GetObject("W_description").State(clouds_description_DE);
}
if (sky_beskrivelse == "Lett duskregn")
{
string clouds_description_DE = "Dryppregn";
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 (sky_beskrivelse == "Lette snøbyger")
{
string clouds_description_EN = "Lette snøbyger";
WriteLine("clouds_description_DE");WriteLine(clouds_description_DE);
dom.GetObject("W_description").State(clouds_description_DE);
}
if (sky_beskrivelse == "Sol")
{
string clouds_description_DE = "Munter";
WriteLine("clouds_description_DE");WriteLine(clouds_description_DE);
dom.GetObject("W_description").State(clouds_description_DE);
}
if (skybeskrivelse == "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 (sky_beskrivelse == "Klar")
{
string clouds_description_DE = "Klar";
WriteLine("clouds_description_DE");WriteLine(clouds_description_DE);
dom.GetObject("W_description").State(clouds_description_DE);
}
if (sky_beskrivelse == "Tåke")
{
string clouds_description_DE = "Tåke";
WriteLine("clouds_description_DE");WriteLine(clouds_description_DE);
dom.GetObject("W_description").State(clouds_description_DE);
}
if (sky_beskrivelse == "Plettvis regn mulig")
{
string clouds_description_EN = "Lett regn mulig";
WriteLine("clouds_description");WriteLine(clouds_description_EN);
dom.GetObject("W_description").State(clouds_description_DE);
}
if (sky_beskrivelse == "Moderat regn")
{
string clouds_description_DE = "Moderat nedbør";
WriteLine("clouds_description");WriteLine(clouds_description_EN);
dom.GetObject("W_description").State(clouds_description_DE);
}
Skydekke
Variabel som skal opprettes:
W_clouds
av typen streng
Kode:
! Skydekke
pos = 0;
posStart = 'skydekke":';
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);
Regnvarsel
Variabel som skal opprettes:
W_Precipitation
av typen streng
Kode:
! Varsler regn
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("Nedbør");WriteLine(precip);
dom.GetObject("W_Precipitation").State(precip);
Elevasjon - Azimut
Manuset ble skrevet av radiofyrtårn og sendt inn til Homematic Forum på side 10 i den lenkede tråden.
To systemvariabler må opprettes:
solhøyden
av typen Antallsol_azimut
av typen Antall
Hvorfor 4 minutter? Fordi jorden fullfører sin 360°-sirkel rundt solen en gang i døgnet. 360° / 24h = 15° per time, noe som tilsvarer 60 minutter / 15° = 4 minutter.
Skriptet bør brukes uavhengig av skriptene ovenfor eller det tilhørende programmet hvis oppdateringsintervallet er forskjellig fra 4 minutter.
Program:

Variabler som skal opprettes:
sol_azimut
av typen betalesol_høyde
av typen betale
Kode:
! Få breddegradreal phi = system.Latitude();
phi = 0,017453292 * phi;
! Konvertering til radianer
! beregne sin_phi og cos_phi med taylorrekkereal temp = phi * phi;
real sin_phi =phi * ((temp * temp * 0,0083334) +1,0 - (temp * 0,1666667));
! sinusformet tilnærming
real cos_phi = (temp *temp *0,0416667) + 1,0 - (temp * 0,5);
! cosinustilnærming
! Beregning av 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();
heltall 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 av 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; real cos_tau =tau * ((temp * temp * 0,0083334) +1,0 - (temp * 0.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 deltainteger tageszahl = system.Date("%j").ToInteger(); tageszahl = tageszahl +10; if (tageszahl > 365) {tageszahl = tageszahl - 365;}
if (tageszahl 91) && (tageszahl 183) && (antall dager 274) && (tageszahl < 366)) {antall dager = 365 - antall dager; reell dag = 0,0172142 *antall dager; temp = dag * dag; reell 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ærming real cos_delta = (temp *temp * 0,0416667) + 1,0 - (temp * 0,5);
! cosinustilnærming
! Beregning av tan_delta med stykkevis linearisering av tanboolean vsign = true; if (delta=0,2618) {tan_delta = (1,1822*delta) - 0,0416;}
if (vsign == false) {tan_delta = (-1,0) * tan_delta;}
! Beregning av 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øyde = 57,29577951 * sol_høyde;
reell nevner = (sin_phi*cos_tau) - (cos_phi * tan_delta);
if (nevner < 0,0) {boolean plus180 = true;} real tan_azimut = sin_tau / nevner;
! Beregning av sun_azimuth med stykkevis linearisering av arctanboolean sign = true; if (tan_azimut =0,2679)&&(tan_azimut = 0,5774)&&(tan_azimut = 1,0)&&(tan_azimuth = 1,3032)&&(tan_azimuth = 1,7321))7321)) {sonne_azimut = (0,3052* tan_azimut) + 0,51856;} if ((tan_azimut >= 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;}
! Lagre korreksjon av klokkeslett og verdier i systemvariablerif (ettermiddag == false)
{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());
sun_elevation = 0,1 ((sol_høyde10.0) .ToInteger());
dom.GetObject("sonne_elevation").State(sonne_elevation);
dom.GetObject("sonne_azimut").State(sonne_azimut);