Ga naar de inhoud

Weergegevens SmartHome

Leestijd 9 minuten

Bijgewerkt – 20 januari 2023

Het verzamelen van weergegevens met SmartHome en het visualiseren ervan via AIO Creator op je mobiele telefoon of tablet is meestal geen noodzaak, maar wel leuk om te hebben.

De online weerservice weerstack.com biedt maximaal 250 zoekopdrachten per maand – beperkt gratis. Als je echt actuele weergegevens wilt, kies je voor het standaardpakket. 50.000 zoekopdrachten maken intervallen van minuten mogelijk.

De pakketten die nog beschikbaar zijn verschillen vooral in het aantal aanvragen en een weersvoorspelling van 7 of 14 dagen.

In alle pakketten zijn de volgende gegevens inbegrepen:

  • Geografische lengte- en breedtegraad
  • Locatie
  • regio
  • land
  • Tijdzone
  • Lokale tijd en datum
  • UTC-compensatie
  • Huidige tijd van gegevensverzameling
  • Luchttemperatuur
  • Weer beschrijving
  • windsnelheid
  • Windrichting numeriek/geografisch
  • Luchtdruk
  • Hoeveelheid regen
  • Vochtigheid
  • Wolkendichtheid
  • Koele temperatuur
  • UV-index
  • weergave

Voor registratie, ongeacht het pakket, zijn de gebruikelijke gegevens en betalingsgegevens vereist. Een jaarabonnement krijgt, in tegenstelling tot maandelijks, een korting van 20%.

Nadat u deze procedure succesvol heeft afgerond, ontvangt u een zogenaamde API-code (Application Programming Interface), die u in de query-URL kopieert. Het antwoord is een XML-uitvoer die de bovenstaande gegevenscategorieën en waarden bevat. De gegevens worden met behulp van geschikte scripts geëxtraheerd en in variabelen opgeslagen. Deze kunnen vervolgens worden gebruikt voor visualisatie in de AIO Creator.

Een gedetailleerde beschrijving van alle parameters die mogelijk zijn in de XML-uitvoer, evenals de optionele query-opties die zijn opgenomen in de duurdere pakketten, inclusief verschillende codevoorbeelden, hier zichtbaar.

programma

Het programma is behoorlijk uitgebreid vanwege de grote hoeveelheid gegevens. Daarom worden de afzonderlijke secties hier opeenvolgend vermeld. Alle codefragmenten kunnen uiteindelijk worden gecombineerd tot één programma.

Naast de hierboven genoemde gegevens worden in het programma aanvullende gegevens berekend en beschikbaar gesteld voor visualisatie:

  • Zonne-elevatie en azimut
  • Aanbeveling voor beschermingsfactor tegen de zon
Programma – W_Data – opvragen van weergegevens

Programmakop

De header bevat alleen de URL, die moet worden aangevuld met de API-sleutel, hier weergegeven met xxx, en de locatie (in platte tekst of, gescheiden door een komma, als lengte- en breedtegraad, gemarkeerd met yyy:

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

Conversie US naar DE tijdformaat

Omdat er in het gratis en standaardtarief geen weergavetaalkeuze is en dus alleen het AM/PM-tijdformaat beschikbaar is, wordt deze hier omgezet naar 24-uurs.

Variabele die moet worden gemaakt:

  • W_LDU van soort snaar

Code:

! AM/PM-conversie – opslaan in W_LDU

var posWaardeStart;
var posValueEnd;
var posStart;
var posEnd; tekenreeks stderr; tekenreeks stdout;
system.Exec("wget -q -O - '"#url#"'", &stdout, &stderr);
WriteLine(stdout);
string weer_xml = stdout;

string word = 'observatie_tijd':';
geheel getal woord_lengte = woord.Lengte();
geheel getal word_position = weer_xml.Find(woord);
tekenreeksgegevens = weer_xml.Substr((woord_positie + woord_lengte), 5);
geheel getal woord_positie = data.Find(woord);
data = data.Substr(0, (woord_positie -2));

string word = 'observatie_tijd':';
geheel getal woord_lengte = woord.Lengte();
geheel getal word_position = weer_xml.Find(woord);
string PM = weer_xml.Substr((woord_positie + woord_lengte +6), 2);
geheel getal woord_positie = PM.Find(woord);
PM = PM.Substr(0, (woord_positie -2));
WriteLine("AM/PM");WriteLine(PM);

string word = 'observatie_tijd':';
geheel getal woord_lengte = woord.Lengte();
geheel getal word_position = weer_xml.Find(woord);
string HH = weer_xml.Substr((woord_positie + woord_lengte) + 1, 1);
geheel getal woord_positie = HH.Find(woord);
HH = HH.Substr(0, (woord_positie -2));
SchrijfLijn("HH");SchrijfLijn(HH);

string word = 'observatie_tijd':';
geheel getal woord_lengte = woord.Lengte();
geheel getal word_position = weer_xml.Find(woord);
string MM = weer_xml.Substr((woord_positie + woord_lengte) +3, 2);
geheel getal woord_positie = MM.Find(woord);
MM = MM.Substr(0, (woord_positie -2));
SchrijfLijn("MM");SchrijfLijn(MM);

als (PM == "PM")
{
geheel getal diff = 12;
WriteLine("Verschil");WriteLine(Verschil);
var HH_i = HH.ToInteger();
geheel getal H = (HH_i + Diff);
WriteLine("HHi + Verschil is = H)");WriteLine(H);
tekenreeks HHMM = H #: ';
WriteLine("H_+ : ");WriteLine(HHMM);
tekenreeks HM = HHMM # MM;
WriteLine("HH_+12+MM");WriteLine(HM);
dom.GetObject("W_LDU").State(HM);
}
anders
{
WriteLine("LDU_data");WriteLine(gegevens);
dom.GetObject("W_LDU").State(gegevens);
}


Land – Landcode

De landcode wordt eveneens in het Engels weergegeven en hier omgezet in de internationale code. Indien nodig kunnen volgens dit patroon extra landen worden toegevoegd. Het huidige land wordt automatisch bepaald door Weatherstack wanneer u de stad selecteert.

Variabele die moet worden gemaakt:

W_landcode van soort snaar

Code:

! Landcode

pos = 0;
posStart = 'land':';
posEnd = '","regio';
posValueStart = stdout.Find(posStart) + posStart.Lengte();
posValueEnd = stdout.Find(posEnd)-posValueStart;
string landcode = stdout.Substr(posValueStart, posValueEnd);

if (landcode == "Duitsland")
{
string landcode = "DE";
}
if (landcode == "Zweden")
{
string landcode = "SE";
}

WriteLine("landcode");WriteLine(landcode);
dom.GetObject("W_landcode").State(landcode);


regio

De regio in bijvoorbeeld Duitsland heet “Nedersaksen” en wordt ook automatisch bepaald door Weatherstack.

Variabele die moet worden gemaakt:

  • W_regio van soort snaar

Code:

! regio

pos = 0;
posStart = 'regio':';
posEnd = '","lat';
posValueStart = stdout.Find(posStart) + posStart.Lengte();
posValueEnd = stdout.Find(posEnd)-posValueStart;
tekenreeksregio = stdout.Substr(posValueStart, posValueEnd);
WriteLine("regio");WriteLine(regio);
dom.GetObject("W_region").State(regio);


Stad

Wanneer u de stad binnengaat, bepaalt Weatherstack automatisch de bijbehorende lengte- en breedtegraad, terwijl de stad wordt bepaald op basis van de ingevoerde geodata.

Variabele die moet worden gemaakt:

  • W_stadsnaam van soort snaar

Code:

! Stadnaam

pos = 0;
posStart = 'naam':';
posEnd = '","land';
posValueStart = stdout.Find(posStart) + posStart.Lengte();
posValueEnd = stdout.Find(posEnd)-posValueStart;
string stadsnaam = stdout.Substr(posValueStart, posValueEnd);
WriteLine("stadsnaam");WriteLine(stadsnaam);
dom.GetObject("W_stadsnaam").State(stadsnaam);


Breedtegraad – geografisch. Breedte

Variabele die moet worden gemaakt:

  • W_Lat van soort snaar

Code:

! Lat

pos = 0;
posStart = 'query:'Lat';
posEnd = 'en Lon';
posValueStart = stdout.Find(posStart) + posStart.Lengte();
posValueEnd = stdout.Find(posEnd)-posValueStart;
string Lat = stdout.Substr(posValueStart, posValueEnd);
WriteLine("Lat");WriteLine(Lat);
dom.GetObject("W_Lat").State(Lat);


Lengtegraad – geogr. lengte

Variabele die moet worden gemaakt:

  • W_Lon van soort snaar

Code:

! Lon

pos = 0;
posStart = 'en Lon';
posEnd = '","taal';
posValueStart = stdout.Find(posStart) + posStart.Lengte();
posValueEnd = stdout.Find(posEnd)-posValueStart;
string Lon = stdout.Substr(posValueStart, posValueEnd);
WriteLine("Lon");WriteLine(Lon);
dom.GetObject("W_Lon").State(Lon);


Zichtbaarheid – zichtbaarheid

Variabele die moet worden gemaakt:

  • W_vis van soort snaar

Code:

! Zichtbaarheid

pos = 0;
posStart = 'zichtbaarheid':';
posEnd = ',"is_dag';
posValueStart = stdout.Find(posStart) + posStart.Lengte();
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);


Luchtdruk en trend

Naast de opgegeven luchtdruk bepaalt dit script de luchtdruktendens door een gemeten waarde op te slaan als “huidig” en een vorige als “oud”. Beide worden met elkaar vergeleken, waardoor de tendens ontstaat.

Variabele die moet worden gemaakt:

  • W_luchtdruk_act van soort snaar
  • W_luchtdruk_oud van soort snaar
  • W_Barometrische druktrend van soort snaar

Code:

! Druk

var W_mb_old;
var W_mb_akt;
pos = 0;
posStart = 'druk':';
posEnd = ''precisie';
posValueStart = stdout.Find(posStart) + posStart.Lengte();
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);

als (W_mb_akt > W_mb_old)
{
dom.GetObject("W_Luftdruck_old").State(W_mb_akt);
dom.GetObject("W_Luchtdruktrend").State("S");
}

als (W_mb_akt < W_mb_oud)
{
dom.GetObject("W_Luftdruck_old").State(W_mb_akt);
dom.GetObject("W_Luchtdruktrend").State("F");
}

als (W_mb_akt == W_mb_oud)
{
dom.GetObject("W_Luftdruck_old").State(W_mb_akt);
dom.GetObject("W_Luchtdruktrend").State("N");
}


Koele temperatuur

De gevoelstemperatuur is afhankelijk van de windsnelheid en de temperatuur. Bij watersporten wordt ook het effect van verdampingskoeling door opspattend water vergroot (maar daar wordt hier geen rekening mee gehouden). Chill verwijst naar de waargenomen temperatuur, die in een zeer koude omgeving tot anderhalf keer zo negatief kan zijn als de werkelijke temperatuur en kan leiden tot snelle bevriezing.

Variabele die moet worden gemaakt:

  • W_chill van soort snaar

Code:

! Chill

pos = 0;
posStart = 'voelt als':';
posEnd = ',"uv_index';
posValueStart = stdout.Find(posStart) + posStart.Lengte();
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);


Aanbeveling voor UV- en lichtbescherming

De aan de hand van de UV-index bepaalde UV-blootstelling resulteert in een advies voor het eventueel toepassen van lichtbeschermingsmaatregelen.

Variabele die moet worden gemaakt:

  • W_UV van soort snaar
  • W_LSF van soort snaar

Code:

! UV

pos = 0;
posStart = 'uv_index":';
posEnd = ''zichtbaarheid';
posValueStart = stdout.Find(posStart) + posStart.Lengte();
posValueEnd = stdout.Find(posEnd)-posValueStart;
var uv_data = stdout.Substr(posValueStart, posValueEnd);
dom.GetObject("W_UV").State(uv_data);
data = uv_data.Substr(0, (woord_positie -2));
reëel getal = data.ToInteger();
WriteLine("UV-nummer");WriteLine(nummer);

tekenreeks LSF = "";
if (aantal <3) {LSF = "onnodig" ;} elseif ((aantal >= "3") && (aantal <= "5")) {LSF = "aanbevolen" ;} elseif ((aantal >= "6 ") && (nummer <= "7")) {LSF = "vereist" ;} elseif ((nummer >= "8") && (nummer <= "9")) {LSF = "vereist" ;} elseif ( getal >= "10") {LSF = "MOET" ;}
dom.GetObject("W_LSF").State(LSF);WriteLine("LSF");WriteLine(LSF);


windsnelheid

Variabele die moet worden gemaakt:

  • W_WdSpd van soort nummer

Code:

! windsnelheid

pos = 0;
posStart = 'windsnelheid":';
posEnd = ',"wind_graad';
posValueStart = stdout.Find(posStart) + posStart.Lengte();
posValueEnd = stdout.Find(posEnd)-posValueStart;
var wind_spd_daten = stdout.Substr(posValueStart, posValueEnd);
echte x = wind_spd_data.ToFloat();
dom.GetObject("W_WdSpd").State(x);


Conversies van windsnelheid

Omdat er in verschillende regio's, landen en toepassingen verschillende voorkeursmetingen van de windsnelheid zijn, volgt hier de conversie van m/s naar km/u, knopen en Beaufort.

Variabele die moet worden gemaakt:

  • W_Wind_kmh van soort nummer
  • W_Wind_knh van soort nummer
  • W_Wind_Bft van het type nummer

Code:

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


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

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

Windsnelheid – risico op bevriezing

Iedereen die in zeer koude zones reist, krijgt met dit script een waarschuwing als er risico op bevriezing bestaat vanwege de windsnelheid en de waargenomen buitentemperatuur als er geen geschikte beschermende kleding wordt gebruikt.

Bij de berekening wordt ervan uitgegaan dat bij blootstelling van de huid gedurende 30 minuten of minder de huidtemperatuur naar verwachting zal dalen tot -4,8 °C en dat bevriezing zal optreden bij mensen bij 5%.

Variabele die moet worden gemaakt:

  • Type W_Wind_Gevaar Booleaans

Code:

if (((app_temp_data == -27,2) && (8 > W_Wind_kmh <10,1)) || ((app_temp_data == -22,9) && (12 > W_Wind_kph <15,1)) || ((app_temp_data == -24,2) && ( 18 > W_wind_kmh <20,1)) || ((app_temp_data == -25,2) && (23 > W_wind_kmh <25,1)) || ((app_temp_data == -26,0) && (28 > W_wind_kmh <30,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(waar);
}
anders
{
dom.GetObject("W_Wind_Danger").State(false);
}


Windrichting (geografisch)

Variabele die moet worden gemaakt:

  • W_wind_dir van soort snaar

Code:

! Windrichting geografisch

pos = 0;
posStart = 'wind_dir':';
posEnd = '","druk';
posValueStart = stdout.Find(posStart) + posStart.Lengte();
posValueEnd = stdout.Find(posEnd)-posValueStart;
string wind_dir_data = stdout.Substr(posValueStart, posValueEnd);
WriteLine("W_wind_dir");WriteLine(wind_dir_daten);
dom.GetObject("W_wind_dir").State(wind_dir_daten);


Windrichting (numeriek)

Variabele die moet worden gemaakt:

  • W_Wind_rchtg van soort snaar

Code:

! Windrichting numeriek

pos = 0;
posStart = 'wind_graad':';
posEnd = ',"wind_dir';
posValueStart = stdout.Find(posStart) + posStart.Lengte();
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);


Bewolking

Het wolkendek is ook in het Engels geschreven door Weatherstack, daarom wordt de vertaling naar het Duits hier gemaakt.

Variabele die moet worden gemaakt:

  • W_beschrijving van soort snaar

Code:

! Beschrijving bewolking

pos = 0;
posStart = 'weer_beschrijvingen':["';
posEnd = '"],"windsnelheid';
posValueStart = stdout.Find(posStart) + posStart.Lengte();
posValueEnd = stdout.Find(posEnd)-posValueStart;
string clouds_description = stdout.Substr(posValueStart, posValueEnd);
WriteLine("clouds_description_EN");WriteLine(clouds_description);

if (clouds_description == "Bewolkt")
{
string clouds_description_DE = "Bewolkt";
WriteLine("clouds_description_DE");WriteLine(clouds_description_DE);
dom.GetObject("W_description").State(clouds_description_DE);
}
if (clouds_description == "Lichte regen")
{
string clouds_description_DE = "Lichte regen";
WriteLine("clouds_description_DE");WriteLine(clouds_description_DE);
dom.GetObject("W_description").State(clouds_description_DE);
}
if (clouds_description == "Lichte regenbui")
{
string clouds_description_DE = "Lichte regenbuien";
WriteLine("clouds_description_DE");WriteLine(clouds_description_DE);
dom.GetObject("W_description").State(clouds_description_DE);
}
if (clouds_description == "Lichte motregen")
{
string clouds_description_DE = "Motregen";
WriteLine("clouds_description_DE");WriteLine(clouds_description_DE);
dom.GetObject("W_description").State(clouds_description_DE);
}
if (clouds_description == "Mis")
{
string clouds_description_DE = "Was";
WriteLine("clouds_description_DE");WriteLine(clouds_description_DE);
dom.GetObject("W_description").State(clouds_description_DE);
}
if (clouds_description == "Lichte sneeuwbuien")
{
string clouds_description_DE = "Lichte sneeuwbuien";
WriteLine("clouds_description_DE");WriteLine(clouds_description_DE);
dom.GetObject("W_description").State(clouds_description_DE);
}
if (cloud_description == "Zonnige")
{
string clouds_description_DE = "Heiter";
WriteLine("clouds_description_DE");WriteLine(clouds_description_DE);
dom.GetObject("W_description").State(clouds_description_DE);
}
if (clouds_description == "Bewolkt")
{
string clouds_description_DE = "Bewolkt";
WriteLine("wolkenbeschrijving");WriteLine(wolken_beschrijving_DE);
dom.GetObject("W_description").State(clouds_description_DE);
}
if (clouds_description == "Gedeeltelijk bewolkt")
{
string clouds_description_DE = "Gedeeltelijk bewolkt";
WriteLine("clouds_description_DE");WriteLine(clouds_description_DE);
dom.GetObject("W_description").State(clouds_description_DE);
}
if (clouds_description == "Wissen")
{
string clouds_description_DE = "Wissen";
WriteLine("clouds_description_DE");WriteLine(clouds_description_DE);
dom.GetObject("W_description").State(clouds_description_DE);
}
if (cloud_description == "Mist")
{
string clouds_description_DE = "Mist";
WriteLine("clouds_description_DE");WriteLine(clouds_description_DE);
dom.GetObject("W_description").State(clouds_description_DE);
}
if (clouds_description == "Pargelregen mogelijk")
{
string clouds_description_DE = "Lichte regen mogelijk";
WriteLine("wolkenbeschrijving");WriteLine(wolken_beschrijving_DE);
dom.GetObject("W_description").State(clouds_description_DE);
}
if (clouds_description == "Gematigde regen")
{
string clouds_description_DE = "Gematigde neerslag";
WriteLine("wolkenbeschrijving");WriteLine(wolken_beschrijving_DE);
dom.GetObject("W_description").State(clouds_description_DE);
}


Bewolking

Variabele die moet worden gemaakt:

  • W_wolken van soort snaar

Code:

! Bewolking

pos = 0;
posStart = 'wolkendekking':';
posEnd = ',"voelt als';
posValueStart = stdout.Find(posStart) + posStart.Lengte();
posValueEnd = stdout.Find(posEnd)-posValueStart;
string clouds_data = stdout.Substr(posValueStart, posValueEnd);
WriteLine("wolken_data");WriteLine(wolken_data);
dom.GetObject("W_clouds").State(clouds_data);


Voorspelde regen

Variabele die moet worden gemaakt:

  • W_Neerslag van soort snaar

Code:

! Voorspelde regen

Varx;
pos = 0;
posStart = 'precip':';
posEnd = ''vochtigheid';
posValueStart = stdout.Find(posStart) + posStart.Lengte();
posValueEnd = stdout.Find(posEnd)-posValueStart;
tekenreeksprecisie = stdout.Substr(posValueStart, posValueEnd);
WriteLine("Neerslag");WriteLine(neerslag);
dom.GetObject("W_Precipitation").State(neerslag);


Hoogte – Azimut

Het script is geschreven door radio vuurtoren geschreven en de Homematisch forum overgenomen van pagina 10 van de gekoppelde draad.

Er moeten twee systeemvariabelen worden aangemaakt:

  • zon_hoogte n van soort Nummer
  • zon_azimut van soort Nummer

Waarom slechts 4 minuten? Omdat de aarde haar cirkel van 360° rond de zon één keer per 24 uur voltooit. 360° / 24u = 15° per uur, overeenkomend met 60 minuten / 15° = 4 minuten.

Het script moet onafhankelijk van de bovenstaande scripts of het bijbehorende programma worden gebruikt, op voorwaarde dat het update-interval anders is dan 4 minuten.

Programma:

Programma – bepaling van hoogte/azimut

Variabelen die moeten worden aangemaakt:

  • zon_azimut van soort nummer
  • zon_hoogte van soort nummer

Code:

! Verkrijg breedtegraad
echte phi = systeem.Latitude();
phi = 0,017453292 * phi;


! Conversie naar radialen
! Bereken sin_phi en cos_phi met Taylorreeksen
werkelijke temperatuur = phi * phi;
echte sin_phi =phi * ((temp * temp * 0,0083334) +1,0 - (temp * 0,1666667));


! sinusbenadering
echte cos_phi = (temp *temp *0,0416667) + 1,0 - (temp * 0,5);


! cosinus benadering
! Berekening van de zonnetijd, alle tijden in minuten
geheel getal time_min = system.Date("%M").ToInteger() + 60systeem.Datum("%H").ToInteger(); geheel getal begin van dag_min = system.SunriseTime("%M").ToInteger() + 60systeem.SunriseTime("%H").ToInteger();
geheel getal einde dag_min = system.SunsetTime("%M").ToInteger() + 60* system.SunsetTime("%H").ToInteger();
geheel getal zonnetijd = tijd_min + 720 - 0,5 *(begin van dag_min + einde van dag_min);
if (zonnetijd > 1440) {zonnetijd = zonnetijd -1440;}
if (zonnetijd < 1) {zonnetijd = 1440 + zonnetijd;} booleaanse middag =false; als (zonnetijd > 720) {zonnetijd =zonnetijd - 720; middag = waar; }
anders {zonnetijd =720 -zonnetijd;}


! Berekening sin_tau en cos_tau
echte tau = 0,00436332313 * zonnetijd; ! 15/60 * pi /180 * zonnetijd [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; temperatuur = tau * tau; real cos_tau =tau * ((temp * temp * 0,0083334) +1,0 - (temp * 0,1666667));} else {echte tau1 =3,141592654 - tau; temperatuur = tau1 * tau1; real sin_tau =tau1 * ((temp * temp * 0,0083334) +1,0 - (temp * 0,1666667)); tau = tau-1,570796327; temperatuur = tau * tau; echte cos_tau = (tau) (-1,0) ((temp * temp * 0,0083334) +1,0 - (temp * 0,1666667));}

! Berekeningsdelta
geheel getal dagnummer = system.Date("%j").ToInteger(); dagnummer = dagnummer +10; if (dagnummer > 365) {dagnummer = dagnummer - 365;}
if (dagnummer < 92) {echte dag = 0,0172142 *dagnummer;temp = dag * dag; reële delta = (-0,410152) *((temp *temp *0,041666) + 1,0 - (temp * 0,5));} if ((dagnummer >91) && (dagnummer < 184)) {dagnummer = 183 - dag nummer; echte dag = 0,0172142 *dagnummer; temperatuur = dag * dag; reële delta = (0,410152) *((temp *temp *0,041666) + 1,0 - (temp * 0,5));} if ((dagnummer >183) && (dagnummer < 275)) {dagnummer = dagnummer - 183 ; echte dag = 0,0172142 *dagnummer; temperatuur = dag * dag; reële delta = (0,410152) *((temp *temp *0,041666) + 1,0 - (temp * 0,5));} if ((dagnummer >274) && (dagnummer < 366)) {dagnummer = 365 - dagnummer ; echte dag = 0,0172142 *dagnummer; temperatuur = dag * dag; reële delta = (-0,410152) *((temp *temp *0,041666) + 1,0 - (temp * 0,5));}

! berekening sin_delta, cos_delta
temperatuur = delta * delta; real sin_delta =delta * ((temp * temp * 0,0083334) +1,0 - (temp * 0,1666667)); !sinusbenadering real cos_delta = (temp *temp *0,0416667) + 1,0 - (temp * 0,5);

! cosinus benadering
! Berekening van tan_delta met stuksgewijze linearisatie van de tan
booleaanse vsign = waar; als (delta<0,0) {vsign = false; delta = (-1,0) *delta;} reëel tan_delta = 1,0233 * delta; als (delta >=0,2618) {tan_delta = (1,1822*delta) - 0,0416;}
if (vsign == false) {tan_delta = (-1,0) * tan_delta;}


! Berekening sin_elevation en tan_azimuth
echte sin_elevation = (sin_phi * sin_delta) +( cos_phi * cos_delta * cos_tau);
temp = sin_elevatie * sin_elevatie;
werkelijke zonhoogte = sin_hoogte * (1,0 + (0,1666667 * temp) + (0,075 * temp * temp));
zonhoogte = 57,29577951 * zonhoogte;
reële noemer = (sin_phi*cos_tau) - (cos_phi * tan_delta);
if (noemer < 0,0) {boolean plus180 = waar;} real tan_azimuth = sin_tau / noemer;


! Berekening van sun_azimuth met stuksgewijze linearisatie van de arctan
Booleaans teken = waar; als (tan_azimuth <0,0) { teken = onwaar; tan_azimuth = (-1,0)*tan_azimuth;} echte sun_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 < 1,0)) {sun_azimuth = (0,6195* tan_azim uh) + 0,1659;} if ((tan_azimuth >= 1,0)&&(tan_azimuth < 1,3032)) {sun_azimuth = (0,43173* tan_azimuth) + 0,3537;} if ((tan_azimuth >= 1,3032)&&(tan_azimuth < 1,7321)) {sun_azimuth = ( 0,3052* tan_azimuth) + 0,51856;} if ((tan_azimuth >= 1,7321)&&(tan_azimuth < 2,4142)) {zon_azimuth = (0,123* tan_azimuth) + 0,88115;} if ((tan_azimuth >= 2,9459)&&(tan_azimuth < 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) + 1,1194;} if ((tan_azimuth >= 5,0)&&(tan_azim uh <7,0)) {zon_azimuth = (0,02775* tan_azimuth) + 1,23465;} als ((tan_azimuth >= 7,0 )&&(tan_azimuth <12,0)) {zon_azimuth = (0,01175117* tan_azimuth) + 1,346641;} als ((tan_azimuth >= 12. 0 )&&(tan_azimuth <20,0)) {zon_azimuth = (0,004147854* tan_azimuth) + 1,437881;} if (( tan_azimuth >= 20,0)&&(tan_azimuth <50,0)) {zon_azimuth = (0,0009987* tan_azimuth) + 1,5008639 ;} if (tan_azimuth >= 50,0) {zon_azimuth = (0,000099983* tan_azimuth) + 1,54579974;}
als (zon_azimuth > 1,5707963278) {zon_azimuth = 1,5707963278;}
if (teken == false) {sun_azimuth = (-1,0) * sun_azimuth;}
zon_azimuth = 57,29577951 * zon_azimuth;
als (plus180 == waar) {zon_azimuth = zon_azimuth + 180.0;}


! Dagelijkse correctie en waarden opslaan in systeemvariabelen
if (middag == false)
{zon_azimut = 180,0 - zon_azimut; zonnetijd = 720 - zonnetijd;}
anders
{zon_azimuth = zon_azimuth + 180,0; zonnetijd = 720 + zonnetijd;}
zon_azimut = 0,1 ((zon_azimuth10.0).ToInteger());
zon_elevatie = 0,1 ((zon_hoogte10.0).ToInteger());
dom.GetObject("sonne_elevation").State(sonne_elevation);
dom.GetObject("sun_azimuth").State(sun_azimuth);

Geef een reactie

Het e-mailadres wordt niet gepubliceerd. Vereiste velden zijn gemarkeerd met *

nl_NLNederlands