Hopp til innholdet

Værdata fra SmartHome

Innholdsfortegnelse

Lesetid 9 minutter

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
Program - W_Data - Spørring etter værdata

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 streng
  • W_lufttrykk_gammel av typen streng
  • W_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 streng
  • W_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 betale
  • W_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 Antall
  • sol_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:

Program - Bestemmelse av høyde/asimut

Variabler som skal opprettes:

  • sol_azimut av typen betale
  • sol_høyde av typen betale

Kode:

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


! Konvertering til radianer
! beregne sin_phi og cos_phi med taylorrekke
real 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 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();
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_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; 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 delta
integer 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 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 av 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ø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 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))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 systemvariabler
if (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);

Legg igjen en kommentar

Din e-postadresse vil ikke bli publisert. Obligatoriske felt er merket med *

nb_NONorwegian