目录
旅行时 GPS 数据会不断变化。这里的目的是使用 HomeMatic 或 RaspberryMatic 上的 SmartHome 来记录这些数据,并在必要时更新依赖于这些数据的其他参数。.
当然,您可以持续确定位置,从而始终检索与位置相关的天气数据,但这会产生不必要的在线流量和处理器负载。因此,系统只检查位置的变化,只有在识别到位置变化时才确定与当前位置相关的天气数据,并相应地更新数据。.
调整 GPS 数据以进行比较
由于 GPS 服务提供商故意设置的不准确性,GPS 坐标的经度和纬度值的最后两位数总是会有波动,因此,即使您在同一位置保持不变,在比较时也只会考虑到小数点后四位。因此,只有当小数点后至少第四位发生变化时,位置变化才会被识别。.
脚本补充 (GPS_Data)
在 这里 讨论过的剧本 GPS_Data 已添加。以感叹号开头的行代表注释。WriteLine 语句仅用于输出控制,可以删除。.
必须创建绘图链类型的新变量:
- W_Lat_short_act (存储截断到小数点后四位的当前纬度值)
- W_Lon_short_act (保存截断到小数点后四位的当前地理经度)
- W_Lat_short_old (存储截断到小数点后四位的旧地理纬度)。
- W_Lon_short_old (存储截断到小数点后四位的旧地理经度)
脚本
!保存截断到小数点后 4 位的地理数据 (ToString(4))
var lat_short_akt = lat.ToString(4);;
WriteLine(„lat_short_akt“);WriteLine(lat_short_akt);;
dom.GetObject(‚W_Lat_short_akt‘).State(lat_short_akt);;
var lon_short_akt = lon.ToString(4);;
WriteLine(„lon_short“);WriteLine(lon_short_akt);;
dom.GetObject(‚W_Lon_short_akt‘).State(lon_short_akt);;
!当前位置与旧位置的比较
var W_lat_short_alt = dom.GetObject(„W_Lat_short_alt“).Value();WriteLine(W_lat_short_alt);;
var W_lon_short_alt = dom.GetObject(„W_Lon_short_alt“).Value();WriteLine(W_lon_short_alt);;
if ((lat_short_akt W_lat_short_alt) && (lon_short_akt W_lon_short_alt))
{
dom.GetObject(„W_Lat_short_alt“).State(lat_short_akt);;
dom.GetObject(„W_Lon_short_alt“).State(lon_short_akt);;
!将 URL 与当前 GPS 数据组合 - AppID „... xxx ...“ 必须填写您自己的 ID
var url = „https://api.openweathermap.org/geo/1.0/reverse?lat=“#Latitude#“&lon=“#Longitude#“&limit=5&appid=[xxxxxxxxxxxxxxxxxxxxxxxxxxxxx]“;;
WriteLine(„新地理数据的新 URL“);WriteLine(url);;
!发送 URL 请求
var posValueStart;;
var posValueEnd;;
var pos;;
var data;;
var posStart;;
var posEnd; string stderr; string stdout;;
system.Exec(„wget -q -O - ‚“#url#“‚“, &stdout, &stderr);;
WriteLine(stdout);;
!提取数据
!城市名称
pos = 0;;
posStart = ’name“:“‚;;
posEnd = ‚“, “local_names‘;;
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);;
!国家代码
pos = 0;;
posStart = ‚country“:“‚;;
posEnd = ‚“, “state‘;;
posValueStart = stdout.Find(posStart) + posStart.Length();;
posValueEnd = stdout.Find(posEnd)-posValueStart;;
string country_code = stdout.Substr(posValueStart, posValueEnd);;
WriteLine(„country_code“);WriteLine(country_code);;
dom.GetObject(„W_country_code“).State(country_code);;
!地区
pos = 0;;
posStart = ’state“:“‚;;
posEnd = ‚“}]‘;;
posValueStart = stdout.Find(posStart) + posStart.Length();;
posValueEnd = stdout.Find(posEnd)-posValueStart;;
字符串 W_region = stdout.Substr(posValueStart, posValueEnd);;
WriteLine(„W_region“);WriteLine(W_region);;
dom.GetObject(„W_region“).State(W_region);;
}
!ELSE 分支可以省略,仅用于验证脚本是否已运行到终点(如果位置未发生变化)。
不然
{
WriteLine(„Data equals“);;
}