はじめに
こんちには!今、シェアハウスに住んでいるのですが、
共用で使っている洗濯機を使おうとすると もう誰かが使っていて使えないことがあります、、
わざわざ洗濯機を使っているか確認しに行くのもめんどい、、
ということで洗濯機が稼働しているかどうかがわかるWebシステムを作ってみました!
作ったもの
- urlを叩くとシェアハウスの洗濯機が稼働しているかわかる
システム構成
電流データを取得 → 洗濯機とコンセントに下記のIoT機器(スマートプラグ)を設置電流データを取得する
あとはこの電流データを公開しているAPIをフロント側から叩いてその結果をもとに洗濯機を使っているか否かを表示すればOK!簡単じゃんと思っていたが、、
- IoTデバイスのスマートプラグのAPIの使用しすぎは、APIシステムへの課金がされてしまう
- 洗濯機を使っていても、脱水時は電流データが0になるタイミングがある
という状況に対応するため
- AWSのLambda(Node.js)でIoTデバイスが提供しているAPIは5分に1回だけ取得するようにしデータをAWSのDynamoDBに保存する
- 保存されたDynamoDBから電流データを取得し、使っているかどうかを判定(最新電流データから過去3回分中、電流仕様が2/3だったら使用中とする)し、APIで返すAPIサーバーをLambdaとAPIGatewayで作成
- 上記のAPIを叩くフロント側(S3)を作成し、シャアハウス住民のれとるときゃりー(@retoruto_carry)が作成したデジタルサイネージシステムに乗せて2分間に1回ぐらい定期的に表示する(もちろん直接url叩いても見れます!)
というサーバレスなシステムにしました。
開発の流れ
① アーキテクチャ設計、言語設定
とりあえず安価なことを含め、環境構築が不要なサーバーレスでアーキテクチャを組むことに、
最初は、GCPとAWS組み合わせて作ろかと模索していましたが、それぞれの相性を考慮して
AWSに統一してLambda、APIGateway、DynamoDBで構築することに!
Lambdaで使った言語ですが、日頃、業務ではRubyを使用しているのですが、Nodeに興味があったのでNode.jsで書くことにしました。
また、ローカルでvimを使って開発したいのと、githubでソースコードを管理したかったので、AWS cliを使って開発しました!
最初はシェアハウスの同居人とあーだこーだいいながらアーキテクチャを考えました
業務で使っていないNode.jsと触ったことがなかったLambda ApiGeteway DynamoDBに苦戦する日々
② 熱海で開発合宿
熱海のゲストハウスでシェアハウス同居人の@retoruto_carry、@wamisnet、@ryosk7に参加して、要件定義、アーキテクチャ設計の見直し、そして、ひたすら開発する。
業務では主にRubyを使っているので、Node.jsで書くのにいろいろと苦労しました、、その分勉強になった!
お酒や熱海のうまい海鮮料理、温泉に寄り道しすぎてここでの開発進捗は30%ぐらい、、
最後はお互いに成果を発表しました!
③ 業務が休みの日にひたすら開発
AWSのAPIGateway、Dynamoを構築するのが大変だった、、とくにDynamoDBは、初めて使ったので、特に苦労した、、
時間をかけながらも、ひたすら開発した。ちゃんと動いたときは、嬉しかったですね!
まとめ
- AWSのLambda、APIGateway、DynamoDBの連携が楽で快適。コストも低く、このサーバレスシステムは5分に一回24時間稼働していますが、ほぼ0円です。
- 誰かのためになるシステム開発は、やりがいがある!
- IoTで電流がとれるデータが取れるものなら、いろんなことで家🏠をハックできそう!
終わりに
ここまで読んでいただきありがとうございます!
まだまだ、色んなものを作って成長していきたいと思っています!SNSでのシェアやLGTMしてくださると
今後の開発の励みになります!
Twitterもやってます!(@tanayu7777)よかったらフォローしてくださいね!