コンテンツへスキップ

スマートホーム気象データ

目次

読書時間 9 議事録

更新日 - 2023年1月20日

SmartHomeで気象データを記録し、AIO Creator経由で携帯電話やタブレットで視覚化することは、一般的には必須ではないが、あると便利だ。

オンライン気象サービス ウェザースタック・ドットコム は月間250クエリまで無料で利用できる。本当に最新の気象データが必要な場合は、スタンダード・パッケージをお選びください。50,000クエリーで1分間隔のクエリーが可能です。

その他のパッケージは、主に問い合わせ件数と7日間または14日間の天気予報が異なる。

以下のデータはすべてのパッケージに含まれています:

  • 地理的な経度と緯度
  • 所在地
  • 地域
  • 国名
  • タイムゾーン
  • 現地時間と日付
  • UTCオフセット
  • データ収集の現在時刻
  • 気温
  • 天気予報
  • 風速
  • 風向きの数値/地理
  • 空気圧
  • 降雨量
  • 湿度
  • 雲密度
  • チル温度
  • UVインデックス
  • 表示

登録には、パッケージにかかわらず、通常の情報と支払詳細が必要です。20%をご利用の場合、年間購読料が割引になります。

この手続きが正常に完了すると、いわゆるAPIコード(Application Programming Interface)が送られてくるので、それをクエリーURLにコピーする。レスポンスは、上記のデータカテゴリーと値を含むXML出力です。データは適切なスクリプトを使用して抽出され、変数に格納されます。これらは、AIO Creatorで可視化するために使用することができます。

XML出力で可能なすべてのパラメータと、高価格パッケージに含まれるオプションのクエリーオプションについて、さまざまなコード例を含めて詳しく説明します、 これ 見ることができる。

プログラム

データ量が多いため、プログラムはかなり広範囲に及ぶ。そのため、ここでは個々のセクションを順次掲載している。すべてのコード・スニペットは最終的にひとつのプログラムにまとめることができる。

上記のデータに加えて、追加データがプログラム内で計算され、視覚化できるようになっている:

  • 太陽の仰角と方位角
  • 推奨遮光係数
プログラム - W_Data - 天気データクエリ

プログラムヘッダー

ヘッダーには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);

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

jaJapanese