Innehållsförteckning
Uppdaterad – 20 januari 2023
Att samla in väderdata med SmartHome och visualisera det via AIO Creator på din mobiltelefon eller surfplatta är vanligtvis inte en nödvändighet, men det är trevligt att ha.
Vädertjänsten online weatherstack.com erbjuder upp till 250 frågor per månad – begränsat kostnadsfritt. Om du verkligen vill ha uppdaterad väderdata bör du välja standardpaketet. 50 000 frågor tillåter minutintervaller.
De paket som fortfarande finns tillgängliga skiljer sig främst i antal förfrågningar och en väderprognos på 7 eller 14 dagar.
Följande data ingår i alla paket:
- Geografisk longitud och latitud
- Plats
- område
- land
- Tidszon
- Lokal tid och datum
- UTC-offset
- Aktuell tidpunkt för datainsamling
- Lufttemperatur
- Väderbeskrivning
- vindhastighet
- Vindriktning numerisk/geografisk
- Lufttryck
- Mängd regn
- Fuktighet
- Molndensitet
- Kyltemperatur
- UV-index
- se
Registrering, oavsett paket, kräver de vanliga uppgifterna och betalningsuppgifterna. En årsprenumeration, i motsats till månadsvis, är rabatterad till 20%.
Efter att ha genomfört denna procedur kommer du att få en så kallad API-kod (Application Programming Interface), som du kopierar in i sökadressen. Svaret är en XML-utgång som innehåller ovanstående datakategorier och värden. Data extraheras med hjälp av lämpliga skript och lagras i variabler. Dessa kan sedan användas för visualisering i AIO Creator.
En detaljerad beskrivning av alla parametrar som är möjliga i XML-utgången, såväl som de valfria frågealternativen som ingår i de dyrare paketen, inklusive olika kodexempel, här synlig.
programmera
Programmet är ganska omfattande på grund av den stora mängden data. Därför listas de enskilda avsnitten sekventiellt här. Alla kodsnuttar kan i slutändan kombineras till ett enda program.
Utöver ovan nämnda data beräknas ytterligare data i programmet och görs tillgängliga för visualisering:
- Solhöjd och azimut
- Rekommendation av solskyddsfaktor
Programhuvud
Rubriken innehåller endast URL:en, som måste kompletteras med API-nyckeln, som här visas med xxx, och platsen (i vanlig text eller, separerade med kommatecken, som longitud och latitud, markerad med yyy:
var url = "http://api.weatherstack.com/current?access_key=xxx&query=yyy";
Konvertering US till DE tidsformat
Eftersom det inte finns något val av visningsspråk i gratis- och standardtaxan, så endast AM/PM-tidsformatet är tillgängligt, konverteras det till 24-timmars här.
Variabel som ska skapas:
W_LDU
av typ sträng
Koda:
! AM/PM-konvertering – spara i W_LDU
var posValueStart;
var posValueEnd;
var postStart;
var posEnd; sträng stderr; sträng stdout;
system.Exec("wget -q -O - '"#url#"'", &stdout, &stderr);
WriteLine(stdout);
sträng väder_xml = stdout;
strängord = 'observation_time':"';
heltal word_längd = word.Length();
heltal word_position = väder_xml.Find(ord);
strängdata = väder_xml.Substr((ord_position + ord_längd), 5);
heltal word_position = data.Find(ord);
data = data.Substr(0, (ord_position -2));
strängord = 'observation_time':"';
heltal word_längd = word.Length();
heltal word_position = väder_xml.Find(ord);
sträng PM = väder_xml.Substr((ord_position + ord_längd +6), 2);
heltal word_position = PM.Find(ord);
PM = PM.Substr(0, (ord_position -2));
WriteLine("AM/PM");WriteLine(PM);
strängord = 'observation_time':"';
heltal word_längd = word.Length();
heltal word_position = väder_xml.Find(ord);
sträng HH = väder_xml.Substr((ord_position + ord_längd) + 1, 1);
heltal word_position = HH.Find(ord);
HH = HH.Substr(0, (ord_position -2));
WriteLine("HH");WriteLine(HH);
strängord = 'observation_time':"';
heltal word_längd = word.Length();
heltal word_position = väder_xml.Find(ord);
sträng MM = väder_xml.Substr((ord_position + ord_längd) +3, 2);
heltal word_position = MM.Find(ord);
MM = MM.Substr(0, (ord_position -2));
WriteLine("MM");WriteLine(MM);
if (PM == "PM")
{
heltalsdiff = 12;
WriteLine("Diff");WriteLine(Diff);
var HH_i = HH.ToInteger();
heltal H = (HH_i + Diff);
WriteLine("HHi + Diff är = H)");WriteLine(H);
sträng HHMM = H #":";
WriteLine("H_+ : ");WriteLine(TTMM);
sträng HM = HHMM # MM;
WriteLine("HH_+12+MM");WriteLine(HM);
dom.GetObject("W_LDU").State(HM);
}
annan
{
WriteLine("LDU_data");WriteLine(data);
dom.GetObject("W_LDU").State(data);
}
Land – Landskod
Landskoden matas även ut på engelska och omvandlas här till den internationella koden. Ytterligare länder kan läggas till enligt detta mönster vid behov. Det aktuella landet bestäms automatiskt av Weatherstack när du väljer stad.
Variabel som ska skapas:
W_landskod
av typ sträng
Koda:
! Landskod
pos = 0;
postStart = 'land':"';
posEnd = '","region";
posValueStart = stdout.Find(posStart) + posStart.Length();
posValueEnd = stdout.Find(posEnd)-posValueStart;
sträng country_code = stdout.Substr(posValueStart, posValueEnd);
if (landskod == "Tyskland")
{
string country_code = "DE";
}
if (landskod == "Sverige")
{
string country_code = "SE";
}
WriteLine("country_code");WriteLine(country_code);
dom.GetObject("W_country_code").State(country_code);
område
Regionen, till exempel i Tyskland, kallas "Niedersachsen" och bestäms också automatiskt av Weatherstack.
Variabel som ska skapas:
W_region
av typ sträng
Koda:
! område
pos = 0;
postStart = 'region':"';
posEnd = '","lat';
posValueStart = stdout.Find(posStart) + posStart.Length();
posValueEnd = stdout.Find(posEnd)-posValueStart;
strängregion = stdout.Substr(posValueStart, posValueEnd);
WriteLine("region");WriteLine(region);
dom.GetObject("W_region").State(region);
Stad
När du går in i staden bestämmer Weatherstack automatiskt associerad longitud och latitud, medan staden bestäms utifrån inmatade geodata.
Variabel som ska skapas:
W_city_name
av typ sträng
Koda:
! Stadsnamn
pos = 0;
postStart = 'namn':"';
posEnd = '","land";
posValueStart = stdout.Find(posStart) + posStart.Length();
posValueEnd = stdout.Find(posEnd)-posValueStart;
sträng stadsnamn = stdout.Substr(posValueStart, posValueEnd);
WriteLine("stadsnamn");WriteLine(stadsnamn);
dom.GetObject("W_city_name").State(stadsnamn);
Latitud – geografisk. Bredd
Variabel som ska skapas:
W_Lat
av typ sträng
Koda:
! Lat
pos = 0;
posStart = 'query':"Lat";
posEnd = 'och Lon';
posValueStart = stdout.Find(posStart) + posStart.Length();
posValueEnd = stdout.Find(posEnd)-posValueStart;
sträng Lat = stdout.Substr(posValueStart, posValueEnd);
WriteLine("Lat");WriteLine(Lat);
dom.GetObject("W_Lat").State(Lat);
Longitud – geogr. längd
Variabel som ska skapas:
W_Lon
av typ sträng
Koda:
! Lon
pos = 0;
postStart = 'och Lon';
posEnd = '","språk';
posValueStart = stdout.Find(posStart) + posStart.Length();
posValueEnd = stdout.Find(posEnd)-posValueStart;
sträng Lon = stdout.Substr(posValueStart, posValueEnd);
WriteLine("Lon");WriteLine(Lon);
dom.GetObject("W_Lon").State(Lon);
Synlighet – synlighet
Variabel som ska skapas:
W_vis
av typ sträng
Koda:
! Synlighet
pos = 0;
postStart = 'synlighet':';
posEnd = ',"is_day';
posValueStart = stdout.Find(posStart) + posStart.Length();
posValueEnd = stdout.Find(posEnd)-posValueStart;
sträng vis_data = stdout.Substr(posValueStart, posValueEnd);
WriteLine("vis_data");WriteLine(vis_data);
dom.GetObject("W_vis").State(vis_data);
Lufttryck och trend
Utöver det tillhandahållna lufttrycket bestämmer detta skript lufttryckstendensen genom att spara ett uppmätt värde som "nuvarande" och ett tidigare som "gammalt". Båda jämförs med varandra, vilket resulterar i trenden.
Variabel som ska skapas:
W_lufttryck_akt
av typ strängW_lufttryck_gammal
av typ strängW_Barometriskt trycktrend
av typ sträng
Koda:
! Tryck
var W_mb_old;
var W_mb_akt;
pos = 0;
postStart = 'tryck':';
posEnd = ',"precip';
posValueStart = stdout.Find(posStart) + posStart.Length();
posValueEnd = stdout.Find(posEnd)-posValueStart;
data = stdout.Substr(posValueStart, posValueEnd);WriteLine(data);
real W_mb_akt = data.ToInteger();WriteLine("W_mb_akt");WriteLine(W_mb_akt);
dom.GetObject("W_Luftdruck_akt").State(W_mb_akt);
W_mb_alt = dom.GetObject("W_Luftdruck_alt").Value();WriteLine(W_mb_alt);
if (W_mb_akt > W_mb_old)
{
dom.GetObject("W_Luftdruck_old").State(W_mb_akt);
dom.GetObject("W_Lufttryckstrend").State("S");
}
if (W_mb_akt < W_mb_old)
{
dom.GetObject("W_Luftdruck_old").State(W_mb_akt);
dom.GetObject("W_Lufttryckstrend").State("F");
}
if (W_mb_akt == W_mb_old)
{
dom.GetObject("W_Luftdruck_old").State(W_mb_akt);
dom.GetObject("W_Lufttryckstrend").State("N");
}
Kyltemperatur
Vindkylan beror på vindhastigheten och temperaturen. Inom vattensporter ökar också effekten av evaporativ kylning på grund av spray (men detta tas inte med i beräkningen här). Chill avser den upplevda temperaturen, som i en mycket kall miljö kan vara upp till en och en halv gånger negativ temperatur jämfört med den faktiska temperaturen och kan leda till snabba köldskador.
Variabel som ska skapas:
W_chill
av typ sträng
Koda:
! Kyla
pos = 0;
postStart = 'felslike':';
posEnd = ',"uv_index';
posValueStart = stdout.Find(posStart) + posStart.Length();
posValueEnd = stdout.Find(posEnd)-posValueStart;
sträng app_temp_data = stdout.Substr(posValueStart, posValueEnd);
WriteLine("app_temp_data");WriteLine(app_temp_data);
dom.GetObject("W_chill").State(app_temp_data);
UV- och ljusskyddsrekommendation
Den UV-exponering som bestäms utifrån UV-index resulterar i en rekommendation för användning av ljusskyddsåtgärder vid behov.
Variabel som ska skapas:
W_UV
av typ strängW_LSF
av typ sträng
Koda:
! 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, (ord_position -2));
reellt tal = data.ToInteger();
WriteLine("UV-nummer");WriteLine(nummer);
sträng LSF = "";
if (nummer <3) {LSF = "onödigt" ;} elseif ((nummer >= "3") && (nummer <= "5")) {LSF = "rekommenderas" ;} elseif ((nummer >= "6) ") && (nummer <= "7")) {LSF = "required" ;} elseif ((nummer >= "8") && (nummer <= "9")) {LSF = "required" ;} elseif ( nummer >= "10") {LSF = "MÅSTE" ;}
dom.GetObject("W_LSF").State(LSF);WriteLine("LSF");WriteLine(LSF);
vindhastighet
Variabel som ska skapas:
W_WdSpd
av typ antal
Koda:
! vindhastighet
pos = 0;
posStart = 'vind_hastighet":';
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_data.ToFloat();
dom.GetObject("W_WdSpd").State(x);
Vindhastighetsomvandlingar
Eftersom det finns olika föredragna vindhastighetsmätningar i olika regioner, länder och applikationer, är här omvandlingen från m/s till km/h, knop och Beaufort.
Variabel som ska skapas:
W_Wind_kmh
av typ antalW_Wind_knh
av typ antal- W_Wind_Bft av typen antal
Koda:
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);
om (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);
}
om (x > 32,6)
{
dom.GetObject(“W_Wind_Bft”).State(12);
}
Vindhastighet – risk för frostskador
Den som reser i mycket kalla zoner kommer att få en varning med detta skript om det finns risk för frostskador på grund av vindhastighet och upplevd utomhustemperatur om lämpliga skyddskläder inte används.
Beräkningen förutsätter att med hudexponering i 30 minuter eller mindre kan hudtemperaturen förväntas sjunka till -4,8 °C och att köldskador uppstår hos människor vid 5%.
Variabel som ska skapas:
- W_Wind_Danger typ booleskt
Koda:
if ((app_temp_data == -27.2) && (8 > W_Wind_kmh <10.1)) || ((app_temp_data == -22.9) && (12 > W_Wind_kmh <15.1)) || ((app_temp_data == -24.2) && ( 18 > W_wind_kmh <20.1)) || ((app_temp_data == -25.2) && (23 > W_wind_kmh <25.1)) || -26.8) && (32 > W_Wind_kmh <35.1)) || ((app_temp_data == -27.4) && (37 > W_Wind_kmh <40.1)) || > W_Wind_kmh <50.1)) || && (57 > W_Wind_kmh <60.1)))
{
dom.GetObject("W_Wind_Danger").State(true);
}
annan
{
dom.GetObject("W_Wind_Danger").State(false);
}
Vindriktning (geografisk)
Variabel som ska skapas:
W_wind_dir
av typ sträng
Koda:
! Vindriktning geografiskt
pos = 0;
posStart = 'wind_dir':"';
posEnd = '","tryck";
posValueStart = stdout.Find(posStart) + posStart.Length();
posValueEnd = stdout.Find(posEnd)-posValueStart;
sträng wind_dir_data = stdout.Substr(posValueStart, posValueEnd);
WriteLine("W_wind_dir");WriteLine(wind_dir_daten);
dom.GetObject("W_wind_dir").State(wind_dir_daten);
Vindriktning (numerisk)
Variabel som ska skapas:
W_Wind_rchtg
av typ sträng
Koda:
! Vindriktning numeriskt
pos = 0;
posStart = 'vindgrad':';
posEnd = ',"wind_dir';
posValueStart = stdout.Find(posStart) + posStart.Length();
posValueEnd = stdout.Find(posEnd)-posValueStart;
sträng W_wind_rchtg = stdout.Substr(posValueStart, posValueEnd);
WriteLine("W_wind_rchtg");WriteLine(W_wind_rchtg);
dom.GetObject("W_wind_rchtg").State(W_wind_rchtg);
Molntäcke
Molntäcket är också skrivet på engelska av Weatherstack, varför översättningen till tyska görs här.
Variabel som ska skapas:
W_description
av typ sträng
Koda:
! Molnskyddsbeskrivning
pos = 0;
posStart = 'weather_descriptions':["';
posEnd = '"],"vindhastighet";
posValueStart = stdout.Find(posStart) + posStart.Length();
posValueEnd = stdout.Find(posEnd)-posValueStart;
sträng clouds_description = stdout.Substr(posValueStart, posValueEnd);
WriteLine("clouds_description_EN");WriteLine(clouds_description);
if (clouds_description == "molnigt")
{
string clouds_description_DE = "Molnigt";
WriteLine("clouds_description_DE");WriteLine(clouds_description_DE);
dom.GetObject("W_description").State(clouds_description_DE);
}
if (clouds_description == "Lätt regn")
{
string clouds_description_DE = "Lätt regn";
WriteLine("clouds_description_DE");WriteLine(clouds_description_DE);
dom.GetObject("W_description").State(clouds_description_DE);
}
if (clouds_description == "Lätt regnskur")
{
string clouds_description_DE = "Lätta regnskurar";
WriteLine("clouds_description_DE");WriteLine(clouds_description_DE);
dom.GetObject("W_description").State(clouds_description_DE);
}
if (clouds_description == "Lätt duggregn")
{
string clouds_description_DE = "Duggregn";
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 == "Lätta snöskurar")
{
string clouds_description_DE = "Lätta snöskurar";
WriteLine("clouds_description_DE");WriteLine(clouds_description_DE);
dom.GetObject("W_description").State(clouds_description_DE);
}
if (clouds_description == "Soligt")
{
string clouds_description_DE = "Heiter";
WriteLine("clouds_description_DE");WriteLine(clouds_description_DE);
dom.GetObject("W_description").State(clouds_description_DE);
}
if (clouds_description == "mulet")
{
string clouds_description_DE = "Mulet";
WriteLine("clouds_description");WriteLine(clouds_description_DE);
dom.GetObject("W_description").State(clouds_description_DE);
}
if (clouds_description == "Delvis molnigt")
{
string clouds_description_DE = "Delvis molnigt";
WriteLine("clouds_description_DE");WriteLine(clouds_description_DE);
dom.GetObject("W_description").State(clouds_description_DE);
}
if (clouds_description == "Rensa")
{
string clouds_description_DE = "Rensa";
WriteLine("clouds_description_DE");WriteLine(clouds_description_DE);
dom.GetObject("W_description").State(clouds_description_DE);
}
if (clouds_description == "Dimma")
{
string clouds_description_DE = "Dimma";
WriteLine("clouds_description_DE");WriteLine(clouds_description_DE);
dom.GetObject("W_description").State(clouds_description_DE);
}
if (clouds_description == "Möjligt med fläckvis regn")
{
string clouds_description_DE = "Lätt regn möjligt";
WriteLine("clouds_description");WriteLine(clouds_description_DE);
dom.GetObject("W_description").State(clouds_description_DE);
}
if (clouds_description == "måttligt regn")
{
string clouds_description_DE = "Måttlig nederbörd";
WriteLine("clouds_description");WriteLine(clouds_description_DE);
dom.GetObject("W_description").State(clouds_description_DE);
}
Molntäcke
Variabel som ska skapas:
W_moln
av typ sträng
Koda:
! Molntäcke
pos = 0;
posStart = 'molntäcke':';
posEnd = ',"felslike";
posValueStart = stdout.Find(posStart) + posStart.Length();
posValueEnd = stdout.Find(posEnd)-posValueStart;
sträng clouds_data = stdout.Substr(posValueStart, posValueEnd);
WriteLine("moln_data");WriteLine(moln_data);
dom.GetObject("W_moln").State(moln_data);
Prognostisera regn
Variabel som ska skapas:
W_Nerbörd
av typ sträng
Koda:
! Prognostisera regn
varx;
pos = 0;
postStart = 'precip':';
posEnd = ',"fuktighet";
posValueStart = stdout.Find(posStart) + posStart.Length();
posValueEnd = stdout.Find(posEnd)-posValueStart;
string precip = stdout.Substr(posValueStart, posValueEnd);
WriteLine("Nerbörd");WriteLine(nederbörd);
dom.GetObject("W_Precipitation").State(precip);
Höjd – Azimut
Manuset skrevs av radiofyr skriven och den Hemmatiskt forum hämtad från sidan 10 i den länkade tråden.
Två systemvariabler måste skapas:
sun_elevation n
av typ Antalsun_azimuth
av typ Antal
Varför bara 4 minuter? Eftersom jorden avslutar sin 360° cirkel runt solen en gång på 24 timmar. 360° / 24h = 15° per timme, motsvarande 60 minuter / 15° = 4 minuter.
Skriptet bör användas oberoende av ovanstående skript eller tillhörande program, förutsatt att uppdateringsintervallet skiljer sig från 4 minuter.
Programmera:
Variabler som ska skapas:
sun_azimuth
av typ antalsun_elevation
av typ antal
Koda:
! Få latitudreal phi = system.Latitude();
phi = 0,017453292 * phi;
! Omvandling till radianer
! Beräkna sin_phi och cos_phi med Taylor-serierverklig temp = phi * phi;
real sin_phi =phi * ((temp * temp * 0,0083334) +1,0 - (temp * 0,1666667));
! sinus approximation
real cos_phi = (temp *temp *0,0416667) + 1,0 - (temp * 0,5);
! cosinus approximation
! Beräkning av soltid, alla tider i minuterheltal time_min = system.Date("%M").ToInteger() + 60system.Date("%H").ToInteger(); heltal start av dag_min = system.SunriseTime("%M").ToInteger() + 60system.SunriseTime("%H").ToInteger();
heltal slutet av dag_min = system.SunsetTime("%M").ToInteger() + 60* system.SunsetTime("%H").ToInteger();
heltals soltid = tid_min + 720 - 0,5 *(start av dag_min + slutet av dag_min);
if (soltid > 1440) {soltid = soltid -1440;}
if (soltid < 1) {soltid = 1440 + soltid;} boolesk eftermiddag =falskt; if (soltid > 720) {soltid =soltid - 720; eftermiddag = sant; }
annars {soltid =720 -soltid;}
! Beräkning sin_tau och cos_tauverklig 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));} annars {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));}
! Beräkningsdeltaheltals dagnummer = system.Date("%j").ToInteger(); dagnummer = dagnummer +10; if (daynumber > 365) {daynumber = daynumber - 365;}
if (dagnummer < 92) {verklig dag = 0,0172142 * dagnummer; temp = dag * dag; verkligt delta = (-0,410152) *((temp *temp *0,041666) + 1,0 - (temp * 0,5));} if ((dagnummer >91) && (dagnummer < 184)) {dagnummer = 183 - dag antal; verklig dag = 0,0172142 *dagnummer; temp = dag * dag; verkligt delta = (0,410152) *((temp *temp *0,041666) + 1,0 - (temp * 0,5));} if ((dagnummer >183) && (dagnummer < 275)) {dagnummer = dagnummer - 183 ; verklig dag = 0,0172142 *dagnummer; temp = dag * dag; verkligt delta = (0,410152) *((temp *temp *0,041666) + 1,0 - (temp * 0,5));} if ((dagnummer >274) && (dagnummer < 366)) {dagnummer = 365 - dagnummer ; verklig dag = 0,0172142 *dagnummer; temp = dag * dag; verkligt delta = (-0,410152) *((temp *temp *0,041666) + 1,0 - (temp * 0,5));}! beräkning sin_delta, cos_delta
temp = delta * delta; real sin_delta =delta * ((temp * temp * 0,0083334) +1,0 - (temp * 0,1666667)); !sinus approximation real cos_delta = (temp *temp *0,0416667) + 1,0 - (temp * 0,5);
! cosinus approximation
! Beräkning av tan_delta med styckvis linjärisering av tanbooleskt vtecken = sant; if (delta < 0,0) {vsign = false; delta = (-1,0) *delta;} reell tan_delta = 1,0233 * delta; if (delta >=0,2618) {tan_delta = (1,1822*delta) - 0,0416;}
if (vtecken == falskt) {tan_delta = (-1.0) * tan_delta;}
! Beräkning sin_elevation och 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));
sun_elevation = 57,29577951 * sun_elevation;
reell nämnare = (sin_phi*cos_tau) - (cos_phi * tan_delta);
if (nämnare < 0,0) {boolean plus180 = sant;} real tan_azimuth = sin_tau / nämnare;
! Beräkning av sun_azimuth med styckvis linjärisering av arctanbooleskt tecken = sant; if (tan_azimuth < 0,0) { tecken = falskt; tan_azimuth = (-1,0)*tan_azimuth;} verklig sol_azimuth = 0,97723 * tan_azimuth; if ((tan_azimuth >=0,2679)&&(tan_azimuth < 0,5774)) {sun_azimuth = (0,84588* tan_azimuth) + 0,035189;} if ((tan_azimuth >= 0,5774)&&(tan_azimuth)&&(tan_azimuth. azimut) + 0.1659;} if ((tan_azimuth >= 1.0)&&(tan_azimuth < 1.3032)) {sun_azimuth = (0.43173* tan_azimuth) + 0.3537;} if ((tan_azimuth >= 1.3032) & azimuth (1.3032) (tan_azimuth)& 1.3032) (3032) ( 0,3052* tan_azimuth) + 0,51856;} if ((tan_azimuth >= 1,7321)&&(tan_azimuth < 2,4142)) {sun_azimuth = (0,123* tan_azimuth) + 0,88115; 3,7321)) {sun_azimuth = (0,083312* tan_azimuth) + 0,9981;} if ((tan_azimuth >= 3,7321)&&(tan_azimuth < 5,0)) {sun_azimuth = (0,050792* tan_azimuth) (tan_azimuth) (tan_azimuth) (tan_azimuth) (tan_azimuth) (tan_azimuth) (tan_azimuth) (tan_azimuth). azimut <7,0)) {sun_azimuth = (0,02775* tan_azimuth) + 1,23465;} if ((tan_azimuth >= 7,0 )&&(tan_azimuth <12,0)) {sun_azimuth = (0,01175117*) 2.0 )&&(tan_azimuth <20.0)) {sun_azimuth = (0.004147854* tan_azimuth) + 1.437881;} if ((tan_azimuth >= 20.0)&&(tan_azimuth <50.0)) {sun_azimuth <50.0)) {sun_azimuth 639;} if (tan_azimuth >= 50,0) {sun_azimuth = (0,000099983* tan_azimuth) + 1,54579974;}
if (sun_azimuth > 1,5707963278) {sun_azimuth = 1,5707963278;}
om (tecken == falskt) {sun_azimuth = (-1.0) * sun_azimuth;}
sun_azimuth = 57,29577951 * sun_azimuth;
om (plus180 == sant) {sun_azimuth = sun_azimuth + 180.0;}
! Daglig korrigering och spara värden till systemvariablerom (eftermiddag == falskt)
{sun_azimuth = 180,0 - sun_azimuth; soltid = 720 - soltid;}
annan
{sun_azimuth = sun_azimuth + 180,0;soltid = 720 + soltid;}
sun_azimuth = 0,1 ((sun_azimuth10.0) .ToInteger());
solhöjd = 0,1 ((solhöjd10.0) .ToInteger());
dom.GetObject("sonne_elevation").State(sonne_elevation);
dom.GetObject("sun_azimuth").State(sun_azimuth);