目录
更新 - 1 月 20, 2023
使用 SmartHome 记录天气数据,并通过 AIO Creator 在手机或平板电脑上将其可视化,这通常不是必需的,但也是一个不错的选择。.
在线天气服务 weatherstack.com 每月最多提供 250 次查询 - 在一定范围内免费。如果您确实需要最新的天气数据,则应选择标准套餐。每分钟可查询 50,000 次。.
其他套餐的主要区别在于查询次数和 7 天或 14 天的天气预报。.
以下数据包含在所有软件包中:
- 地理经纬度
- 地点
- 地区
- 国家
- 时区
- 当地时间和日期
- UTC 偏移
- 当前数据收集时间
- 空气温度
- 天气描述
- 风速
- 数字风向/地理风向
- 气压
- 降雨量
- 湿度
- 云密度
- 冷却温度
- 紫外线指数
- 查看
无论使用哪种套餐,注册时都需要提供常规信息和付款详情。使用 20% 可享受按年订购(而非按月订购)的折扣。.
一旦这一程序成功完成,您就会收到一个所谓的 API 代码(应用程序接口),您可以将其复制到查询 url 中。响应是包含上述数据类别和值的 XML 输出。数据通过合适的脚本提取并存储在变量中。这些数据可用于 AIO Creator 的可视化。.
详细介绍 XML 输出中所有可能的参数,以及价格较高的软件包中包含的可选查询选项,包括各种代码示例、, 这里 可查看。.
计划
由于数据量巨大,该方案的内容相当广泛。因此在此按顺序列出各个部分。所有代码片段最终可合并为一个程序。.
除上述数据外,程序还会计算其他数据,并提供可视化功能:
- 太阳仰角和方位角
- 防光系数建议

计划标题
标头只包含 URL,必须辅以 API 密钥(此处显示为 xxx)和位置(纯文本或用逗号分隔的经度和纬度,标为 yyy):
var url = "http://api.weatherstack.com/current?access_key=xxx&query=yyy";;
将美国时间格式转换为德国时间格式
由于在免费和标准费率中没有显示语言的选择,因此只有上午/下午时间格式,并将其转换为 24 小时格式。.
要创建的变量:
W_LDU类型 字符串
代码
!AM/PM 转换 - 保存在 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":"';;
integer 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":"';;
integer word_length = word.Length();;
integer word_position = wetter_xml.Find(word);;
字符串 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":"';;
integer word_length = word.Length();;
integer word_position = wetter_xml.Find(word);;
字符串 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":"';;
integer word_length = word.Length();;
integer word_position = wetter_xml.Find(word);;
字符串 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);;
if (PM == "PM")
{
整数 Diff = 12;;
WriteLine("Diff");WriteLine(Diff);;
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 选择的城市自动决定。.
要创建的变量:
国家代码 类型 字符串
代码
!国家代码
pos = 0;;
posStart = 'country":"';;
posEnd = '", "region';;
posValueStart = stdout.Find(posStart) + posStart.Length();;
posValueEnd = stdout.Find(posEnd)-posValueStart;;
string country_code = stdout.Substr(posValueStart, posValueEnd);;
如果 (country_code == "Germany")
{
string country_code = "DE";;
}
如果 (country_code == "Sweden")
{
string country_code = "SE";;
}
WriteLine("country_code");WriteLine(country_code);;
dom.GetObject("W_country_code").State(country_code);;
地区
例如,该地区表示德国的 „下萨克森州“,也是由 Weatherstack 自动确定的。.
要创建的变量:
W_region类型 字符串
代码
!地区
pos = 0;;
posStart = '区域":"';;
posEnd = '", "lat';;
posValueStart = stdout.Find(posStart) + posStart.Length();;
posValueEnd = stdout.Find(posEnd)-posValueStart;;
string region = stdout.Substr(posValueStart, posValueEnd);;
WriteLine("region");WriteLine(region);;
dom.GetObject("W_region").State(region);;
城市
输入城市时,Weatherstack 会自动确定相应的经度和纬度数据,而城市则根据输入的地理数据确定。.
要创建的变量:
城市名称类型 字符串
代码
!城市名称
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("city_name");WriteLine(city_name);;
dom.GetObject("W_city_name").State(city_name);;
纬度 - geogr.纬度
要创建的变量:
W_Lat类型 字符串
代码
!Lat
pos = 0;;
posStart = '查询":"纬度';;
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_Lon类型 字符串
代码
!朗
pos = 0;;
posStart = 'and Lon';;
posEnd = '", "language';;
posValueStart = stdout.Find(posStart) + posStart.Length();;
posValueEnd = stdout.Find(posEnd)-posValueStart;;
字符串 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;;
字符串 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);;
如果(W_mb_akt > W_mb_alt)
{
dom.GetObject("W_air_pressure_old").State(W_mb_akt);;
dom.GetObject("W_Air pressure trend").State("S");;
}
如果(W_mb_akt < W_mb_alt)
{
dom.GetObject("W_air_pressure_old").State(W_mb_akt);;
dom.GetObject("W_Air pressure trend").State("F");;
}
如果 (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;;
字符串 app_temp_daten = stdout.Substr(posValueStart, posValueEnd);;
WriteLine("app_temp_data");WriteLine(app_temp_data);;
dom.GetObject("W_chill").State(app_temp_daten);;
防紫外线和光线建议
根据紫外线指数确定的紫外线照射量可建议采取必要的防晒措施。.
要创建的变量:
W_UV类型 字符串W_LSF类型 字符串
代码
!紫外线
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));;
real number = data.ToInteger();;
WriteLine("UV 数字");WriteLine(数字);;
字符串 LSF = "";;
if (number = "3") && (number = "6") && (number = "8") && (number = "10") {LSF = "必须" ;}
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);;
风速 - 换算
由于不同地区、国家和应用中对风速有不同的测量方法,因此这里提供了从米/秒到公里/小时、节和蒲福风速的换算。.
要创建的变量:
W_Wind_kmh类型 工资W_Wind_knh类型 工资- W_Wind_Bft 类型 工资
代码
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);;
实 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);;
}
如果 ((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);;
}
如果 ((20.79 < x) && (x < 24.41))
{
dom.GetObject(„W_Wind_Bft“).State(9);;
}
如果 ((24.49 < x) && (x < 28.41))
{
dom.GetObject(„W_Wind_Bft“).State(10);;
}
如果 ((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 °C,这意味着 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 = '", "压力';;
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;;
字符串 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_description类型 字符串
代码
!云层描述
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);;
如果 (clouds_description == "多云")
{
字符串 clouds_description_DE = "多云";;
WriteLine("clouds_description_DE");WriteLine(clouds_description_DE);;
dom.GetObject("W_description").State(clouds_description_DE);;
}
如果 (clouds_description == "小雨")
{
字符串 clouds_description_EN = "小雨";;
WriteLine("clouds_description_DE");WriteLine(clouds_description_DE);;
dom.GetObject("W_description").State(clouds_description_DE);;
}
如果 (clouds_description == "小阵雨")
{
字符串 clouds_description_EN = "小阵雨";;
WriteLine("clouds_description_DE");WriteLine(clouds_description_DE);;
dom.GetObject("W_description").State(clouds_description_DE);;
}
如果 (clouds_description == "细雨")
{
字符串 clouds_description_DE = "细雨";;
WriteLine("clouds_description_DE");WriteLine(clouds_description_DE);;
dom.GetObject("W_description").State(clouds_description_DE);;
}
如果 (clouds_description == "Mis")
{
字符串 clouds_description_DE = "霾";;
WriteLine("clouds_description_DE");WriteLine(clouds_description_DE);;
dom.GetObject("W_description").State(clouds_description_DE);;
}
如果 (clouds_description == "小阵雪")
{
string clouds_description_EN = "小阵雪";;
WriteLine("clouds_description_DE");WriteLine(clouds_description_DE);;
dom.GetObject("W_description").State(clouds_description_DE);;
}
如果 (clouds_description == "Sunny")
{
字符串 clouds_description_DE = "欢快";;
WriteLine("clouds_description_DE");WriteLine(clouds_description_DE);;
dom.GetObject("W_description").State(clouds_description_DE);;
}
如果 (clouds_description == "Overcast")
{
字符串 clouds_description_DE = "阴天";;
WriteLine("clouds_description");WriteLine(clouds_description_EN);;
dom.GetObject("W_description").State(clouds_description_DE);;
}
如果 (clouds_description == "多云")
{
字符串 clouds_description_DE = "多云";;
WriteLine("clouds_description_DE");WriteLine(clouds_description_DE);;
dom.GetObject("W_description").State(clouds_description_DE);;
}
如果 (clouds_description == "清除")
{
字符串 clouds_description_DE = "清除";;
WriteLine("clouds_description_DE");WriteLine(clouds_description_DE);;
dom.GetObject("W_description").State(clouds_description_DE);;
}
如果 (clouds_description == "雾")
{
字符串 clouds_description_DE = "雾";;
WriteLine("clouds_description_DE");WriteLine(clouds_description_DE);;
dom.GetObject("W_description").State(clouds_description_DE);;
}
如果 (clouds_description == "可能有零星小雨")
{
字符串 clouds_description_EN = "可能有小雨";;
WriteLine("clouds_description");WriteLine(clouds_description_EN);;
dom.GetObject("W_description").State(clouds_description_DE);;
}
如果 (clouds_description == "中雨")
{
字符串 clouds_description_DE = "中度降水";;
WriteLine("clouds_description");WriteLine(clouds_description_EN);;
dom.GetObject("W_description").State(clouds_description_DE);;
}
云层
要创建的变量:
W_clouds类型 字符串
代码
!云层
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("Precipitation");WriteLine(precip);;
dom.GetObject("W_Precipitation").State(precip);;
仰角 - 方位角
剧本由 无线电灯塔 并提交给 同动论坛 在链接主题的第 10 页。.
必须创建两个系统变量:
太阳高度n</em类型 数量太阳方位角类型 数量
为什么是 4 分钟?因为地球每 24 小时绕太阳 360° 转一圈。360°/24小时=每小时15°,相当于60分钟/15°=4分钟。.
如果更新时间间隔不同于 4 分钟,该脚本应独立于上述脚本或相关程序使用。.
计划

要创建的变量:
太阳方位角类型 工资太阳高度类型 工资
代码
!获取纬度real phi = system.Latitude();;
phi = 0.017453292 * phi;;
!转换为弧度
用泰勒级数计算 sin_phi 和 cos_phireal temp = phi * phi;;
real sin_phi =phi * ((temp * temp * 0.0083334) +1.0 - (temp * 0.1666667));;
正弦近似值
real cos_phi = (temp *temp *0.0416667) + 1.0 - (temp * 0.5);;
!余弦近似值
!计算太阳时,所有时间均以分钟为单位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();;
整数 sonnenzeit =time_min + 720 - 0.5 *(tagesbeginn_min +tagesende_min);;
如果 (suntime > 1440) {suntime = suntime -1440;}
if (suntime 720) {suntime =suntime - 720; afternoon = true; }
else {sonnenzeit =720 -sonnenzeit;}!计算 sin_tau 和 cos_taureal tau = 0.00436332313 * solar time; !15/60 * pi /180 * 太阳时 [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));} 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));}
!计算三角洲integer tageszahl = system.Date("%j").ToInteger(); tageszahl = tageszahl +10; if (tageszahl > 365) {tageszahl = tageszahl - 365;}
if (tageszahl 91) && (tageszahl 183) && (number of days 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_deltatemp = delta * delta; real sin_delta =delta * ((temp * temp * 0.0083334) +1.0 - (temp * 0.1666667)); !sine-approximation real cos_delta = (temp *temp *0.0416667) + 1.0 - (temp * 0.5);;
!余弦近似值
!计算 tan_delta 时,对 tanboolean 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 的计算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;;
实分母 = (sin_phi*cos_tau) - (cos_phi * tan_delta);;
if (denominator < 0.0) {boolean plus180 = true;} real tan_azimut = sin_tau / denominator;;
!用 arctan 的片断线性化计算太阳方位角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;}
如果 (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;}!将时间校正和数值保存到系统变量中如果 (afternoon == false)
{sonne_azimut = 180.0 - sonne_azimut; sonnenzeit = 720 - sonnenzeit;}
不然
{sun_azimuth = sun_azimuth + 180.0;sun_time = 720 + sun_time;}
太阳方位角 = 0.1 ((sun_azimut10.0) .ToInteger());;
太阳高度 = 0.1 ((sun_elevation10.0) .ToInteger());;
dom.GetObject("sonne_elevation").State(sonne_elevation);;
dom.GetObject("sonne_azimut").State(sonne_azimut);;