【無料!道具不要!】天気も!気温も!風速も!畑の天候情報を自動記録する方法

野菜の栽培は自然を相手にしていますので、天候を把握することが大事になってきます。

みなさんはどのくらい天候を意識できていますでしょうか?

家庭菜園で常に天候を気にするのはなかなか難しいですよね。

実は今回紹介する方法を実践すると畑の天候を自動で記録して、天候の状況を把握できるようになります。

今回はみなさんの畑の天気・気温・風速・風向き誰でも簡単に自動で記録する方法を紹介します。

しかも無料で、測定器なども不要です。

誰にでもできるよう手順を追って説明しますので、ぜひ実践してみてくださいね。

スポンサーリンク

手順1.Googleスプレッドシートを用意する

以前、畑の降水量を自動で記録する方法を紹介させていただきました。

Googleスプレッドシートの準備手順は上記記事の手順1に記載しております。

そちらを参照してください。

しょちお
しょちお

Googleスプレッドシートが開けたら次の手順に進みましょう

スポンサーリンク

手順2.Google Apps Script(GAS)のプログラムを書く

次に天候情報を取得してGoogleスプレッドシートに記載をするプログラムを書きます。

しょちお
しょちお

プログラムと言ってもコピペで書けますので、経験がなくてもご安心ください。

Googleスプレッドシートでは、Google Apps Script(GAS)という制御プログラムを書くことができます。

GASもGoogleスプレッドシート同様、Googleが提供しているネット上で使える無料のサービスです。

1.「ツール」から「スクリプト エディタ」を選択します。
2.以下のプログラムを記載します。
function getWeather(){
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var sheet = ss.getActiveSheet();
  var lastRow = sheet.getLastRow();
  var directionName = ["北","北北東","北東", "東北東", "東", "東南東", "南東", "南南東", "南", "南南西", "南西", "西南西", "西", "西北西", "北西", "北北西", "北"];
  var url = 'http://api.openweathermap.org/data/2.5/weather?lat=XX.XXXX&lon=YYY.YYYY&appid=ZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZ&units=metric&lang=ja';
  //API呼び出し
  var response = UrlFetchApp.fetch(url).getContentText();
  //データ形成
  var json = JSON.parse(response);

//天気の取得
  var weather = json.weather[0].description;

//気温の取得
  var temp = json.main.temp;

//風速の取得
  var windspeed = json.wind.speed;

//風向きの取得
  var windDeg = json.wind.deg;
  var directionIndex = Math.round(windDeg/22.5)

//日付の取得
  var dt = json.dt
  var dtSeri = dt / 86400 + 25569;
  var uxtime = (dtSeri - 25569) * 86400000;
  var d   = new Date(uxtime);
  var dJST = Utilities.formatDate(d, 'JST','yyyy/MM/dd HH:mm');

//スプレッドシートへの書き込み
sheet.getRange(lastRow+1,1).setValue(dJST);
sheet.getRange(lastRow+1,2).setValue(weather);
sheet.getRange(lastRow+1,3).setValue(temp);
sheet.getRange(lastRow+1,4).setValue(windspeed);
sheet.getRange(lastRow+1,5).setValue(directionName[directionIndex]);

}

なお、手順1で紹介した記事の降水量と合わせて取得したい場合のプロブラムはまとめに記載しておきましたので、そちらを参考にしてください。

6行目に「lat=XX.XXXX&lon=YYY.YYYY」という部分がありますがこちらにはデータを取得する場所の緯度・経度を入力します。

緯度・経度はGoogleMapから調べられます

3.Googleマップで畑の場所を右クリックするとこのように緯度と経度が表示されます。

「XX.XXXX」に緯度「YYY.YYYY」に経度を入れましょう。

次に、同じく6行目で「ZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZ」となっているところですが、こちらにはこれから登録するサービスのIDを入れます。

入力内容は次の章で紹介しますので、一旦GASのプログラムはここまでです。

「Ctrlキー + s」で保存しておきましょう。

後でまた編集するので画面は開いたままでOKです。

手順3.気象情報取得サービスの利用登録をする(OpenWeatherMap)

次に気象情報を取得するためのサービスの利用登録をします。

今回はOpenWeatherMapが提供している「WeatherAPI」を使います。

APIとは…
Application Programming Interface の略。
簡単に言うと、必要な情報を渡すと欲しい情報を返却してくれる機能のことです。
今回でいうと、欲しい情報は「天候の情報」で、渡す情報は「緯度、経度」です。

以下のサイトから利用登録を進めていきましょう。

1.「Sign in」ボタンを押す。
2.「Create an Account」ボタンを押す。
3.必要な情報を入力していきます。
しょちお
しょちお

英語がわからなければGoogle翻訳を使いましょう。

4.最後に「Create Account」ボタンを押す。
5.このような画面が出ますがアンケートなので×で閉じてしまって問題ありません。
6.登録したメールアドレスにこのようなメールが届くので「Verify your email」ボタンを押して、Emailアドレスの承認をします。
7.画面上部にこのような表示が出ればOKです。
8.「Pricing」ボタンを押すと料金体系がわかります。

「Free」が無料の範囲です。

1分間に60回までのリクエスト1カ月で100万リクエスト以内であれば無料で使えます。

個人利用であればこれを超えることはないと思いますが、しっかりと抑えておきましょう。

1カ月で100万リクエストなので、1分間に20回までに留めておけば問題ありません

しょちお
しょちお

今回は1時間に1回の呼び出しを想定した手順になります

9.「My API keys」からAPI Key(赤塗の部分)を確認しましょう。

このAPI Keyは先ほど作ったプログラムに入力するので、コピーしておきましょう。

手順4.天候情報が取得できるか確認する

天候情報が取得できるかを確認しましょう。

手順3.で取得したAPI Keyを手順2.で作成したGASプログラムの 「ZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZ」の部分に入力します。

1.API Keyを入力したら「実行」ボタンを押しましょう。
2.スプレッドシートにデータが入力されれば成功です。(1行目にタイトルをつけておきましょう)

手順5.天候情報の取得プログラムを定期的に実行する

プログラムが正常に動いたら、プログラムを定期的に実行するように設定をしましょう。

この方法も以下の記事の手順5に記載しております。

同じ方法で「getWeather」のプログラムを1時間おきに実行するようにしましょう。

情報取得頻度を増やすことは可能ですがAPIの利用制限を超えないように注意しましょう

まとめ

いかがだったでしょうか。

天候情報は取得できましたか?

Googleスプレッドシートはスマホアプリもありますので、スマホにアプリをインストールすれば、いつでもどこでも記録した天候情報が確認できます。

一度設定してしまえば、勝手にデータを取得し続けられますので、ぜひ試してくださいね。

1時間おきにデータを蓄積していると1カ月ちょっとで行がいっぱいになってしまうので、あらかじめ行を追加しておきましょう。

また、こちらの記事で紹介した降水量も同じスプレッドシートで管理したい場合のプログラムは以下になります。

参考までにお使いください。

function getWeather(){
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var sheet = ss.getActiveSheet();
  var lastRow = sheet.getLastRow();

  var url = 'https://map.yahooapis.jp/weather/V1/place?coordinates=YYY.YYYYYY,XX.XXXXXX&output=json&appid=ZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZ';
  //API呼び出し
  var response = UrlFetchApp.fetch(url).getContentText();
  //データ形成
  var json = JSON.parse(response);

//日付の取得
  var date = json.Feature[0].Property.WeatherList.Weather[0].Date

//降水量の取得
  var rainFall = json.Feature[0].Property.WeatherList.Weather[0].Rainfall


  var directionName = ["北","北北東","北東", "東北東", "東", "東南東", "南東", "南南東", "南", "南南西", "南西", "西南西", "西", "西北西", "北西", "北北西", "北"];
  var url2 = 'http://api.openweathermap.org/data/2.5/weather?lat=XX.XXXX&lon=YYY.YYYY&appid=ZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZ&units=metric&lang=ja';
  //API呼び出し
  var response2 = UrlFetchApp.fetch(url2).getContentText();
  //データ形成
  var json2 = JSON.parse(response2);

//天気の取得
  var weather = json2.weather[0].description;

//気温の取得
  var temp = json2.main.temp;

//風速の取得
  var windspeed = json2.wind.speed;

//風向きの取得
  var windDeg = json2.wind.deg;
  var directionIndex = Math.round(windDeg/22.5)
  

//スプレッドシートへの書き込み(表示順を変えたい場合は1~6の数字を変更しましょう)
sheet.getRange(lastRow+1,1).setValue(date.substring(0, 4)+"/"+date.substring(4, 6)+"/"+date.substring(6, 8)+" "+date.substring(8, 10)+":"+date.substring(10, 12));
sheet.getRange(lastRow+1,2).setValue(weather);
sheet.getRange(lastRow+1,3).setValue(json.Feature[0].Property.WeatherList.Weather[0].Rainfall);
sheet.getRange(lastRow+1,4).setValue(temp);
sheet.getRange(lastRow+1,5).setValue(windspeed);
sheet.getRange(lastRow+1,6).setValue(directionName[directionIndex]);

}
しょちお
しょちお

X…,Y…,Z…の部分の入力を間違えないようにしましょう
特にZ…は使うAPIのよって異なりますので要注意です

コメント

  1. T.tama より:

    いつも分かりやすく説明頂きありがとうございます。ラズパイ始めて間もないので、大変ありがたいです。
    本ページも活用させてもらおうと手順の通りにやっているつもりですが、
    GASを実行すると、

    Exception: Request failed for http://api.openweathermap.org returned code 400. Truncated server response: {“cod”:”400″,”message”:”wrong latitude”} (use muteHttpExceptions option to examine full response)

    とエラーが出てしまいます。
    公開プログラムをコピペ、緯度と経度とAPI-Keyを
    それぞれ「XX.XXXX」、「YYY.YYYY」、「ZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZ」に置き換えただけなのですが、ほかに変更する箇所はございますでしょうか?

    もしお分かりになればご教示くださるとありがたいです。

    • しょちお しょちお より:

      T.tamaさん初めまして。
      お読みいただいてありがとうございます。

      エラーの内容を拝見すると、”wrong latitude”⇒「間違った緯度」ということなので、緯度情報の近辺が怪しいです。
      プログラムの6行目「lat=XX.XXXX」の辺りが正しく入力できているか確認をしてみてください。
      ・緯度が90度以上になっていないか。(緯度と経度が入れ替わっていないか)
      ・緯度の後ろの「&」が消えていないか。

      上記が正しそうであれば、緯度の小数点以下の数字が多すぎるとか少なすぎるとかを疑うとよいかもしれません。

      明確な回答ができず申し訳ございません。
      また何かあればコメントいただければと思います。

  2. 堀江 勇輝 より:

    TBSテレビの堀江と申します。

    ご連絡させていただきたいのですが、お問い合わせフォームはどちらになりますでしょうか。

    何卒、よろしくお願いいたします。

    • しょちお しょちお より:

      堀江さん
      コメントありがとうございます。

      問い合わせフォームなどは特に設けておりませんので、
      TwitterかInstagramのDMをいただければと思います。

      よろしくお願いいたします。

タイトルとURLをコピーしました