//tips
//Biz
営業。猟銃問題周回。
ライター研究所アテンド対応。
寒すぎて太平山が遠のいている。くううう、登らねば。
猟師先輩飲みスケジュール確認。1月7日確定。
博多織の方からご紹介があったのでアプローチしてみる。
https://camp-fire.jp/projects/view/358587
解体場16日訪問確定。
IOTデバイス制作シミュレーション
Iotのサーバー側を設定。
フォルダの作成。
mkdir temperature-sensor-server
cd temperature-sensor-server
仮想化の実行。
python3 -m venv .venv
source ./.venv/bin/activate
pip install paho-mqtt
touch app.py
night-light serverの際に書いたコードをコピペ。
これをベースに修正していく。
大きな変更はデータをcsvファイルで管理すること。
諸々変更して実行。
import json
import time
import paho.mqtt.client as mqtt
from os import path
import csv
from datetime import datetime
id = 'ff219060-93cb-4d28-8a2d-20afb5aab84e'
client_telemetry_topic = id + '/telemetry'
server_command_topic = id + '/commands'
client_name = id + 'temperature_sensor_server'
mqtt_client = mqtt.Client(client_name)
mqtt_client.connect('test.mosquitto.org')
mqtt_client.loop_start()
temperature_file_name = 'temperature.csv'
fieldnames = ['date', 'temperature']
if not path.exists(temperature_file_name):
with open(temperature_file_name, mode='w') as csv_file:
writer = csv.DictWriter(csv_file, fieldnames=fieldnames)
writer.writeheader()
def handle_telemetry(client, userdata, message):
payload = json.loads(message.payload.decode())
print("Message received:", payload)
#command = { 'led_on' : payload['light'] < 300 }
#print("Sending message:", command)
#client.publish(server_command_topic, json.dumps(command))
#csv最初のrowの確認または作成
with open(temperature_file_name, mode='a') as temperature_file:
temperature_writer = csv.DictWriter(temperature_file, fieldnames=fieldnames)
temperature_writer.writerow({'date' : datetime.now().astimezone().replace(microsecond=0).isoformat(), 'temperature' : payload['temperature']})
#新たなrowの追加、情報追加
with open(temperature_file_name, mode='a') as temperature_file:
temperature_writer = csv.DictWriter(temperature_file, fieldnames=fieldnames)
temperature_writer.writerow({'date' : datetime.now().astimezone().replace(microsecond=0).isoformat(), 'temperature' : payload['temperature']})
mqtt_client.subscribe(client_telemetry_topic)
mqtt_client.on_message = handle_telemetry
while True:
time.sleep(2)
コマンド部分は不要だったのでコメントアウト。
クライアント
Sending telemetry {"temperature": 73.15}
サーバー
Message received: {'temperature': 73.15}
でコネクション確認。
Csvもセンサー感知の5秒ごとに新たな情報が加えられて行っていた。
素晴らしい。