サーバーと可視化と自称IoT女子
こんにちは色々とマイナーチェンジを図りたいです
五十嵐a.k.a自称IoT女子です☻☻☻
五十嵐a.k.a.自称IoT女子
2016入社大学院で花の遺伝子を研究するも、日本のインダストリー4.0に夢中となり、その実現を目指す&その恩恵を直接受けるべく4月より入社し奮闘中
三度の飯よりでんぱ組.inc
今回は、こちら→ラズパイと対話する植物と自称IoT女子の続きです
前回は取得したデータをメイさんが喋ってくれる、ということをやりました
今回はそのデータをサーバーに送ってデータ集積し、更に可視化する、ということをやっていきます
こんな構成になってます
センサーデータをとって可視化するまでの流れはこうです
データ表示はこうなってます
ソースコードです
以前に上げたものが元になっていて、センサーの値を取得します。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 | #! /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)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 | #! /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)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 | #! /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.7.20
-
IT農業とセンサーとIoT女子
2016.8.9
-
【終了しました】Tech Night Vol.11開催
2018.9.30
-
自称SORACOM女子編~ハンズオンに行きました~
2016.8.9
-
自称IoT女子、Arduinoはじめました
2016.9.5

Special Topics
注目記事はこちら

データ分析入門
これから始めるBigQuery基礎知識
2024.02.28

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