目次
更新日 - 2023年1月20日
SmartHomeで気象データを記録し、AIO Creator経由で携帯電話やタブレットで視覚化することは、一般的には必須ではないが、あると便利だ。
オンライン気象サービス ウェザースタック・ドットコム は月間250クエリまで無料で利用できる。本当に最新の気象データが必要な場合は、スタンダード・パッケージをお選びください。50,000クエリーで1分間隔のクエリーが可能です。
その他のパッケージは、主に問い合わせ件数と7日間または14日間の天気予報が異なる。
以下のデータはすべてのパッケージに含まれています:
- 地理的な経度と緯度
- 所在地
- 地域
- 国名
- タイムゾーン
- 現地時間と日付
- UTCオフセット
- データ収集の現在時刻
- 気温
- 天気予報
- 風速
- 風向きの数値/地理
- 空気圧
- 降雨量
- 湿度
- 雲密度
- チル温度
- UVインデックス
- 表示
登録には、パッケージにかかわらず、通常の情報と支払詳細が必要です。20%をご利用の場合、年間購読料が割引になります。
この手続きが正常に完了すると、いわゆるAPIコード(Application Programming Interface)が送られてくるので、それをクエリーURLにコピーする。レスポンスは、上記のデータカテゴリーと値を含むXML出力です。データは適切なスクリプトを使用して抽出され、変数に格納されます。これらは、AIO Creatorで可視化するために使用することができます。
XML出力で可能なすべてのパラメータと、高価格パッケージに含まれるオプションのクエリーオプションについて、さまざまなコード例を含めて詳しく説明します、 これ 見ることができる。
プログラム
データ量が多いため、プログラムはかなり広範囲に及ぶ。そのため、ここでは個々のセクションを順次掲載している。すべてのコード・スニペットは最終的にひとつのプログラムにまとめることができる。
上記のデータに加えて、追加データがプログラム内で計算され、視覚化できるようになっている:
- 太陽の仰角と方位角
- 推奨遮光係数

プログラムヘッダー
ヘッダーにはURLのみが含まれ、それを、ここではxxxとして示されているAPIキーと、場所(プレーンテキスト、またはコンマで区切られた経度と緯度でyyyと表示)で補足しなければならない:
var url = "http://api.weatherstack.com/current?access_key=xxx&query=yyy";
USからDEへの変換
無料および標準料金プランでは表示言語を選択できないため、AM/PMの時刻フォーマットしか利用できないが、これは24時間フォーマットに変換される。
作成される変数:
W_LDU
タイプの ストリング
コード
!AM/PM変換 - W_LDUでの保存
var posValueStart;
var posValueEnd;
var posStart;
文字列 stderr; 文字列 stdout;
system.Exec("wget -q -O - '"#url#"'", &stdout, &stderr);
WriteLine(stdout);
文字列 wetter_xml = stdout;
string word = 'observation_time":";
整数 word_length = word.Length();
整数 word_position = wetter_xml.Find(word);
string data = wetter_xml.Substr((word_position + word_laenge), 5);
整数 word_position = data.Find(word);
data = data.Substr(0, (word_position -2));
string word = 'observation_time":";
整数 word_length = word.Length();
整数 word_position = wetter_xml.Find(word);
string PM = wetter_xml.Substr((word_position + word_laenge +6), 2);
整数 word_position = PM.Find(word);
PM = PM.Substr(0, (word_position -2));
WriteLine("AM/PM");WriteLine(PM);
string word = 'observation_time":";
整数 word_length = word.Length();
整数 word_position = wetter_xml.Find(word);
string HH = wetter_xml.Substr((word_position + word_laenge) + 1, 1);
整数 word_position = HH.Find(word);
HH = HH.Substr(0, (word_position -2));
WriteLine("HH");WriteLine(HH);
string word = 'observation_time":";
整数 word_length = word.Length();
整数 word_position = wetter_xml.Find(word);
string MM = wetter_xml.Substr((word_position + word_laenge) +3, 2);
整数 word_position = MM.Find(word);
MM = MM.Substr(0, (word_position -2));
WriteLine("MM");WriteLine(MM);
if (PM == "PM")
{
整数 Diff = 12;
WriteLine("差分");WriteLine(差分);
var HH_i = HH.ToInteger();
整数 H = (HH_i + Diff);
WriteLine("HHi + Diff is = H)");WriteLine(H);
文字列HHMM = H #":";
WriteLine("H_+ : ");WriteLine(HHMM);
文字列 HM = HHMM # MM;
WriteLine("HH_+12+MM");WriteLine(HM);
dom.GetObject("W_LDU").State(HM);
}
その他
{
WriteLine("LDU_daten");WriteLine(daten);
dom.GetObject("W_LDU").State(data);
}
国 - 国コード
国コードも英語で出力され、ここで国際コードに変換される。必要に応じて、このパターンに従ってさらに国を追加することができます。現在の国はWeatherstackが選択した都市によって自動的に決定されます。
作成される変数:
W_国コード
タイプの ストリング
コード
!国コード
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 (country_code == "Germany")
{
string country_code = "DE";
}
if (country_code == "Sweden")
{
string country_code = "SE";
}
WriteLine("country_code");WriteLine(country_code);
dom.GetObject("W_country_code").State(country_code);
地域
地域は例えばドイツの "Lower Saxony "を表し、これもWeatherstackが自動的に決定する。
作成される変数:
Wリージョン
タイプの ストリング
コード
!地域
pos = 0;
posStart = '地域":';
posEnd = '", "lat';
posValueStart = stdout.Find(posStart) + posStart.Length();
posValueEnd = stdout.Find(posEnd)-posValueStart;
string region = stdout.Substr(posValueStart, posValueEnd);
WriteLine("地域");WriteLine(地域);
dom.GetObject("W_region").State(region);
都市
都市を入力すると、Weatherstackは自動的に対応する経度と緯度のデータを決定し、都市は入力されたジオデータから決定されます。
作成される変数:
W_都市名
タイプの ストリング
コード
!都市名
pos = 0;
posStart = 'name":';
posEnd = '", "country';
posValueStart = stdout.Find(posStart) + posStart.Length();
posValueEnd = stdout.Find(posEnd)-posValueStart;
string city_name = stdout.Substr(posValueStart, posValueEnd);
WriteLine("都市名");WriteLine(都市名);
dom.GetObject("W_city_name").State(city_name);
緯度 - geogr.緯度
作成される変数:
W_Lat
タイプの ストリング
コード
!ラット
pos = 0;
posStart = 'query": "Lat';
posEnd = 'and Lon';
posValueStart = stdout.Find(posStart) + posStart.Length();
posValueEnd = stdout.Find(posEnd)-posValueStart;
文字列 Lat = stdout.Substr(posValueStart, posValueEnd);
WriteLine("緯度");WriteLine(緯度);
dom.GetObject("W_Lat").State(Lat);
経度 - 経度
作成される変数:
W_ロン
タイプの ストリング
コード
!ロン
pos = 0;
posStart = 'and 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);
視界
作成される変数:
W_vis
タイプの ストリング
コード
!可視性
pos = 0;
posStart = 'visibility":';
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);
空気圧と傾向
このスクリプトでは、提供される空気圧に加え、測定値を「現在」として、以前の値を「古い」として保存することで、空気圧のトレンドが決定される。両者は互いに比較され、結果としてトレンドが得られます。
作成される変数:
W_air_pressure_act
タイプの ストリングW_air_pressure_old
タイプの ストリングW_空気圧の傾向
タイプの ストリング
コード
!プリント
var W_mb_alt;
var W_mb_akt;
pos = 0;
posStart = '圧力":';
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_Air pressure trend").State("S");
}
if (W_mb_akt < W_mb_alt)
{
dom.GetObject("W_air_pressure_old").State(W_mb_akt);
dom.GetObject("W_Air pressure trend").State("F");
}
if (W_mb_akt == W_mb_alt)
{
dom.GetObject("W_air_pressure_old").State(W_mb_akt);
dom.GetObject("W_Air pressure trend").State("N");
}
チル温度
風邪は風速と気温に左右される。ウォータースポーツの場合、水しぶきによる蒸発冷却の影響も加わります(ここでは考慮していません)。寒気とは体感温度のことで、非常に寒い環境では実際の気温の1.5倍にもなり、すぐに凍傷になることもある。
作成される変数:
W_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);
UVおよび遮光の推奨
UVインデックスに基づいて決定された紫外線暴露は、必要な光保護手段の使用を推奨する結果となる。
作成される変数:
W_UV
タイプの ストリングW_LSF
タイプの ストリング
コード
!UV
pos = 0;
posStart = 'uv_index":';
posEnd = ', "visibility";
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));
実数 = data.ToInteger();
WriteLine("UV番号");WriteLine(番号);
文字列 LSF = "";
if (数字 = "3") && (数字 = "6") && (数値 = "8") && (数字 = "8") && (数字 = "10") {LSF = "MUST" ;} elseif (number >= "10") {LSF = "MUST" ;} elseif ((number >= "8") && (number <= "9"))
dom.GetObject("W_LSF").State(LSF);WriteLine("LSF");WriteLine(LSF);
風速
作成される変数:
W_WdSpd
タイプの ペイ
コード
!風速
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);
風速 - 変換
地域、国、用途によって好まれる風速は異なるので、ここではm/sからkm/h、ノット、ビューフォートへの換算を示す。
作成される変数:
W_Wind_kmh
タイプの ペイW_Wind_knh
タイプの ペイ- 型のW_Wind_Bft ペイ
コード
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);
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);
もし (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);
}
もし (x > 32.6)
{
dom.GetObject("W_Wind_Bft").State(12);
}
風速-凍傷の危険性
非常に寒い地域を旅行する場合は、適切な防護服を着用しない限り、風速と外気温の認識により凍傷の危険性がある場合、このスクリプトで警告が表示されます。
この計算では、30分以内の皮膚露出で皮膚温度が-4.8℃まで低下すると仮定しているため、5%の人に凍傷が発生することになる。
作成される変数:
- タイプのW_Wind_danger ブーリアン
コード
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 <60.1))))
{
dom.GetObject("W_Wind_Danger").State(true);
}
その他
{
dom.GetObject("W_Wind_Danger").State(false);
}
風向き(地理的)
作成される変数:
W_wind_dir
タイプの ストリング
コード
!地理的な風向き
pos = 0;
posStart = 'wind_dir":';
posEnd = '", "pressure';
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);
風向き(数値)
作成される変数:
W_Wind_rchtg
タイプの ストリング
コード
!風向数値
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);
雲量
雲量はWeatherstackによって英語でも書かれているため、ここではドイツ語への翻訳を提供する。
作成される変数:
W_説明
タイプの ストリング
コード
!雲の説明
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 (clouds_description == "Cloudy")
{
string clouds_description_DE = "曇り";
WriteLine("clouds_description_DE");WriteLine(clouds_description_DE);
dom.GetObject("W_description").State(clouds_description_DE);
}
if (clouds_description == "小雨")
{
string clouds_description_EN = "小雨";
WriteLine("clouds_description_DE");WriteLine(clouds_description_DE);
dom.GetObject("W_description").State(clouds_description_DE);
}
if (clouds_description == "小雨")
{
string clouds_description_EN = "弱いにわか雨";
WriteLine("clouds_description_DE");WriteLine(clouds_description_DE);
dom.GetObject("W_description").State(clouds_description_DE);
}
if (clouds_description == "小雨")
{
string clouds_description_DE = "霧雨";
WriteLine("clouds_description_DE");WriteLine(clouds_description_DE);
dom.GetObject("W_description").State(clouds_description_DE);
}
if (clouds_description == "Mis")
{
string clouds_description_DE = "haze";
WriteLine("clouds_description_DE");WriteLine(clouds_description_DE);
dom.GetObject("W_description").State(clouds_description_DE);
}
if (clouds_description == "小雪")
{
string clouds_description_EN = "小雪のにわか雨";
WriteLine("clouds_description_DE");WriteLine(clouds_description_DE);
dom.GetObject("W_description").State(clouds_description_DE);
}
if (clouds_description == "晴れ")
{
string clouds_description_DE = "陽気な";
WriteLine("clouds_description_DE");WriteLine(clouds_description_DE);
dom.GetObject("W_description").State(clouds_description_DE);
}
if (clouds_description == "Overcast")
{
string clouds_description_DE = "Overcast";
WriteLine("clouds_description");WriteLine(clouds_description_EN);
dom.GetObject("W_description").State(clouds_description_DE);
}
if (clouds_description == "部分的に曇り")
{
string clouds_description_DE = "部分的に曇り";
WriteLine("clouds_description_DE");WriteLine(clouds_description_DE);
dom.GetObject("W_description").State(clouds_description_DE);
}
if (clouds_description == "Clear")
{
string clouds_description_DE = "Clear";
WriteLine("clouds_description_DE");WriteLine(clouds_description_DE);
dom.GetObject("W_description").State(clouds_description_DE);
}
if (clouds_description == "Fog")
{
string clouds_description_DE = "霧";
WriteLine("clouds_description_DE");WriteLine(clouds_description_DE);
dom.GetObject("W_description").State(clouds_description_DE);
}
if (clouds_description == "断続的な雨の可能性")
{
string clouds_description_EN = "小雨の可能性あり";
WriteLine("clouds_description");WriteLine(clouds_description_EN);
dom.GetObject("W_description").State(clouds_description_DE);
}
if (clouds_description == "中程度の雨")
{
string clouds_description_DE = "中程度の降水";
WriteLine("clouds_description");WriteLine(clouds_description_EN);
dom.GetObject("W_description").State(clouds_description_DE);
}
雲量
作成される変数:
W_雲
タイプの ストリング
コード
!雲に覆われる
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);
雨の予報
作成される変数:
W_沈殿
タイプの ストリング
コード
!雨の予報
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("降水量");WriteLine(降水量);
dom.GetObject("W_Precipitation").State(precip);
仰角 - 方位角
脚本は ラジオ灯台 に提出した。 ホームマティック・フォーラム リンク先のスレッドの10ページにある。
つのシステム変数を作成しなければならない:
太陽高度比n。
タイプの 番号太陽方位角
タイプの 番号
なぜ4分なのか?地球は24時間に一度、太陽の周りを360度一周するからだ。360度÷24時間=1時間に15度、60分÷15度=4分に相当する。
このスクリプトは、更新間隔が4分と異なる場合は、上記のスクリプトや関連プログラムとは別に使用する必要がある。
プログラム

作成される変数:
太陽方位角
タイプの ペイ太陽高度
タイプの ペイ
コード
!緯度取得real phi = system.Latitude();
phi = 0.017453292 * phi;
!ラジアンへの変換
テーラー級数でsin_phiとcos_phiを計算するreal temp = phi * phi;
実数 sin_phi =phi * ((temp * temp * 0.0083334) +1.0 - (temp * 0.1666667));
正弦波近似
実 cos_phi = (temp *temp *0.0416667) + 1.0 - (temp * 0.5);
!コサイン近似
!太陽時計算、単位は分整数 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();
整数 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;}.
!sin_tauとcos_tauの計算実数 tau = 0.00436332313 * 太陽時; !15/60 * π /180 * 太陽時 [0 < tau < π ] if (tau < 1.570796327) {temp = tau * tau; real sin_tau =tau * ((temp * temp * 0.0083334) +1.0 - (temp * 0.166667)); tau= 1.570796327 - tau; 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));}.
!計算デルタ整数 tageszahl = system.Date("%j").ToInteger(); tageszahl = tageszahl +10; if (tageszahl > 365) {tageszahl = tageszahl - 365;}.
if (tageszahl 91) && (tageszahl 183) && (日数 274) && (tageszahl < 366)){tageszahl = 365 - tageszahl; real tag = 0.0172142 *tageszahl; temp = tag * tag; real delta = (-0.410152) *((temp *temp *0.041666) + 1.0 - (temp * 0.5));}.計算 sin_delta, cos_delta
temp = delta * delta; real sin_delta =delta * ((temp * temp * 0.0083334) +1.0 - (temp * 0.1666667)); !正弦近似 real cos_delta = (temp * temp * 0.0416667) + 1.0 - (temp * 0.5);
!コサイン近似
!tanの区分線形化によるtan_deltaの計算boolean vsign = true; if (delta=0.2618) {tan_delta = (1.1822*delta) - 0.0416;}.
if (vsign == false) {tan_delta = (-1.0) * tan_delta;}.
!sin_elevationとtan_azimuthの計算実 sin_elevation = (sin_phi * sin_delta) +( cos_phi * cos_delta * cos_tau);
temp = sin_elevation * sin_elevation;
実太陽高度 = sin_elevation * (1.0 + (0.166667 * temp) + (0.075 * temp * temp));
太陽高度 = 57.29577951 * 太陽高度;
実分母 = (sin_phi*cos_tau) - (cos_phi * tan_delta);
if (denominator < 0.0) {boolean plus180 = true;} real tan_azimut = sin_tau / denominator;
!アークタンの区分線形化による太陽方位の計算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;}.
if (sun_azimuth> 1.5707963278) {sun_azimuth = 1.5707963278;}。
if (sign == false) {sun_azimuth = (-1.0) * sun_azimuth;}。
太陽方位 = 57.29577951 * 太陽方位;
if (plus180 == true) {sonne_azimut = sonne_azimut + 180.0;}.
!時間帯補正と値をシステム変数に保存if (afternoon == false)
{sonne_azimut = 180.0 - sonne_azimut; sonnenzeit = 720 - sonnenzeit;}。
その他
{太陽方位 = 太陽方位 + 180.0;sun_time = 720 + sun_time;}。
太陽方位角 = 0.1 ((sun_azimut10.0) .ToInteger());
太陽高度 = 0.1 ((太陽高度10.0) .ToInteger());
dom.GetObject("sonne_elevation").State(sonne_elevation);
dom.GetObject("sonne_azimut").State(sonne_azimut);