3.5インチモニター

amazonで「3.5インチ HDMI モニター」を検索するといくつかヒットしますよね。3250円のKumanのやつを買ったんですよ、3320円のQuimatのと同じかと思って。 GPIOの送り配線がありませんでしたよ。まぁ、レビューを読めばわかるんですけど、きちんと読んでなかった…。

この液晶にスマートメータから取得した電力表示をできれば良いですね。使用しないときはバックライトを消しておきたいです。でも単なるHDMIモニタなんですよね。ディスプレイの信号が来なくなってバックライトが消えるのなら好都合。そうでなければ、バックライトをGPIOから制御できると良いですが、さて、できるのかな。

以下、設定備忘録
sudo vi /boot/config.txt

framebuffer_width=480
framebuffer_height=320

hdmi_group=2
hdmi_mode=87
hdmi_cvt=480 320 60 6 0 0 0

 

電力を取ることにする

しばらく電力量を取っていましたが、最小単位が0.1kWhで30分ごとに取得(計算)してもあまり大きな数値にならなくて面白みに欠けます。なので、電力を取ることにします。

参考
RaspberryPiでスマートメータの電力を取得する2

こちらの方を参考にします。pHATを持っていないので、必要のないところはコメントアウトして、Ambientに送る部分を追加します。約30秒毎に電力を取ってきます。
https://ambidata.io/ch/channel.html?id=5740

Bルート(電力量)をラズパイで読む

Bルートの申し込み。8月6日、東京電力パワーグリッドの申込みサイトから申し込み。翌7日、申込受付メールが届く。9日にパスワード通知のメールが、10日にIDのお手紙が届く。申込み後1~2週間と表記されてましたが、今はもう、申込者が少ないのか早かったです。早さにちょっとびっくり。

RL7023 Stick-D/IPSを購入。 8704円。これは即納。夜にwebサイトからぽちったので翌日に発送、その次の日に到着。

参考サイト  スマートメーターの情報を最安ハードウェアで引っこ抜く
ここのサンプルプログラムがきちんと動くので、ハード的にはokなことが確認できました。個人的にはラズパイから瞬時電力を拾ってもしょうがないかなと思う。なんかパネルに常に表示ならいいけど。グラフ描画的にはやはり電力量かなと。なので、この中にも書かれていますが、「第2部 ECHONET Lite 通信ミドルウェア仕様」と「APPENDIX ECHONET機器オブジェクト詳細規定 Release H」の「低圧スマート電力量メータクラス規定」は読む。

積算電力量計測値っていうのがあるので、これを読むことにする。先に手動で積算電力量単位を読むと、0.1kWh単位であることがわかりました。電力量を読んで1/10してkWhとする。前回値との差をAmbientへ送るって感じ。cronで30分ごとに実行。エラー処理さぼっているし、これでしばらく様子見です。

・ラズパイにシリアル関連が入ってなかったので下記実施。

sudo apt-get install python-serial

・スマートメータからの応答メモ
D7 01 06  積算電力量有効桁数->6桁
E0 04 00014CAE 積算電力量計測値
E1 01 01  積算電力量単位->0.1kWh
E7 04 00000214  瞬時電力計測値

/bootはdumpできないんですかね

ちょっと前にsshでリモートdumpするのを書きましたが、うまく動きませんね。FATってdumpできないんですかね。よくわかりません。まだまだ知らないことばかりです。

ラズパイでdht22を使い、Ambientへデータを送る

必要なパッケージ等を入れる

sudo apt-get install python-dev git git python-pip
sudo git clone https://github.com/adafruit/Adafruit_Python_DHT.git
cd Adafruit_Python_DHT
sudo python setup.py install
pip install git+https://github.com/AmbientDataInc/ambient-python-lib.git

参考
温度/湿度センサーDHT22をRaspberry Piで使用する方法
Ambient

スクリプトの作成
vi dht22.py

#!/usr/bin/python
# coding: utf-8
import Adafruit_DHT as DHT
import ambient

## センサーの種類
SENSOR_TYPE = DHT.DHT22

## 接続したGPIOポート
DHT_GPIO = 4

## 測定開始
h,t = DHT.read_retry(SENSOR_TYPE, DHT_GPIO)

am = ambient.Ambient( xxxx, 'xxxx' )
r = am.send({ 'd1':'{0:0.1f}'.format(t), 'd2':'{0:0.1f}'.format(h) })
print r

## 結果表示
# print "Temp= {0:0.1f} deg C" . format(t)
# print "Humidity= {0:0.1f} %" . format(h)
print t
print h

cronで5分に1回動くようにしておく。stdoutとstderrは始末しておく。

ssh公開鍵とパーティションのバックアップ

micro sdのバックアップは、OS止めて取る方が正解なんでしょうが、手間なので動かしながら取りたい。なのでsshでrootでパス無しで接続させる。

ssh接続先(バックアップを取る方)で

sudo vi /etc/ssh/sshd_config
PermitRootLogin prohibit-password ← こいつをコメントアウト
sudo systemctl restart ssh

ssh接続元で

sudo su
cd /root
ssh-keygen -t rsa
cat .ssh/id_rsa.pub ←下のauthorized_keysに貼る

ssh接続先で

sudo su
cd /root/.ssh
vi authorized_keys ←上でcatしたやつを貼る
chmod 600 authorized_keys

接続元からバックアップを取る。うちの環境ならば、/と/bootだけ取ればok

ssh 192.168.x.x '/sbin/dump 0fa - /boot' | cat >sda1.dmp
ssh 192.168.x.x '/sbin/dump 0fa - /' | cat >sda2.dmp

GrowthForecast

GrowthForecastセットアップ。必要ないものもたぶん入れてる…

sudo apt-get install -y pkgconfig glib2-devel gettext libxml2-devvel libxml2-dev pango-devel cairo-devel
sudo apt-get install -y build-essential cpanminus
sudo apt-get install -y libmodule-depends-perl libmodule-install-perl libserver-starter-perl libalien-sdl-perl libalien-sdl-dev-perl librrds-perl

cpanm -n inc
cpanm -n MyBuilder

cpanm -n Alien::RRDtool  がインストールできない

workディレクトリにおりて、Makefile.PLとBuilder.PLを編集(’.’ in @INC問題とその対処法についてを参照)。

use FindBin;
use lib $FindBin::Bin;

これを追加してmakeして、インストール。一般ユーザだとダメだったので、rootで入れちゃう。

cpanm n GrowthForecast
mkdir growthforecast
growthforecast.pl –data-dir /home/pi/growthforecast

google home notifier

Google Homeの喋らせ方の通り

sudo apt-get install avahi-daemon libnss-mdns
sudo apt autoremove
npm install google-home-notifier --save
vi bin/say.js
#!/usr/local/bin/node
const home = require('google-home-notifier');
const argv = process.argv;
const text = argv[2] || '';
const lang = argv[3] || 'ja';
const ip = argv[4] || '192.168.x.x';
home.ip(ip, lang);
home.device('Google-Home', lang);
home.notify(text, (res) => console.log('said '+ text));