ソフトウェア(ソースプログラム)

農家のIoTデバイスiKakashi-1号機のソースプログラムを公開します。ソースプログラムは、python 2.7で記述しています。
最新バージョン:2017/09/29

利用時の注意

  • 利用にあたっては、商用目的を禁止します。
  • 自分の責任の元でソースプログラムをお使いください。
  • pythonのソースプログラムのファイル名は、アルファベット順に並んでいます。その後、cssのファイルとindex.htmlファイルが続きます。

ソースプログラム一括ダウンロード2017/10/12


履歴

バージョン:2017/10/12 (2017/09/29からの変更点)

  • 2017/09/29で変更したプログラムのエラー処理の修正を調整しました。
  1. bootmail.py
  2. defaultgatewayping.py
  3. wanip.py
  • 上記3つのプログラムを修正しました。

バージョン:2017/09/29 (2017/09/18からの変更点)

  • モバイルWiFiルーターのWAN側のGlobal IP Addressを調べるプログラムGetWanIPaddrで、10000回中1029回頻度でエラーが発生し、連続して最大165回エラーになるために、エラー処理を強化しました。この修正を行ったプログラムは、以下の3つです。
  1. bootmail.py
  2. defaultgatewayping.py
  3. wanip.py
  • 上記3つのプログラムを修正しました。

 

バージョン:2017/09/18 (2017/08/24からの変更点)

  1. 以下の現象により、defaultgatewayping.pyを変更しました。

環境
・Raspberry Pi Model A+
・USB WiFiドングル:WN-G150UMW I・O Data社製
・2017-08-16-raspbian-stretch-lite
・2017/8/24のソースプログラム defaultgatewayping.py
現象
・一日に3~4程度の頻度で、Defaultgatewayへのpingが通らないことがあります。
・この現象は、Raspbian Stretch以前のバージョンでは発生していませんでした。
・USB WiFiドングルのPower ManagementはOffにしても、頻度は減るものの現象は発生します。


 

個々のソースプログラム。2017/09/29


ファイル名:averagetempetoday.py
保存先フォルダー名:/usr/lib/cgi-bin
パーミッション:644
エンコードの種類:utf-8
呼び出され方:crontabにより毎時55分に起動されます。
機能:積算温度の計算に必要な、その日の平均気温を再計算し、結果をMySQLまたはMariaDB(データベース)に記録します。
注意事項:

 


ファイル名:bootmail.py
保存先フォルダー名:/usr/lib/cgi-bin
パーミッション:644
エンコードの種類:utf-8
呼び出され方:rc.localから起動がかかります。
機能:iKakashi起動直後は、モバイルWiFiルーターとRaspberry PiのUSB WiFiドングル間で無線LANを試みようとしています。これが安定するまで、約11分間待ち、その後iKakashiが起動したことをクライアント様にメールでお知らせします。メールの本文中には、現在のiKakashiのクローバルIPアドレスが記述されています。
注意事項:

 

 


ファイル名:cameraposition7.py
保存先フォルダー名:/usr/lib/cgi-bin
パーミッション:644
エンコードの種類:utf-8
呼び出され方:iKakashi設置時に、手動で起動します。
機能:Kakashi設置時に使用するプログラムです。cameraの角度と方向を決めるときに使用します。
注意事項:このプログラムを動かすときには、intruderdetect.pyをsudo kill -9 PIDで停止させてから行ってください。

 


ファイル名:ClimateChart.py
保存先フォルダー名:/usr/lib/cgi-bin
パーミッション:755
エンコードの種類:utf-8
呼び出され方:Webサーバーのapache2から呼び出されます。
機能:クライアント様が、Webブラウザーを使ってiKakashiに接続すると、温湿度、気圧、照度の気象データのグラフが表示されます。たとえクライアント様が畑にいなくても、インターネットが接続できる環境であれば、気象データをいつでも、どこからでも確認することができます。
ClimateChart.pyは24時間の気象データのグラフを表示します。
注意事項:

 


ファイル名:ClimateChart1month.py
保存先フォルダー名:/usr/lib/cgi-bin
パーミッション:755
エンコードの種類:utf-8
呼び出され方:Webサーバーのapache2から呼び出されます。
機能:クライアント様が、Webブラウザーを使ってiKakashiに接続すると、温湿度、気圧、照度の気象データのグラフが表示されます。たとえクライアント様が畑にいなくても、インターネットが接続できる環境であれば、気象データをいつでも、どこからでも確認することができます。
ClimateChart1month.pyは1ヶ月間の気象データのグラフを表示します。
注意事項:

 


ファイル名:ClimateChart1week.py
保存先フォルダー名:/usr/lib/cgi-bin
パーミッション:755
エンコードの種類:utf-8
呼び出され方:Webサーバーのapache2から呼び出されます。
機能:クライアント様が、Webブラウザーを使ってiKakashiに接続すると、温湿度、気圧、照度の気象データのグラフが表示されます。たとえクライアント様が畑にいなくても、インターネットが接続できる環境であれば、気象データをいつでも、どこからでも確認することができます。
ClimateChart1week.pyは1週間の気象データのグラフを表示します。
注意事項:

 


ファイル名:config.txt
保存先フォルダー名:
/usr/lib/cgi-bin
パーミッション:
444
エンコードの種類:
utf-8
呼び出され方:
テキストファイルです。
機能:iKakashi固有の設定情報が書かれています。
1行目には、iKakashiの名前。
4行目には、DefaultgatewayのIPアドレス。
7行目には、Gmailを送信するときの送信元アドレス。
10行目には、Gmailを送信するときの接続パスワード。
13行目には、Gmailの送信先アドレスの一覧。
16行目には、MySQLまたはMariaDBのユーザー名。
19行目には、MySQLまたはMariaDBのパスワード。
注意事項:

 


ファイル名:csvexport.py
保存先フォルダー名:
/usr/lib/cgi-bin
パーミッション:
644
エンコードの種類:
utf-8
呼び出され方:
crontabにより毎月1日の10時に起動されます。
機能:前月の気象データをMySQLまたはMariaDBから読み出し、CSVファイルに変換してクライアント様のメールでお知らせします。
また、90日以上前に撮影された写真ファイルを削除します。
注意事項:

 


ファイル名:defaultgatewayping.py
保存先フォルダー名:
/usr/lib/cgi-bin
パーミッション:
644
エンコードの種類:
utf-8
呼び出され方:
crontabにより20分ごとに起動されます。
機能:
モバイルWiFiルーターに対してpingを流し、応答があるかどうかをチェックしています。もし応答がない場合、モバイルWiFiルーターの電源を入れます。稼働率を高めるための機能です。
注意事項:

 

 


ファイル名:get_climate.py
保存先フォルダー名:
/usr/lib/cgi-bin
パーミッション:
644
エンコードの種類:
utf-8
呼び出され方:
crontabにより10分ごとに起動されます。
機能:
温湿度、気圧、照度センサーからの気象データを収集し、MySQLまたはMariaDBに記録します。
注意事項:

 


ファイル名:intruderdetect.py
保存先フォルダー名:
/usr/lib/cgi-bin
パーミッション:
644
エンコードの種類:
utf-8
呼び出され方:
rc.localから起動され、常駐プログラムとして動き続けます。
機能:
このプログラムが動き続けている間中Active LED(iKakashiが動作中であることを示すためのLED)を点滅させます。
人感センサーが侵入者を検出すると、このプログラムに割り込みがかかります。割り込みがかかると、高輝度白色LEDを光らせ、何枚かの写真を撮影し、それらの写真をメールに添付してクライアント様に送信します。
注意事項:

 


ファイル名:loadconfig.py
保存先フォルダー名:
/usr/lib/cgi-bin
パーミッション:
644
エンコードの種類:
utf-8
呼び出され方:
いろいろなプラグラムから呼び出されます。
機能:
iKakashiごとにある固有の値を、呼び出したプログラムに返します。
注意事項:

 


ファイル名:log_info.py
保存先フォルダー名:
/usr/lib/cgi-bin
パーミッション:
644
エンコードの種類:
utf-8
呼び出され方:
いろいろなプラグラムから呼び出されます。
機能:
/var/log/syslogファイルにiKakashiの動作履歴を残します。この記録を後から見ることで、プラグラムのデバッグの助けになります。
注意事項:

 


ファイル名:pir8.py
保存先フォルダー名:
/usr/lib/cgi-bin
パーミッション:
644
エンコードの種類:
utf-8
呼び出され方:
iKakashi設置時に使用するプログラムです。
機能:
人感センサーの感度がどのくらいの距離まで届いているか確かめるために使用します。
注意事項:

 


ファイル名:previousip.txt
保存先フォルダー名:
/usr/lib/cgi-bin
パーミッション:
666
エンコードの種類:
utf-8
呼び出され方:

機能:
テキストファイルで、前回チェックしたときのグローバルIPアドレスが記録されています。
注意事項:

 


ファイル名:sekisan.txt
保存先フォルダー名:
/usr/lib/cgi-bin
パーミッション:
666
エンコードの種類:
utf-8
呼び出され方:

機能:
テキストファイルで、クライアント様が設定した[積算開始日]、[基準温度]の値が記録されています。
注意事項:

 


ファイル名:sekisanondograph.py
保存先フォルダー名:
/usr/lib/cgi-bin
パーミッション:
755
エンコードの種類:
utf-8
呼び出され方:
Webサーバーのapache2から呼び出されます。
機能:
クライアント様が、Webブラウザーを使ってiKakashiに接続すると、積算温度のグラフが表示されます。
[積算開始日]、[基準温度]の入力が可能で、[設定]ボタン、[設定 → CSVファイルをメール送信]ボタンをクリックするとsekisanondosetting.pyに起動がかかります。
注意事項:

 


ファイル名:sekisanondosetting.py
保存先フォルダー名:
/usr/lib/cgi-bin
パーミッション:
755
エンコードの種類:
utf-8
呼び出され方:
sekisanondograph.pyから呼び出され、formのactionとして機能します。
機能:
[積算開始日]、[基準温度]の入力が適切な値かチェックされます。SQLインジェクションを防ぎ、耐セキュリティ性能を高めるためています。それらの値が適切なら、sekisan.txtに記録します。
また、積算温度のデータをCSVファイルに変換し、クライアント様にメールでお知らせすることもできます。
注意事項:

 


ファイル名:SendGmail.py
保存先フォルダー名:
/usr/lib/cgi-bin
パーミッション:
644
エンコードの種類:
utf-8
呼び出され方:
いろいろなプラグラムから呼び出されます。
機能:
クライアント様にメールでお知らせするときに使われます。テキストメール、CSVファイルの添付メール、写真の添付メールなどをgmailで送信することができます。
注意事項:

 


ファイル名:wanip.py
保存先フォルダー名:
/usr/lib/cgi-bin
パーミッション:
644
エンコードの種類:
utf-8
呼び出され方:
crontabにより10分ごとに起動されます。
機能:
iKakashiで使用しているモバイルWiFiルーターには、固定IPアドレスが割り当てられていません。iKakashiのグローバルIPアドレスは、時々変わってしまいます。変わってしまうと、クライアント様はインターネット上からiKakashiを見つけられなくなってしまい、Webサーバーから発信されている気象データのグラフを見ることができなくなってしまいます。そこで、たとえグローバルIPアドレスが変わってしまっても、10ごとにその違いをチェックし、前回チェックしたときと違いがあれば、新しいクローバルIPアドレスをクライアント様にメールでお知らせします。
注意事項:

 


ファイル名:whiteledon3.py
保存先フォルダー名:
/usr/lib/cgi-bin
パーミッション:
644
エンコードの種類:
utf-8
呼び出され方:
iKakashi設置時に使用するプログラムです。
機能:
高輝度白色LEDを光らせ、どのくらいの明るさなのか確かめるために使用します。
注意事項:

 


ファイル名:wifirouterswitch.py
保存先フォルダー名:
/usr/lib/cgi-bin
パーミッション:
644
エンコードの種類:
utf-8
呼び出され方:
rc.localから起動されます。
機能:
モバイルWiFiルーターの電源をONにします。
注意事項:

 


ファイル名:tab1.css
保存先フォルダー名:
/var/www/html/css
パーミッション:
644
エンコードの種類:
utf-8
呼び出され方:
iKakashiのWeb siteを閲覧するときに、apache2から呼び出されます。
機能:
google chart以外で使用するcssファイルです。
注意事項:

 


ファイル名:tab2.css
保存先フォルダー名:
/var/www/html/css
パーミッション:
644
エンコードの種類:
utf-8
呼び出され方:
iKakashiのWeb siteを閲覧するときに、apache2から呼び出されます。
機能:
google chartで使用するcssファイルです。
注意事項:

 


ファイル名:index.html
保存先フォルダー名:
/var/www/html
パーミッション:
644
エンコードの種類:
utf-8
呼び出され方:
http://ipアドレス にアクセスしたときに、apache2から呼び出されます。
機能:
アクセスすると「This web site has been closed.」と表示します。
注意事項: