サーバーと可視化と自称IoT女子
こんにちは🙋色々とマイナーチェンジを図りたいです👧五十嵐a.k.a自称IoT女子です☻☻☻
五十嵐a.k.a.自称IoT女子
2016入社☝️大学院で花の遺伝子を研究するも、日本のインダストリー4.0に夢中となり、その実現を目指す&その恩恵を直接受けるべく4月より入社し奮闘中✊💥💨
三度の飯よりでんぱ組.inc⚡️
今回は、こちら→ラズパイと対話する植物と自称IoT女子の続きです✏️
前回は取得したデータをメイさんが喋ってくれる、ということをやりました😗
今回はそのデータをサーバーに送ってデータ集積し、更に可視化する、ということをやっていきます💪💪
こんな構成になってます👺
センサーデータをとって可視化するまでの流れはこうです👺
データ表示はこうなってます👺
ソースコードです👺
🐤以前に上げたものが元になっていて、センサーの値を取得します。
#! /usr/bin/env python
# -*- coding: utf-8 -*-
import os
import sys
import glob
import time
import datetime
import re
import subprocess
import spidev
import Adafruit_DHT
from slacker import Slacker
import RPi.GPIO as GPIO
spi = spidev.SpiDev()
spi.open(0, 0)
def get_temp_and_humid(sensor=11, pin=4):
"""温度湿度センサー(DHT11)から温度と湿度を取得する
"""
# 湿度と温度を取得
humidity, temperature = Adafruit_DHT.read_retry(sensor, pin)
# 湿度と温度が正常に取得できていたら、値を返す
if humidity is not None and temperature is not None:
return (temperature, humidity)
else:
print('Failed to get reading. Try again!')
sys.exit(1)
def get_moisture(channel):
"""ADCの指定したチャンネルのデータを取得する
"""
adc = spi.xfer2([1,(8+channel)<<4,0])
data = ((adc[1]&3) << 8) + adc[2]
return data
if __name__ == '__main__':
print("温度,湿度:", get_temp_and_humid())
print("水分量:", get_moisture(0))
🐤RaspberryPiに設置しているもの (RP→kafka)
#! /usr/bin/env python
# -*- coding: utf-8 -*-
import datetime
from sensordata import *
from kafka import KafkaProducer
def get_date():
""" 現在時刻を取得する
"""
now = datetime.datetime.now()
return now.strftime("%Y-%m-%d %H:%M:%S")
def shape_data():
""" 取得したセンサーデータを整形する
"""
temp, humid = get_temp_and_humid()
moisture = get_moisture(0)
date = get_date()
result = {"temp": temp,
"humid": humid,
"moisture": moisture,
"date": date}
return result
def post_kafka():
""" Kafkaにデータを送信する
"""
producer = KafkaProducer(bootstrap_servers=["203.104.251.126:9092"])
message = shape_data()
producer.send("sensor_data001",
str(message).encode("utf-8"))
producer.flush()
if __name__ == '__main__':
post_kafka()
🐤サーバーサイドに設置しているもの (kafka→mongoDB)
#! /usr/bin/env python
# -*- coding: utf-8 -*-
from ast import literal_eval
from kafka import KafkaConsumer
from pymongo import MongoClient
def str_to_dict(data):
"""Kafkaで受け取った文字列を辞書型に変換する
"""
return literal_eval(data)
def insert_data(data):
""" MongoDBにデータを保存する
"""
client = MongoClient("localhost:27017")
db_connect = client["plant001"]
db_connect["sensor_data"].insert_one(data)
def reseive_kafka():
""" Kafkaからデータを受け取り、MongoDBに保存する
"""
consumer = KafkaConsumer("sensor_data001",
bootstrap_servers=["localhost:9092"])
for c in consumer:
dic = str_to_dict(c.value.decode("utf-8"))
insert_data(dic)
if __name__ == '__main__':
reseive_kafka()
可視化しました👀

re:dashというツールでデータの可視化・分析を行いました。
水を上げた直後は土壌水分量が急激に高くなっています。
Time to say goodbye👺
実は、次回でこの自称IoT女子連載、最終回になります😮✍️
次回はこれまでのことを振り返る的な内容なので、テックブログ的な要素はほぼありません🐻
気が向いたら読んでいただければと思います。
テックブログ新着情報のほか、AWSやGoogle Cloudに関するお役立ち情報を配信中!
Follow @twitterRecommends
こちらもおすすめ
-
ラズパイと対話する植物と自称IoT女子
2016.8.19
-
【終了しました】Tech Night Vol.11開催
2018.9.30
-
新卒 IoT 女子、自称やめるってよ
2016.7.20
-
痛い意味ではなくSORACOMで植物と会話した話👍
2016.10.17
-
自称IoT 女子が先端コンテンツ技術展でVR👓体験してきた
2016.7.8
Special Topics
注目記事はこちら
データ分析入門
これから始めるBigQuery基礎知識
2024.02.28

AWSの料金が 10 %割引になる!
『AWSの請求代行リセールサービス』
2024.07.16



