IoTで子供用のベビーゲートを見える化してみた! – conect+

IoTで子供用のベビーゲートを見える化してみた!

IoTで子供用のベビーゲートを見える化してみた!

こんにちは、conect+の中の人(エンジニア)です。

我が家に設置されているベビーゲートの開閉状態をIoTを使って見える化し、遠隔監視を行なってみます。

ハイハイが始まっている息子(10ヶ月)のために2階から1階に降りる階段手前にベビーゲートを設置しているのですが、息子(3才)がゲートを開けっ放しにすることがあります。

このゲートの開閉状態をEnOceanセンサー、ラズパイ、conect+で見える化、Slackへの通知を行い遠隔監視を行なってみます。

全体構成は下記のようになります。

 

 

 

 

 

 

 

 

 

動作イメージ

準備

今回用意したものは以下になります。

設置

ベビーゲートの扉側にマグネットを取付け、扉の受け側にデータ送信機を設置します。

EnOcean社のエナジーハーベスト技術を利用した開閉センサーを使用しますので、電池・配線が不要で設置が非常に簡単です。両面テープなどで貼り付けるだけです。

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

conect+セットアップ

コンソール画面からWebAPI接続するプロジェクトを作成し、WebAPIキーを発行します。

今回はドアの開閉を監視しますので、開閉状態を表現するウィジェットを追加します。

このウィジェットはセンサー計測値が

"0" → Unlock

"1" → "Lock"

で表示されます。

 

 

ラズパイセットアップ

OS、ネットワークのセットアップ後、開閉センサーからのデータ受信、conect+へのデータ送信、Slackへ通知するプログラムを実行します。

Pythonで必要なライブラリが不足している場合はインストールします。

Slackへの通知には下記のリンクからWebhook URLを取得してください。

https://slack.com/services/new/incoming-webhook

開閉センサーから受信した電文は、EnOcean社が公開している仕様(ESP3:EnOcean Serial Protocol 3)に基づいて解析し、デバイスIDとセンサー値を取得します。

ESP3の詳細は下記からダウンロード可能です。

http://www.enocean.com/esp

 

サンプルコードを下記します。

#!/usr/bin/env python
# coding: UTF-8
import json
import requests
import threading
import slackweb
from serial import *
from sys import exit
from pytz import timezone
from datetime import datetime
# 初期化
port = '/dev/ttyUSB0'
conect_api_key = '{conect+のWebAPIキー}'
data_key = '{conect+のセンサーキー}'
slack_web_hook_url = '{SlackのWebhook URL}'
slack = slackweb.Slack(url=slack_web_hook_url)
def perse_telegram(telegram):
# デバイスID
device_id = ':'.join(telegram[1:5])
# 計測値
data = telegram[5]
if data == '08':
value = 0
elif data == '09':
value = 1
return device_id, value
def post_data(device_id, data_key, sensing_at, value):
open_close = 'close' if value == 1 else 'open'
slack.notify(text='%s %s %s' % (sensing_at, device_id, open_close))
url = 'https://api.conect.plus/v1/%(api_key)s/data' % {'api_key':conect_api_key}
data = json.dumps({
'deviceUuid':device_id,
'key':data_key,
'sensingAt':sensing_at,
'value1':value})
header = {'Content-Type': 'application/json'}
res = requests.post(url, data=data, headers=header)
slack.notify(text='Status:%s, Body:%s' % (res.status_code, res.text))
# シリアルポートオープン
try:
ser = Serial(port, 57600)
msg = '0pen port: %s' % port
print msg
slack.notify(text=msg)
except:
msg = 'Failed open port: %s' % port
print msg
slack.notify(text=msg)
exit(1)
data_idx = 0
data_length = 0
optional_length = 0
headers = []
datas = []
receiving = False
# データ受信
while True:
# データ読込
c = ser.read().encode('hex')
if not receiving and c == '55':
# 電文開始
print '*** Telegram receiving start. ***'
data_idx = 0
data_length = 0
optional_length = 0
headers = []
datas = []
receiving = True
data_idx += 1
if 2 <= data_idx <= 5:
# Header取得
headers.append(c)
if data_idx == 5:
# Header終了
data_length = int(headers[1], 16)
optional_length = int(headers[2], 16)
if 7 <= data_idx <= (6 + data_length):
# Data取得
datas.append(c)
if data_idx == (6 + data_length):
# Data終了
device_id, value = perse_telegram(datas)
now = datetime.now(timezone('UTC')).strftime('%Y-%m-%d %H:%M:%S')
print 'Data received: %s, %s, %s' % (now, device_id, value)
# データ送信(非同期で処理)
t = threading.Thread(target=post_data, args=(device_id, data_key, now, value))
t.start()
if data_idx == (6 + data_length + optional_length + 1):
# 電文終了
print 'Finished telegram receiving.'
receiving = False

 

セットアップが完了したら、開閉センサーのデータを受信できる場所に設置し、監視を開始します。

 

 

 

 

 

 

 

conect+アプリにプロジェクトを追加しデバイスIDを設定すれば、現在のドアの開閉状態が確認できます。

 

Slackにはドアの開閉状態と、conect+へのデータ送信結果が通知されます。

 

 

 

 

 

 

 

c+

今後ともconect+をよろしくお願い致します。

Connecting great Designs with great Technologies.

 


conect+ではご利用・ご検討をサポートするハンズオンセミナー(無料)を開催しております。

プログラミングやデザインの知識は不要で、conect+やIoTにご興味のある方であればどなたでもご参加頂けます。

主な内容は、conect+の概要説明および実際の活用事例のご紹介を行ない、その後にサンプルキットを使って、参加者自身で学習していただきます。クラスは1〜4名様程度で実施しております。少人数&随時開催ですのでお気軽にお申込みください。

 

 

更に!フリーユーザー登録でIoT事例集をプレゼント

conect+をご登録の皆さま全員に、独自に調査したIoT課題調査結果と世界のIoT事例をまとめたレポートをプレゼントしております。

 

 

無料ユーザー登録はこちら

ユーザー登録(無料)

 

初期費用・月額費用0円で始める
IoTプロジェクト

お使いのIoTプロジェクト規模に応じて選べるプラン

今すぐ始める
  • App Store

お気軽にお問い合わせください

事例集ダウンロード