2021年2月26日金曜日

1000投稿

仕事と趣味を兼ねたこのブログも、10年とちょっと経ち、1000投稿になりました。

われながら、狂気を感じますね(笑)。書くということは、どこか中毒的なところがあります。このところは、だいたい月に3〜5投稿ペースに落ち着き、まぁ、良い塩梅かなと思っています。

最近は、自作スマート農業にハマっておりまして、ついついそちらに投稿内容が偏っています。

さわでは、今ある資源・身の回りの環境を活かした、ゆとりある農業を目指していますが、自作スマート農業は、そうした農業の一助となるのではなかろうかと思います。そして、自作スマート農業の高度化には、栽培データのオープンデータ化が不可欠なんじゃないかと、そんなことを夢想しています。

ということで話がずれましたが、今後とも、どうぞよろしくお願いいたします。

ちなみに、このブログはBloggerというブログサービスを利用しています。Googleのサービスの割にいまいちマイナー感がありますが、無料だし、勝手に広告入らないし、(多少知識があれば)それなりにカスタマイズできるし、機能的にはとてもオススメです。




Twitter(@nkkmd)、Instagram(@nkkmd)も日々更新中です。

2021年2月22日月曜日

栽培データのオープンデータ化

自作スマート農業の取っ掛かりとして、昨年より原木椎茸栽培の温度等のデータを取り始めたところですが、想像以上に効果的だなというのが手応えです。


具体的に、現状認識している効果は、

① 栽培管理の精度向上
→ 数値化され、24時間リアルタイムで把握できるので、細かく、ブレなく管理ができる。LINE等の通知機能を連携させると便利。

② 暗黙知の形式知化
→ 経験的に行っていた作業を、ある程度論理立てて説明できるようになる。③につながる。

③ 栽培技術の向上
→ データを分析することで、栽培における試行錯誤を(ただの勘より)高い精度で行うことができる。確実に、無駄な失敗は減らせる。

と、いったところでしょうか。

まだまだ、1シーズン(途中)のデータですから、これからのデータの蓄積が楽しみです。


そして、この栽培データをオープンデータとして農業者同士で共有したなら、より一層の効果が期待できるのではないかと思うのです。

というのも、栽培データというのは単体では、まだそれほど価値のある情報ではないと思うのですよね。やはり、たくさん集まってこそ、分析の幅も広がります。自分だけなら1シーズンに1データしか取れませんが、100人いれば100データ取れます。

調べてみたところ、サービス単位で栽培データを共有して利用するものはあるようです。でも、これってオープンデータとして栽培データを共有する環境さえあれば、全然自前でもできてしまうことなのですよね。むしろ、自前で分析からやってこそ栽培技術として身になるのではなかろうかと思ったりもするところです。

もちろん、栽培環境も異なる中でバラバラにデータを取るとなると、栽培品目ごとに必要になるデータ項目や、属性の定義は必須になりますね。

いやー、できたら面白いなぁ。

ちなみに、WAGRI(「農業データ連携基盤」)よりは一階層現場寄りのデータですね。


と、こんなことを、ぽつぽつ考えておりまして、まずは近々さわの原木椎茸の栽培データをオープンデータにしようと思っています。

-----
・追記(2021-2-22)

テスト版として、原木椎茸の栽培データ(温度)を公開しました。→こちら
-----


・関連投稿



Twitter(@nkkmd)、Instagram(@nkkmd)も日々更新中です。

2021年2月21日日曜日

六連穴あけドリル「一気」がやって来ました!【原木椎茸・植菌】

原木椎茸の植菌作業に欠かせないのが、なんといってもドリル!

今まで、調子が良かったり悪かったり、なかなか扱いが難しいガソリンエンジンの五連穴あけドリルを使っていたのですが、電気で動く六連穴あけ機「一気」(朝日産業)を格安で譲っていただきました!新品ではちょっと手が出ないお値段……(笑)。


100Vタイプのものなので、今まで植菌を行っていたハウスで同じように作業ができます。これは、非常に助かりますね。大切に使います!

ちなみに、調べてみたら、このドリルを作っている朝日産業では、包装・衛生・食品加工機器も作っていて、うちでは真空パック器(脱気シーラー)HIPPOを使っています。まさか同じところが作っているとは。

今年の植菌は、まぁまぁ良いペースで進んでいます。このまま、3月中には終わらせたいですね。



このタイプも、サブとして購入してあります。原木が数百本程度であれば、たぶんこれで十分ですね。


Twitter(@nkkmd)、Instagram(@nkkmd)も日々更新中です。

2021年2月16日火曜日

エリア外だけど、楽天モバイルを契約してみました。

楽天モバイルの新プラン「Rakuten UN-LIMIT Ⅵ」が、(1回線目は)1GBまで無料で使えるということなので、衝動的に新規契約してしまいました(笑)。

モバイルルーターのRakuten Wifi Pocketとのセットで、初期費用は諸々含めてほぼ無料(厳密には1円で、後ほどアンケート回答で1ポイントバック)。加えて、月額料金も1年間無料(先着300万名)。もう訳の分からない大盤振る舞いですね。

これにより、維持費ゼロで、SPU+1倍&海外旅行時のローミングが可能(世界66の国と地域)となります。海外ローミング利用時も、1GBまでは0円という理解でいいのでしょうかね?

普段も、UQ mobileのくりこしプランSと併用すれば(3月〜)、料金の上乗せ無し(1,480円)で高速データ通信が4GBまで使えます。最高。

まぁ、料金プラン、あっさり変更されるような気もしますけどね(笑)。



で、届きました。

当然、ここは楽天回線エリア外ですので、パートナー回線(au)でのデータ通信が、どの程度使えるものなのかが問題だったのですが……手持ちのスマホでアクティベートしてみたら、普通に違和感なく使えました!

-----
・追記(2021-2-16)

お昼に、my楽天モバイルアプリで通信速度測定をしてみたところ、こんな↓感じでした(パートナー回線エリア)。山の陰で、電波もそれほど良くない場所なので、まぁ、こんなものでしょうかね。



こちら↓は、夕方、最寄の駅近く。



普通に使うには、問題ないですね。
-----

楽天回線対応製品ではないので通話やSMS、Rakuten Linkは使えませんが、ともあれ、空いていたSIMスロット2に楽天モバイルのSIMを入れて、計画通りUQ mobileとの併用体制になりました。

たまたま、家族がSIMフリーの楽天回線対応製品を持っていたので、ちょっとお借りして、(たぶん対象の)ポイント還元の条件だけクリアしておきました。

後々、楽天回線エリアが広がり、サービスが安定し、楽天回線対応製品を入手したなら、楽天モバイルに一本化してもいいのですが、まだしばらくは様子見ですかね。

余ったRakuten Wifi Pocketの方は、そのうち、スマート化の工作に使おうかと思います。SIMフリーなので、(動作保証外ではあるものの)他社SIMでも使えるみたいです。

ということで、趣味の投稿でした。


・関連投稿
【定期】家計の見直し(2021年1月)


Twitter(@nkkmd)、Instagram(@nkkmd)も日々更新中です。

2021年2月9日火曜日

Raspberry Piで温度と湿度を定期的に取得してスプレッドシートに記録する。


前回は、Pythonを用いて温度と湿度の値を取得しました。今回は、定期的にその値を取得して、Google スプレッドシートに保存してみます。ところどころ、がっつりと(笑)突っかかりましたが、先人たちの知恵をお借りしまして、何とかやりたいことができました。



流れとしては、

① スプレッドシートを準備
② Pythonからスプレッドシートへ値を書き込むための初期設定
③ Pythonスクリプトの作成
④ Google Apps Scriptの作成・トリガー設定
⑤ Pythonスクリプトのデーモン化

となります。

Raspberry Piは、Raspberry Pi 4 Model B、4GBメモリ、Raspberry Pi OS。温湿度センサーモジュールは、DHT22 AM2302。Pythonは、3系を使用しています。


① スプレッドシートを準備

まずは、スプレッドシートの準備です。PythonからRaspberry Piで測定した値を受け取るシートと、さらにその値を受け取ってログとして記録するシートの2つが必要になります。

スプレッドシート名は、任意で大丈夫です。シート名も何でもいいですが、後ほど、PythonとGASのコードで使いますので、合わせてください。

・シート名「fromPi」(Pythonからの値受け取り用)


A2、B2セルに、それぞれ測定値が書き込まれます。


・シート名「log」(「fromPi」からの値受け取り用)


「fromPi」シートのA2、B2セルに書き込まれた値がB、C列に書き込まれていきます。その際、A列にタイムスタンプも記録されます。


② Pythonからスプレッドシートへ値を書き込むための初期設定

次に、Pythonからスプレッドシートへ値を書き込むための設定です。こちら↓のブログを参考にさせていただきました。



Pythonスクリプトは、③で作成します。

基本的に、そのまま、まるっとやれば動くかと思いますので、詳細省略。

一点だけ、Pythonスクリプトのデーモン化の際に突っかかったポイントがあったのでメモしておきます。

・「gspread」「oauth2client」ライブラリのインストール

$ pip3 install gspread
$ pip3 install oauth2client

で、インストールされていた先が「/home/pi/.local/lib/python3.7/site-packages」だったのですが、これだとsystemdを使ったデーモン化の際にエラーが発生してしまいます(たぶん)。

$ sudo pip3 install gspread
$ sudo pip3 install oauth2client

sudoコマンドにて、root権限で再度実行したところ、「/usr/local/lib/python3.7/dist-packages」にインストールされまして、無事に動きました。


③ Pythonスクリプトの作成

Raspberry Piにて測定した温度と湿度の値を、スプレッドシートの「fromPi」シートに書き込むためのPythonスクリプトを作成します。

#!/usr/bin/env python3

import MyPyDHT
import time
import gspread
import json

from oauth2client.service_account import ServiceAccountCredentials

scope = ['https://spreadsheets.google.com/feeds','https://www.googleapis.com/auth/drive']

credentials = ServiceAccountCredentials.from_json_keyfile_name('JSONファイル名(絶対パスで記述)', scope)

gc = gspread.authorize(credentials)

SPREADSHEET_KEY = 'スプレッドシートID'

worksheet = gc.open_by_key(SPREADSHEET_KEY).worksheet('fromPi')

while True:
    x = 0
    while x < 1:
        try:
            humidity, temperature = MyPyDHT.sensor_read(MyPyDHT.Sensor.DHT22, 26)
            x = 1

        except:
            x = 0

    worksheet.update_cell(2,1, temperature)
    worksheet.update_cell(2,2, humidity)
    
    time.sleep(900)

書き換えが必要な箇所は、次の通りです。

・12行目「JSONファイル名(絶対パスで記述)」

②でダウンロードしたJSONファイル名を絶対パスで書きます。

python3コマンドでの実行時には、Pythonファイルと同一フォルダに入れておけば、ファイル名のみで動いていたのですが、デーモン化の際にsystemctlコマンドで起動しようとするとエラーが発生してしまいました。ああでもないこうでもないと唸り続け、絶対パスで記述したところ、さらっと動きました(笑)。


・16行目「スプレッドシートID」

スプレッドシートを開いた状態でURLの下記部分に表示されます。ちょっと長めです。

https://docs.google.com/spreadsheets/d/ここの値をコピペ/edit#gid=0


・33行目「900」

測定の間隔です。秒数ですので、900ですと15分おきの測定になります。適宜変更してください。


④ Google Apps Scriptの作成・トリガー設定

スプレッドシートの「fromPi」シートに(Pythonから)書き込まれた値を、ログとして、もう1つの「log」シートに書き込むためのGASを作成します。

var spreadsheet = SpreadsheetApp.openById("スプレッドシートID");
var fpSheet = spreadsheet.getSheetByName("fromPi");
var logSheet = spreadsheet.getSheetByName("log");

function piLog() {
  var lastRow = logSheet.getLastRow() + 1;
  var ts = new Date();
  
  var sec = 10;
  Utilities.sleep(sec * 1000);

  var te = fpSheet.getRange(2, 1).getValue();
  var hu = fpSheet.getRange(2, 2).getValue();
  
  if(te != "" && hu != "") { 
    logSheet.getRange(lastRow, 1).setValue(ts);
    logSheet.getRange(lastRow, 2).setValue(te);
    logSheet.getRange(lastRow, 3).setValue(hu);
    
    fpSheet.getRange(2, 1, 1, 2).clearContent();
  }
}

書き換えが必要な箇所は、次の通りです。

・1行目「スプレッドシートID」

Pythonスクリプトに記述したものと同じです。


次に、定期的にpiLog関数を実行するためにトリガー設定をします。

「トリガーを追加」より、

・「実行する関数を選択」→ piLog
・「デプロイ時に実行」→ Head
・「イベントのソースを選択」→ スプレッドシートから
・「イベントの種類を選択」→ 変更時
・「エラー通知設定」→ 今すぐ通知を受け取る

と、なります。

これで、「fromPi」シートに値が書き込まれるたびにpiLog関数が実行され、「log」シートに記録されていきます。



無事、動きますとこんな風になります。(テストのため、30秒間隔で測定)


⑤ Pythonスクリプトのデーモン化

最後に、Pythonスクリプトのデーモン化を行います。これにより、いちいち手動で起動する必要がなくなり、常駐プログラムとして、Raspberry Piの起動時に一緒に温度と湿度の測定が開始されます。

やり方は、こちら↓の方法を参考にさせていただきました。



概ね、そのままですので、詳細省略。

エラーが発生する場合、まずは「gspread」「oauth2client」ライブラリのインストール先と、JSONファイル名の記述部分を確認してみてください。


***

ということで、とりあえず、動いたので満足です(笑)。

今後、実際の運用時には、より安価なRaspberry Pi Zero W/WHで作りたいですね。あと、ネット回線との接続が切れた際のことも考えて、ローカルでデータベースへの格納もしておいた方が確実かなと思っています。

せっかくバッテリー駆動も可能なので、後ほど、屋外設置のための工作もしてみようと思います。

これが、しっかり運用できますと、けっこういろいろな事ができそうな気がしています。何事も一足飛びとはいきませんが、ひとつひとつ、やっていきましょう。


農園では、ただいま、鋭意植菌中です!


・関連投稿





Twitter(@nkkmd)、Instagram(@nkkmd)も日々更新中です。

2021年2月1日月曜日

Raspberry Piで温度と湿度を計測する。(DHT22 AM2302使用)

以前、「Nature RemoとGASを使って温度・湿度をリアルタイムで記録する。」でビニールハウス内の温度・湿度をリアルタイムで記録できるようにしました。これは、なかなか便利に使えています。

ただし、湿度に関してはNature Remoの測定範囲が30~70%であるため、湿度がほぼ100%になることもあるビニールハウス内で測定目的に使用するには向かなかったですね。もちろん、トリガーとしては使えます。温度の測定のみを目的とするのであれば、温度センサーのみの、Nature Remo mini、もしくはmini2でよさそうです。


さて、本題になりますが、より汎用性を持たせるためRaspberry Pi(ラズベリーパイ )を使い温度・湿度を測定、リアルタイムでスプレッドシートに記録できるようにしていきたいと思います。


Raspberry Piというのは、いろいろ使える安価なシングルボードコンピュータです。Raspberry Piを使うことで、測定項目を自由に設定でき、さらにバッテリーでの駆動が可能なので電源のない場所でも測定ができます。

ちゃんと比較はしていませんが、おそらく、価格としても、出来合いの高機能測定器を購入するよりは、相当抑えられそうな気がします(たぶん)。

最初は、必要なものが揃っているスターターキット的なもの購入してしまった方が、使い始めやすいかもです。私が購入したのは、LABISTSのこちら。あとは、初期設定用にディスプレイとキーボードとマウスが必要になりますが、設定さえしてしまえばSSHやリモートデスクトップから使えます。


今回はまず、温度と湿度の測定までを行います。

Linuxコマンドによる操作、そして、ほぼ無知の電子工作と、覚えよう覚えようと思いつつ後回しになっていたPythonが必須となりますので、脳みそフル回転です(笑)。

Raspberry Piは、Raspberry Pi 4 Model B、4GBメモリ、Raspberry Pi OS。温湿度センサーモジュールは、DHT22 AM2302を使用。



方法はいろいろとあるようですが、一番簡単そうだった↓を参考にさせていただきながら、設定をしていきます。




まずは、Raspberry Piと温湿度センサーモジュール DHT22を接続。

DHT22側:Raspberry Pi側(ピン番号)
DAT:GPIO26(37)
VCC:3.3V(17)
GND:GND(39)


Pythonはあらかじめインストールされていますので(Python3系を使用)、次に、Githubからセンサーの値を取得するためのライブラリをインストールします。
$ sudo git clone --recursive https://github.com/freedom27/MyPyDHT
$ cd MyPyDHT
$ sudo python3 setup.py install

作業フォルダの作成。移動。
$ cd
$ mkdir Python
$ cd Python
$ mkdir MyPyDHT

温度、湿度の値を取得するためのPythonコードを作成。「MyPyDHT」フォルダに保存。
ファイル名は「te_hu.py」。
#!/usr/bin/env python3

# センサー制御取得
import MyPyDHT

# 測定の開始(26は、接続したGPIOポート)
humidity, temperature = MyPyDHT.sensor_read(MyPyDHT.Sensor.DHT22, 26)

# 結果の表示
print("Temperature = " + str(temperature) + " \nHumidity = " + str(humidity))

実行。
$ python3 te_hu.py
Temperature = 11.5
Humidity = 47.9

……ということで、とりあえず、温湿度センサーから温度と湿度の値を取得できるようになりました。

(たまにエラーが出ますが、モジュール側で値を出力しているタイミングがあるらしく、それを外れるとエラーが返ってくるみたいです。こちら参照。)

これを定期的に取得してデータを保存するのですが、たいしたデータ量でもないですし、データベースに格納するより、Google スプレッドシートにダイレクトに記録してしまった方が便利そうだなぁ、と思って調べたら、まさしくそんな事をやっている方がおられて解説がありました。先人たちの知恵は偉大ですね。

次回は、Raspberry Piで温度と湿度の値を定期的に取得して、スプレッドシートに記録してみます。






Twitter(@nkkmd)、Instagram(@nkkmd)も日々更新中です。

2021年1月26日火曜日

【定期】家計の見直し(2021年1月)

仕事と生活がリンクする家族農業において、家計の最小化は心強い生存基盤となります。定期的な見直しを行い、適切な家計を維持することは、必須作業ではなかろうかと思います。

もちろん、何でもかんでも削って削ってではなく、自身や家族にとって価値があるもの、必要なものを明確にして、無駄をなくすということですね。


・スマホ料金

話題の低価格プランが、ahamo、Softbank on LINE、povoと3社出揃いましたね。

データ通信容量は20GBで、ahamoとSoftbank on LINEは5分以内通話かけ放題がついて月額2,980円、povoは通話無料枠はなく2,480円ですね。

私の場合、あまり通話をしない(厳密には「楽天でんわ」で500円以内に収まる)ので500円安いpovoが一番適当そうです。まぁ、自宅がau回線しか入らないので、そもそも選択肢はpovoのみなのですけどね(笑)。

また、povoでは、トッピングとして5分以内通話かけ放題(500円/月)や、データ使い放題24時間(200円/24時間)といったサービスの追加が可能です。これも魅力的ですね。あとは、ahamo同様、国際ローミングが可能だと文句無しなんですけどね。現在検討中のようです。

ただ、今現在、UQ mobileのスマホプランSを使っていて、データ通信容量3GBでほぼほぼ事足りてしまっているのですよね。出先ではそれほど使いませんし、自宅には光回線がありますからね。価格は、基本となる月額が1,980円で、家族割で2回線目からは1,480円になっています。これが、povoと同時に発表されたUQ mobileのくりこしプランSでは、シンプルに1回線目から1,480円となります。

povoとくりこしプランSの差は、月あたり1,000円です。年間だと12,000円差ですからそこそこの違いですね。ひとまずは、くりこしプランSで様子を見つつ、もしもpovoにする場合には、光回線の解約とセットで考えています。データ使い放題24時間を駆使すれば、光回線は省けるのではなかろうかと。トータルで考えることが肝要です。


・電力

こちらは、よい料金プランを見つけたので変更してみました。すでに、最低限の最適化はしていますので、ここからさらに劇的に料金を下げるということは難しいのですが、ポイントサイト経由で申込むことでポイ活を兼ねることができます。

電力といえば、最近、卸電力市場価格の高騰にざわついていますね。市場連動型プランで契約していた場合、価格上昇分をダイレクトに請求されるとけっこうとんでもない金額になるみたいですね。幸い、個人的には市場連動型プランの契約はなかったのですが、今回の価格高騰がなければ、今後選ぶこともあり得たかもしれません。電力に限らず、契約プランの選択には一層注意を払いたいと思うところです。

基本的に、万が一の時に、取り返しのつかない事態になる可能性があることは、避けれる限り避けておいた方がいいですね。


・クレジットカード

VISA LINE Payクレジットカードの3%還元も残り期間が少なくなってきました(2021年4月30日まで)。そろそろ、その後のカードを決めておかねばです。

今のところ、引き落とし関係は、エポスゴールドカード(還元率最大1.5%)。普段の買い物は、ビックカメラSuicaカードのSuica(還元率1.5%)、楽天カードからのチャージで楽天ペイ(還元率1.5%)、楽天カードを紐付けたKyashカード(還元率2%)、Kyashカードを紐付けたd払い(還元率2.5%)あたりで。ネットショッピングは、主にOki Dokiランド経由JCB EIT(Amazonの場合、還元率1.5%)で対応しようかと考えています。

-----
・追記(2021/1/28)

Kyashバリュー(クレジットカードでのチャージ)で買い物をした際の還元率が1.0→0.2%に、月間還元上限が500→100ポイントになるとのこと。ちーん……。
-----

あとは、そのうち、おサイフケータイ付きのスマホを入手したら、セゾンパール・アメリカン・エクスプレス・カードでQUICPay(還元率3%)も良さそうです。


・マイナポイント

これは家計ということではないですが、予約(マイキーIDの発行)だけして放置していたのを、やっと決済サービスの申込みまで済ませました。

決済サービスは、確実に使うSuicaにしました。2万円をチャージするとマイナポイント5,000円分+1,000円分のポイントが貰えます。あと、ビューカードでのチャージで2,000円分のポイントが当たるキャンペーンとかもやっていますね。

Suicaを選んだ場合の注意点としては、チャージ上限が2万円なので、わずかでも残高がある状態ですと複数回のチャージが必要になります。


***

ということで、趣味を兼ねた家計の見直しでした。

なかなか出口の見えない状況が続きますが、悲観や楽観に大きく偏ることなく、目の前のできる事をひとつずつやっていけたらと思います。


・関連投稿


人口減少・少子高齢化の時代を生き抜く節約術




Twitter(@nkkmd)、Instagram(@nkkmd)も日々更新中です。