基于UIFlow的会议提醒系统-Arduino中文社区 - Powered by Discuz! Archiver

vany5921 发表于 2020-6-24 16:01

基于UIFlow的会议提醒系统

本帖最后由 vany5921 于 2020-6-24 16:38 编辑

      此项目结合MQTT实现会议下发提醒与任务管理功能,在默认待机状态下显示时间,接收到上级下发的通知后会自动切换到提醒界面。系统根据会议时间会自动倒计时,到达指定时间后会通过灯光进行提醒,同时可通过MQTT进行员工个人任务的推送,任务完成后可手动推送至上级服务器进行汇报。屏幕显示3条任务,多余任务将会在完成后主动POP显示。此外该系统自带手动定时的久坐提醒功能,可通过PortA接口外接传感器变更为自动监测提醒。操作说明:开机后显示开机画面,此时为联网状态,红色LED常亮获取网络时间,当接入网络并正确获取时间后,LED熄灭,进入默认时钟界面。长按C键可进入久坐提醒模式,此时若无通知则一直显示时间,久坐提醒时间到会以灯光模式进行提醒。同时按住A+B键手动进入任务/会议查看模式,按住A+B键恢复时钟界面。进入任务/会议查看模式后通过A/C键选择任务,长按B键推送已完成任务,完成的任务从屏幕消失,未完成的新任务自动添加到屏幕。长按A键取消会议提醒。
from m5stack import *
from m5ui import *
from uiflow import *
import time
import json

import urequests
from m5mqtt import M5mqtt

setScreenColor(0x222222)


m5mqtt = M5mqtt('c8cb7df3fc9b4e9d8b5eb1b45C', 'mqtt.m5stack.com', 1883, 'apimgqyr', 'enYJVZ-drTsT', 300)


task1_label = M5TextBox(35, 15, "暂时无任务", lcd.FONT_UNICODE,0xf40a0a, rotate=0)
task2_label = M5TextBox(35, 70, "暂时无任务", lcd.FONT_UNICODE,0xf3c209, rotate=0)
task3_label = M5TextBox(35, 125, "暂时无任务", lcd.FONT_UNICODE,0x24f802, rotate=0)
task_highlight_mark = M5Circle(20, 25, 5, 0xFFFFFF, 0xFFFFFF)
long_sit_remain_label = M5TextBox(210, 208, "久坐提醒", lcd.FONT_UNICODE,0xb6ecea, rotate=0)
time_label = M5TextBox(213, 5, "13:10:10", lcd.FONT_UNICODE,0x14d8b3, rotate=0)
meetting_remain_label = M5TextBox(210, 40, "会议提醒", lcd.FONT_UNICODE,0xc00ae5, rotate=0)
rectangle0 = M5Rect(200, 0, 2, 240, 0x8f8f8f, 0x8e8e8e)
rectangle1 = M5Rect(200, 30, 120, 2, 0x8c8c8c, 0x8f8f8f)
rectangle2 = M5Rect(200, 200, 120, 2, 0x8e8e8e, 0x8e8e8e)
meeting_time = M5TextBox(233, 97, "Text", lcd.FONT_DejaVu24,0xe70dde, rotate=0)
read_more = M5TextBox(35, 180, "查看更多", lcd.FONT_UNICODE,0xFFFFFF, rotate=0)
large_time = M5TextBox(60, 80, "13:10", lcd.FONT_DejaVu72,0xFFFFFF, rotate=0)
image0 = M5Img(0, 0, "res/123.jpg", True)

from numbers import Number
import random

without_message = None
meeting_H = None
notice = None
SS = None
H = None
metting_M = None
circle_y = None
real_task_ID = None
M = None
meeting_flag = None
ptr = None
S = None
MM = None
receive = None
queueTask = None
HH = None
period = None
getTime = None

def screen1():
global without_message, meeting_H, notice, SS, H, metting_M, circle_y, real_task_ID, M, meeting_flag, ptr, S, MM, receive, queueTask, HH, period, getTime
time_label.hide()
task1_label.hide()
task2_label.hide()
task3_label.hide()
read_more.hide()
meetting_remain_label.hide()
meeting_time.hide()
rectangle0.hide()
rectangle1.hide()
rectangle2.hide()
task_highlight_mark.hide()
setScreenColor(0x000000)
large_time.show()

def screen2():
global without_message, meeting_H, notice, SS, H, metting_M, circle_y, real_task_ID, M, meeting_flag, ptr, S, MM, receive, queueTask, HH, period, getTime
large_time.hide()
meeting_time.hide()
setScreenColor(0x000000)
time_label.show()
task1_label.show()
task2_label.show()
task3_label.show()
meetting_remain_label.show()
read_more.show()
rectangle0.show()
rectangle1.show()
rectangle2.show()
task_highlight_mark.show()

def display_task():
global without_message, meeting_H, notice, SS, H, metting_M, circle_y, real_task_ID, M, meeting_flag, ptr, S, MM, receive, queueTask, HH, period, getTime
task1_label.setText('暂时无任务')
task2_label.setText('暂时无任务')
task3_label.setText('暂时无任务')
read_more.setText('查看更多')
if len(queueTask) == 1:
    task1_label.setText(str(queueTask['content']))
elif len(queueTask) == 2:
    task1_label.setText(str(queueTask['content']))
    task2_label.setText(str(queueTask['content']))
else:
    task1_label.setText(str(queueTask['content']))
    task2_label.setText(str(queueTask['content']))
    task3_label.setText(str(queueTask['content']))


def fun_office_C_task_(topic_data):
global without_message, meeting_H, notice, SS, H, metting_M, circle_y, real_task_ID, M, meeting_flag, ptr, S, MM, receive, queueTask, HH, period, getTime
print(topic_data)
without_message = False
lcd.fill(0x000000)
screen2()
receive = json.loads(topic_data)
queueTask = receive
if len(queueTask) > 0:
    if 'meeting' in queueTask.keys():
      meeting_H = (queueTask['meeting'])[ : 2]
      metting_M = (queueTask['meeting'])
      meeting_time.show()
      meeting_time.setText(str(queueTask['meeting']))
      meetting_remain_label.setText(str((str('开会') + str(''))))
      receive = ''
    else:
      display_task()
pass
m5mqtt.subscribe(str('office/C/task'), fun_office_C_task_)

def multiBtnCb_AC():
global without_message, meeting_H, notice, SS, H, metting_M, circle_y, real_task_ID, M, meeting_flag, ptr, S, MM, receive, queueTask, HH, period, getTime
without_message = True
screen1()
pass
btn.multiBtnCb(btnA,btnC,multiBtnCb_AC)

def multiBtnCb_AB():
global without_message, meeting_H, notice, SS, H, metting_M, circle_y, real_task_ID, M, meeting_flag, ptr, S, MM, receive, queueTask, HH, period, getTime
without_message = False
screen2()
pass
btn.multiBtnCb(btnA,btnB,multiBtnCb_AB)

def buttonA_pressFor():
global without_message, meeting_H, notice, SS, H, metting_M, circle_y, real_task_ID, M, meeting_flag, ptr, S, MM, receive, queueTask, HH, period, getTime
meeting_H = 0
metting_M = 0
meeting_flag = False
meeting_time.hide()
meetting_remain_label.setText('会议提醒')
rgb.setColorAll(0x000000)
pass
btnA.pressFor(0.8, buttonA_pressFor)

def buttonA_wasPressed():
global without_message, meeting_H, notice, SS, H, metting_M, circle_y, real_task_ID, M, meeting_flag, ptr, S, MM, receive, queueTask, HH, period, getTime
if circle_y < 180:
    circle_y = (circle_y if isinstance(circle_y, Number) else 0) + 55
    if without_message == False:
      task_highlight_mark.setPosition(y=circle_y)
    ptr = (ptr if isinstance(ptr, Number) else 0) + 1
pass
btnA.wasPressed(buttonA_wasPressed)

def buttonC_pressFor():
global without_message, meeting_H, notice, SS, H, metting_M, circle_y, real_task_ID, M, meeting_flag, ptr, S, MM, receive, queueTask, HH, period, getTime
notice = 1 - notice
if notice == 1:
    timerSch.run('long_sit', 10000, 0x00)
    long_sit_remain_label.setColor(0xff6600)
else:
    timerSch.stop('long_sit')
    rgb.setColorAll(0x000000)
    long_sit_remain_label.setColor(0x99ffff)
pass
btnC.pressFor(0.8, buttonC_pressFor)

def buttonC_wasPressed():
global without_message, meeting_H, notice, SS, H, metting_M, circle_y, real_task_ID, M, meeting_flag, ptr, S, MM, receive, queueTask, HH, period, getTime
if circle_y > 70:
    circle_y = (circle_y if isinstance(circle_y, Number) else 0) + -55
    if without_message == False:
      task_highlight_mark.setPosition(y=circle_y)
    ptr = (ptr if isinstance(ptr, Number) else 0) + -1
pass
btnC.wasPressed(buttonC_wasPressed)

def buttonB_pressFor():
global without_message, meeting_H, notice, SS, H, metting_M, circle_y, real_task_ID, M, meeting_flag, ptr, S, MM, receive, queueTask, HH, period, getTime
if ptr == 4:
    pass
else:
    real_task_ID = queueTask.pop(int(ptr - 1))['taskID']
    m5mqtt.publish(str('office/task'),str((json.dumps(({'taskID':str(real_task_ID),'ID':'C'})))))
    display_task()
pass
btnB.pressFor(0.8, buttonB_pressFor)

@timerSch.event('timer1')
def ttimer1():
global without_message, meeting_H, notice, SS, H, metting_M, circle_y, real_task_ID, M, meeting_flag, ptr, S, MM, receive, queueTask, HH, period, getTime
SS = (SS if isinstance(SS, Number) else 0) + 1
if SS > 59:
    SS = 0
    MM = (MM if isinstance(MM, Number) else 0) + 1
if MM > 59:
    MM = 0
    HH = (HH if isinstance(HH, Number) else 0) + 1
if HH > 23:
    HH = 0
if SS < 10:
    S = str(((str('0') + str(SS))))
else:
    S = str(SS)
if MM < 10:
    M = str(((str('0') + str(MM))))
else:
    M = str(MM)
if HH < 10:
    H = str(((str('0') + str(HH))))
else:
    H = str(HH)
pass

@timerSch.event('long_sit')
def tlong_sit():
global without_message, meeting_H, notice, SS, H, metting_M, circle_y, real_task_ID, M, meeting_flag, ptr, S, MM, receive, queueTask, HH, period, getTime
for count in range(5):
    rgb.setColorAll(0xff6600)
    wait_ms(100)
    rgb.setColorAll(0x33cc00)
    wait_ms(100)
    rgb.setColorAll(0xffff00)
    wait_ms(100)
pass


H = 13
M = 10
S = 10
without_message = True
period = 0
meeting_flag = False
ptr = 1
meeting_H = 0
metting_M = 0
queueTask = ''
notice = 0
circle_y = 20
getTime = True
image0.show()
while getTime == True:
rgb.setColorAll(0xff0000)
try:
    req = urequests.request(method='GET', url='http://quan.suning.com/getSysTime.do', headers={})
    HH = int(((json.loads((req.text)))['sysTime1']))
    MM = int(((json.loads((req.text)))['sysTime1']))
    SS = int(((json.loads((req.text)))['sysTime1']))
    getTime = False
except:
    pass
rgb.setColorAll(0x000000)
m5mqtt.start()
timerSch.run('timer1', 1000, 0x00)
image0.hide()
lcd.clear()
while True:
if meeting_H == H and metting_M == M:
    meeting_flag = True
if meeting_flag:
    if (time.ticks_ms()) - period > 1500:
      rgb.setColorAll((random.randint(0, 255) << 16) | (random.randint(0, 255) << 8) | random.randint(0, 255))
      period = time.ticks_ms()
      wait_ms(100)
    else:
      rgb.setColorAll(0x000000)
long_sit_remain_label.show()
if without_message == True:
    large_time.setText(str((str(((str(H) + str(':')))) + str(M))))
else:
    time_label.setText(str((str(((str(H) + str(':')))) + str(((str(((str(M) + str(':')))) + str(S)))))))
wait_ms(2)

https://www.bilibili.com/video/BV1mt4y1X74D/





页: [1]
查看完整版本: 基于UIFlow的会议提醒系统