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.

 


事業提携のご相談などお気軽にどうぞ!

 

相談する(無料)

 

 

無料でIoTアプリをつくる

 

事例集ダウンロード