サーバーと可視化と自称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 女子が先端コンテンツ技術展でVR👓体験してきた
2016.7.8
-
自称IoT女子がLTをやりまして・・・夏~SORACOM夏の電子工作祭り編~
2016.8.24
-
【終了しました】Tech Night Vol.11開催
2018.9.30
-
ラズパイとLチカと自称IoT女子
2016.7.29
Special Topics
注目記事はこちら
データ分析入門
これから始めるBigQuery基礎知識
2024.02.28
AWSの料金が 10 %割引になる!
『AWSの請求代行リセールサービス』
2024.07.16