ゆるブロ

ゆる~くてちたのIT系?ブログ

部屋の中を飛び交う赤外線リモコンの情報をかすめ取る

はじめに

なーに言ってるんだという声が聞こえてくるが、とりあえず聞いてくれ。

赤外線リモコンで操作できる機器をグーグルホーム/アレクサから操作できるようになったのは良いのだが、今の状態を知ることができないのが問題としてある。

今の状態を知る第一歩として、部屋の中を飛び交っている赤外線リモコンの情報を可視化できないかなーってことをやってみる。

参考文献

deviceplus.jp

 

nomunomu.hateblo.jp

 

make.bcde.jp

 

完走してない感想

なぜか動きません。

ちゃんと/boot/config.txtに分けて設定書いてるのに/dev/lirc0が生成されないし、lircdはActiveで動いていそうだし、なんだかよくわからんので日を改めることにします。

ラズパイのバックアップをcrontabに仕込む

はじめに

ラズパイが突然死するという噂を聞いていたので、そろそろやばいかなーってところで毎日バックアップをとることにしました。
せっかくデータを取っているので、消えたら悲しいからね。

参考文献

atooshi-note.com

ほぼここ見ればOK。

ただし、NOOBS?で作ったラズパイはうまくクローン出来ず。

パーティションがめっちゃ割れてるからかも。

OSイメージを焼いたほうが2つだったのに対して、NOOBS?は7つでした。

 

完走した感想

クローンできなかったのは、OSのインストールしなおしかなあ・・・

めんちい(笑)

Google Homeに最新の使用電力を教えてもらいたい!第二回/全二回

はじめに

タイトルの使用電力量⇒使用電力と修正します。そのうち30分電力量も知りたいけどね!

第一回では、とりあえずやりたいことを図にすることでゴールを意識づけしました。

さて、第二回ですが・・・ひとまず完成しちゃいました!

ゴールに行き着くまでの道のりは変わりましたが、ゴールがぶれなかったので何とかできました。実は今日までに使用電力を教えてもらうところまでどうにか作りたいという野望があったので、多少の妥協は仕方ないとしました。

今後は教えてもらう内容を変えたりしてブログは更新していきます。

参考文献

先日から少しだけ実現方法が変わりました。

f:id:TeTiTa:20200802233819p:plain

前回のやりたいこと図

f:id:TeTiTa:20200803224648p:plain

今回実現したやり方図

どうしてこうなったのかというと、Dialogflowから外部ネットワークに対してWebhookをするためには、「課金」が必要だったため、ひとまず今回はやめたということでした。

気が付いたタイミングとしては、Diarogflowの設定をひとしきり終えた後でした。DialogflowのWebhookの応答が以下となり、にっちもさっちもいかなくなっていました。

"webhookStatus": {
    "code": 14,
    "message": "Webhook call failed. Error: UNAVAILABLE."

 いろいろと漁った結果、同じような状況に陥っている人がいました。

stackoverflow.com

It isn't clear exactly when/where you're getting the "UNAVAILABLE" error, but one likely cause if you're using Dialogflow's Inline Editor is that it is using the Firebase "Spark" pricing plan, which has limitations on network calls outside Google's network.

無料会員のままじゃつかえないよと言われていました。

ということで、Dialogflowを使う方針からIFTTTで連携させる方針に変更しました。

ここからは各種参考文献の紹介に移ります。

IFTTT、Webhook

IFTTTの登録

登録は前からやってたので、割愛で(笑)
多分すぐに登録できると思う。

レシピのCreate

if+This⇒Google Assistantを選択

f:id:TeTiTa:20200803231317p:plain

if+this

then⇒webhookでリクエストを送信

f:id:TeTiTa:20200803231450p:plain

then

IFTTTは癖があるけど単純なものはほんと簡単にできるよね~。

ラズパイ/Network

今回使ったラズパイちゃんはrasberry pi zero WH(マルツオンラインで2200円)でした。
ラズパイのセットアップはここでは割愛します(笑)
特別にやったことは、バックアップの作成ぐらいかな?

www.fabshop.jp

ネットワークについては、外部からアクセスさせる必要がありました。たまたまうちのNASちゃん(Synology製)がDDNSサービスを無料で展開してくださっているので活用させてもらいました(VPNと一緒ですね)。
外部から宅内LANのNASにつながるので、そのパケットのうちとあるポートを指定したパケットだけをラズパイちゃんのNode-REDのポートへ転送するようにルータに手を入れました。

Node-RED

 今回だいぶお世話になったNode-RED。めっちゃ楽だね!ほとんどプログラミングしてないし。

導入はこの辺。

qiita.com

qiita.com

www.1ft-seabass.jp

 

メインのwebhookを受け取ってからgoogle homeをしゃべらせるまではこの辺。

qiita.com

www.gesource.jp

qiita.com

qiita.com

blue.hatenadiary.jp

flows.nodered.org

flows.nodered.org

 

 おまけ

qiita.com

 

出来上がったノードは以下の形(かなり適当にできているのであしからず)

f:id:TeTiTa:20200803234857p:plain

node

injectはデバッグ用にとりあえずトリガ引くため。http(200)も同じ。

postgrestorは適当に公開されていたものを拝借。おしゃべりマンはcastですね。

中身はQiitaで公開かな。あっちのほうが技術寄り寄りだしね。

完走した感想

いやーーーーーうれしいですね~~~。

二日間だったけどここまでできるとほんと楽しい。

できたことだけではなくて、やっぱりゴールを意識するのって大事なんだなあと再確認させられました。

さて、やりたかったことはどんな感じになったかな?

  • google アシスタント経由でDialogFlowを操作
    ⇒DialogFlowからIFTTTに変更
  • Webhookで家内LANのラズパイにアクセス
    DDNSを使って適当に。
  • ラズパイにwebサーバを立てておく
    ⇒Node-REDでらくちん!
  • ラズパイからDBにアクセスしてデータ取得
    ⇒Node-REDからできちゃうなんで!すごい!
  • ラズパイアクセスはホワイトリストで制限
    ⇒かなりのガバなので・・・ちゃんとやらなきゃなあ(白目)

 2日間にしては、いい感じかな?

今後は30分電力量をうまいこと教えてもらうことや、温度と湿度を取り始めたのでそのデータ集めをしたらもっといいことできそう?

夢が広がるので、時間が無限にほしいいいいい~~~。

Google Homeに最新の使用電力量を教えてもらいたい!第一回/全??回

はじめに

ということで、夏季休暇のお遊び第二弾ですね~~。

これができたらマジで達成感パないっすよ。

正直めっちゃ長くなったので、複数回に分けて投稿です。長いと読みにくい気がしたからね。さて、何回になることやら・・・

 

今回やりたいことを一般化すると、「GoogleHomeに任意の文字列をしゃべってもらう」といったところ。独自のAPIをたたいて、帰り値をもらえればOK。

全面的に参考になりそうなブログをみつけまんた。

ct-innovation01.xyz

同じように、やりたいことを図にしてみました。

 

f:id:TeTiTa:20200802233819p:plain

やりたいこと図

ちなみに、図面はdrow.ioを使用しました。使い方はここでは触れないこととします。

app.diagrams.net

図に起こしてみると必要な機能が見える化できますね。ちなみにラズパイは余っていたRaspberry pi zero WHを使います。ちょっとしたwebサーバだけだし非力でも大丈夫なはず!

  • google アシスタント経由でDialogFlowを操作
  • Webhookで家内LANのラズパイにアクセス
  • ラズパイにwebサーバを立てておく
  • ラズパイからDBにアクセスしてデータ取得
  • ラズパイアクセスはホワイトリストで制限

 

懸念点としては、家内LANにあるラズパイにどうやってDialogFlowからアクセスするのか、セキュリティをホワイトリストで本当にカバーできるのか、といったところでしょうかね。

そのうち自分の家内LANにハッキング仕掛けて、セキュリティが大丈夫なのか試してみたいですね、自分のスキルアップも兼ねて。

 

てか、google アシスタントとDialogFlow相当のアプリケーションが宅内LAN内で完結するならば、外に出ていく必要がないんだけどね。さすがにそんなパワーがあるものはないよね、って話。ちょっとしたシングルボードマシンでできるなら教えてちょ。

参考文献

文中参照

完走していない感想

まだ走り出してもいないって感じです(笑)

いやーーーたのしみ!!!!

Google Homeを使ったスマートホームってやつを導入しました

はじめに

おそらく一年ぐらい前に買ったGoogle Homeの封をやっとこ開いて、スマートホーム化をしました。

やる気が出てきたということは、もちろん夏季休暇に入ったからです。

今年は東京オリンピックの影響でこんなことになっています。

やることとしては下記になります。

  • google Homeを設定する
  • Switch Botと連携
  • リビングの電気を声で変えられるようにする

参考文献

www.switchbot.jp

公式が一番そろっている気がする。

公式通りにやったら、ものの1時間ぐらいでしたね。

完走した感想

OK, google. リビングを消して」

これで操作できます。素晴らしい。

細かいことは難しいけど、今はこれで十分な気がする。

次やりたいことも見えているし、がんばるぞーーー!

できたら記事にします~

Grafanaを使った電気の見える化

はじめに

1年ぐらい前?から目をつけていたけど、やっとできたーマン。

Grafanaってかっこいいよね。

LiveDemoで遊べるので、画像のリンクから飛んでね!

f:id:TeTiTa:20200505175255p:plain

ログイン画面

f:id:TeTiTa:20200505174651p:plain

GrafanaのLive Demo

参考文献

Dockerイメージがあるので、ポーンと建てるだけ。

qiita.com

blog.serverworks.co.jp

www.s-style.co.jp

とりあえずのダッシュボードを作成!
GrafanaのダッシュボードとDBの中身を一度に見てみるといい感じに動いているのが見えました。上で表示する範囲が変えられるし、カーソル合わせればその値も見える。
700Wぐらいになっているのがドライヤーを中でつけたとき、1400Wを超えたのが電気ケトルをつけたときですね~。

f:id:TeTiTa:20200505182234g:plain

ダッシュボード

完走した感想

ついにここまで来ました・・・!
GW中にここまでこれてヨカタ。
今後は、ダッシュボードいじいじおじさんだな。
Metabaseは過去データの解析、Grafanaで現状を可視化といった感じでしょうか。

夢が広がるぞ~~~

アップロードはTwtterに上げてリンク張ったほうが良いか??

スマートメーターから取得したデータをDBに書き込みまくる(更新)

はじめに/やりたいこと/注意点

DBにデータをガンガン書き込みたい。

どうして1つの機体でやってないかという点は突っ込んではいけない。

更新

TimeZoneの設定がイケてなくて、あとの処理で詰まってしまった。そのため、一部修正。

環境

参考文献

psycopg2の導入

raspberry pi 3にpsycopg2がインストールされていなかったので実施。
案の定エラー発生。

参考文献があったのでよかた。

yatta47.hateblo.jp

というかちゃんとエラーを見ればわかったことだったけどw

pi@rpi3-01:~/power $ sudo pip install psycopg2
Collecting psycopg2
  Downloading https://files.pythonhosted.org/packages/a8/8f/1c5690eebf148d1d1554fc00ccf9101e134636553dbb75bdfef4f85d7647/psycopg2-2.8.5.tar.gz (380kB)
    100% |████████████████████████████████| 389kB 684kB/s 
    Complete output from command python setup.py egg_info:
    /usr/lib/python2.7/distutils/dist.py:267: UserWarning: Unknown distribution option: 'project_urls'
      warnings.warn(msg)
    running egg_info
    creating pip-egg-info/psycopg2.egg-info
    writing pip-egg-info/psycopg2.egg-info/PKG-INFO
    writing top-level names to pip-egg-info/psycopg2.egg-info/top_level.txt
    writing dependency_links to pip-egg-info/psycopg2.egg-info/dependency_links.txt
    writing manifest file 'pip-egg-info/psycopg2.egg-info/SOURCES.txt'
    Error: You need to install postgresql-server-dev-X.Y for building a server-side extension or libpq-dev for building a client-side application.
    
    
    ----------------------------------------
Command "python setup.py egg_info" failed with error code 1 in /tmp/pip-build-HWieD7/psycopg2/
pi@rpi3-01:~/power $ sudo apt-get install libpq-dev
パッケージリストを読み込んでいます... 完了
依存関係ツリーを作成しています                
状態情報を読み取っています... 完了
以下の追加パッケージがインストールされます:
  libpq5
提案パッケージ:
  postgresql-doc-9.6
以下のパッケージが新たにインストールされます:
  libpq-dev
以下のパッケージはアップグレードされます:
  libpq5
アップグレード: 1 個、新規インストール: 1 個、削除: 0 個、保留: 188 個。
317 kB のアーカイブを取得する必要があります。
この操作後に追加で 815 kB のディスク容量が消費されます。
続行しますか? [Y/n] Y
取得:1 http://ftp.tsukuba.wide.ad.jp/Linux/raspbian/raspbian stretch/main armhf libpq5 armhf 9.6.17-0+deb9u1 [122 kB]
取得:2 http://ftp.tsukuba.wide.ad.jp/Linux/raspbian/raspbian stretch/main armhf libpq-dev armhf 9.6.17-0+deb9u1 [195 kB]
317 kB を 2秒 で取得しました (112 kB/s)
changelog を読んでいます... 完了
(データベースを読み込んでいます ... 現在 135871 個のファイルとディレクトリがインストールされています。)
.../libpq5_9.6.17-0+deb9u1_armhf.deb を展開する準備をしています ...
libpq5:armhf (9.6.17-0+deb9u1) で (9.6.13-0+deb9u1 に) 上書き展開しています ...
以前に未選択のパッケージ libpq-dev を選択しています。
.../libpq-dev_9.6.17-0+deb9u1_armhf.deb を展開する準備をしています ...
libpq-dev (9.6.17-0+deb9u1) を展開しています...
libpq5:armhf (9.6.17-0+deb9u1) を設定しています ...
libc-bin (2.24-11+deb9u4) のトリガを処理しています ...
man-db (2.7.6.1-2) のトリガを処理しています ...
libpq-dev (9.6.17-0+deb9u1) を設定しています ...
pi@rpi3-01:~/power $ sudo pip install psycopg2
Collecting psycopg2
  Using cached https://files.pythonhosted.org/packages/a8/8f/1c5690eebf148d1d1554fc00ccf9101e134636553dbb75bdfef4f85d7647/psycopg2-2.8.5.tar.gz
Building wheels for collected packages: psycopg2
  Running setup.py bdist_wheel for psycopg2 ... done
  Stored in directory: /root/.cache/pip/wheels/fb/85/a8/57f24b92b9554880384d00a84881c0ea80cbcee02d6dcede54
Successfully built psycopg2
Installing collected packages: psycopg2
Successfully installed psycopg2-2.8.5
pi@rpi3-01:~/power $ 

完成

SQLクライアントで確認したら、ちゃんと最新データが格納されていましたとさ。

それぞれの値の意味は以下の通り。
ID:シーケンス番号
date:取得日時
delta:瞬時電力計測値[W]
sumpower:積算電力量計測値[kWh]

ID=5のdelta=267[W]はドライヤー(冷風)をつけたとき。ID=10~13のdelta=1400[W]は電気ケトルをつけたときになります。こうやって見ると面白いね。

f:id:TeTiTa:20200505132831g:plain

DB書き込み

追記

dataのカラムを見ての通り、Timezoneが設定されていない。さらにDBのタイムゾーンは初期値であり、UTCだった!これでGrafanaと連携したときにうまく変換されなかったので修正する。おそらく、DB的にはJSTで表示しているんだけど、Grafanaから取得したときに謎にUTCJSTの変換が行われて9時間進んでしまっていた。

修正は、①DBのタイムゾーン設定、②タイムゾーンを含めたデータの作成を実施した。

①DBのタイムゾーン設定

scientre.hateblo.jp

うまく書き変わりますた。

SELECT NOW();
--> 2020-05-05 06:14:57.147651+00

SET timezone TO 'Asia/Tokyo'
--> 2020-05-05 15:16:07.283963+09 

タイムゾーンを含めたデータの作成

qiita.com

python2.7であることを意識して修正。3系にするときにもう一度修正せねば・・・

# Raspbessy piから明示的にUTCで送りつけるとうまくいった。
d_utc = datetime.datetime.now(pytz.utc)

これらを実行した結果、欲しい状態になりましたとさ。
IDが227と228がおかしい状態。IDが232以降が欲しい状態。

f:id:TeTiTa:20200505172610g:plain

修正後のDB

 

完走した感想

ここにくるまでいろいろとみちくさ食ったけども、良い勉強になりましたよん。

こっからはどうやってグラフで見るかを考えねば。

あとは、30分電力値をどのタイミングで取得することにするか、どう実装するか、考えよう。

追記

問題は発生したけど、GW前半に躓いていたところよりは全然だな。。。あの3日間はマジでもったいなかったな。。。