from PyQt5.QtWidgets import QApplication, QMessageBox
from ui.mainwindow_0_1_1 import MainWindow
from PyQt5.QtCore import *
import os
import time
import datetime
import serial
import sys
sys.path.append('/usr/local/lib/python2.7/dist-packages')
import ambient
serialport = "/dev/ttyACM0"
LED_TH = 999
LED_TH_P = 999
Water_TH = 999
Water_TH_P =999
temp = 0
humid = 0
press = 0
bright = 0
water = 0
tank = 0
class SerialCom:
def __init__(self, serialport):
self.sc = serial.Serial(serialport,9600, timeout=1)
time.sleep(3)
def data_read(self):
rc_data = self.sc.readline()
return rc_data
def start_com(self):
self.sc.write(b'd')
self.sc.write(b'd')
self.sc.write(b'd')
self.sc.write(b'd')
def light_set(self, th):
self.sc.write(b'L')
light1 = th//100+48
light2 = (th%100)//10+48
light3 = (th%100%10)+48
self.sc.write(chr(light1).encode())
self.sc.write(chr(light2).encode())
self.sc.write(chr(light3).encode())
def water_set(self, th):
self.sc.write(b'W')
water1 = th//100+48
water2 = (th%100)//10+48
water3 = (th%100%10)+48
self.sc.write(chr(water1).encode())
self.sc.write(chr(water2).encode())
self.sc.write(chr(water3).encode())
def close(self):
self.sc.close()
def refresh_window():
#時刻更新
now = datetime.datetime.now()
ct = "現在時刻:" + now.strftime('%Y/%m/%d %H:%M:%S')
ui.labeltime.setText(ct)
#センサデータ表示更新
try:
#温度
ui.labeltemp.setText("気温:\t" + str("{0:.2f}".format(float(temp))) + " [℃]")
#湿度更新
ui.labelhumid.setText("湿度:\t" + str("{0:.2f}".format(float(humid)))+ " [%]")
#気圧更新
ui.labelpress.setText("大気圧:" + str("{0:.2f}".format(float(press))) + " [hPa]" )
#照度更新
ui.labelbright.setText("照度:\t" + str("{0:4}".format(int(bright))) + "[Lx]")
#水分量更新
ui.labelwater.setText( "水分量:\t" + str("{0:4}".format(int(water))))
#水タンク満水検知
ui.labeltank.setText("タンク内水検知:" + str("{0:4}".format(int(tank))))
except:
pass
#LED制御
n = now.time()
global LED_TH
#時刻制御1
cb_t1 = ui.checkBoxLightTime1.checkState()
t = ui.timeEditLedStart1.time()
LedStartTime1 = datetime.time(t.hour(), t.minute(), 0)
t = ui.timeEditLedEnd1.time()
LedEndTime1 = datetime.time(t.hour(), t.minute(), 0)
#時刻制御2
cb_t2 = ui.checkBoxLightTime2.checkState()
t = ui.timeEditLedStart2.time()
LedStartTime2 = datetime.time(t.hour(), t.minute(), 0)
t = ui.timeEditLedEnd2.time()
LedEndTime2 = datetime.time(t.hour(), t.minute(), 0)
#時刻制御有効の場合
if((cb_t1>0 and LedStartTime1<=n<LedEndTime1) or (cb_t2>0 and LedStartTime2<=n<LedEndTime2)):
ui.progressBarLight.setValue(100)
if(ui.checkBoxLightTh.checkState()):
LED_TH = ui.spinBoxLed.value()
else:
LED_TH = 0
else:
ui.progressBarLight.setValue(0)
LED_TH = 999
#時刻制御無効の場合、センサーレベルだけ見る
#すべてのチェックが入っていなければ、常時ON
if(cb_t1==0 and cb_t2==0):
if(ui.checkBoxLightTh.checkState()):
LED_TH = ui.spinBoxLed.value()
else:
LED_TH = 0
#水やり制御
n = now.time()
global Water_TH
#時刻制御1
cb_t1 = ui.checkBoxWaterTime1.checkState()
t = ui.timeEditWaterStart1.time()
WaterStartTime1 = datetime.time(t.hour(), t.minute(), 0)
t = ui.timeEditWaterEnd1.time()
WaterEndTime1 = datetime.time(t.hour(), t.minute(), 0)
#時刻制御2
cb_t2 = ui.checkBoxWaterTime2.checkState()
t = ui.timeEditWaterStart2.time()
WaterStartTime2 = datetime.time(t.hour(), t.minute(), 0)
t = ui.timeEditWaterEnd2.time()
WaterEndTime2 = datetime.time(t.hour(), t.minute(), 0)
#時刻制御有効の場合
if((cb_t1>0 and WaterStartTime1<=n<WaterEndTime1) or (cb_t2>0 and WaterStartTime2<=n<WaterEndTime2)):
ui.progressBarWater.setValue(100)
if(ui.checkBoxWaterTh.checkState()):
Water_TH = ui.spinBoxWater.value()
else:
Water_TH = 0
else:
ui.progressBarWater.setValue(0)
Water_TH = 999
#時刻制御無効の場合、センサーレベルだけ見る
#すべてのチェックが入っていなければ、常時ON
if(cb_t1==0 and cb_t2==0):
if(ui.checkBoxWaterTh.checkState()):
Water_TH = ui.spinBoxLed.value()
else:
Water_TH = 0
#Ambientデータ送信
if(ui.checkBox_AmbientSend.checkState()==2):
if(ui.comboBox_AmbientInt.currentIndex()==0):
#1分ごと
if(now.second==0):
Ambient_send(now)
if(ui.comboBox_AmbientInt.currentIndex()==1):
#2分ごと
if(now.minute%2==0 and now.second==0):
Ambient_send(now)
if(ui.comboBox_AmbientInt.currentIndex()==2):
#3分ごと
if(now.minute%3==0 and now.second==0):
Ambient_send(now)
if(ui.comboBox_AmbientInt.currentIndex()==3):
#4分ごと
if(now.minute%4==0 and now.second==0):
Ambient_send(now)
if(ui.comboBox_AmbientInt.currentIndex()==4):
#5分ごと
if(now.minute%5==0 and now.second==0):
Ambient_send(now)
if(ui.comboBox_AmbientInt.currentIndex()==5):
#10分ごと
if(now.minute%10==0 and now.second==0):
Ambient_send(now)
if(ui.comboBox_AmbientInt.currentIndex()==6):
#15分ごと
if(now.minute%15==0 and now.second==0):
Ambient_send(now)
if(ui.comboBox_AmbientInt.currentIndex()==7):
#20分ごと
if(now.minute%20==0 and now.second==0):
Ambient_send(now)
if(ui.comboBox_AmbientInt.currentIndex()==8):
#30分ごと
if(now.minute%30==0 and now.second==0):
Ambient_send(now)
if(ui.comboBox_AmbientInt.currentIndex()==9):
#60分ごと
if(now.minute==0 and now.second==0):
Ambient_send(now)
def Ambient_send(sendtime):
amSend = ambient.Ambient(ui.lineEdit_AmbientID.text(),ui.lineEdit_AmbientKey.text())
amSend.send({'d1': temp, 'd2':humid, 'd3':press, 'd4':bright, 'd5':water, 'd6':tank})
#AmbientUpdateTime = datetime.datetime.now()
ui.lineEditAmbientLastUpdate.setText(sendtime.strftime('%Y/%m/%d %H:%M:%S'))
def refresh_sensor():
myserial.start_com()
global LED_TH
global LED_TH_P
global Water_TH
global Water_TH_P
global temp
global humid
global press
global bright
global water
global tank
#温度更新
try:
temp = myserial.data_read()
ui.labeltemp.setText("気温:\t" + str("{0:.2f}".format(float(temp))) + " [℃]")
except:
pass
#湿度更新
try:
humid = myserial.data_read()
except:
pass
#気圧更新
try:
press = myserial.data_read()
except:
pass
#照度更新
try:
bright = myserial.data_read()
except:
pass
#水分量更新
try:
water= myserial.data_read()
except:
pass
#水タンク満水検知
try:
tank= myserial.data_read()
except:
pass
#LED制御支持送信
if(LED_TH != LED_TH_P):
myserial.light_set(LED_TH)
LED_TH_P = LED_TH
#ポンプ制御支持送信
if(Water_TH != Water_TH_P):
myserial.water_set(Water_TH)
Water_TH_P = Water_TH
def setting_memory():
settime = QTime()
fileObject = open(file, "r", encoding="utf-8")
#LED制御設定値
#時刻1有効
line1 = fileObject.readline()
line1 = fileObject.readline()
if(line1=="2\n"):
ui.checkBoxLightTime1.toggle()
#時刻1開始時刻
line1 = fileObject.readline()
line2 = fileObject.readline()
settime.setHMS(int(line1), int(line2), 0)
ui.timeEditLedStart1.setTime(settime)
#時刻1終了時刻
line1 = fileObject.readline()
line2 = fileObject.readline()
settime.setHMS(int(line1), int(line2), 0)
ui.timeEditLedEnd1.setTime(settime)
#時刻2有効
line1 = fileObject.readline()
if(line1=="2\n"):
ui.checkBoxLightTime2.toggle()
#時刻2開始時刻
line1 = fileObject.readline()
line2 = fileObject.readline()
settime.setHMS(int(line1), int(line2), 0)
ui.timeEditLedStart2.setTime(settime)
#時刻2終了時刻
line1 = fileObject.readline()
line2 = fileObject.readline()
settime.setHMS(int(line1), int(line2), 0)
ui.timeEditLedEnd2.setTime(settime)
#照度制御有効
line1 = fileObject.readline()
if(line1=="2\n"):
ui.checkBoxLightTh.toggle()
#LED照度設定
line1 = fileObject.readline()
ui.spinBoxLed.setValue(int(line1))
#水やり制御設定値読み出しAmbient通信
#時刻1有効
line1 = fileObject.readline()
line1 = fileObject.readline()
if(line1=="2\n"):
ui.checkBoxWaterTime1.toggle()
#時刻1開始時刻
line1 = fileObject.readline()
line2 = fileObject.readline()
settime.setHMS(int(line1), int(line2), 0)
ui.timeEditWaterStart1.setTime(settime)
#時刻1終了時刻
line1 = fileObject.readline()
line2 = fileObject.readline()
settime.setHMS(int(line1), int(line2), 0)
ui.timeEditWaterEnd1.setTime(settime)
#時刻2有効
line1 = fileObject.readline()
if(line1=="2\n"):
ui.checkBoxWaterTime2.toggle()
#時刻2開始時刻
line1 = fileObject.readline()
line2 = fileObject.readline()
settime.setHMS(int(line1), int(line2), 0)
ui.timeEditWaterStart2.setTime(settime)
#時刻2終了時刻
line1 = fileObject.readline()
line2 = fileObject.readline()
settime.setHMS(int(line1), int(line2), 0)
ui.timeEditWaterEnd2.setTime(settime)
#照度制御有効
line1 = fileObject.readline()
if(line1=="2\n"):
ui.checkBoxWaterTh.toggle()
#LED照度設定
line1 = fileObject.readline()
ui.spinBoxWater.setValue(int(line1))
#Ambient通信設定値読み出し
line1 = fileObject.readline()
#チャネルID
line1 = fileObject.readline()
ui.lineEdit_AmbientID.setText(line1)
#ライトキー
line1 = fileObject.readline()
ui.lineEdit_AmbientKey.setText(line1)
#インターバル設定
line1 = fileObject.readline()
ui.comboBox_AmbientInt.setCurrentIndex(int(line1))
if __name__=="__main__":
import sys
app = QApplication(sys.argv)
ui = MainWindow()
file = "./setting.txt"
if os.path.exists(file):
setting_memory()
QMessageBox.information(None, "あさがおIoT観察システム","設定ファイルが見つかりました。\n設定値を読み込みました。", QMessageBox.Ok)
else:
QMessageBox.information(None, "あさがおIoT観察システム","設定ファイルが見つかりません。\nアプリの初期値で起動しました。", QMessageBox.Ok)
#ui.showFullScreen()
myserial = SerialCom(serialport)
refresh_sensor()
timer1 = QTimer()
timer1.timeout.connect(refresh_window)
timer1.start(250)
timer2 = QTimer()
timer2.timeout.connect(refresh_sensor)
timer2.start(2000)
ui.show()
sys.exit(app.exec_())
コメント