Pāriet uz saturu

SmartHome laikapstākļu dati

Lasīšanas laiks 9 protokols

Atjaunināts - janvāris 20, 2023

Laikapstākļu datu reģistrēšana ar SmartHome un to vizualizēšana mobilajā tālrunī vai planšetdatorā, izmantojot AIO Creator, parasti nav nepieciešamība, taču to ir patīkami izmantot.

Tiešsaistes laika apstākļu dienests weatherstack.com piedāvā līdz 250 vaicājumiem mēnesī - ierobežotā apjomā bez maksas. Ja patiešām vēlaties jaunākos laikapstākļu datus, jums jāizvēlas standarta pakete. 50 000 vaicājumu ļauj veikt minūtes intervālus.

Citas pieejamās paketes galvenokārt atšķiras ar pieprasījumu skaitu un laika prognozi 7 vai 14 dienām.

Visos komplektos ir iekļauti šādi dati:

  • Ģeogrāfiskais garums un platums
  • Atrašanās vieta
  • Reģions
  • Valsts
  • Laika josla
  • Vietējais laiks un datums
  • UTC nobīde
  • Pašreizējais datu vākšanas laiks
  • Gaisa temperatūra
  • Laikapstākļu apraksts
  • Vēja ātrums
  • Vēja virziens skaitliski / ģeogrāfiski
  • Gaisa spiediens
  • Nokrišņu daudzums
  • Mitrums
  • Mākoņu blīvums
  • Atdzesēšanas temperatūra
  • UV indekss
  • Skatīt

Reģistrējoties neatkarīgi no komplekta, ir jāsniedz parastā informācija un maksājuma dati. Gada abonementam, nevis ikmēneša abonementam, ir atlaide ar 20%.

Kad šī procedūra ir sekmīgi pabeigta, saņemat tā saukto API kodu (lietojumprogrammu saskarne), kuru kopējiet pieprasījumā url. Atbilde ir XML izvads, kas satur iepriekš minētās datu kategorijas un vērtības. Dati tiek iegūti, izmantojot atbilstošus skriptus, un saglabāti mainīgajos. Pēc tam tos var izmantot vizualizācijai AIO Creator.

Detalizēts visu iespējamo XML izvades parametru apraksts, kā arī augstāku cenu pakotnēs iekļautās papildu vaicājuma opcijas, tostarp dažādi koda piemēri, šeit skatāms.

Programma

Programma ir diezgan apjomīga, jo tajā ir liels datu apjoms. Tāpēc šeit ir secīgi uzskaitītas atsevišķas sadaļas. Visus koda fragmentus galu galā var apvienot vienā programmā.

Papildus iepriekš minētajiem datiem programmā tiek aprēķināti papildu dati, kas ir pieejami vizualizācijai:

  • Saules augstums un azimuts
  • Ieteikums par gaismas aizsardzības faktoru
Programma - W_Data - Laika apstākļu datu vaicājums

Programmas virsraksts

Rādītājā ir tikai URL, kas jāpapildina ar API atslēgu, kas šeit norādīta kā xxx, un atrašanās vietu (vienkāršā tekstā vai ar komatu atdalīta kā ģeogrāfiskais garums un platums, apzīmēts kā yyy):

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

ASV uz DE laika formāta konvertēšana

Tā kā bezmaksas un standarta tarifā nav iespējams izvēlēties displeja valodu un tāpēc ir pieejams tikai AM/PM laika formāts, tas tiek konvertēts uz 24 stundu formātu.

Izveidojamais mainīgais lielums:

  • W_LDU tipa virkne

Kods:

! AM/PM konvertēšana - Saglabāt 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':"';
vesels skaitlis 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':"';
vesels skaitlis 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':"';
vesels skaitlis 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':"';
vesels skaitlis 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);

ja (PM == "PM")
{
vesels skaitlis Diff = 12;
WriteLine("Diff");WriteLine(Diff);
var HH_i = HH.ToInteger();
vesels skaitlis H = (HH_i + Diff);
WriteLine("HHi + Diff ir = H)");WriteLine(H);
virkne HHMM = H #":";
WriteLine("H_+ : ");WriteLine(HHMM);
virkne HM = HHMM # MM;
WriteLine("HH_+12+MM");WriteLine(HM);
dom.GetObject("W_LDU").State(HM);
}
citādi
{
WriteLine("LDU_daten");WriteLine(daten);
dom.GetObject("W_LDU").State(data);
}


Valsts - Valsts kods

Valsts kods tiek izvadīts arī angļu valodā un šeit tiek pārvērsts starptautiskajā kodā. Ja nepieciešams, pēc šī parauga var pievienot vēl citas valstis. Pašreizējā valsts tiek automātiski noteikta pēc Weatherstack izvēlētās pilsētas.

Izveidojamais mainīgais lielums:

W_country_code tipa virkne

Kods:

! Valsts_kods

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

ja (country_code == "Vācija")
{
string country_code = "DE";
}
ja (country_code == "Sweden")
{
string country_code = "SE";
}

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


Reģions

Reģions apzīmē, piemēram, "Lejassaksiju" Vācijā, un to automātiski nosaka arī Weatherstack.

Izveidojamais mainīgais lielums:

  • W_region tipa virkne

Kods:

! Reģions

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


Pilsēta

Ievadot pilsētu, Weatherstack automātiski nosaka atbilstošos ģeogrāfiskā garuma un platuma datus, savukārt pilsēta tiek noteikta no ievadītajiem ģeodatiem.

Izveidojamais mainīgais lielums:

  • W_city_name tipa virkne

Kods:

! City_name

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


Ģeogrāfiskais platums - geogr. Platums

Izveidojamais mainīgais lielums:

  • W_Lat tipa virkne

Kods:

! Lat

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


Ģeogrāfiskais garums - ģeogrāfiskais garums

Izveidojamais mainīgais lielums:

  • W_Lon tipa virkne

Kods:

! Lon

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


Skats - redzamība

Izveidojamais mainīgais lielums:

  • W_vis tipa virkne

Kods:

! Redzamība

pos = 0;
posStart = 'redzamība":';
posEnd = ', "is_day";
posValueStart = stdout.Find(posStart) + posStart.Length();
posValueEnd = stdout.Find(posEnd)-posValueStart;
string vis_daten = stdout.Substr(posValueStart, posValueEnd);
WriteLine("vis_data");WriteLine(vis_data);
dom.GetObject("W_vis").State(vis_data);


Gaisa spiediens un tendence

Papildus sniegtajam gaisa spiedienam šajā skriptu tiek noteikta gaisa spiediena tendence, saglabājot izmērīto vērtību kā "pašreizējo" un iepriekšējo vērtību kā "veco". Abas vērtības tiek salīdzinātas savā starpā, tādējādi iegūstot tendenci.

Izveidojamais mainīgais lielums:

  • W_air_pressure_act tipa virkne
  • W_air_pressure_old tipa virkne
  • W_Airu spiediena tendence tipa virkne

Kods:

! Drukāt

var W_mb_alt;
var W_mb_akt;
pos = 0;
posStart = 'spiediens":';
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);

ja (W_mb_akt > W_mb_alt)
{
dom.GetObject("W_air_pressure_old").State(W_mb_akt);
dom.GetObject("W_Air pressure trend").State("S");
}

ja (W_mb_akt < W_mb_alt)
{
dom.GetObject("W_air_pressure_old").State(W_mb_akt);
dom.GetObject("W_Air pressure trend").State("F");
}

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


Atdzesēšanas temperatūra

Vēja aukstums ir atkarīgs no vēja ātruma un temperatūras. Ūdens sporta veidos papildu faktors (kas šeit nav ņemts vērā) ir arī iztvaikošanas atdzišana, ko izraisa izsmidzināšana. Aukstums attiecas uz uztveramo temperatūru, kas ļoti aukstā vidē var būt līdz pat pusotrai reižu augstāka par negatīvo temperatūru salīdzinājumā ar faktisko temperatūru un var ātri izraisīt apsaldējumus.

Izveidojamais mainīgais lielums:

  • W_chill tipa virkne

Kods:

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


Ieteikums par aizsardzību pret UV stariem un gaismu

UV starojuma iedarbība, kas noteikta, pamatojoties uz UV indeksu, dod ieteikumu par nepieciešamajiem gaismas aizsardzības pasākumiem.

Izveidojamais mainīgais lielums:

  • W_UV tipa virkne
  • W_LSF tipa virkne

Kods:

! UV

pos = 0;
posStart = 'uv_index":';
posEnd = ', "redzamība";
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));
reāls skaitlis = data.ToInteger();
WriteLine("UV numurs");WriteLine(numurs);

string LSF = "";
ja (skaits = "3") && (skaits = "6") && (number = "8") && (number = "10") {LSF = "obligāti" ;}
dom.GetObject("W_LSF").State(LSF);WriteLine("LSF");WriteLine(LSF);


Vēja ātrums

Izveidojamais mainīgais lielums:

  • W_WdSpd tipa maksāt

Kods:

! Vēja ātrums

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


Vēja ātrums - konvertējumi

Tā kā dažādos reģionos, valstīs un pielietojuma veidos vēja ātruma mērījumi atšķiras, šeit ir sniegta konvertācija no m/s uz km/h, mezgliem un Boforta grādiem.

Izveidojamais mainīgais lielums:

  • W_Wind_kmh tipa maksāt
  • W_Wind_knh tipa maksāt
  • W_Wind_Bft tipa maksāt

Kods:

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


reālais 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);

ja (x < 0,30)
{
dom.GetObject("W_Wind_Bft").State(0);
}
ja ((0,29 < x) && (x < 1,51))
{
dom.GetObject("W_Wind_Bft").State(1);
}
ja ((1,59 < x) && ( x < 3,31))
{
dom.GetObject("W_Wind_Bft").State(2);
}
ja ((3,39 < x) && ( x < 5,41))
{
dom.GetObject("W_Wind_Bft").State(3);
}
ja ((5,49 < x) && ( x < 7,91))
{
dom.GetObject("W_Wind_Bft").State(4);
}
ja ((7,99 < x) && (x < 10,71))
{
dom.GetObject("W_Wind_Bft").State(5);
}
ja ((10,79 < x) && (x < 13,81))
{
dom.GetObject("W_Wind_Bft").State(6);
}
ja ((12,89 < x) && (x < 17,11))
{
dom.GetObject("W_Wind_Bft").State(7);
}
ja ((17,19 < x) && (x < 20,71))
{
dom.GetObject("W_Wind_Bft").State(8);
}
ja ((20,79 < x) && (x < 24,41))
{
dom.GetObject("W_Wind_Bft").State(9);
}
ja ((24,49 < x) && (x < 28,41))
{
dom.GetObject("W_Wind_Bft").State(10);
}
ja ((28,49 < x) && (x < 32,61))
{
dom.GetObject("W_Wind_Bft").State(11);
}
ja (x > 32,6)
{
dom.GetObject("W_Wind_Bft").State(12);
}

Vēja ātrums - apsaldējumu risks

Ikviens, kas ceļo ļoti aukstās zonās, saņems brīdinājumu ar šo skriptu, ja pastāv apsaldējumu risks vēja ātruma un jūtamās āra temperatūras dēļ, ja vien netiek izmantots piemērots aizsargapģērbs.

Aprēķinu pamatā ir pieņēmums, ka ādas temperatūra var pazemināties līdz -4,8 °C, ja iedarbība uz ādu ilgst 30 minūtes vai mazāk, kas nozīmē, ka apsaldējumi rodas 5% cilvēku.

Izveidojamais mainīgais lielums:

  • W_Wind_danger tipa boolean

Kods:

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


Vēja virziens (ģeogrāfiskais)

Izveidojamais mainīgais lielums:

  • W_wind_dir tipa virkne

Kods:

! Ģeogrāfiskais vēja virziens

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


Vēja virziens (skaitliski)

Izveidojamais mainīgais lielums:

  • W_Wind_rchtg tipa virkne

Kods:

! Vēja virziena skaitliskais

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


Mākoņu klājums

Weatherstack mākoņu segumu ir sagatavojis arī angļu valodā, tāpēc šeit ir sniegts tulkojums vācu valodā.

Izveidojamais mainīgais lielums:

  • W_description tipa virkne

Kods:

! Mākoņu segas apraksts

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

ja (clouds_description == "Deblains")
{
string clouds_description_DE = "Mākoņains";
WriteLine("clouds_description_DE");WriteLine(clouds_description_DE);
dom.GetObject("W_description").State(clouds_description_DE);
}
ja (clouds_description == "Neliels lietus")
{
string clouds_description_EN = "Viegls lietus";
WriteLine("clouds_description_DE");WriteLine(clouds_description_DE);
dom.GetObject("W_description").State(clouds_description_DE);
}
ja (clouds_description == "Viegla lietusgāze")
{
string clouds_description_EN = "Vieglas lietusgāzes";
WriteLine("clouds_description_DE");WriteLine(clouds_description_DE);
dom.GetObject("W_description").State(clouds_description_DE);
}
ja (clouds_description == "Viegla dzestruma")
{
string clouds_description_DE = "Nokrišņi";
WriteLine("clouds_description_DE");WriteLine(clouds_description_DE);
dom.GetObject("W_description").State(clouds_description_DE);
}
ja (clouds_description == "Mis")
{
string clouds_description_DE = "haze";
WriteLine("clouds_description_DE");WriteLine(clouds_description_DE);
dom.GetObject("W_description").State(clouds_description_DE);
}
ja (clouds_description == "Vieglas sniega lietusgāzes")
{
string clouds_description_EN = "Vieglas sniega lietusgāzes";
WriteLine("clouds_description_DE");WriteLine(clouds_description_DE);
dom.GetObject("W_description").State(clouds_description_DE);
}
ja (clouds_description == "Saulains")
{
string clouds_description_DE = "Jautrs";
WriteLine("clouds_description_DE");WriteLine(clouds_description_DE);
dom.GetObject("W_description").State(clouds_description_DE);
}
ja (clouds_description == "Overcast")
{
string clouds_description_DE = "Overcast";
WriteLine("clouds_description");WriteLine(clouds_description_EN);
dom.GetObject("W_description").State(clouds_description_DE);
}
ja (clouds_description == "Daļēji mākoņains")
{
string clouds_description_DE = "Daļēji mākoņains";
WriteLine("clouds_description_DE");WriteLine(clouds_description_DE);
dom.GetObject("W_description").State(clouds_description_DE);
}
ja (clouds_description == "Clear")
{
string clouds_description_DE = "Clear";
WriteLine("clouds_description_DE");WriteLine(clouds_description_DE);
dom.GetObject("W_description").State(clouds_description_DE);
}
ja (clouds_description == "Fog")
{
string clouds_description_DE = "Migla";
WriteLine("clouds_description_DE");WriteLine(clouds_description_DE);
dom.GetObject("W_description").State(clouds_description_DE);
}
ja (clouds_description == "Iespējams neliels lietus")
{
string clouds_description_EN = "Iespējams neliels lietus";
WriteLine("clouds_description");WriteLine(clouds_description_EN);
dom.GetObject("W_description").State(clouds_description_DE);
}
ja (clouds_description == "Mērens lietus")
{
string clouds_description_DE = "Mēreni nokrišņi";
WriteLine("clouds_description");WriteLine(clouds_description_EN);
dom.GetObject("W_description").State(clouds_description_DE);
}


Mākoņu klājums

Izveidojamais mainīgais lielums:

  • W_clouds tipa virkne

Kods:

! Mākoņu klājums

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


Lietus prognoze

Izveidojamais mainīgais lielums:

  • W_Precipitation tipa virkne

Kods:

! Prognozes lietus

var x;
pos = 0;
posStart = 'precip":';
posEnd = ', "mitrums";
posValueStart = stdout.Find(posStart) + posStart.Length();
posValueEnd = stdout.Find(posEnd)-posValueStart;
string precip = stdout.Substr(posValueStart, posValueEnd);
WriteLine("Nokrišņu daudzums");WriteLine(precip);
dom.GetObject("W_Precipitation").State(precip);


Elevācija - azimuts

Scenāriju sarakstīja radio bāka un iesniegts Homematic forums lapā 10 no saistīto pavedienu.

Jāizveido divi sistēmas mainīgie:

  • sun_elevation tipa Numurs
  • sun_azimuts tipa Numurs

Kāpēc 4 minūtes? Tāpēc, ka Zeme veic 360° apli ap Sauli reizi 24 stundās. 360° / 24h = 15° stundā, kas atbilst 60 minūtēm / 15° = 4 minūtēm.

Šis skripts jāizmanto neatkarīgi no iepriekš minētajiem skriptiem vai saistītās programmas, ja atjaunināšanas intervāls atšķiras no 4 minūtēm.

Programma:

Programma - Augstuma / azimuta noteikšana

Izveidojamie mainīgie:

  • sun_azimuts tipa maksāt
  • sun_elevation tipa maksāt

Kods:

! Iegūt ģeogrāfisko platumu
reāls phi = system.Latitude();
phi = 0,017453292 * phi;


! Konvertēt uz radiāni
! aprēķināt sin_phi un cos_phi ar Teilora sēriju
real temp = phi * phi;
real sin_phi =phi * ((temp * temp * 0,0083334) +1,0 - (temp * 0,16666667));


! sinusoidālā aproksimācija
real cos_phi = (temp *temp *0,0416667) + 1,0 - (temp * 0,5);


! kosinusa aproksimācija
! Saules laika aprēķināšana, visi laiki minūtēs
integer time_min = system.Date("%M").ToInteger() + 60system.Date("%H").ToInteger(); integer tagesbeginn_min = system.SunriseTime("%M").ToInteger() + 60system.SunriseTime("%H").ToInteger();
integer tagesende_min = system.SunsetTime("%M").ToInteger() + 60* system.SunsetTime("%H").ToInteger();
integer sonnenzeit =time_min + 720 - 0,5 *(tagesbeginn_min +tagesende_min);
ja (suntime > 1440) {suntime = suntime -1440;}
ja (suntime 720) {suntime =suntime - 720; afternoon = true; }
citādi {sonnenzeit =720 -sonnenzeit;}


! Aprēķins sin_tau un cos_tau
reālais tau = 0.00436332313 * saules laiks; ! 15/60 * pi /180 * saules laiks [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);} citādi {real tau1 =3,141592654 - tau; temp = tau1 * tau1; real sin_tau =tau1 * ((temp * temp * 0,0083334) +1,0 - (temp * 0.16666667)); tau = tau - 1,570796327; temp = tau * tau; real cos_tau = (tau) (-1,0) ((temp * temp * 0,0083334) +1,0 - (temp * 0,16666667))};}

! Aprēķina delta
integer tageszahl = system.Date("%j").ToInteger(); tageszahl = tageszahl +10; if (tageszahl > 365) {tageszahl = tageszahl - 365;}
ja (tageszahl 91) && (tageszahl 183) && (dienu skaits 274) && (tageszahl < 366)) {tageszahl = 365 - tageszahl; reālā tag = 0,0172142 *tageszahl; temp = tag * tag; reālā delta = (-0,410152) *((temp *temp *0,041666) + 1,0 - (temp * 0,5))};}

! aprēķins sin_delta, cos_delta
temp = delta * delta; real sin_delta =delta * ((temp * temp * 0,0083334) +1,0 - (temp * 0,16666667)); !sinus-aproksimācija real cos_delta = (temp *temp *0,0416667) + 1,0 - (temp * 0,5);

! kosinusa aproksimācija
! Aprēķins tan_delta ar gabalisku linearizāciju tan
boolean vsign = true; if (delta=0,2618) {tan_delta = (1,1822*delta) - 0,0416;}
ja (vsign == false) {tan_delta = (-1,0) * tan_delta;}


! Sin_elevation un tan_azimuta aprēķināšana
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));
sun_elevation = 57,29577951 * sun_elevation;
reālais saucējs = (sin_phi*cos_tau) - (cos_phi * tan_delta);
if (saucējs < 0,0) {boolean plus180 = true;} real tan_azimut = sin_tau / saucējs;


! Saules_azimuta aprēķināšana ar arktāna linearizāciju pa daļām
boolean sign = true; if (tan_azimut =0,2679)&&(tan_azimut = 0,5774)&&(tan_azimut = 1,0)&&(tan_azimuth = 1,3032)&&(tan_azimuth = 1,7321)&&(tan_azimut = 2,4142)&&(tan_azimut = 2,9459)&&(tan_azimuth = 3,7321)&&(tan_azimuth = 5,0)&&(tan_azimuth = 7,0)&&(tan_azimuth = 12,0)&&(tan_azimuth = 20,0)&&(tan_azimuth = 50,0) {sonne_azimuth = (0,000099983* tan_azimuth) + 1,54579974;}
ja (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;}


! Dienas laika korekcijas un vērtību saglabāšana sistēmas mainīgajos
ja (pēcpusdiena == false)
{sonne_azimut = 180,0 - sonne_azimut; sonnenzeit = 720 - sonnenzeit;}
citādi
{sun_azimuts = sun_azimuts + 180.0;sun_laiks = 720 + sun_laiks;}
sun_azimuth = 0.1 ((sun_azimut10.0) .ToInteger());
sun_elevation = 0,1 ((sun_elevation10.0) .ToInteger());
dom.GetObject("sonne_elevation").State(sonne_elevation);
dom.GetObject("sonne_azimut").State(sonne_azimut);

Atbildēt

Jūsu e-pasta adrese netiks publicēta. Obligātie lauki ir atzīmēti kā *