目次
GPSデータは走行中に常に変化する。ここでの目的は、HomeMaticまたはRaspberryMaticのSmartHomeを使用してこのデータを記録し、必要に応じてそれに依存する他のパラメータを更新することです。
もちろん、継続的に位置を決定し、その位置に関連する気象データを常に取得することもできるが、これでは不必要なオンライン・トラフィックとプロセッサ負荷が発生する。そこで、本システムでは、位置の変化のみをチェックし、位置の変化が認識された場合にのみ、現在地に関連する気象データを決定し、それに応じてデータを更新する。
比較のためのGPSデータの調整
GPS座標は、GPSサービスプロバイダの意図的な不正確さにより、経度と緯度の値の下2桁が常に変動するため、同じ場所に変わらずにいたとしても、比較のために考慮されるのは小数点以下4桁のみです。そのため、位置の変更は、少なくとも小数点第4位が変更された場合にのみ認識されます。
スクリプトの補足GPSデータ)
以下のスクリプト行を これ ディスカッション・スクリプト GPSデータ を追加した。感嘆符で始まる行はコメントを表す。WriteLineステートメントは出力制御のためにのみ使用され、削除することができる。
DRAWING CHAIN タイプの新しい変数を作成しなければならない:
- W_Lat_short_act (現在の緯度を小数点以下4桁で切り捨てて保存する)
- W_Lon_short_act (現在の地理的経度を小数点以下4桁で切り捨てて保存します。)
- W_Lat_short_old (地理的緯度を小数点以下4桁で切り捨てて保存する場合)
- W_Lon_short_old (地理的経度を小数点以下4桁で切り捨てて保存する場合)
スクリプト
!ジオデータを小数点以下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);
!現在のGPSデータでURLを組み立てる - AppID "... xxx ..." は、あなた自身のIDで埋めなければなりません。
var url = "https://api.openweathermap.org/geo/1.0/reverse?lat="#Latitude#"&lon="#Longitude#"&limit=5&appid=[xxxxxxxxxxxxxxxxxxxxxxx]";
WriteLine("新しいジオデータの新しいURL");WriteLine(url);
!URLリクエストの送信
var posValueStart;
var posValueEnd;
var pos;
var data;
var posStart;
文字列 stderr; 文字列 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("都市名");WriteLine(都市名);
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;
string W_region = stdout.Substr(posValueStart, posValueEnd);
WriteLine("W_region");WriteLine(W_region);
dom.GetObject("W_region").State(W_region);
}
!ELSEブランチは省略可能で、場所が変更されていない場合に、スクリプトが最後まで実行されたかどうかを確認するためだけに使用されます。
その他
{
WriteLine("Data equals");
}