├── 上位机源代码及可执行文件 ├── sql │ ├── users │ ├── e_logs │ └── logs ├── static │ ├── img │ │ └── logo.png │ ├── css │ │ ├── bootstrap-reboot.min.css │ │ ├── main.css │ │ ├── bootstrap-reboot.css │ │ └── bootstrap-reboot.min.css.map │ └── js │ │ └── popper.min.js ├── 工程所需.txt ├── myserial.py ├── templates │ ├── login.html │ ├── equip.html │ ├── detail.html │ └── index.html ├── index.py └── sqlapi.py ├── Proteus工程 └── Proteus工程 │ ├── .gitignore │ ├── test(2).pdsprj │ ├── Last Loaded test(2).pdsbak │ ├── .vscode │ └── extensions.json │ ├── platformio.ini │ ├── test │ └── README │ ├── lib │ └── README │ ├── include │ └── README │ ├── .travis.yml │ ├── test(2).pdsprj.DESKTOP-ULME7TN.xqh.workspace │ └── src │ └── main.cpp ├── Arduino程序 └── main.cpp └── README.md /上位机源代码及可执行文件/sql/users: -------------------------------------------------------------------------------- 1 | INSERT INTO `users` VALUES (1, 'root', '123456', 3); 2 | -------------------------------------------------------------------------------- /上位机源代码及可执行文件/static/img/logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Justlovesmile/Greenhouse-management-system/HEAD/上位机源代码及可执行文件/static/img/logo.png -------------------------------------------------------------------------------- /Proteus工程/Proteus工程/.gitignore: -------------------------------------------------------------------------------- 1 | .pio 2 | .vscode/.browse.c_cpp.db* 3 | .vscode/c_cpp_properties.json 4 | .vscode/launch.json 5 | .vscode/ipch 6 | -------------------------------------------------------------------------------- /Proteus工程/Proteus工程/test(2).pdsprj: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Justlovesmile/Greenhouse-management-system/HEAD/Proteus工程/Proteus工程/test(2).pdsprj -------------------------------------------------------------------------------- /Proteus工程/Proteus工程/Last Loaded test(2).pdsbak: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Justlovesmile/Greenhouse-management-system/HEAD/Proteus工程/Proteus工程/Last Loaded test(2).pdsbak -------------------------------------------------------------------------------- /Proteus工程/Proteus工程/.vscode/extensions.json: -------------------------------------------------------------------------------- 1 | { 2 | // See http://go.microsoft.com/fwlink/?LinkId=827846 3 | // for the documentation about the extensions.json format 4 | "recommendations": [ 5 | "platformio.platformio-ide" 6 | ] 7 | } 8 | -------------------------------------------------------------------------------- /上位机源代码及可执行文件/工程所需.txt: -------------------------------------------------------------------------------- 1 | Python 3.8 2 | Mysql 8.0.15 3 | 4 | //所需库 5 | Package Version 6 | ----------------- ---------- 7 | Flask 1.1.2 8 | PyMySQL 0.9.3 9 | pyserial 3.4 10 | 11 | //需要修改sqlapi.py内,第6~10行和第24~29行关于数据库信息的字典 12 | //运行 13 | python index.py 14 | //数据库导出到sql文件夹里了 15 | //初始登录账号root,密码123456 -------------------------------------------------------------------------------- /Proteus工程/Proteus工程/platformio.ini: -------------------------------------------------------------------------------- 1 | ; PlatformIO Project Configuration File 2 | ; 3 | ; Build options: build flags, source filter 4 | ; Upload options: custom upload port, speed and extra flags 5 | ; Library options: dependencies, extra library storages 6 | ; Advanced options: extra scripting 7 | ; 8 | ; Please visit documentation for the other options and examples 9 | ; https://docs.platformio.org/page/projectconf.html 10 | 11 | [env:uno] 12 | platform = atmelavr 13 | board = uno 14 | framework = arduino 15 | -------------------------------------------------------------------------------- /Proteus工程/Proteus工程/test/README: -------------------------------------------------------------------------------- 1 | 2 | This directory is intended for PIO Unit Testing and project tests. 3 | 4 | Unit Testing is a software testing method by which individual units of 5 | source code, sets of one or more MCU program modules together with associated 6 | control data, usage procedures, and operating procedures, are tested to 7 | determine whether they are fit for use. Unit testing finds problems early 8 | in the development cycle. 9 | 10 | More information about PIO Unit Testing: 11 | - https://docs.platformio.org/page/plus/unit-testing.html 12 | -------------------------------------------------------------------------------- /Proteus工程/Proteus工程/lib/README: -------------------------------------------------------------------------------- 1 | 2 | This directory is intended for project specific (private) libraries. 3 | PlatformIO will compile them to static libraries and link into executable file. 4 | 5 | The source code of each library should be placed in a an own separate directory 6 | ("lib/your_library_name/[here are source files]"). 7 | 8 | For example, see a structure of the following two libraries `Foo` and `Bar`: 9 | 10 | |--lib 11 | | | 12 | | |--Bar 13 | | | |--docs 14 | | | |--examples 15 | | | |--src 16 | | | |- Bar.c 17 | | | |- Bar.h 18 | | | |- library.json (optional, custom build options, etc) https://docs.platformio.org/page/librarymanager/config.html 19 | | | 20 | | |--Foo 21 | | | |- Foo.c 22 | | | |- Foo.h 23 | | | 24 | | |- README --> THIS FILE 25 | | 26 | |- platformio.ini 27 | |--src 28 | |- main.c 29 | 30 | and a contents of `src/main.c`: 31 | ``` 32 | #include 33 | #include 34 | 35 | int main (void) 36 | { 37 | ... 38 | } 39 | 40 | ``` 41 | 42 | PlatformIO Library Dependency Finder will find automatically dependent 43 | libraries scanning project source files. 44 | 45 | More information about PlatformIO Library Dependency Finder 46 | - https://docs.platformio.org/page/librarymanager/ldf.html 47 | -------------------------------------------------------------------------------- /Proteus工程/Proteus工程/include/README: -------------------------------------------------------------------------------- 1 | 2 | This directory is intended for project header files. 3 | 4 | A header file is a file containing C declarations and macro definitions 5 | to be shared between several project source files. You request the use of a 6 | header file in your project source file (C, C++, etc) located in `src` folder 7 | by including it, with the C preprocessing directive `#include'. 8 | 9 | ```src/main.c 10 | 11 | #include "header.h" 12 | 13 | int main (void) 14 | { 15 | ... 16 | } 17 | ``` 18 | 19 | Including a header file produces the same results as copying the header file 20 | into each source file that needs it. Such copying would be time-consuming 21 | and error-prone. With a header file, the related declarations appear 22 | in only one place. If they need to be changed, they can be changed in one 23 | place, and programs that include the header file will automatically use the 24 | new version when next recompiled. The header file eliminates the labor of 25 | finding and changing all the copies as well as the risk that a failure to 26 | find one copy will result in inconsistencies within a program. 27 | 28 | In C, the usual convention is to give header files names that end with `.h'. 29 | It is most portable to use only letters, digits, dashes, and underscores in 30 | header file names, and at most one dot. 31 | 32 | Read more about using header files in official GCC documentation: 33 | 34 | * Include Syntax 35 | * Include Operation 36 | * Once-Only Headers 37 | * Computed Includes 38 | 39 | https://gcc.gnu.org/onlinedocs/cpp/Header-Files.html 40 | -------------------------------------------------------------------------------- /Proteus工程/Proteus工程/.travis.yml: -------------------------------------------------------------------------------- 1 | # Continuous Integration (CI) is the practice, in software 2 | # engineering, of merging all developer working copies with a shared mainline 3 | # several times a day < https://docs.platformio.org/page/ci/index.html > 4 | # 5 | # Documentation: 6 | # 7 | # * Travis CI Embedded Builds with PlatformIO 8 | # < https://docs.travis-ci.com/user/integration/platformio/ > 9 | # 10 | # * PlatformIO integration with Travis CI 11 | # < https://docs.platformio.org/page/ci/travis.html > 12 | # 13 | # * User Guide for `platformio ci` command 14 | # < https://docs.platformio.org/page/userguide/cmd_ci.html > 15 | # 16 | # 17 | # Please choose one of the following templates (proposed below) and uncomment 18 | # it (remove "# " before each line) or use own configuration according to the 19 | # Travis CI documentation (see above). 20 | # 21 | 22 | 23 | # 24 | # Template #1: General project. Test it using existing `platformio.ini`. 25 | # 26 | 27 | # language: python 28 | # python: 29 | # - "2.7" 30 | # 31 | # sudo: false 32 | # cache: 33 | # directories: 34 | # - "~/.platformio" 35 | # 36 | # install: 37 | # - pip install -U platformio 38 | # - platformio update 39 | # 40 | # script: 41 | # - platformio run 42 | 43 | 44 | # 45 | # Template #2: The project is intended to be used as a library with examples. 46 | # 47 | 48 | # language: python 49 | # python: 50 | # - "2.7" 51 | # 52 | # sudo: false 53 | # cache: 54 | # directories: 55 | # - "~/.platformio" 56 | # 57 | # env: 58 | # - PLATFORMIO_CI_SRC=path/to/test/file.c 59 | # - PLATFORMIO_CI_SRC=examples/file.ino 60 | # - PLATFORMIO_CI_SRC=path/to/test/directory 61 | # 62 | # install: 63 | # - pip install -U platformio 64 | # - platformio update 65 | # 66 | # script: 67 | # - platformio ci --lib="." --board=ID_1 --board=ID_2 --board=ID_N 68 | -------------------------------------------------------------------------------- /上位机源代码及可执行文件/myserial.py: -------------------------------------------------------------------------------- 1 | import serial #导入模块 2 | import os 3 | import threading 4 | import serial.tools.list_ports 5 | import sqlapi 6 | import time 7 | 8 | BOOL=True #读取标志位 9 | 10 | #读数据 11 | def ReadData(ser): 12 | info="" 13 | i=0 14 | global BOOL 15 | # 循环接收数据,此为死循环,可用线程实现 16 | while BOOL: 17 | if ser.in_waiting: 18 | data = ser.read(ser.in_waiting).decode("gbk") 19 | if(data=="T"): 20 | if(i==1): 21 | i=0 22 | info=info.split(',') 23 | print(info) 24 | sqlapi.insert_log(str(int(time.time())),info[0].split(":")[1],info[1].split(":")[1],info[2].split(":")[1],info[3].split(":")[1]) 25 | sqlapi.insert_elog(str(int(time.time())),info[4],info[5],info[6],info[7],info[8]) 26 | info = "" 27 | i=i+1 28 | info = info +data 29 | 30 | #打开串口 31 | # 端口,Windows上的 COM2 32 | # 波特率,9600 33 | # 超时设置,None:永远等待操作,0为立即返回请求结果,其他值为等待超时时间(单位为秒) 34 | def DOpenPort(portx,bps,timeout): 35 | ret=False 36 | try: 37 | # 打开串口,并得到串口对象 38 | ser = serial.Serial(portx, bps, timeout=timeout) 39 | #print(ser) 40 | #判断是否打开成功 41 | if(ser.is_open): 42 | ret=True 43 | threading.Thread(target=ReadData, args=(ser,)).start() 44 | #ReadData(ser) 45 | except Exception as e: 46 | pass 47 | print("---异常---:", e) 48 | else: 49 | return ser,ret 50 | 51 | #关闭串口 52 | def DClosePort(ser): 53 | global BOOL 54 | BOOL=False 55 | ser.close() 56 | 57 | #写数据 58 | def DWritePort(ser,text): 59 | result = ser.write(text.encode("gbk")) # 写数据 60 | return result 61 | 62 | def main(): 63 | global BOOL 64 | BOOL=True 65 | port_list = list(serial.tools.list_ports.comports()) 66 | if len(port_list)==0 : 67 | print("not find serial port!") 68 | return; 69 | ser,rect=DOpenPort("COM2",9600,None) 70 | if(rect==True): 71 | print("Runing in COM2") 72 | return ser 73 | 74 | if __name__=="__main__": 75 | print(main()) 76 | -------------------------------------------------------------------------------- /上位机源代码及可执行文件/static/css/bootstrap-reboot.min.css: -------------------------------------------------------------------------------- 1 | /*! 2 | * Bootstrap Reboot v4.5.0 (https://getbootstrap.com/) 3 | * Copyright 2011-2020 The Bootstrap Authors 4 | * Copyright 2011-2020 Twitter, Inc. 5 | * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) 6 | * Forked from Normalize.css, licensed MIT (https://github.com/necolas/normalize.css/blob/master/LICENSE.md) 7 | */*,::after,::before{box-sizing:border-box}html{font-family:sans-serif;line-height:1.15;-webkit-text-size-adjust:100%;-webkit-tap-highlight-color:transparent}article,aside,figcaption,figure,footer,header,hgroup,main,nav,section{display:block}body{margin:0;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,"Noto Sans",sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji";font-size:1rem;font-weight:400;line-height:1.5;color:#212529;text-align:left;background-color:#fff}[tabindex="-1"]:focus:not(:focus-visible){outline:0!important}hr{box-sizing:content-box;height:0;overflow:visible}h1,h2,h3,h4,h5,h6{margin-top:0;margin-bottom:.5rem}p{margin-top:0;margin-bottom:1rem}abbr[data-original-title],abbr[title]{text-decoration:underline;-webkit-text-decoration:underline dotted;text-decoration:underline dotted;cursor:help;border-bottom:0;-webkit-text-decoration-skip-ink:none;text-decoration-skip-ink:none}address{margin-bottom:1rem;font-style:normal;line-height:inherit}dl,ol,ul{margin-top:0;margin-bottom:1rem}ol ol,ol ul,ul ol,ul ul{margin-bottom:0}dt{font-weight:700}dd{margin-bottom:.5rem;margin-left:0}blockquote{margin:0 0 1rem}b,strong{font-weight:bolder}small{font-size:80%}sub,sup{position:relative;font-size:75%;line-height:0;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}a{color:#007bff;text-decoration:none;background-color:transparent}a:hover{color:#0056b3;text-decoration:underline}a:not([href]){color:inherit;text-decoration:none}a:not([href]):hover{color:inherit;text-decoration:none}code,kbd,pre,samp{font-family:SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace;font-size:1em}pre{margin-top:0;margin-bottom:1rem;overflow:auto;-ms-overflow-style:scrollbar}figure{margin:0 0 1rem}img{vertical-align:middle;border-style:none}svg{overflow:hidden;vertical-align:middle}table{border-collapse:collapse}caption{padding-top:.75rem;padding-bottom:.75rem;color:#6c757d;text-align:left;caption-side:bottom}th{text-align:inherit}label{display:inline-block;margin-bottom:.5rem}button{border-radius:0}button:focus{outline:1px dotted;outline:5px auto -webkit-focus-ring-color}button,input,optgroup,select,textarea{margin:0;font-family:inherit;font-size:inherit;line-height:inherit}button,input{overflow:visible}button,select{text-transform:none}[role=button]{cursor:pointer}select{word-wrap:normal}[type=button],[type=reset],[type=submit],button{-webkit-appearance:button}[type=button]:not(:disabled),[type=reset]:not(:disabled),[type=submit]:not(:disabled),button:not(:disabled){cursor:pointer}[type=button]::-moz-focus-inner,[type=reset]::-moz-focus-inner,[type=submit]::-moz-focus-inner,button::-moz-focus-inner{padding:0;border-style:none}input[type=checkbox],input[type=radio]{box-sizing:border-box;padding:0}textarea{overflow:auto;resize:vertical}fieldset{min-width:0;padding:0;margin:0;border:0}legend{display:block;width:100%;max-width:100%;padding:0;margin-bottom:.5rem;font-size:1.5rem;line-height:inherit;color:inherit;white-space:normal}progress{vertical-align:baseline}[type=number]::-webkit-inner-spin-button,[type=number]::-webkit-outer-spin-button{height:auto}[type=search]{outline-offset:-2px;-webkit-appearance:none}[type=search]::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{font:inherit;-webkit-appearance:button}output{display:inline-block}summary{display:list-item;cursor:pointer}template{display:none}[hidden]{display:none!important} 8 | /*# sourceMappingURL=bootstrap-reboot.min.css.map */ -------------------------------------------------------------------------------- /上位机源代码及可执行文件/templates/login.html: -------------------------------------------------------------------------------- 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 | 40 |
41 |
42 | 82 | 132 | 133 | 134 | -------------------------------------------------------------------------------- /上位机源代码及可执行文件/static/css/main.css: -------------------------------------------------------------------------------- 1 | body{ 2 | overflow: auto; 3 | background-color: #ececec; 4 | } 5 | a:link { 6 | text-decoration: none; 7 | } 8 | .site-header { 9 | width: 100%; 10 | height: 75px; 11 | -webkit-transition: all .4s ease; 12 | transition: all .4s ease; 13 | position: fixed; 14 | z-index: 9999; 15 | top: 0; 16 | left: 0; 17 | background: rgba(255,255,255,.95); 18 | box-shadow: 0 1px 40px -8px rgba(0,0,0,.5); 19 | } 20 | .site-top { 21 | width: 100%; 22 | display: block; 23 | margin: 0 auto; 24 | padding: 0 20px; 25 | } 26 | .site-top ul { 27 | margin: 0; 28 | padding: 0; 29 | list-style: none; 30 | display: inline-block; 31 | } 32 | .site-top ul li { 33 | float: left; 34 | margin: 0 13px; 35 | position: relative; 36 | } 37 | .site-top ul li a { 38 | padding: 10px 0; 39 | display: inline-block; 40 | color: #666; 41 | } 42 | .site-top .lower-cantiner { 43 | position: absolute; 44 | left: 50%; 45 | pointer-events: none; 46 | } 47 | .site-top .lower { 48 | display: inline-block; 49 | margin: 15px 0 0 10px; 50 | font-size: 16px; 51 | position: relative; 52 | left: -50%; 53 | pointer-events: auto !important; 54 | } 55 | .site-top .lower nav { 56 | display: block !important; 57 | position: relative; 58 | float: right; 59 | display: none; 60 | animation: searchbox .2s; 61 | } 62 | .site-branding { 63 | float: left; 64 | position: relative; 65 | height: 75px; 66 | line-height: 75px; 67 | margin-left: -6px; 68 | } 69 | .site-title { 70 | margin: 0; 71 | } 72 | .logolink.nav .navbrand { 73 | font-size: 25px; 74 | border-radius: 9px; 75 | padding-bottom: 2px; 76 | padding-top: 5px; 77 | } 78 | .site-title img { 79 | height:40px; 80 | opacity:.75; 81 | -webkit-transition:color .2s ease-out,border .2s ease-out,opacity .2s ease-out; 82 | -moz-transition:color .2s ease-out,border .2s ease-out,opacity .2s ease-out; 83 | transition:color .2s ease-out,border .2s ease-out,opacity .2s ease-out 84 | } 85 | .site-title a:hover img{ 86 | opacity:1 87 | } 88 | .site-top a:hover .navbrandtitle{ 89 | background-color:orange; 90 | color:#fff; 91 | } 92 | .logolink .navbrandtitle{ 93 | background-color:rgba(255,255,255,.5); 94 | font-size: 25px; 95 | border-radius:5px; 96 | color:#464646; 97 | height:auto; 98 | line-height:25px; 99 | margin-right:0; 100 | padding-bottom:0; 101 | padding-top:1px; 102 | text-size-adjust:100%; 103 | width:auto 104 | } 105 | .datacard { 106 | background-color: white; 107 | border-radius: 2px; 108 | } 109 | .overview-gap { 110 | clear: both; 111 | background-color: #ececec; 112 | height: 18px; 113 | } 114 | .overview-card-title-container { 115 | padding: 14px 15px 0; 116 | } 117 | .overview-card-title { 118 | font-size: 14px; 119 | color: #323437; 120 | font-weight: 700; 121 | } 122 | div.table-list { 123 | padding-top: 10px; 124 | padding-right: 1px; 125 | border: 1px solid #dedede; 126 | border-bottom: 0; 127 | } 128 | div.table-list table.list { 129 | border-collapse: collapse; 130 | width: 100%; 131 | font-size: 12px; 132 | } 133 | .overview-detail div.left{ 134 | float: left; 135 | width: 49%; 136 | } 137 | .overview-detail div.right{ 138 | float: right; 139 | width: 49%; 140 | } 141 | .table-detail{ 142 | display: block; 143 | } 144 | div.btw, div.fold { 145 | height: 30px; 146 | border-left: 1px solid #dedede; 147 | border-right: 1px solid #dedede; 148 | border-bottom: 1px solid #dedede; 149 | } 150 | div.table-list table.list tr td.normal { 151 | padding-left: 20px; 152 | width: 85px; 153 | text-align: left; 154 | color: #323437; 155 | } 156 | div.table-list table.list tr.title { 157 | border-bottom: none; 158 | height: 50px; 159 | line-height: 50px; 160 | } 161 | div.table-list table.list tr td { 162 | border-left: 1px solid #f0f0f0; 163 | padding: 6px 20px 6px 5px; 164 | height: 17px; 165 | line-height: 17px; 166 | white-space: nowrap; 167 | text-align: center; 168 | } 169 | div.table-list table.list tr.highlight td { 170 | color: #111314; 171 | font-size: 16px; 172 | font-weight: bolder; 173 | } 174 | div.table-grid div.table-grid-item { 175 | margin-top: 1px; 176 | background-color: #fff; 177 | height: 392px; 178 | } 179 | .table-grid .table-grid-item { 180 | border-radius: 2px; 181 | margin-bottom: 18px; 182 | } 183 | .table-grid .table-grid-item .title { 184 | padding: 20px 20px 10px; 185 | } 186 | .clearfix { 187 | display: block; 188 | } 189 | div.table-grid div.table-grid-item div.title div.l { 190 | color: #323437; 191 | font-weight: 700; 192 | font-size: 14px; 193 | } 194 | .l { 195 | float: left; 196 | } 197 | .footer { 198 | margin-top: 20px; 199 | padding: 20px 0 24px; 200 | text-align: center; 201 | } 202 | .overview-do button{ 203 | margin: 20px 10px 20px; 204 | } 205 | #chartTitle{ 206 | margin: 10px; 207 | text-align: left; 208 | } -------------------------------------------------------------------------------- /上位机源代码及可执行文件/index.py: -------------------------------------------------------------------------------- 1 | from flask import Flask, render_template, request,session 2 | import pymysql 3 | import time 4 | from datetime import timedelta,datetime 5 | import os 6 | import json 7 | import myserial 8 | import sqlapi 9 | 10 | app = Flask(__name__) 11 | #设置session参数 12 | app.config['SECRET_KEY']=os.urandom(24) #设置为24位的字符,每次运行服务器都是不同的,所以服务器启动一次上次的session就清除。 13 | app.config['PERMANENT_SESSION_LIFETIME']=timedelta(days=7) #设置session的保存时间。 14 | ser='' 15 | 16 | @app.route('/',methods=['GET','POST']) 17 | def index(): 18 | #print("Welcome") 19 | return render_template('index.html') 20 | 21 | #检查seesion中是否保存用户名,若有,则说明用户已经登陆,返回用户名 22 | @app.route('/check_session/',methods=['GET','POST']) 23 | def check_session(): 24 | data={} 25 | ans=sqlapi.select_newelogs(1) 26 | #print(ans) 27 | try: 28 | if session.get('nickname'): 29 | data["nickname"]=session['nickname'] 30 | data["session"]="true" 31 | if session.get('ser'): 32 | data["ser"]=session['ser'] 33 | else: 34 | data["ser"]="false" 35 | data["model"]=ans[0][2] 36 | data["et"]=ans[0][3] 37 | data["eh"]=ans[0][4] 38 | data["el"]=ans[0][5] 39 | data["ep"]=ans[0][6] 40 | return json.dumps(data) 41 | else: 42 | data["session"]="false" 43 | return json.dumps(data) 44 | except: 45 | print("串口未运行!请点击开始监测") 46 | 47 | @app.route('/getdata/',methods=['GET','POST']) 48 | def getdata(): 49 | index=request.form.get('Index') 50 | try: 51 | ans=dealdata(sqlapi.select_newlogs(index)) 52 | #print(ans) 53 | except Exception as e: 54 | print("Get data 失败!") 55 | #print(e) 56 | else: 57 | return json.dumps(ans) 58 | 59 | @app.route('/getjson/',methods=['GET','POST']) 60 | def getjson(): 61 | H=int(request.form.get('Hour')) 62 | beforetime=time.strptime((datetime.now()-timedelta(hours=H)).strftime("%Y-%m-%d %H:%M:%S"),"%Y-%m-%d %H:%M:%S") 63 | timestamp=int(time.mktime(beforetime)) 64 | try: 65 | ans=dealdata(sqlapi.select_logs(timestamp)) 66 | #print(ans) 67 | except Exception as e: 68 | print("Get Json 失败!") 69 | #print(e) 70 | else: 71 | return json.dumps(ans) 72 | 73 | @app.route('/getejson/',methods=['GET','POST']) 74 | def getejson(): 75 | H=int(request.form.get('Hour')) 76 | beforetime=time.strptime((datetime.now()-timedelta(hours=H)).strftime("%Y-%m-%d %H:%M:%S"),"%Y-%m-%d %H:%M:%S") 77 | timestamp=int(time.mktime(beforetime)) 78 | try: 79 | ans=dealedata(sqlapi.select_elogs(timestamp)) 80 | #print(ans) 81 | except Exception as e: 82 | print("Get Json 失败!") 83 | #print(e) 84 | else: 85 | return json.dumps(ans) 86 | 87 | @app.route('/equip/',methods=['GET','POST']) 88 | def equip(): 89 | return render_template('equip.html') 90 | 91 | @app.route('/detail/',methods=['GET','POST']) 92 | def detail(): 93 | return render_template('detail.html') 94 | 95 | @app.route('/login/',methods=['GET','POST']) 96 | def login(): 97 | return render_template('login.html') 98 | 99 | @app.route('/login_check/',methods=['GET','POST']) 100 | def login_check(): 101 | nickname=request.form.get('nickname') 102 | password=request.form.get('password') 103 | try: 104 | ans=sqlapi.select_users(nickname,password) 105 | except Exception as e: 106 | print("登录失败!") 107 | #print(e) 108 | else: 109 | if(ans==True): 110 | session['nickname']=nickname 111 | return json.dumps(ans) 112 | 113 | #注销登陆账号时清除session['nickname'] 114 | @app.route('/clear_session/',methods=['GET','POST']) 115 | def clear_session(): 116 | if session.get('nickname'): 117 | session.pop('nickname') 118 | return json.dumps(True) 119 | 120 | @app.route('/stop_serial/',methods=['GET','POST']) 121 | def stop_serial(): 122 | print("停止监测") 123 | myserial.DClosePort(ser) 124 | session["ser"]='false' 125 | return json.dumps(True) 126 | 127 | @app.route('/begin_serial/',methods=['GET','POST']) 128 | def begin_serial(): 129 | print("开始监测") 130 | global ser 131 | ser=myserial.main() 132 | session['ser']='true' 133 | return json.dumps(True) 134 | 135 | @app.route('/write_serial/',methods=["GET","POST"]) 136 | def turnup_serial(): 137 | text=request.form.get('text') 138 | global ser 139 | myserial.DWritePort(ser,text) 140 | return json.dumps(True) 141 | 142 | def dealdata(data): 143 | ans={ 144 | "time":[], 145 | "temperature":[], 146 | "humidity":[], 147 | "light":[], 148 | "pressure":[] 149 | } 150 | for eachline in data: 151 | ans["time"].append(time.strftime("%Y-%m-%d %H:%M:%S",time.localtime(int(eachline[1])))) 152 | ans["temperature"].append(eachline[2]) 153 | ans["humidity"].append(eachline[3]) 154 | ans["light"].append(eachline[4]) 155 | ans["pressure"].append(eachline[5]) 156 | return ans 157 | 158 | def dealedata(data): 159 | ans={ 160 | "time":[], 161 | "model":[], 162 | "temperature":[], 163 | "humidity":[], 164 | "light":[], 165 | "pressure":[] 166 | } 167 | for eachline in data: 168 | ans["time"].append(time.strftime("%Y-%m-%d %H:%M:%S",time.localtime(int(eachline[1])))) 169 | ans["model"].append(eachline[2]) 170 | ans["temperature"].append(eachline[3]) 171 | ans["humidity"].append(eachline[4]) 172 | ans["light"].append(eachline[5]) 173 | ans["pressure"].append(eachline[6]) 174 | return ans 175 | 176 | if __name__ == "__main__": 177 | sqlapi.check() 178 | app.run(use_reloader=False) -------------------------------------------------------------------------------- /Proteus工程/Proteus工程/test(2).pdsprj.DESKTOP-ULME7TN.xqh.workspace: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 2c00000000000000010000000083ffff0083ffffffffffffffffffff10fbffffb50000007801000073040000 5 | 6 | 7 | 8 | 9 | 10 | 11 | 1257 12 | No 13 | 100 14 | 120 15 | 100 16 | 17 | 18 | 19 | 20 | 87 21 | No 22 | Yes 23 | 87 24 | Yes 25 | No 26 | No 27 | Yes 28 | 0 29 | 87 30 | 100 31 | 87 32 | 0 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 2 44 | Yes 45 | 2 46 | Yes 47 | Yes 48 | 00000000 49 | 50 | 51 | 52 | 53 | 2 54 | Yes 55 | 2 56 | Yes 57 | Yes 58 | 00000000 59 | 60 | 61 | 62 | 63 | 2 64 | Yes 65 | 2 66 | Yes 67 | Yes 68 | 00000000 69 | 70 | 71 | 72 | 73 | 2 74 | Yes 75 | 2 76 | Yes 77 | Yes 78 | 00000000 79 | 80 | 81 | 82 | 83 | 2 84 | Yes 85 | 2 86 | Yes 87 | Yes 88 | 00000100 89 | 90 | 91 | 92 | 93 | 2 94 | Yes 95 | 2 96 | Yes 97 | Yes 98 | 00000020 99 | 100 | 101 | 102 | 103 | No 104 | Yes 105 | No 106 | No 107 | Yes 108 | No 109 | 0 110 | 111 | 112 | 113 | 114 | 505 115 | No 116 | Yes 117 | 505 118 | Yes 119 | Yes 120 | No 121 | No 122 | No 123 | 0 124 | 505 125 | 100 126 | 0 127 | 128 | 129 | 130 | 131 | 2 132 | Yes 133 | 2 134 | Yes 135 | Yes 136 | 00000000 137 | 138 | 139 | 140 | 141 | 142 | -------------------------------------------------------------------------------- /上位机源代码及可执行文件/static/css/bootstrap-reboot.css: -------------------------------------------------------------------------------- 1 | /*! 2 | * Bootstrap Reboot v4.5.0 (https://getbootstrap.com/) 3 | * Copyright 2011-2020 The Bootstrap Authors 4 | * Copyright 2011-2020 Twitter, Inc. 5 | * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) 6 | * Forked from Normalize.css, licensed MIT (https://github.com/necolas/normalize.css/blob/master/LICENSE.md) 7 | */ 8 | *, 9 | *::before, 10 | *::after { 11 | box-sizing: border-box; 12 | } 13 | 14 | html { 15 | font-family: sans-serif; 16 | line-height: 1.15; 17 | -webkit-text-size-adjust: 100%; 18 | -webkit-tap-highlight-color: rgba(0, 0, 0, 0); 19 | } 20 | 21 | article, aside, figcaption, figure, footer, header, hgroup, main, nav, section { 22 | display: block; 23 | } 24 | 25 | body { 26 | margin: 0; 27 | font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, "Noto Sans", sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji"; 28 | font-size: 1rem; 29 | font-weight: 400; 30 | line-height: 1.5; 31 | color: #212529; 32 | text-align: left; 33 | background-color: #fff; 34 | } 35 | 36 | [tabindex="-1"]:focus:not(:focus-visible) { 37 | outline: 0 !important; 38 | } 39 | 40 | hr { 41 | box-sizing: content-box; 42 | height: 0; 43 | overflow: visible; 44 | } 45 | 46 | h1, h2, h3, h4, h5, h6 { 47 | margin-top: 0; 48 | margin-bottom: 0.5rem; 49 | } 50 | 51 | p { 52 | margin-top: 0; 53 | margin-bottom: 1rem; 54 | } 55 | 56 | abbr[title], 57 | abbr[data-original-title] { 58 | text-decoration: underline; 59 | -webkit-text-decoration: underline dotted; 60 | text-decoration: underline dotted; 61 | cursor: help; 62 | border-bottom: 0; 63 | -webkit-text-decoration-skip-ink: none; 64 | text-decoration-skip-ink: none; 65 | } 66 | 67 | address { 68 | margin-bottom: 1rem; 69 | font-style: normal; 70 | line-height: inherit; 71 | } 72 | 73 | ol, 74 | ul, 75 | dl { 76 | margin-top: 0; 77 | margin-bottom: 1rem; 78 | } 79 | 80 | ol ol, 81 | ul ul, 82 | ol ul, 83 | ul ol { 84 | margin-bottom: 0; 85 | } 86 | 87 | dt { 88 | font-weight: 700; 89 | } 90 | 91 | dd { 92 | margin-bottom: .5rem; 93 | margin-left: 0; 94 | } 95 | 96 | blockquote { 97 | margin: 0 0 1rem; 98 | } 99 | 100 | b, 101 | strong { 102 | font-weight: bolder; 103 | } 104 | 105 | small { 106 | font-size: 80%; 107 | } 108 | 109 | sub, 110 | sup { 111 | position: relative; 112 | font-size: 75%; 113 | line-height: 0; 114 | vertical-align: baseline; 115 | } 116 | 117 | sub { 118 | bottom: -.25em; 119 | } 120 | 121 | sup { 122 | top: -.5em; 123 | } 124 | 125 | a { 126 | color: #007bff; 127 | text-decoration: none; 128 | background-color: transparent; 129 | } 130 | 131 | a:hover { 132 | color: #0056b3; 133 | text-decoration: underline; 134 | } 135 | 136 | a:not([href]) { 137 | color: inherit; 138 | text-decoration: none; 139 | } 140 | 141 | a:not([href]):hover { 142 | color: inherit; 143 | text-decoration: none; 144 | } 145 | 146 | pre, 147 | code, 148 | kbd, 149 | samp { 150 | font-family: SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace; 151 | font-size: 1em; 152 | } 153 | 154 | pre { 155 | margin-top: 0; 156 | margin-bottom: 1rem; 157 | overflow: auto; 158 | -ms-overflow-style: scrollbar; 159 | } 160 | 161 | figure { 162 | margin: 0 0 1rem; 163 | } 164 | 165 | img { 166 | vertical-align: middle; 167 | border-style: none; 168 | } 169 | 170 | svg { 171 | overflow: hidden; 172 | vertical-align: middle; 173 | } 174 | 175 | table { 176 | border-collapse: collapse; 177 | } 178 | 179 | caption { 180 | padding-top: 0.75rem; 181 | padding-bottom: 0.75rem; 182 | color: #6c757d; 183 | text-align: left; 184 | caption-side: bottom; 185 | } 186 | 187 | th { 188 | text-align: inherit; 189 | } 190 | 191 | label { 192 | display: inline-block; 193 | margin-bottom: 0.5rem; 194 | } 195 | 196 | button { 197 | border-radius: 0; 198 | } 199 | 200 | button:focus { 201 | outline: 1px dotted; 202 | outline: 5px auto -webkit-focus-ring-color; 203 | } 204 | 205 | input, 206 | button, 207 | select, 208 | optgroup, 209 | textarea { 210 | margin: 0; 211 | font-family: inherit; 212 | font-size: inherit; 213 | line-height: inherit; 214 | } 215 | 216 | button, 217 | input { 218 | overflow: visible; 219 | } 220 | 221 | button, 222 | select { 223 | text-transform: none; 224 | } 225 | 226 | [role="button"] { 227 | cursor: pointer; 228 | } 229 | 230 | select { 231 | word-wrap: normal; 232 | } 233 | 234 | button, 235 | [type="button"], 236 | [type="reset"], 237 | [type="submit"] { 238 | -webkit-appearance: button; 239 | } 240 | 241 | button:not(:disabled), 242 | [type="button"]:not(:disabled), 243 | [type="reset"]:not(:disabled), 244 | [type="submit"]:not(:disabled) { 245 | cursor: pointer; 246 | } 247 | 248 | button::-moz-focus-inner, 249 | [type="button"]::-moz-focus-inner, 250 | [type="reset"]::-moz-focus-inner, 251 | [type="submit"]::-moz-focus-inner { 252 | padding: 0; 253 | border-style: none; 254 | } 255 | 256 | input[type="radio"], 257 | input[type="checkbox"] { 258 | box-sizing: border-box; 259 | padding: 0; 260 | } 261 | 262 | textarea { 263 | overflow: auto; 264 | resize: vertical; 265 | } 266 | 267 | fieldset { 268 | min-width: 0; 269 | padding: 0; 270 | margin: 0; 271 | border: 0; 272 | } 273 | 274 | legend { 275 | display: block; 276 | width: 100%; 277 | max-width: 100%; 278 | padding: 0; 279 | margin-bottom: .5rem; 280 | font-size: 1.5rem; 281 | line-height: inherit; 282 | color: inherit; 283 | white-space: normal; 284 | } 285 | 286 | progress { 287 | vertical-align: baseline; 288 | } 289 | 290 | [type="number"]::-webkit-inner-spin-button, 291 | [type="number"]::-webkit-outer-spin-button { 292 | height: auto; 293 | } 294 | 295 | [type="search"] { 296 | outline-offset: -2px; 297 | -webkit-appearance: none; 298 | } 299 | 300 | [type="search"]::-webkit-search-decoration { 301 | -webkit-appearance: none; 302 | } 303 | 304 | ::-webkit-file-upload-button { 305 | font: inherit; 306 | -webkit-appearance: button; 307 | } 308 | 309 | output { 310 | display: inline-block; 311 | } 312 | 313 | summary { 314 | display: list-item; 315 | cursor: pointer; 316 | } 317 | 318 | template { 319 | display: none; 320 | } 321 | 322 | [hidden] { 323 | display: none !important; 324 | } 325 | /*# sourceMappingURL=bootstrap-reboot.css.map */ -------------------------------------------------------------------------------- /Arduino程序/main.cpp: -------------------------------------------------------------------------------- 1 | #include 2 | #include 3 | #include 4 | #include 5 | #include 6 | #include 7 | 8 | String comdata = ""; 9 | 10 | #define DHTPIN 2 //设定2号引脚为数据输入 11 | #define DHTTYPE DHT11 // DHT 11 12 | DHT dht(DHTPIN, DHTTYPE); 13 | 14 | const int LDR_PIN = A0; //设定电压输出位A0口 15 | float var; //暂存电压变量 16 | bool MYBOOL=true; //手动自动,默认自动 17 | 18 | Adafruit_BMP085 bmp; 19 | 20 | 21 | int led_pin[] = {8, 9, 10, 11, 12, 13, 7, 6}; //LED灯的连接的数据引脚 22 | int led_cnt = 8; //led灯的数量 23 | 24 | 25 | TaskHandle_t StartTask_Handler; 26 | TaskHandle_t ZongTask_Handler; 27 | 28 | void start_task(void* pvParameters); 29 | void zong_task(void* pvParameters); 30 | 31 | void setup() { 32 | dht.begin(); 33 | 34 | if (!bmp.begin()) { 35 | Serial.println("Could not find a valid BMP085 sensor, check wiring!"); 36 | while (1) {} 37 | } 38 | //LED 39 | for (int i = 0; i < led_cnt; i++) 40 | { 41 | pinMode(led_pin[i], OUTPUT); 42 | digitalWrite(led_pin[i], LOW); 43 | } 44 | Serial.begin(9600); 45 | xTaskCreate( // 创建开始任务 46 | start_task, 47 | "start_task", 48 | 128, 49 | NULL, 50 | 1, 51 | &StartTask_Handler); 52 | vTaskStartScheduler(); // 开启任务调度 53 | } 54 | 55 | void loop() { 56 | } 57 | 58 | 59 | void start_task(void* pvParameters) { 60 | taskENTER_CRITICAL(); // 进入临界区 61 | xTaskCreate( // 创建总任务 62 | zong_task, 63 | "zong_task", 64 | 128, 65 | NULL, 66 | 2, 67 | &ZongTask_Handler); 68 | 69 | vTaskDelete(StartTask_Handler); //删除start_task 70 | taskEXIT_CRITICAL(); // 退出临界区 71 | } 72 | 73 | 74 | 75 | void zong_task(void* pvParameters) { 76 | for(;;) { 77 | delay(1000); 78 | while (Serial.available()) 79 | { 80 | comdata += char(Serial.read()); 81 | if(comdata == "1" && !MYBOOL) //打开风机 82 | { 83 | digitalWrite(led_pin[4], HIGH); 84 | } 85 | else if (comdata == "2" && !MYBOOL) //关闭风机 86 | { 87 | digitalWrite(led_pin[4], LOW); 88 | } 89 | 90 | else if(comdata == "3" && !MYBOOL) //打开除湿 91 | { 92 | digitalWrite(led_pin[5], HIGH); 93 | 94 | } 95 | else if (comdata == "4" && !MYBOOL) //关闭除湿 96 | { 97 | digitalWrite(led_pin[5], LOW); 98 | } 99 | 100 | else if(comdata == "5" && !MYBOOL) //打开灯光 101 | { 102 | digitalWrite(led_pin[6], HIGH); 103 | } 104 | else if (comdata == "6" && !MYBOOL) //关闭灯光 105 | { 106 | digitalWrite(led_pin[6], LOW); 107 | } 108 | 109 | else if(comdata == "7" && !MYBOOL) //打开气泵 110 | { 111 | digitalWrite(led_pin[7], HIGH); 112 | } 113 | else if (comdata == "8" && !MYBOOL) //关闭气泵 114 | { 115 | digitalWrite(led_pin[7], LOW); 116 | } 117 | else if(comdata == "9" && MYBOOL) //关闭自动 118 | { 119 | MYBOOL=false; 120 | } 121 | else if(comdata == "0" && !MYBOOL) //打开自动 122 | { 123 | MYBOOL=true; 124 | } 125 | 126 | comdata = ""; 127 | } 128 | // DHT11每隔3s更新一次数据 129 | delay(3000); 130 | // 读取温湿度 131 | float h = dht.readHumidity(); //读取湿度 132 | float t = dht.readTemperature(); //读取温度 133 | // 读取失败处理 134 | if (isnan(h) || isnan(t)) { 135 | Serial.println(F("Failed to read from DHT sensor!")); 136 | return; 137 | } 138 | // 计算热指数(利用摄氏温度) 139 | Serial.print(F("T:")); 140 | Serial.print(t); 141 | Serial.print(","); 142 | Serial.print(F("H:")); 143 | Serial.print(h); 144 | Serial.print(","); 145 | //读取光照强度 146 | var = analogRead(LDR_PIN); 147 | Serial.print(F("L:")); 148 | Serial.print(var); 149 | Serial.print(","); 150 | //读取气压值 151 | Serial.print("P:"); 152 | Serial.print(bmp.readSealevelPressure()); 153 | Serial.print(","); 154 | if (t > 35 || t < 5) 155 | { 156 | //LED0灯亮起 157 | digitalWrite(led_pin[0], HIGH); 158 | } 159 | else 160 | { 161 | //LED0熄灭 162 | digitalWrite(led_pin[0], LOW); 163 | // digitalWrite(led_pin[1], LOW); 164 | } 165 | 166 | if (h > 70 || h < 30) 167 | { 168 | //湿度过高或过低,LED1亮起 169 | digitalWrite(led_pin[1], HIGH); 170 | } 171 | else 172 | { 173 | //LED1熄灭 174 | digitalWrite(led_pin[1], LOW); 175 | } 176 | 177 | if (var > 200 || var < 100) 178 | { 179 | //LED2亮起 180 | digitalWrite(led_pin[2], HIGH); 181 | } 182 | else 183 | { 184 | digitalWrite(led_pin[2], LOW); 185 | } 186 | 187 | if (bmp.readSealevelPressure() > 101300 || bmp.readSealevelPressure() < 100000) 188 | { 189 | digitalWrite(led_pin[3], HIGH); 190 | } 191 | else 192 | { 193 | digitalWrite(led_pin[3], LOW); 194 | } 195 | if(MYBOOL){ 196 | if(t>35){ 197 | digitalWrite(led_pin[4],HIGH); 198 | } 199 | else{ 200 | digitalWrite(led_pin[4],LOW); 201 | } 202 | if(h>70){ 203 | digitalWrite(led_pin[5],HIGH); 204 | } 205 | else{ 206 | digitalWrite(led_pin[5],LOW); 207 | } 208 | if(var>200){ 209 | digitalWrite(led_pin[6],HIGH); 210 | } 211 | else{ 212 | digitalWrite(led_pin[6],LOW); 213 | } 214 | if(bmp.readSealevelPressure()>101300){ 215 | digitalWrite(led_pin[7],HIGH); 216 | } 217 | else{ 218 | digitalWrite(led_pin[7],LOW); 219 | } 220 | Serial.print(1); 221 | Serial.print(","); 222 | } 223 | else{ 224 | Serial.print(0); 225 | Serial.print(","); 226 | } 227 | Serial.print(digitalRead(led_pin[4])); 228 | Serial.print(","); 229 | Serial.print(digitalRead(led_pin[5])); 230 | Serial.print(","); 231 | Serial.print(digitalRead(led_pin[6])); 232 | Serial.print(","); 233 | Serial.print(digitalRead(led_pin[7])); 234 | } 235 | } 236 | 237 | // void press_task(void* pvParameters) { 238 | // for(;;) { 239 | 240 | // //读取气压值 241 | // Serial.print("P:"); 242 | // Serial.print(bmp.readSealevelPressure()); 243 | // if (bmp.readSealevelPressure() > 101300 || bmp.readSealevelPressure() < 100000) 244 | // { 245 | // digitalWrite(led_pin[3], HIGH); 246 | // } 247 | // else 248 | // { 249 | // digitalWrite(led_pin[3], LOW); 250 | // } 251 | // vTaskDelay(5000); 252 | // } 253 | // } 254 | 255 | -------------------------------------------------------------------------------- /Proteus工程/Proteus工程/src/main.cpp: -------------------------------------------------------------------------------- 1 | #include 2 | #include 3 | #include 4 | #include 5 | #include 6 | #include 7 | 8 | String comdata = ""; 9 | 10 | #define DHTPIN 2 //设定2号引脚为数据输入 11 | #define DHTTYPE DHT11 // DHT 11 12 | DHT dht(DHTPIN, DHTTYPE); 13 | 14 | const int LDR_PIN = A0; //设定电压输出位A0口 15 | float var; //暂存电压变量 16 | bool MYBOOL=true; //手动自动,默认自动 17 | 18 | Adafruit_BMP085 bmp; 19 | 20 | 21 | int led_pin[] = {8, 9, 10, 11, 12, 13, 7, 6}; //LED灯的连接的数据引脚 22 | int led_cnt = 8; //led灯的数量 23 | 24 | 25 | TaskHandle_t StartTask_Handler; 26 | TaskHandle_t ZongTask_Handler; 27 | 28 | void start_task(void* pvParameters); 29 | void zong_task(void* pvParameters); 30 | 31 | void setup() { 32 | dht.begin(); 33 | 34 | if (!bmp.begin()) { 35 | Serial.println("Could not find a valid BMP085 sensor, check wiring!"); 36 | while (1) {} 37 | } 38 | //LED 39 | for (int i = 0; i < led_cnt; i++) 40 | { 41 | pinMode(led_pin[i], OUTPUT); 42 | digitalWrite(led_pin[i], LOW); 43 | } 44 | Serial.begin(9600); 45 | xTaskCreate( // 创建开始任务 46 | start_task, 47 | "start_task", 48 | 128, 49 | NULL, 50 | 1, 51 | &StartTask_Handler); 52 | vTaskStartScheduler(); // 开启任务调度 53 | } 54 | 55 | void loop() { 56 | } 57 | 58 | 59 | void start_task(void* pvParameters) { 60 | taskENTER_CRITICAL(); // 进入临界区 61 | xTaskCreate( // 创建总任务 62 | zong_task, 63 | "zong_task", 64 | 128, 65 | NULL, 66 | 2, 67 | &ZongTask_Handler); 68 | 69 | vTaskDelete(StartTask_Handler); //删除start_task 70 | taskEXIT_CRITICAL(); // 退出临界区 71 | } 72 | 73 | 74 | 75 | void zong_task(void* pvParameters) { 76 | for(;;) { 77 | delay(1000); 78 | while (Serial.available()) 79 | { 80 | comdata += char(Serial.read()); 81 | if(comdata == "1" && !MYBOOL) //打开风机 82 | { 83 | digitalWrite(led_pin[4], HIGH); 84 | } 85 | else if (comdata == "2" && !MYBOOL) //关闭风机 86 | { 87 | digitalWrite(led_pin[4], LOW); 88 | } 89 | 90 | else if(comdata == "3" && !MYBOOL) //打开除湿 91 | { 92 | digitalWrite(led_pin[5], HIGH); 93 | 94 | } 95 | else if (comdata == "4" && !MYBOOL) //关闭除湿 96 | { 97 | digitalWrite(led_pin[5], LOW); 98 | } 99 | 100 | else if(comdata == "5" && !MYBOOL) //打开灯光 101 | { 102 | digitalWrite(led_pin[6], HIGH); 103 | } 104 | else if (comdata == "6" && !MYBOOL) //关闭灯光 105 | { 106 | digitalWrite(led_pin[6], LOW); 107 | } 108 | 109 | else if(comdata == "7" && !MYBOOL) //打开气泵 110 | { 111 | digitalWrite(led_pin[7], HIGH); 112 | } 113 | else if (comdata == "8" && !MYBOOL) //关闭气泵 114 | { 115 | digitalWrite(led_pin[7], LOW); 116 | } 117 | else if(comdata == "9" && MYBOOL) //关闭自动 118 | { 119 | MYBOOL=false; 120 | } 121 | else if(comdata == "0" && !MYBOOL) //打开自动 122 | { 123 | MYBOOL=true; 124 | } 125 | 126 | comdata = ""; 127 | } 128 | // DHT11每隔3s更新一次数据 129 | delay(3000); 130 | // 读取温湿度 131 | float h = dht.readHumidity(); //读取湿度 132 | float t = dht.readTemperature(); //读取温度 133 | // 读取失败处理 134 | if (isnan(h) || isnan(t)) { 135 | Serial.println(F("Failed to read from DHT sensor!")); 136 | return; 137 | } 138 | // 计算热指数(利用摄氏温度) 139 | Serial.print(F("T:")); 140 | Serial.print(t); 141 | Serial.print(","); 142 | Serial.print(F("H:")); 143 | Serial.print(h); 144 | Serial.print(","); 145 | //读取光照强度 146 | var = analogRead(LDR_PIN); 147 | Serial.print(F("L:")); 148 | Serial.print(var); 149 | Serial.print(","); 150 | //读取气压值 151 | Serial.print("P:"); 152 | Serial.print(bmp.readSealevelPressure()); 153 | Serial.print(","); 154 | if (t > 35 || t < 5) 155 | { 156 | //LED0灯亮起 157 | digitalWrite(led_pin[0], HIGH); 158 | } 159 | else 160 | { 161 | //LED0熄灭 162 | digitalWrite(led_pin[0], LOW); 163 | // digitalWrite(led_pin[1], LOW); 164 | } 165 | 166 | if (h > 70 || h < 30) 167 | { 168 | //湿度过高或过低,LED1亮起 169 | digitalWrite(led_pin[1], HIGH); 170 | } 171 | else 172 | { 173 | //LED1熄灭 174 | digitalWrite(led_pin[1], LOW); 175 | } 176 | 177 | if (var > 200 || var < 100) 178 | { 179 | //LED2亮起 180 | digitalWrite(led_pin[2], HIGH); 181 | } 182 | else 183 | { 184 | digitalWrite(led_pin[2], LOW); 185 | } 186 | 187 | if (bmp.readSealevelPressure() > 101300 || bmp.readSealevelPressure() < 100000) 188 | { 189 | digitalWrite(led_pin[3], HIGH); 190 | } 191 | else 192 | { 193 | digitalWrite(led_pin[3], LOW); 194 | } 195 | if(MYBOOL){ 196 | if(t>35){ 197 | digitalWrite(led_pin[4],HIGH); 198 | } 199 | else{ 200 | digitalWrite(led_pin[4],LOW); 201 | } 202 | if(h>70){ 203 | digitalWrite(led_pin[5],HIGH); 204 | } 205 | else{ 206 | digitalWrite(led_pin[5],LOW); 207 | } 208 | if(var>200){ 209 | digitalWrite(led_pin[6],HIGH); 210 | } 211 | else{ 212 | digitalWrite(led_pin[6],LOW); 213 | } 214 | if(bmp.readSealevelPressure()>101300){ 215 | digitalWrite(led_pin[7],HIGH); 216 | } 217 | else{ 218 | digitalWrite(led_pin[7],LOW); 219 | } 220 | Serial.print(1); 221 | Serial.print(","); 222 | } 223 | else{ 224 | Serial.print(0); 225 | Serial.print(","); 226 | } 227 | Serial.print(digitalRead(led_pin[4])); 228 | Serial.print(","); 229 | Serial.print(digitalRead(led_pin[5])); 230 | Serial.print(","); 231 | Serial.print(digitalRead(led_pin[6])); 232 | Serial.print(","); 233 | Serial.print(digitalRead(led_pin[7])); 234 | } 235 | } 236 | 237 | // void press_task(void* pvParameters) { 238 | // for(;;) { 239 | 240 | // //读取气压值 241 | // Serial.print("P:"); 242 | // Serial.print(bmp.readSealevelPressure()); 243 | // if (bmp.readSealevelPressure() > 101300 || bmp.readSealevelPressure() < 100000) 244 | // { 245 | // digitalWrite(led_pin[3], HIGH); 246 | // } 247 | // else 248 | // { 249 | // digitalWrite(led_pin[3], LOW); 250 | // } 251 | // vTaskDelay(5000); 252 | // } 253 | // } 254 | 255 | -------------------------------------------------------------------------------- /上位机源代码及可执行文件/sqlapi.py: -------------------------------------------------------------------------------- 1 | import pymysql 2 | import time 3 | 4 | def connect_db(): 5 | database_info={ 6 | 'host': 'localhost', 7 | 'port': 3306, 8 | 'user': 'root', 9 | 'passwd': '123456', 10 | 'charset': 'utf8mb4' 11 | } 12 | try: 13 | conn = pymysql.connect(**database_info) 14 | except Exception as e: 15 | print("数据库连接失败!") 16 | print(e) 17 | return False 18 | else: 19 | print("数据库连接成功!") 20 | return conn 21 | 22 | def connect_BigPeng(): 23 | database_info={ 24 | 'host': 'localhost', 25 | 'port': 3306, 26 | 'user': 'root', 27 | 'db': 'BigPeng', 28 | 'passwd': 'Xmj987536', 29 | 'charset': 'utf8mb4' 30 | } 31 | try: 32 | conn = pymysql.connect(**database_info) 33 | except Exception as e: 34 | print("大棚数据库连接失败!") 35 | print(e) 36 | return False 37 | else: 38 | print("大棚数据库连接成功!") 39 | return conn 40 | 41 | def create_db(): 42 | conn=connect_db() 43 | cur=conn.cursor() 44 | try: 45 | cur.execute("create database BigPeng;") 46 | conn.commit() 47 | except Exception as e: 48 | conn.rollback() 49 | conn.close() 50 | print("数据库创建失败!") 51 | print(e) 52 | return False 53 | else: 54 | conn.close() 55 | print("数据库创建成功!") 56 | return True 57 | 58 | def create_table(): 59 | conn=connect_BigPeng() 60 | cur=conn.cursor() 61 | try: 62 | cur.execute(""" 63 | create table `users`( 64 | `user_id` int(11) unsigned unique NOT NULL AUTO_INCREMENT, 65 | `nickname` char(20) unique NOT NULL, 66 | `password` char(20) NOT NULL, 67 | `level` tinyint(1) default 3, 68 | PRIMARY KEY (`user_id`), 69 | index id(user_id) 70 | )DEFAULT CHARSET=utf8mb4 AUTO_INCREMENT=1;""") 71 | #id,nickname,password,level 72 | cur.execute(""" 73 | create table `logs`( 74 | `log_id` int(11) unsigned unique NOT NULL AUTO_INCREMENT, 75 | `time` char(20) not null, 76 | `temperature` float(2), 77 | `humidity` float(2), 78 | `light` float(2), 79 | `pressure` float(2), 80 | PRIMARY KEY(`log_id`), 81 | index id(log_id) 82 | )DEFAULT CHARSET=utf8mb4 AUTO_INCREMENT=1;""") 83 | cur.execute(""" 84 | create table `e_logs`( 85 | `log_id` int(11) unsigned unique NOT NULL AUTO_INCREMENT, 86 | `time` char(20) not null, 87 | `model` int(2) not null, 88 | `temperature` int(2), 89 | `humidity` int(2), 90 | `light` int(2), 91 | `pressure` int(2), 92 | PRIMARY KEY(`log_id`), 93 | index id(log_id) 94 | )DEFAULT CHARSET=utf8mb4 AUTO_INCREMENT=1;""") 95 | #初始化用户 96 | cur.execute(""" 97 | insert into users (`nickname`,`password`) values ("root","123456"); 98 | """) 99 | cur.execute(""" 100 | insert into e_logs (`time`,`model`,`temperature`,`humidity`,`light`,`pressure`) values ("1592892440",1,0,0,0,0); 101 | """) 102 | conn.commit() 103 | except Exception as e: 104 | conn.rollback() 105 | conn.close() 106 | print("数据表创建失败!") 107 | print(e) 108 | return False 109 | else: 110 | conn.close() 111 | print("users,logs,e_logs数据表创建成功!") 112 | return True 113 | 114 | #删库跑路 115 | def drop_db(): 116 | conn=connect_db() 117 | cur=conn.cursor() 118 | try: 119 | cur.execute("drop database if exists BigPeng;") 120 | conn.commit() 121 | except Exception as e: 122 | conn.rollback() 123 | conn.close() 124 | print("删库失败!") 125 | print(e) 126 | else: 127 | conn.close() 128 | print("数据库已删除,快跑路...") 129 | 130 | def find_db(): 131 | conn=connect_db() 132 | cur=conn.cursor() 133 | try: 134 | cur.execute("show databases;") 135 | results=cur.fetchall() 136 | conn.commit() 137 | #print(results) 138 | except Exception as e: 139 | conn.close() 140 | print("数据库查找失败!") 141 | print(e) 142 | else: 143 | conn.close() 144 | for db in results: 145 | if 'bigpeng' in db: 146 | print("找到大棚数据库!开始连接...") 147 | return True 148 | print("没有找到大棚数据库!开始自动创建!") 149 | return False 150 | 151 | def insert_user(nickname,passwd): 152 | conn=connect_BigPeng() 153 | cur=conn.cursor() 154 | try: 155 | cur.execute(f""" 156 | insert into users 157 | (`nickname`,`password`) 158 | values 159 | ('{nickname}','{passwd}'); 160 | """) 161 | conn.commit() 162 | except Exception as e: 163 | conn.rollback() 164 | conn.close() 165 | print("用户创建失败!") 166 | print(e) 167 | return False 168 | else: 169 | conn.close() 170 | return True 171 | 172 | def insert_log(time,temperature,humidity,light,pressure): 173 | conn=connect_BigPeng() 174 | cur=conn.cursor() 175 | try: 176 | cur.execute(f""" 177 | insert into logs 178 | (`time`,`temperature`,`humidity`,`light`,`pressure`) 179 | values 180 | ('{time}','{temperature}','{humidity}','{light}','{pressure}'); 181 | """) 182 | conn.commit() 183 | except Exception as e: 184 | conn.rollback() 185 | conn.close() 186 | print("数据记录失败!") 187 | print(e) 188 | return False 189 | else: 190 | conn.close() 191 | print("数据记录成功!") 192 | return True 193 | 194 | def insert_elog(time,model,temperature,humidity,light,pressure): 195 | conn=connect_BigPeng() 196 | cur=conn.cursor() 197 | try: 198 | cur.execute(f""" 199 | insert into e_logs 200 | (`time`,`model`,`temperature`,`humidity`,`light`,`pressure`) 201 | values 202 | ('{time}','{model}','{temperature}','{humidity}','{light}','{pressure}'); 203 | """) 204 | conn.commit() 205 | except Exception as e: 206 | conn.rollback() 207 | conn.close() 208 | print("设备数据记录失败!") 209 | print(e) 210 | return False 211 | else: 212 | conn.close() 213 | print("设备数据记录成功!") 214 | return True 215 | 216 | def select_logs(timestamp): 217 | conn=connect_BigPeng() 218 | cur=conn.cursor() 219 | sql=f"select * from logs where time>={timestamp};" 220 | try: 221 | ans=cur.fetchmany(cur.execute(sql)) 222 | except Exception as e: 223 | conn.close() 224 | print("数据查找失败!") 225 | print(e) 226 | return False 227 | else: 228 | conn.close() 229 | print("数据查找成功") 230 | return ans 231 | 232 | def select_elogs(timestamp): 233 | conn=connect_BigPeng() 234 | cur=conn.cursor() 235 | sql=f"select * from e_logs where time>={timestamp};" 236 | try: 237 | ans=cur.fetchmany(cur.execute(sql)) 238 | except Exception as e: 239 | conn.close() 240 | print("设备数据查找失败!") 241 | print(e) 242 | return False 243 | else: 244 | conn.close() 245 | print("设备数据查找成功") 246 | return ans 247 | 248 | def select_newlogs(index): 249 | conn=connect_BigPeng() 250 | cur=conn.cursor() 251 | sql=f"select * from logs order by time desc limit 0,{index};" 252 | try: 253 | ans=cur.fetchmany(cur.execute(sql)) 254 | except Exception as e: 255 | conn.close() 256 | print("数据查找失败!") 257 | print(e) 258 | return False 259 | else: 260 | conn.close() 261 | print("数据查找成功") 262 | return ans 263 | 264 | def select_newelogs(index): 265 | conn=connect_BigPeng() 266 | cur=conn.cursor() 267 | sql=f"select * from e_logs order by time desc limit 0,{index};" 268 | try: 269 | ans=cur.fetchmany(cur.execute(sql)) 270 | except Exception as e: 271 | conn.close() 272 | print("设备数据查找失败!") 273 | print(e) 274 | return False 275 | else: 276 | conn.close() 277 | print("设备数据查找成功") 278 | return ans 279 | 280 | def select_users(nickname,passwd): 281 | conn=connect_BigPeng() 282 | cur=conn.cursor() 283 | sql=f"select password from `users` where `nickname`='{nickname}';" 284 | try: 285 | ans=cur.fetchmany(cur.execute(sql)) 286 | except Exception as e: 287 | conn.close() 288 | print("用户查找失败!") 289 | print(e) 290 | return False 291 | else: 292 | conn.close() 293 | #print(ans[0][0]) 294 | if(ans[0][0]==passwd): 295 | print("用户查找成功!") 296 | return True 297 | else: 298 | print("用户密码不正确!") 299 | return False 300 | 301 | def check(): 302 | #如果存在删除数据库 303 | #drop_db() 304 | print("Connecting...") 305 | f=find_db() 306 | if(f==False): 307 | if(create_db()): 308 | create_table() 309 | 310 | if __name__ == "__main__": 311 | check() 312 | -------------------------------------------------------------------------------- /上位机源代码及可执行文件/templates/equip.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 首页|智能大棚 18 | 19 | 20 | 43 |
44 |
45 |
46 | 57 |
58 |
59 |
60 |
当前显示:过去三小时历史数据
61 |
62 |
63 |
64 | 65 |
66 |
67 |
当前显示:过去一天历史数据
68 |
69 |
70 |
71 | 72 |
73 |
74 |
当前显示:过去两天历史数据
75 |
76 |
77 |
78 |
79 |
80 |
81 |
82 | 83 | 210 | -------------------------------------------------------------------------------- /上位机源代码及可执行文件/templates/detail.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 首页|智能大棚 18 | 19 | 20 | 43 |
44 |
45 |
46 | 57 |
58 |
59 |
60 |
当前显示:过去三小时历史数据
61 |
62 |
63 |
64 |
65 | 66 |
67 |
68 |
当前显示:过去一天历史数据
69 |
70 |
71 |
72 |
73 | 74 |
75 |
76 |
当前显示:过去两天历史数据
77 |
78 |
79 |
80 |
81 |
82 |
83 |
84 |
85 | 86 | 254 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # 智能大棚设计与实现 2 | 3 | >HEU嵌入式课程设计==>基于Proteus,Arduino,Flask搭建的智能大棚管理系统 4 | 5 | [https://blog.justlovesmile.top/posts/14495.html🔗](https://blog.justlovesmile.top/posts/14495.html) 6 | 7 | ## 系统简介 8 | 9 | 1.主要内容 10 | - 硬件嵌入式系统:采用FreeRTOS实时系统和Arduino UNO平台,以及ATMEGA328P微控制器,进行控制,结合DHT11,BMP180等多种传感器进行数据监测,具有自动控制和监测警报功能,能通过前端切换工作模式 11 | - 数据库:基于Python的pymsql库使用MYSQL数据库,能自动创建数据库,表以及存储和查找数据。 12 | - 服务器:基于Python的Flask框架搭建,能控制串口读写 13 | - 前端:具有登录检测,数据查询,远程控制功能 14 | 15 | 2.采用的工具方法 16 | - Proteus 8.6 17 | - Visual Studio Code 18 | - Arduino 19 | - Python3.8 20 | - MySQL 8.0.15 21 | 22 | ## 我的报告(爆肝) 23 | 24 |

智能大棚设计与实现

25 | 26 | **摘要:**随着社会的不断发展,传统的农业生产活动方式,诸如农民亲自灌溉,施肥,搭棚保温的方式,这些落后的生产方式已经不能满足现代的经济发展需求,智能化,信息化的农业设计成为了农业发展的趋势。本文设计了一款简单易操作的智能大棚环境监测管理系统,能适用于温室大棚的数据监控和远程硬件操作功能,该系统基于嵌入式系统设计方法,使用了RTOS和Arduino UNO微处理器作为系统的主控芯片,使用了DHT11温湿度传感器,LDR光敏电阻,BMP180气压传感器作为外界环境监测模块,使用了COMPIM进行串口通信,结合Flask服务器框架和MySQL数据库,搭建了Web端和数据库,并优化了前端界面。实现了传感器对环境数据和设备数据进行收集分析处理后,通过串口存储于数据库中,用户通过前端网页实时监测环境数据,并可以控制硬件的状态。该智能大棚监测管理系统,简单易操作,智能化程度高,功能完备,十分适用于农业大棚的监测与管理。 27 | 28 | **关键词:**嵌入式;智能大棚;传感器;服务器;Arduino 29 | 30 | **一,系统简介** 31 | 为了实现农业温室大棚的自动化,智能化管理,设计了智能大棚监测管理系统,该系统是基于嵌入式设计技术,利用了Arduino Uno平台,虚拟仿真实验环境Proteus软件,实时操作系统FreeRTOS,实现硬件及Arduino虚拟开发和仿真,根据传感器的检测值,进行判断处理,具有自动控制硬件调节功能和警报功能,再结合Python的Flask库搭建服务器端,serial库进行硬件和服务器端信息传输,以及MySQL进行数据存储,实现了对大棚内温度,湿度,光照,气压的监测和记录,以及对硬件设备,如风机,除湿器,照明,气泵的运行状态的监测和管理,能在Web端实时显示环境和设备运行数据和选择自动以及手动控制硬件的模式,能在前端控制硬件运行,能从数据库选择获取不同时间段的数据并以图表形式展示,并且具有登录登出功能。该系统操作简单,不需耗费大量人力物力学习掌握,能满足正常的数据监控和远程管理以及自动管理需要。 32 | 33 | **二,需求分析和概要设计** 34 | 35 | 1.需求分析 36 | 在当今智能化的背景下,传统的管理方式已经无法满足对温室大棚的实时监测和控制,尤其是因为当今的温室大棚种植面积普遍较大的,因此,从用户的角度出发,对于大棚的管理,最重要的就是实时监测处理大棚内的温度,湿度,光照和棚内气压等数据,这就需要智能大棚管理系统具有对环境的敏感性和监测的实时性,对于用户而言,他可能还需要了解最近一段时间棚内环境的变换以对未来可能发生的情况进行提前预测,以及了解设备的运行情况做出相应更换等措施,因此需要保存环境和设备运行状况的历史数据。并且系统还应该具有智能处理的功能,当环境变量发生改变,处于不适宜大棚内作物生长的环境时,系统还应该自动控制设备进行相应操作。除此以外,系统需要具有简单易操作,低成本的特点,这样才能减少人工看护和操作的费用,降低成本。对于远程在外的用户,还可以通过云平台进行实时监测和设备控制,从而实现对大棚的智能化,自动化监测管理。 37 | 38 | 2.概要设计 39 | 通过上文对需求的分析,可以得出,智能大棚监测管理系统应该具有数据监控模块,数据传输模块,控制模块,警报模块,数据库模块,服务器模块以及前端模块,系统功能结构框图如图2.1所示。 40 | 41 | ![](https://cdn.jsdelivr.net/gh/Justlovesmile/CDN2/post/20200624114845.png) 42 | 43 | 图2.1 系统功能结构框图 44 | 45 | 2.1 数据监控模块 46 | 数据监控是本系统最为重要的一环,数据的获取主要通过三种器件,包括DHT11温湿度传感器,LDR光敏电阻以及BMP180气压传感器,它们在Proteus软件示意图如图2.2所示。数据监控模块的逻辑控制流程图如图2.3所示。 47 | 48 | ![](https://cdn.jsdelivr.net/gh/Justlovesmile/CDN2/post/20200624114924.png) 49 | 50 | 图2.2 DHT11(左上),LDR(左下),BMP180(右上)在Proteus中的示意图 51 | 52 | ![](https://cdn.jsdelivr.net/gh/Justlovesmile/CDN2/post/20200624114940.png) 53 | 54 | 图2.3 数据监控控制流程图 55 | 56 | 由流程图可以看出,数据监控模块主要依靠不断读取三个传感器对温度,湿度,光照,气压的数据信息实现。 57 | 58 | 2.2 数据传输模块 59 | 数据传输模块包括了,硬件端传输数据到数据库以及服务器端传输数据到硬件两个部分。 60 | 61 | 2.2.1 硬件到数据库 62 | 硬件端到数据库之间的数据传输主要是为了进行数据存储,因此需要规定硬件写入到串口的格式,并传到服务器端接受,按照规定的格式解析并存储到数据库,硬件到数据库的数据传输流程图如图2.4所示。 63 | 64 | ![](https://cdn.jsdelivr.net/gh/Justlovesmile/CDN2/post/20200624115022.png) 65 | 66 | 图2.4 硬件到数据库的数据传输流程图 67 | 68 | 2.2.2 服务器到硬件 69 | 服务器端到硬件的数据传输主要是为了传输前端的控制信息,包括控制选择自动与手动模式,是否开启或关闭相应硬件等控制信息,服务器到硬件的数据传输流程图如图2.5所示。 70 | 71 | ![](https://cdn.jsdelivr.net/gh/Justlovesmile/CDN2/post/20200624115155.png) 72 | 73 | 图2.5 服务器到硬件的数据传输流程图 74 | 75 | 2.3 控制模块 76 | 控制模块包括了自动控制模块和手动控制模块。 77 | 78 | 2.3.1 自动控制模块 79 | 当硬件第一次运行时,默认为自动模式,此时,数据监控时会根据设定的危险范围进行相应的操作,例如当温度超过某个值时,打开风机,否则关闭风机,当湿度超过某个值时,打开除湿器,否则关闭除湿器,自动控制流程图如图2.6所示。 80 | 81 | ![](https://cdn.jsdelivr.net/gh/Justlovesmile/CDN2/post/20200624115306.png) 82 | 83 | 图2.6 自动控制流程图 84 | 85 | 2.3.2 手动控制模块 86 | 当服务器端传进来的数据为9时,关闭自动模式,此时硬件运行状态通过之后服务器端传来的数据控制,不同的数据对应不同的操作,手动控制流程图如图2.7所示。 87 | 88 | ![](https://cdn.jsdelivr.net/gh/Justlovesmile/CDN2/post/20200624115328.png) 89 | 90 | 图2.7 手动控制流程图 91 | 92 | 2.4 警示灯模块 93 | 为了更好的提醒用户温室大棚内的环境是否正常,设置了警示灯模块,通过不断获取环境数据并和危险区间的上下界进行比较,执行相应的警示灯亮起或熄灭操作,警示灯流程图如图2.8所示。 94 | 95 | ![](https://cdn.jsdelivr.net/gh/Justlovesmile/CDN2/post/20200624115347.png) 96 | 97 | 图2.8 警示灯流程图 98 | 99 | 2.5 数据库模块 100 | 数据库模块主要是编写成数据库相关的API,在前端点击,或者自动更新后将会向服务器端请求数据,然后服务器端调用数据库API执行相应的操作,包括:数据库和表的创建,初始用户数据导入,插入数据,按次数搜索最新数据,按时间搜索范围内的数据等等,数据库API结构图如图2.9所示。 101 | 102 | ![](https://cdn.jsdelivr.net/gh/Justlovesmile/CDN2/post/20200624115503.png) 103 | 104 | 图2.9 数据库模块API结构图 105 | 106 | 2.6 服务器模块 107 | 对于智能大棚管理系统,服务器的作用主要用于响应前端的请求,以及对串口和数据库的连接和处理,当前端发来不同的请求后,服务器进行相应的操作,包括,返回HTML页面,调用数据库API以及对串口的读取和写入,打开和关闭操作,其具体的功能结构图如图2.10所示。 108 | 109 | ![](https://cdn.jsdelivr.net/gh/Justlovesmile/CDN2/post/20200624115452.png) 110 | 111 | 图2.10 服务器功能结构图 112 | 113 | 2.7 前端模块 114 | 智能大棚系统的前端部分主要功能是展示环境数据和设备数据,通过向服务器端请求不同数据,实现对两种数据的最新一条数据和最近一小时数据,最近三小时数据,最近一天数据,最近两天数据的获取,并用折线图,柱状图和表格的形式展示,并且前端会像服务器请求登录状态,如果没有登陆则会自动跳转到登陆页面,保障了用户的信息安全,登录后用户可以通过前端监测数据,并且选择登出,打开或关闭自动模式,打开或关闭风机等硬件设备的功能,除此之外,前端还能每个一段时间自动更新,具体的功能结构图如图2.11所示。 115 | 116 | ![](https://cdn.jsdelivr.net/gh/Justlovesmile/CDN2/post/20200624115534.png) 117 | 118 | 图2.11 前端功能结构图 119 | 120 | **三,系统设计与实现** 121 | 122 | 1.硬件设计与实现 123 | 124 | 1.1 硬件总体电路原理图 125 | 硬件电路主要依靠Proteus软件,仿真实现,如图3.1所示。其中包括了DHTT11温湿度传感器用于获取大棚内的温度和湿度;LDR,其阻值随光照强度的增大而减小,将其与一个10K电阻组成分压电路,使得读取模拟IO的电压值可以用于监测大棚内的光照强度;BMP180,是一种高精度的气压传感器,用于监测大棚内气压。D2,D3,D4,D5为警示灯,D6,D7,D8,D9依次模拟风机,除湿器,照明,气泵设备。COMPIM用于串口通信。 126 | 127 | ![](https://cdn.jsdelivr.net/gh/Justlovesmile/CDN2/post/20200624115623.png) 128 | 129 | 图3.1 硬件总体设计 130 | 131 | 1.2 硬件系统设计 132 | 硬件系统采用免费的实时系统FreeRTOS,其通过创建任务并调度实现系统的主要程序,在智能大棚系统中,硬件系统首先配置一系列IO口,定义了一些全局变量,如传感器的引脚,电压变量,所选择的智能模式,led端口等等,通过start_task()任务创建总任务zong_task(),在总任务内,不断读取串口传来的数据和传感器的数值,并写入串口,传递给服务器。 133 | 134 | 1.2.1 数据监控与传输 135 | 在zong_task()中,程序在延迟3秒后依次读取每个传感器的值,并通过串口传递固定格式的数据,最终传递的数据格式,如图3.2所示,依次分别代表温度,湿度,光强,气压,自动模式,风机状态,除湿器状态,照明状态,气泵状态。读取传感器的函数如下所示。 136 | 137 | ```cpp 138 | delay(3000); //每隔3s更新一次数据 139 | float h = dht.readHumidity(); //读取湿度 140 | float t = dht.readTemperature(); //读取温度 141 | var = analogRead(LDR_PIN); //读取光照强度 142 | Serial.print(bmp.readSealevelPressure()); //读取气压值 143 | Serial.print(digitalRead(led_pin[4])); //读取并传输硬件(其一)运行状态 144 | ``` 145 | 146 | ![](https://cdn.jsdelivr.net/gh/Justlovesmile/CDN2/post/20200624115737.png) 147 | 148 | 图3.2 数据传输格式 149 | 150 | 1.2.2 自动控制和手动控制 151 | 程序定义了一个bool类型的全局变量MYBOOL,用于表示当前模式是自动还是手动,当模式是自动时,串口读入的数据将不能控制硬件状态改变,只能控制模式的改变,此时,硬件系统将根据传感器的值进行自动打开或关闭硬件设备,而当模式是手动时,则只能通过串口读入的值来控制硬件设备的开启与关闭。定义的读入手动控制操作的伪代码如下: 152 | 153 | ``` 154 | While(Serial.available()){ 155 | 读取data 156 | 如果为自动模式{ 157 | 当data=9时,关闭自动模式 158 | } 159 | 如果为手动模式{ 160 | 当data=1时,打开风机 161 | 当data=2时,关闭风机 162 | 当data=3时,打开除湿 163 | 当data=4时,关闭除湿 164 | 当data=5时,打开灯光 165 | 当data=6时,关闭灯光 166 | 当data=7时,打开气泵 167 | 当data=8时,关闭气泵 168 | 当data=0时,切换自动模式 169 | } 170 | } 171 | ``` 172 | 173 | 定义的自动控制和警报操作伪代码如下: 174 | 175 | ``` 176 | If(自动模式){ 177 | 如果温度异常,警报灯亮,操作风机,否则关闭警报灯和风机 178 | 如果湿度异常,警报灯亮,操作除湿器,否则关闭警报灯和除湿 179 | 如果光强异常,警报灯亮,操作照明,否则关闭警报灯和照明 180 | 如果气压异常,警报灯亮,操作气泵,否则关闭警报灯和气泵 181 | } 182 | ``` 183 | 184 | 2.数据库设计与实现 185 | 数据库的连接与操作,主要使用了Python的pymysql库,以及MYSQL数据库,主要实现当服务器连接时,自动查找大棚数据库,如果不存在则自动创建数据库BigPeng和三张数据表users,logs,e_logs,分别记录用户,环境数据,设备数据,并且提供了基于SQL语句的数据插入,数据查询功能,并有良好的异常处理机制。其中环境数据表的创建如下所示: 186 | 187 | ```python 188 | cur.execute(""" 189 | create table `logs`( 190 | `log_id` int(11) unsigned unique NOT NULL AUTO_INCREMENT, 191 | `time` char(20) not null, 192 | `temperature` float(2), 193 | `humidity` float(2), 194 | `light` float(2), 195 | `pressure` float(2), 196 | PRIMARY KEY(`log_id`), 197 | index id(log_id) 198 | )DEFAULT CHARSET=utf8mb4 AUTO_INCREMENT=1;""") 199 | ``` 200 | 201 | 数据查找主要有两种模式,一种是select_logs(timestamp),其会根据传入的时间戳,查找大于这一个时间的数据,即可以实现查找最近一小时,最近一天等的数据,具体的实现代码如下: 202 | 203 | ```python 204 | def select_logs(timestamp): 205 | conn=connect_BigPeng() 206 | cur=conn.cursor() 207 | sql=f"select * from logs where time>={timestamp};" 208 | try: 209 | ans=cur.fetchmany(cur.execute(sql)) 210 | except Exception as e: 211 | conn.close() 212 | print("数据查找失败!") 213 | print(e) 214 | return False 215 | else: 216 | conn.close() 217 | print("数据查找成功") 218 | return ans 219 | ``` 220 | 221 | 第二种是select_newlogs(index),其会根据传入的数量,按照时间倒序,查找最新的index条数据,具体的代码如下: 222 | 223 | ```python 224 | def select_newlogs(index): 225 | conn=connect_BigPeng() 226 | cur=conn.cursor() 227 | sql=f"select * from logs order by time desc limit 0,{index};" 228 | try: 229 | ans=cur.fetchmany(cur.execute(sql)) 230 | except Exception as e: 231 | conn.close() 232 | print("数据查找失败!") 233 | print(e) 234 | return False 235 | else: 236 | conn.close() 237 | print("数据查找成功") 238 | return ans 239 | ``` 240 | 241 | 3.服务器设计与实现 242 | 243 | 3.1 串口连接和数据插入 244 | 服务器端的串口操作,主要运用了python的serial库和threading库,serial用于串口通信交互。而threading用于使用多线程循环接受串口数据,并存储到数据库中。 245 | 串口的操作部分,主要功能有,打开串口DopenPort(portx,bps,timeout),读取数据ReadData(ser),关闭串口DclosePort(ser),写入数据DWritePort(ser,text)四个部分。 246 | 当串口打开后,将会自动执行读取数据操作。具体代码如下: 247 | 248 | ```python 249 | # 端口,Windows上的 COM2 250 | # 波特率,9600 251 | # 超时设置,None:永远等待操作,0为立即返回请求结果,其他值为等待超时时间(单位为秒) 252 | def DOpenPort(portx,bps,timeout): 253 | ret=False 254 | try: 255 | # 打开串口,并得到串口对象 256 | ser = serial.Serial(portx, bps, timeout=timeout) 257 | #print(ser) 258 | #判断是否打开成功 259 | if(ser.is_open): 260 | ret=True 261 | threading.Thread(target=ReadData, args=(ser,)).start() 262 | #ReadData(ser) 263 | except Exception as e: 264 | pass 265 | print("---异常---:", e) 266 | else: 267 | return ser,ret 268 | ``` 269 | 270 | 3.2 服务器框架设计与实现 271 | 该智能大棚系统的服务器端主要使用Python的Flask服务器框架,能够快速接受前端的响应,支持session保存如登录状态等数据,结合之前编写的数据库API以及串口操作函数,能够实现对前端请求数据的获取和传递。其中获取某一时间段的函数如下所示: 272 | 273 | ```python 274 | @app.route('/getjson/',methods=['GET','POST']) 275 | def getjson(): 276 | H=int(request.form.get('Hour')) 277 | beforetime=time.strptime((datetime.now()-timedelta(hours=H)).strftime("%Y-%m-%d %H:%M:%S"),"%Y-%m-%d %H:%M:%S") 278 | timestamp=int(time.mktime(beforetime)) 279 | try: 280 | ans=dealdata(sqlapi.select_logs(timestamp)) 281 | #数据处理 282 | except Exception as e: 283 | print("Get Json 失败!") 284 | #print(e) 285 | else: 286 | return json.dumps(ans) 287 | ``` 288 | 289 | 由于json不支持时间类型的数据解析,因此每次需要服务器端将获取时间并转换为字符串类型的数据进行传递. 290 | 291 | 4.前端设计与实现 292 | 前端包含四个页面,即登录页,首页,详细数据页,设备数据页。前端需要导入两个js文件,一个是jQuery,一个是echarts.js,后者主要用于数据图表的显示。 293 | 前端页面具有登录检测功能,如果没有登录,则会自动跳转到登录页面,部分代码如下: 294 | 295 | ```js 296 | check_session=function(){ 297 | $.get('/check_session/').done(function(ans){ 298 | data=$.parseJSON(ans); 299 | console.log(data) 300 | if(data["session"]=="false"){ 301 | window.location.replace("/login/"); 302 | } 303 | }) 304 | } 305 | ``` 306 | 307 | 前端具有数据图表以及按钮实时显示功能,每隔一定时间,将会请求服务器再次更新数据,设置定时更新的代码如下: 308 | 309 | ```js 310 | window.onload=function(){ 311 | check_session() 312 | showdata() 313 | drawcharts() 314 | setInterval("showdata()",5000); 315 | setInterval("drawcharts()",5000); 316 | setInterval("check_session()",5000); 317 | } 318 | ``` 319 | 320 | **四,系统测试** 321 | 322 | 1.硬件运行 323 | 当硬件开启后,默认为自动模式,此时如果检测值超过设定的危险值后,警示灯将会点亮,并且运行响应的硬件设备,温度超过范围后自动控制的硬件运行图,如图4.1所示。一切正常时的运行图,如图4.2所示。 324 | 325 | ![](https://cdn.jsdelivr.net/gh/Justlovesmile/CDN2/post/20200624120018.png) 326 | 327 | 图4.1 温度超过范围后自动控制的硬件运行图 328 | 329 | ![](https://cdn.jsdelivr.net/gh/Justlovesmile/CDN2/post/20200624120203.png) 330 | 331 | 图4.2 正常运行硬件图 332 | 333 | 2.服务器运行 334 | 当服务器运行后,将会查找BigPeng数据库是否存在,如果不存在,将会自动创建数据库和表,如果存在,则自动连接数据库,如图4.3所示。 335 | 336 | ![](https://cdn.jsdelivr.net/gh/Justlovesmile/CDN2/post/20200624120236.png) 337 | 338 | 图4.3 服务器正常运行示意图 339 | 340 | 3.前端运行 341 | 当服务器和硬件系统开启后,进入首页将会自动跳转登录页面,如图4.4所示。 342 | 343 | ![](https://cdn.jsdelivr.net/gh/Justlovesmile/CDN2/post/20200624120259.png) 344 | 345 | 图4.4 登陆页面 346 | 347 | 输入默认的用户名root和密码123456,即可自动跳转首页,首页上半部分如图4.5所示,下部分如图4.6所示。 348 | 349 | ![](https://cdn.jsdelivr.net/gh/Justlovesmile/CDN2/post/20200624120328.png) 350 | 351 | 图4.5 首页上部分示意图 352 | 353 | ![](https://cdn.jsdelivr.net/gh/Justlovesmile/CDN2/post/20200624120459.png) 354 | 355 | 图4.6 首页下部分示意图 356 | 357 | 此时当服务器第一运行时,串口并没有打开,因此需要点击开始监测按钮才能进行数据记录,按下按钮后,可以看到数据表在实时更新,并且按钮状态已改变,这一将存储到服务器端,不会随刷新而改变,如图4.7所示。并且首页还能控制硬件端的模式和硬件设备的开启与停止,如果点击了关闭自动,并打开风机和气泵,等待几秒后将如图4.8所示,对应的硬件状态如图4.9所示 358 | 359 | ![](https://cdn.jsdelivr.net/gh/Justlovesmile/CDN2/post/20200624120512.png) 360 | 361 | 图4.7 开启实时监测 362 | 363 | ![](https://cdn.jsdelivr.net/gh/Justlovesmile/CDN2/post/20200624120524.png) 364 | 365 | 图4.8 关闭了自动模式打开风机气泵示意图 366 | 367 | ![](https://cdn.jsdelivr.net/gh/Justlovesmile/CDN2/post/20200624120538.png) 368 | 369 | 图4.9 对应打开风机和气泵的硬件状态图 370 | 371 | 通过点击导航栏,可以跳转到详细数据页面,里面可以显示最近三小时,最近一天和最近两天的数据,如图4.10所示。 372 | 373 | ![](https://cdn.jsdelivr.net/gh/Justlovesmile/CDN2/post/20200624120700.png) 374 | 375 | 图4.10 详细数据页面 376 | 377 | 再点击导航栏上的设备详情,即可跳转设备数据页面,同样可以查看最近三小时,最近一天和最近两天的数据,如图4.11所示。 378 | 379 | ![](https://cdn.jsdelivr.net/gh/Justlovesmile/CDN2/post/20200624120715.png) 380 | 381 | 图4.11 设备数据页 382 | 383 | **五,总结** 384 | 通过对智能大棚监测管理系统的设计,我们团队实现了对系统的全部预期目标,不仅能实时监控环境数据,还能监控硬件运行状态数据,并存储到数据库,并且通过不懈努力,前端页面具有高效的实时性和动态效果,能定时获取数据实时更新数据,前端也会根据数据的不同发生相对应的改变,在实验过程中也遇到了很多问题,但是在查阅了很多文档后,问题都得到了解决,目前需要改进的地方是,硬件端的传感器数量较少,能够实现的功能可以继续增加,其次是前端的数据更新仍需要5到10秒中时间,当点击了打开硬件设备后需要等待较长时间才会更新。这次智能大棚监测管理系统的设计,让我受益匪浅,希望以后的我,能将它继续完善。 385 | -------------------------------------------------------------------------------- /上位机源代码及可执行文件/static/js/popper.min.js: -------------------------------------------------------------------------------- 1 | /* 2 | Copyright (C) Federico Zivolo 2019 3 | Distributed under the MIT License (license terms are at http://opensource.org/licenses/MIT). 4 | */ 5 | (function(e,t){'object'==typeof exports&&'undefined'!=typeof module?module.exports=t():'function'==typeof define&&define.amd?define(t):e.Popper=t()})(this,function(){'use strict';function e(e){return e&&'[object Function]'==={}.toString.call(e)}function t(e,t){if(1!==e.nodeType)return[];var o=e.ownerDocument.defaultView,n=o.getComputedStyle(e,null);return t?n[t]:n}function o(e){return'HTML'===e.nodeName?e:e.parentNode||e.host}function n(e){if(!e)return document.body;switch(e.nodeName){case'HTML':case'BODY':return e.ownerDocument.body;case'#document':return e.body;}var i=t(e),r=i.overflow,p=i.overflowX,s=i.overflowY;return /(auto|scroll|overlay)/.test(r+s+p)?e:n(o(e))}function i(e){return e&&e.referenceNode?e.referenceNode:e}function r(e){return 11===e?re:10===e?pe:re||pe}function p(e){if(!e)return document.documentElement;for(var o=r(10)?document.body:null,n=e.offsetParent||null;n===o&&e.nextElementSibling;)n=(e=e.nextElementSibling).offsetParent;var i=n&&n.nodeName;return i&&'BODY'!==i&&'HTML'!==i?-1!==['TH','TD','TABLE'].indexOf(n.nodeName)&&'static'===t(n,'position')?p(n):n:e?e.ownerDocument.documentElement:document.documentElement}function s(e){var t=e.nodeName;return'BODY'!==t&&('HTML'===t||p(e.firstElementChild)===e)}function d(e){return null===e.parentNode?e:d(e.parentNode)}function a(e,t){if(!e||!e.nodeType||!t||!t.nodeType)return document.documentElement;var o=e.compareDocumentPosition(t)&Node.DOCUMENT_POSITION_FOLLOWING,n=o?e:t,i=o?t:e,r=document.createRange();r.setStart(n,0),r.setEnd(i,0);var l=r.commonAncestorContainer;if(e!==l&&t!==l||n.contains(i))return s(l)?l:p(l);var f=d(e);return f.host?a(f.host,t):a(e,d(t).host)}function l(e){var t=1=o.clientWidth&&n>=o.clientHeight}),l=0a[e]&&!t.escapeWithReference&&(n=Q(f[o],a[e]-('right'===e?f.width:f.height))),ae({},o,n)}};return l.forEach(function(e){var t=-1===['left','top'].indexOf(e)?'secondary':'primary';f=le({},f,m[t](e))}),e.offsets.popper=f,e},priority:['left','right','top','bottom'],padding:5,boundariesElement:'scrollParent'},keepTogether:{order:400,enabled:!0,fn:function(e){var t=e.offsets,o=t.popper,n=t.reference,i=e.placement.split('-')[0],r=Z,p=-1!==['top','bottom'].indexOf(i),s=p?'right':'bottom',d=p?'left':'top',a=p?'width':'height';return o[s]r(n[s])&&(e.offsets.popper[d]=r(n[s])),e}},arrow:{order:500,enabled:!0,fn:function(e,o){var n;if(!K(e.instance.modifiers,'arrow','keepTogether'))return e;var i=o.element;if('string'==typeof i){if(i=e.instance.popper.querySelector(i),!i)return e;}else if(!e.instance.popper.contains(i))return console.warn('WARNING: `arrow.element` must be child of its popper element!'),e;var r=e.placement.split('-')[0],p=e.offsets,s=p.popper,d=p.reference,a=-1!==['left','right'].indexOf(r),l=a?'height':'width',f=a?'Top':'Left',m=f.toLowerCase(),h=a?'left':'top',c=a?'bottom':'right',u=S(i)[l];d[c]-us[c]&&(e.offsets.popper[m]+=d[m]+u-s[c]),e.offsets.popper=g(e.offsets.popper);var b=d[m]+d[l]/2-u/2,w=t(e.instance.popper),y=parseFloat(w['margin'+f],10),E=parseFloat(w['border'+f+'Width'],10),v=b-e.offsets.popper[m]-y-E;return v=ee(Q(s[l]-u,v),0),e.arrowElement=i,e.offsets.arrow=(n={},ae(n,m,$(v)),ae(n,h,''),n),e},element:'[x-arrow]'},flip:{order:600,enabled:!0,fn:function(e,t){if(W(e.instance.modifiers,'inner'))return e;if(e.flipped&&e.placement===e.originalPlacement)return e;var o=v(e.instance.popper,e.instance.reference,t.padding,t.boundariesElement,e.positionFixed),n=e.placement.split('-')[0],i=T(n),r=e.placement.split('-')[1]||'',p=[];switch(t.behavior){case ce.FLIP:p=[n,i];break;case ce.CLOCKWISE:p=G(n);break;case ce.COUNTERCLOCKWISE:p=G(n,!0);break;default:p=t.behavior;}return p.forEach(function(s,d){if(n!==s||p.length===d+1)return e;n=e.placement.split('-')[0],i=T(n);var a=e.offsets.popper,l=e.offsets.reference,f=Z,m='left'===n&&f(a.right)>f(l.left)||'right'===n&&f(a.left)f(l.top)||'bottom'===n&&f(a.top)f(o.right),g=f(a.top)f(o.bottom),b='left'===n&&h||'right'===n&&c||'top'===n&&g||'bottom'===n&&u,w=-1!==['top','bottom'].indexOf(n),y=!!t.flipVariations&&(w&&'start'===r&&h||w&&'end'===r&&c||!w&&'start'===r&&g||!w&&'end'===r&&u),E=!!t.flipVariationsByContent&&(w&&'start'===r&&c||w&&'end'===r&&h||!w&&'start'===r&&u||!w&&'end'===r&&g),v=y||E;(m||b||v)&&(e.flipped=!0,(m||b)&&(n=p[d+1]),v&&(r=z(r)),e.placement=n+(r?'-'+r:''),e.offsets.popper=le({},e.offsets.popper,C(e.instance.popper,e.offsets.reference,e.placement)),e=P(e.instance.modifiers,e,'flip'))}),e},behavior:'flip',padding:5,boundariesElement:'viewport',flipVariations:!1,flipVariationsByContent:!1},inner:{order:700,enabled:!1,fn:function(e){var t=e.placement,o=t.split('-')[0],n=e.offsets,i=n.popper,r=n.reference,p=-1!==['left','right'].indexOf(o),s=-1===['top','left'].indexOf(o);return i[p?'left':'top']=r[o]-(s?i[p?'width':'height']:0),e.placement=T(t),e.offsets.popper=g(i),e}},hide:{order:800,enabled:!0,fn:function(e){if(!K(e.instance.modifiers,'hide','preventOverflow'))return e;var t=e.offsets.reference,o=D(e.instance.modifiers,function(e){return'preventOverflow'===e.name}).boundaries;if(t.bottomo.right||t.top>o.bottom||t.rightwindow.devicePixelRatio||!fe),c='bottom'===o?'top':'bottom',g='right'===n?'left':'right',b=B('transform');if(d='bottom'==c?'HTML'===l.nodeName?-l.clientHeight+h.bottom:-f.height+h.bottom:h.top,s='right'==g?'HTML'===l.nodeName?-l.clientWidth+h.right:-f.width+h.right:h.left,a&&b)m[b]='translate3d('+s+'px, '+d+'px, 0)',m[c]=0,m[g]=0,m.willChange='transform';else{var w='bottom'==c?-1:1,y='right'==g?-1:1;m[c]=d*w,m[g]=s*y,m.willChange=c+', '+g}var E={"x-placement":e.placement};return e.attributes=le({},E,e.attributes),e.styles=le({},m,e.styles),e.arrowStyles=le({},e.offsets.arrow,e.arrowStyles),e},gpuAcceleration:!0,x:'bottom',y:'right'},applyStyle:{order:900,enabled:!0,fn:function(e){return V(e.instance.popper,e.styles),j(e.instance.popper,e.attributes),e.arrowElement&&Object.keys(e.arrowStyles).length&&V(e.arrowElement,e.arrowStyles),e},onLoad:function(e,t,o,n,i){var r=L(i,t,e,o.positionFixed),p=O(o.placement,r,t,e,o.modifiers.flip.boundariesElement,o.modifiers.flip.padding);return t.setAttribute('x-placement',p),V(t,{position:o.positionFixed?'fixed':'absolute'}),o},gpuAcceleration:void 0}}},ge}); 6 | //# sourceMappingURL=popper.min.js.map -------------------------------------------------------------------------------- /上位机源代码及可执行文件/templates/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 首页|智能大棚 17 | 18 | 19 | 46 |
47 |
48 |

您好,尊敬的用户!

49 |

欢迎使用智能大棚管理页面

50 |

51 | 52 | 53 |

54 |
55 |
56 |
57 |
58 | 59 |
60 | 61 | 62 | 63 | 64 | 65 | 66 | 67 | 68 | 69 | 70 | 71 | 72 | 73 | 74 | 75 |
温度(℃)湿度(%RH)光照(lux)气压(hPa)
实时
上次
变化
76 |
77 |
78 |
79 |
80 |
81 | 82 |
83 |
84 |

85 | 86 | 87 | 88 |

89 |
90 |
91 |
92 |
93 |
94 |
95 |
96 |
棚内温度(℃)
97 |
98 |
99 |
100 |
101 |
102 |
103 |
104 |
棚内湿度(%RH)
105 |
106 |
107 |
108 |
109 |
110 |
111 |
112 |
113 |
114 |
115 |
棚内光照(lux)
116 |
117 |
118 |
119 |
120 |
121 |
122 |
123 |
棚内气压(hPa)
124 |
125 |
126 |
127 |
128 |
129 |
130 |
131 |
132 | 135 |
136 | 531 | 532 | -------------------------------------------------------------------------------- /上位机源代码及可执行文件/sql/e_logs: -------------------------------------------------------------------------------- 1 | INSERT INTO `e_logs` VALUES (1, '1592892440', 1, 0, 0, 0, 0); 2 | INSERT INTO `e_logs` VALUES (2, '1592894060', 0, 1, 0, 0, 0); 3 | INSERT INTO `e_logs` VALUES (3, '1592894102', 1, 0, 0, 0, 0); 4 | INSERT INTO `e_logs` VALUES (4, '1592894136', 1, 0, 0, 0, 0); 5 | INSERT INTO `e_logs` VALUES (5, '1592894163', 1, 0, 0, 0, 0); 6 | INSERT INTO `e_logs` VALUES (6, '1592894189', 1, 0, 0, 0, 0); 7 | INSERT INTO `e_logs` VALUES (7, '1592894216', 1, 0, 0, 0, 0); 8 | INSERT INTO `e_logs` VALUES (8, '1592894243', 1, 0, 0, 0, 0); 9 | INSERT INTO `e_logs` VALUES (9, '1592894269', 1, 0, 0, 0, 0); 10 | INSERT INTO `e_logs` VALUES (10, '1592894302', 1, 0, 0, 0, 0); 11 | INSERT INTO `e_logs` VALUES (11, '1592894332', 1, 0, 0, 0, 0); 12 | INSERT INTO `e_logs` VALUES (12, '1592894360', 1, 1, 0, 0, 0); 13 | INSERT INTO `e_logs` VALUES (13, '1592894388', 1, 1, 0, 0, 0); 14 | INSERT INTO `e_logs` VALUES (14, '1592894415', 1, 1, 0, 0, 0); 15 | INSERT INTO `e_logs` VALUES (15, '1592894476', 1, 1, 0, 0, 0); 16 | INSERT INTO `e_logs` VALUES (16, '1592894503', 1, 1, 0, 0, 0); 17 | INSERT INTO `e_logs` VALUES (17, '1592894530', 1, 1, 0, 0, 0); 18 | INSERT INTO `e_logs` VALUES (18, '1592894558', 1, 1, 0, 0, 0); 19 | INSERT INTO `e_logs` VALUES (19, '1592894589', 1, 1, 0, 0, 0); 20 | INSERT INTO `e_logs` VALUES (20, '1592894630', 1, 1, 0, 0, 0); 21 | INSERT INTO `e_logs` VALUES (21, '1592894658', 1, 1, 0, 0, 0); 22 | INSERT INTO `e_logs` VALUES (22, '1592894686', 1, 1, 0, 0, 0); 23 | INSERT INTO `e_logs` VALUES (23, '1592894715', 1, 1, 0, 0, 0); 24 | INSERT INTO `e_logs` VALUES (24, '1592894742', 1, 1, 0, 0, 0); 25 | INSERT INTO `e_logs` VALUES (25, '1592894768', 1, 1, 0, 0, 0); 26 | INSERT INTO `e_logs` VALUES (26, '1592894795', 1, 1, 0, 0, 0); 27 | INSERT INTO `e_logs` VALUES (27, '1592894822', 1, 1, 0, 0, 0); 28 | INSERT INTO `e_logs` VALUES (28, '1592894848', 1, 1, 0, 0, 0); 29 | INSERT INTO `e_logs` VALUES (29, '1592894875', 1, 1, 0, 0, 0); 30 | INSERT INTO `e_logs` VALUES (30, '1592894902', 1, 1, 0, 0, 0); 31 | INSERT INTO `e_logs` VALUES (31, '1592894929', 1, 1, 0, 0, 0); 32 | INSERT INTO `e_logs` VALUES (32, '1592895740', 1, 1, 0, 0, 0); 33 | INSERT INTO `e_logs` VALUES (33, '1592895771', 1, 0, 0, 0, 0); 34 | INSERT INTO `e_logs` VALUES (34, '1592895798', 1, 0, 0, 0, 0); 35 | INSERT INTO `e_logs` VALUES (35, '1592895826', 1, 0, 0, 0, 0); 36 | INSERT INTO `e_logs` VALUES (36, '1592895853', 1, 0, 0, 0, 0); 37 | INSERT INTO `e_logs` VALUES (37, '1592895882', 1, 0, 0, 0, 0); 38 | INSERT INTO `e_logs` VALUES (38, '1592895912', 1, 0, 0, 0, 0); 39 | INSERT INTO `e_logs` VALUES (39, '1592895941', 1, 0, 0, 0, 0); 40 | INSERT INTO `e_logs` VALUES (40, '1592895968', 1, 0, 0, 0, 0); 41 | INSERT INTO `e_logs` VALUES (41, '1592895997', 1, 0, 0, 0, 0); 42 | INSERT INTO `e_logs` VALUES (42, '1592896028', 0, 0, 0, 0, 0); 43 | INSERT INTO `e_logs` VALUES (43, '1592896603', 1, 0, 0, 0, 0); 44 | INSERT INTO `e_logs` VALUES (44, '1592896794', 1, 1, 0, 0, 0); 45 | INSERT INTO `e_logs` VALUES (45, '1592896811', 1, 1, 0, 0, 0); 46 | INSERT INTO `e_logs` VALUES (46, '1592896828', 1, 1, 0, 0, 0); 47 | INSERT INTO `e_logs` VALUES (47, '1592896845', 0, 1, 0, 0, 0); 48 | INSERT INTO `e_logs` VALUES (48, '1592896863', 0, 1, 0, 0, 0); 49 | INSERT INTO `e_logs` VALUES (49, '1592896879', 0, 1, 0, 0, 0); 50 | INSERT INTO `e_logs` VALUES (50, '1592896894', 0, 1, 0, 0, 0); 51 | INSERT INTO `e_logs` VALUES (51, '1592896913', 0, 1, 0, 0, 0); 52 | INSERT INTO `e_logs` VALUES (52, '1592896931', 0, 1, 0, 0, 0); 53 | INSERT INTO `e_logs` VALUES (53, '1592896947', 0, 1, 0, 0, 0); 54 | INSERT INTO `e_logs` VALUES (54, '1592896966', 0, 1, 0, 0, 0); 55 | INSERT INTO `e_logs` VALUES (55, '1592896982', 1, 0, 0, 0, 0); 56 | INSERT INTO `e_logs` VALUES (56, '1592897000', 1, 0, 0, 0, 0); 57 | INSERT INTO `e_logs` VALUES (57, '1592897017', 1, 0, 0, 1, 0); 58 | INSERT INTO `e_logs` VALUES (58, '1592897035', 1, 0, 0, 1, 0); 59 | INSERT INTO `e_logs` VALUES (59, '1592897051', 0, 0, 0, 1, 0); 60 | INSERT INTO `e_logs` VALUES (60, '1592897067', 0, 0, 0, 1, 0); 61 | INSERT INTO `e_logs` VALUES (61, '1592897084', 0, 0, 0, 1, 0); 62 | INSERT INTO `e_logs` VALUES (62, '1592897101', 0, 0, 0, 0, 0); 63 | INSERT INTO `e_logs` VALUES (63, '1592897118', 0, 0, 0, 0, 0); 64 | INSERT INTO `e_logs` VALUES (64, '1592897860', 1, 0, 0, 1, 0); 65 | INSERT INTO `e_logs` VALUES (65, '1592897869', 1, 0, 0, 1, 0); 66 | INSERT INTO `e_logs` VALUES (66, '1592897877', 1, 0, 0, 1, 0); 67 | INSERT INTO `e_logs` VALUES (67, '1592897885', 1, 0, 0, 1, 0); 68 | INSERT INTO `e_logs` VALUES (68, '1592897894', 1, 0, 0, 1, 0); 69 | INSERT INTO `e_logs` VALUES (69, '1592897901', 1, 0, 0, 0, 0); 70 | INSERT INTO `e_logs` VALUES (70, '1592897908', 1, 0, 0, 0, 0); 71 | INSERT INTO `e_logs` VALUES (71, '1592897915', 1, 0, 0, 0, 0); 72 | INSERT INTO `e_logs` VALUES (72, '1592897923', 1, 0, 0, 0, 0); 73 | INSERT INTO `e_logs` VALUES (73, '1592897930', 1, 0, 0, 0, 0); 74 | INSERT INTO `e_logs` VALUES (74, '1592897938', 1, 0, 0, 0, 0); 75 | INSERT INTO `e_logs` VALUES (75, '1592897948', 1, 0, 0, 0, 0); 76 | INSERT INTO `e_logs` VALUES (76, '1592897956', 1, 0, 0, 0, 0); 77 | INSERT INTO `e_logs` VALUES (77, '1592897963', 1, 0, 0, 0, 0); 78 | INSERT INTO `e_logs` VALUES (78, '1592897970', 1, 0, 0, 0, 0); 79 | INSERT INTO `e_logs` VALUES (79, '1592897979', 1, 0, 0, 0, 0); 80 | INSERT INTO `e_logs` VALUES (80, '1592897987', 1, 0, 0, 0, 0); 81 | INSERT INTO `e_logs` VALUES (81, '1592897992', 1, 0, 0, 0, 0); 82 | INSERT INTO `e_logs` VALUES (82, '1592897998', 1, 0, 0, 0, 0); 83 | INSERT INTO `e_logs` VALUES (83, '1592898004', 1, 0, 0, 0, 0); 84 | INSERT INTO `e_logs` VALUES (84, '1592898013', 1, 0, 0, 0, 0); 85 | INSERT INTO `e_logs` VALUES (85, '1592898020', 1, 0, 0, 0, 0); 86 | INSERT INTO `e_logs` VALUES (86, '1592898027', 0, 0, 0, 0, 0); 87 | INSERT INTO `e_logs` VALUES (87, '1592898033', 0, 0, 0, 0, 0); 88 | INSERT INTO `e_logs` VALUES (88, '1592898041', 0, 0, 0, 0, 0); 89 | INSERT INTO `e_logs` VALUES (89, '1592898050', 0, 0, 0, 0, 0); 90 | INSERT INTO `e_logs` VALUES (90, '1592898058', 0, 1, 0, 0, 0); 91 | INSERT INTO `e_logs` VALUES (91, '1592898065', 0, 1, 1, 0, 0); 92 | INSERT INTO `e_logs` VALUES (92, '1592898072', 0, 1, 1, 0, 0); 93 | INSERT INTO `e_logs` VALUES (93, '1592898083', 0, 1, 1, 0, 0); 94 | INSERT INTO `e_logs` VALUES (94, '1592898089', 0, 1, 1, 1, 0); 95 | INSERT INTO `e_logs` VALUES (95, '1592898099', 0, 1, 1, 1, 0); 96 | INSERT INTO `e_logs` VALUES (96, '1592898110', 0, 1, 1, 1, 0); 97 | INSERT INTO `e_logs` VALUES (97, '1592898117', 0, 1, 1, 1, 0); 98 | INSERT INTO `e_logs` VALUES (98, '1592898125', 0, 1, 1, 1, 0); 99 | INSERT INTO `e_logs` VALUES (99, '1592898133', 0, 1, 1, 1, 0); 100 | INSERT INTO `e_logs` VALUES (100, '1592898141', 0, 1, 1, 1, 0); 101 | INSERT INTO `e_logs` VALUES (101, '1592898148', 0, 1, 1, 1, 0); 102 | INSERT INTO `e_logs` VALUES (102, '1592898157', 0, 1, 1, 1, 0); 103 | INSERT INTO `e_logs` VALUES (103, '1592898167', 0, 1, 1, 1, 0); 104 | INSERT INTO `e_logs` VALUES (104, '1592898173', 0, 1, 1, 1, 0); 105 | INSERT INTO `e_logs` VALUES (105, '1592898179', 0, 1, 1, 1, 0); 106 | INSERT INTO `e_logs` VALUES (106, '1592898186', 0, 1, 1, 1, 0); 107 | INSERT INTO `e_logs` VALUES (107, '1592898192', 0, 1, 1, 1, 0); 108 | INSERT INTO `e_logs` VALUES (108, '1592898204', 0, 1, 1, 1, 0); 109 | INSERT INTO `e_logs` VALUES (109, '1592898213', 0, 1, 1, 1, 0); 110 | INSERT INTO `e_logs` VALUES (110, '1592898221', 0, 1, 1, 1, 1); 111 | INSERT INTO `e_logs` VALUES (111, '1592898232', 0, 1, 1, 1, 1); 112 | INSERT INTO `e_logs` VALUES (112, '1592898240', 0, 1, 1, 1, 1); 113 | INSERT INTO `e_logs` VALUES (113, '1592898248', 0, 1, 1, 1, 1); 114 | INSERT INTO `e_logs` VALUES (114, '1592898277', 1, 0, 0, 0, 0); 115 | INSERT INTO `e_logs` VALUES (115, '1592898288', 1, 0, 0, 0, 0); 116 | INSERT INTO `e_logs` VALUES (116, '1592898297', 1, 0, 0, 0, 0); 117 | INSERT INTO `e_logs` VALUES (117, '1592898308', 1, 0, 0, 0, 0); 118 | INSERT INTO `e_logs` VALUES (118, '1592898316', 1, 0, 0, 0, 0); 119 | INSERT INTO `e_logs` VALUES (119, '1592898324', 1, 0, 0, 0, 0); 120 | INSERT INTO `e_logs` VALUES (120, '1592898332', 1, 0, 0, 0, 0); 121 | INSERT INTO `e_logs` VALUES (121, '1592898339', 1, 0, 0, 0, 0); 122 | INSERT INTO `e_logs` VALUES (122, '1592898345', 1, 0, 0, 0, 0); 123 | INSERT INTO `e_logs` VALUES (123, '1592921153', 1, 0, 0, 0, 0); 124 | INSERT INTO `e_logs` VALUES (124, '1592921158', 1, 0, 0, 0, 0); 125 | INSERT INTO `e_logs` VALUES (125, '1592921163', 1, 0, 0, 0, 0); 126 | INSERT INTO `e_logs` VALUES (126, '1592921169', 1, 0, 0, 0, 0); 127 | INSERT INTO `e_logs` VALUES (127, '1592921174', 1, 0, 0, 0, 0); 128 | INSERT INTO `e_logs` VALUES (128, '1592921180', 1, 0, 0, 0, 0); 129 | INSERT INTO `e_logs` VALUES (129, '1592921186', 1, 0, 0, 0, 0); 130 | INSERT INTO `e_logs` VALUES (130, '1592921206', 1, 0, 0, 0, 0); 131 | INSERT INTO `e_logs` VALUES (131, '1592921214', 1, 0, 0, 0, 0); 132 | INSERT INTO `e_logs` VALUES (132, '1592921220', 1, 0, 0, 0, 0); 133 | INSERT INTO `e_logs` VALUES (133, '1592921227', 1, 0, 0, 0, 0); 134 | INSERT INTO `e_logs` VALUES (134, '1592921233', 1, 0, 0, 0, 0); 135 | INSERT INTO `e_logs` VALUES (135, '1592921239', 1, 0, 0, 0, 0); 136 | INSERT INTO `e_logs` VALUES (136, '1592921245', 1, 0, 0, 0, 0); 137 | INSERT INTO `e_logs` VALUES (137, '1592921251', 1, 0, 0, 0, 0); 138 | INSERT INTO `e_logs` VALUES (138, '1592921258', 1, 0, 0, 0, 0); 139 | INSERT INTO `e_logs` VALUES (139, '1592921264', 1, 0, 0, 0, 0); 140 | INSERT INTO `e_logs` VALUES (140, '1592921270', 1, 0, 0, 0, 0); 141 | INSERT INTO `e_logs` VALUES (141, '1592921277', 1, 0, 0, 0, 0); 142 | INSERT INTO `e_logs` VALUES (142, '1592921283', 1, 0, 0, 0, 0); 143 | INSERT INTO `e_logs` VALUES (143, '1592921291', 1, 0, 0, 0, 0); 144 | INSERT INTO `e_logs` VALUES (144, '1592921297', 1, 0, 0, 0, 0); 145 | INSERT INTO `e_logs` VALUES (145, '1592921304', 1, 0, 0, 0, 0); 146 | INSERT INTO `e_logs` VALUES (146, '1592921310', 1, 0, 0, 0, 0); 147 | INSERT INTO `e_logs` VALUES (147, '1592932208', 1, 0, 0, 0, 0); 148 | INSERT INTO `e_logs` VALUES (148, '1592932214', 1, 0, 0, 0, 0); 149 | INSERT INTO `e_logs` VALUES (149, '1592932219', 1, 0, 0, 0, 0); 150 | INSERT INTO `e_logs` VALUES (150, '1592932238', 1, 0, 0, 0, 0); 151 | INSERT INTO `e_logs` VALUES (151, '1592932245', 1, 0, 0, 0, 0); 152 | INSERT INTO `e_logs` VALUES (152, '1592932263', 1, 0, 0, 0, 0); 153 | INSERT INTO `e_logs` VALUES (153, '1592932268', 1, 0, 0, 0, 0); 154 | INSERT INTO `e_logs` VALUES (154, '1592932274', 1, 0, 0, 0, 0); 155 | INSERT INTO `e_logs` VALUES (155, '1592932280', 1, 0, 0, 0, 0); 156 | INSERT INTO `e_logs` VALUES (156, '1592932287', 1, 0, 0, 0, 0); 157 | INSERT INTO `e_logs` VALUES (157, '1592932293', 1, 0, 0, 0, 0); 158 | INSERT INTO `e_logs` VALUES (158, '1592932300', 1, 0, 0, 0, 0); 159 | INSERT INTO `e_logs` VALUES (159, '1592932306', 1, 0, 0, 0, 0); 160 | INSERT INTO `e_logs` VALUES (160, '1592932312', 1, 0, 0, 0, 0); 161 | INSERT INTO `e_logs` VALUES (161, '1592932318', 1, 0, 0, 0, 0); 162 | INSERT INTO `e_logs` VALUES (162, '1592932323', 1, 0, 0, 0, 0); 163 | INSERT INTO `e_logs` VALUES (163, '1592932330', 1, 0, 0, 0, 0); 164 | INSERT INTO `e_logs` VALUES (164, '1592932336', 1, 0, 0, 0, 0); 165 | INSERT INTO `e_logs` VALUES (165, '1592932342', 1, 0, 0, 0, 0); 166 | INSERT INTO `e_logs` VALUES (166, '1592932348', 1, 0, 0, 0, 0); 167 | INSERT INTO `e_logs` VALUES (167, '1592932355', 1, 0, 0, 0, 0); 168 | INSERT INTO `e_logs` VALUES (168, '1592932361', 1, 0, 0, 0, 0); 169 | INSERT INTO `e_logs` VALUES (169, '1592932368', 1, 0, 0, 0, 0); 170 | INSERT INTO `e_logs` VALUES (170, '1592932374', 1, 0, 0, 0, 0); 171 | INSERT INTO `e_logs` VALUES (171, '1592932380', 1, 0, 0, 0, 0); 172 | INSERT INTO `e_logs` VALUES (172, '1592932386', 1, 0, 0, 0, 0); 173 | INSERT INTO `e_logs` VALUES (173, '1592932391', 1, 0, 0, 0, 0); 174 | INSERT INTO `e_logs` VALUES (174, '1592932397', 1, 0, 0, 0, 0); 175 | INSERT INTO `e_logs` VALUES (175, '1592932404', 1, 0, 0, 0, 0); 176 | INSERT INTO `e_logs` VALUES (176, '1592932410', 1, 0, 0, 0, 0); 177 | INSERT INTO `e_logs` VALUES (177, '1592932416', 1, 0, 0, 0, 0); 178 | INSERT INTO `e_logs` VALUES (178, '1592932422', 1, 0, 0, 0, 0); 179 | INSERT INTO `e_logs` VALUES (179, '1592932429', 1, 0, 0, 0, 0); 180 | INSERT INTO `e_logs` VALUES (180, '1592932435', 1, 0, 0, 0, 0); 181 | INSERT INTO `e_logs` VALUES (181, '1592932441', 1, 0, 0, 0, 0); 182 | INSERT INTO `e_logs` VALUES (182, '1592932448', 1, 0, 0, 0, 0); 183 | INSERT INTO `e_logs` VALUES (183, '1592932454', 1, 0, 0, 0, 0); 184 | INSERT INTO `e_logs` VALUES (184, '1592932461', 1, 0, 0, 0, 0); 185 | INSERT INTO `e_logs` VALUES (185, '1592932479', 1, 0, 0, 0, 0); 186 | INSERT INTO `e_logs` VALUES (186, '1592932485', 1, 0, 0, 0, 0); 187 | INSERT INTO `e_logs` VALUES (187, '1592932491', 1, 0, 0, 0, 0); 188 | INSERT INTO `e_logs` VALUES (188, '1592932498', 1, 0, 0, 0, 0); 189 | INSERT INTO `e_logs` VALUES (189, '1592932504', 1, 0, 0, 0, 0); 190 | INSERT INTO `e_logs` VALUES (190, '1592932510', 1, 0, 0, 0, 0); 191 | INSERT INTO `e_logs` VALUES (191, '1592932516', 1, 0, 0, 0, 0); 192 | INSERT INTO `e_logs` VALUES (192, '1592932522', 1, 0, 0, 0, 0); 193 | INSERT INTO `e_logs` VALUES (193, '1592932528', 1, 0, 0, 0, 0); 194 | INSERT INTO `e_logs` VALUES (194, '1592932534', 1, 0, 0, 0, 0); 195 | INSERT INTO `e_logs` VALUES (195, '1592932540', 1, 0, 0, 0, 0); 196 | INSERT INTO `e_logs` VALUES (196, '1592932546', 1, 0, 0, 0, 0); 197 | INSERT INTO `e_logs` VALUES (197, '1592932552', 1, 0, 0, 0, 0); 198 | INSERT INTO `e_logs` VALUES (198, '1592932558', 1, 0, 0, 0, 0); 199 | INSERT INTO `e_logs` VALUES (199, '1592932564', 1, 0, 0, 0, 0); 200 | INSERT INTO `e_logs` VALUES (200, '1592932582', 1, 0, 0, 0, 0); 201 | INSERT INTO `e_logs` VALUES (201, '1592932589', 1, 0, 0, 0, 0); 202 | INSERT INTO `e_logs` VALUES (202, '1592932595', 1, 0, 0, 0, 0); 203 | INSERT INTO `e_logs` VALUES (203, '1592932601', 1, 0, 0, 0, 0); 204 | INSERT INTO `e_logs` VALUES (204, '1592932607', 1, 0, 0, 0, 0); 205 | INSERT INTO `e_logs` VALUES (205, '1592932613', 1, 0, 0, 0, 0); 206 | INSERT INTO `e_logs` VALUES (206, '1592932619', 1, 0, 0, 0, 0); 207 | INSERT INTO `e_logs` VALUES (207, '1592932625', 1, 0, 0, 0, 0); 208 | INSERT INTO `e_logs` VALUES (208, '1592932632', 1, 0, 0, 0, 0); 209 | INSERT INTO `e_logs` VALUES (209, '1592932638', 1, 0, 0, 0, 0); 210 | INSERT INTO `e_logs` VALUES (210, '1592932644', 1, 0, 0, 0, 0); 211 | INSERT INTO `e_logs` VALUES (211, '1592932650', 1, 0, 0, 0, 0); 212 | INSERT INTO `e_logs` VALUES (212, '1592932656', 1, 0, 0, 0, 0); 213 | INSERT INTO `e_logs` VALUES (213, '1592932662', 1, 0, 0, 0, 0); 214 | INSERT INTO `e_logs` VALUES (214, '1592932668', 1, 0, 0, 0, 0); 215 | INSERT INTO `e_logs` VALUES (215, '1592932674', 1, 0, 0, 0, 0); 216 | INSERT INTO `e_logs` VALUES (216, '1592932680', 1, 0, 0, 0, 0); 217 | INSERT INTO `e_logs` VALUES (217, '1592932686', 1, 0, 0, 0, 0); 218 | INSERT INTO `e_logs` VALUES (218, '1592932692', 1, 0, 0, 0, 0); 219 | INSERT INTO `e_logs` VALUES (219, '1592932699', 1, 0, 0, 0, 0); 220 | INSERT INTO `e_logs` VALUES (220, '1592932705', 1, 0, 0, 0, 0); 221 | INSERT INTO `e_logs` VALUES (221, '1592932711', 0, 0, 0, 0, 0); 222 | INSERT INTO `e_logs` VALUES (222, '1592932716', 0, 0, 0, 0, 0); 223 | INSERT INTO `e_logs` VALUES (223, '1592932723', 0, 0, 0, 0, 0); 224 | INSERT INTO `e_logs` VALUES (224, '1592932739', 0, 1, 0, 0, 0); 225 | INSERT INTO `e_logs` VALUES (225, '1592932747', 0, 1, 0, 0, 0); 226 | INSERT INTO `e_logs` VALUES (226, '1592932753', 0, 1, 0, 0, 0); 227 | INSERT INTO `e_logs` VALUES (227, '1592932760', 0, 1, 0, 0, 0); 228 | INSERT INTO `e_logs` VALUES (228, '1592932766', 0, 1, 0, 0, 0); 229 | INSERT INTO `e_logs` VALUES (229, '1592932771', 0, 1, 0, 0, 0); 230 | INSERT INTO `e_logs` VALUES (230, '1592932777', 0, 1, 0, 0, 0); 231 | INSERT INTO `e_logs` VALUES (231, '1592932785', 0, 1, 0, 0, 0); 232 | INSERT INTO `e_logs` VALUES (232, '1592932791', 0, 1, 0, 0, 0); 233 | INSERT INTO `e_logs` VALUES (233, '1592932797', 0, 1, 0, 0, 0); 234 | INSERT INTO `e_logs` VALUES (234, '1592932803', 0, 1, 0, 0, 0); 235 | INSERT INTO `e_logs` VALUES (235, '1592932811', 0, 1, 0, 0, 0); 236 | INSERT INTO `e_logs` VALUES (236, '1592932817', 0, 1, 0, 0, 0); 237 | INSERT INTO `e_logs` VALUES (237, '1592932825', 0, 1, 0, 0, 0); 238 | INSERT INTO `e_logs` VALUES (238, '1592932832', 0, 1, 0, 0, 1); 239 | INSERT INTO `e_logs` VALUES (239, '1592932839', 0, 1, 0, 0, 1); 240 | INSERT INTO `e_logs` VALUES (240, '1592932845', 0, 1, 0, 0, 1); 241 | INSERT INTO `e_logs` VALUES (241, '1592932852', 0, 1, 0, 0, 1); 242 | INSERT INTO `e_logs` VALUES (242, '1592932860', 0, 1, 0, 0, 1); 243 | INSERT INTO `e_logs` VALUES (243, '1592932866', 0, 1, 0, 0, 1); 244 | INSERT INTO `e_logs` VALUES (244, '1592932874', 0, 1, 0, 0, 1); 245 | INSERT INTO `e_logs` VALUES (245, '1592932881', 0, 1, 0, 0, 1); 246 | INSERT INTO `e_logs` VALUES (246, '1592932887', 0, 1, 0, 0, 1); 247 | INSERT INTO `e_logs` VALUES (247, '1592932894', 0, 1, 0, 0, 1); 248 | INSERT INTO `e_logs` VALUES (248, '1592932900', 0, 1, 0, 0, 1); 249 | INSERT INTO `e_logs` VALUES (249, '1592932907', 0, 1, 0, 0, 1); 250 | INSERT INTO `e_logs` VALUES (250, '1592932925', 0, 1, 0, 0, 1); 251 | INSERT INTO `e_logs` VALUES (251, '1592932931', 0, 1, 0, 0, 1); 252 | INSERT INTO `e_logs` VALUES (252, '1592932938', 0, 1, 0, 0, 1); 253 | INSERT INTO `e_logs` VALUES (253, '1592932945', 0, 1, 0, 0, 1); 254 | INSERT INTO `e_logs` VALUES (254, '1592932951', 0, 1, 0, 0, 1); 255 | INSERT INTO `e_logs` VALUES (255, '1592932958', 0, 1, 0, 0, 1); 256 | INSERT INTO `e_logs` VALUES (256, '1592932965', 0, 1, 0, 0, 1); 257 | INSERT INTO `e_logs` VALUES (257, '1592932971', 0, 1, 0, 0, 1); 258 | INSERT INTO `e_logs` VALUES (258, '1592932978', 0, 1, 0, 0, 1); 259 | INSERT INTO `e_logs` VALUES (259, '1592932985', 0, 1, 0, 0, 1); 260 | INSERT INTO `e_logs` VALUES (260, '1592932991', 0, 1, 0, 0, 1); 261 | INSERT INTO `e_logs` VALUES (261, '1592932997', 0, 1, 0, 0, 1); 262 | INSERT INTO `e_logs` VALUES (262, '1592933002', 0, 1, 0, 0, 1); 263 | INSERT INTO `e_logs` VALUES (263, '1592933008', 0, 1, 0, 0, 1); 264 | INSERT INTO `e_logs` VALUES (264, '1592933014', 0, 1, 0, 0, 1); 265 | INSERT INTO `e_logs` VALUES (265, '1592933019', 0, 1, 0, 0, 1); 266 | INSERT INTO `e_logs` VALUES (266, '1592933025', 0, 1, 0, 0, 1); 267 | INSERT INTO `e_logs` VALUES (267, '1592933031', 0, 1, 0, 0, 1); 268 | INSERT INTO `e_logs` VALUES (268, '1592933037', 0, 1, 0, 0, 1); 269 | INSERT INTO `e_logs` VALUES (269, '1592933044', 0, 1, 0, 0, 1); 270 | INSERT INTO `e_logs` VALUES (270, '1592933050', 0, 1, 0, 0, 1); 271 | INSERT INTO `e_logs` VALUES (271, '1592933056', 0, 1, 0, 0, 1); 272 | INSERT INTO `e_logs` VALUES (272, '1592933062', 0, 1, 0, 0, 1); 273 | INSERT INTO `e_logs` VALUES (273, '1592933069', 0, 1, 0, 0, 1); 274 | INSERT INTO `e_logs` VALUES (274, '1592933077', 0, 1, 0, 0, 1); 275 | INSERT INTO `e_logs` VALUES (275, '1592933082', 0, 1, 0, 0, 1); 276 | INSERT INTO `e_logs` VALUES (276, '1592933088', 0, 1, 0, 0, 1); 277 | INSERT INTO `e_logs` VALUES (277, '1592933094', 0, 1, 0, 0, 1); 278 | INSERT INTO `e_logs` VALUES (278, '1592933100', 0, 1, 0, 0, 1); 279 | INSERT INTO `e_logs` VALUES (279, '1592933107', 0, 1, 0, 0, 1); 280 | INSERT INTO `e_logs` VALUES (280, '1592933113', 0, 1, 0, 0, 1); 281 | INSERT INTO `e_logs` VALUES (281, '1592933119', 0, 1, 0, 0, 1); 282 | INSERT INTO `e_logs` VALUES (282, '1592933125', 0, 1, 0, 0, 1); 283 | INSERT INTO `e_logs` VALUES (283, '1592933130', 0, 1, 0, 0, 1); 284 | INSERT INTO `e_logs` VALUES (284, '1592933136', 0, 1, 0, 0, 1); 285 | INSERT INTO `e_logs` VALUES (285, '1592933141', 0, 1, 0, 0, 1); 286 | INSERT INTO `e_logs` VALUES (286, '1592933147', 0, 1, 0, 0, 1); 287 | INSERT INTO `e_logs` VALUES (287, '1592933153', 0, 1, 0, 0, 1); 288 | INSERT INTO `e_logs` VALUES (288, '1592933158', 0, 1, 0, 0, 1); 289 | INSERT INTO `e_logs` VALUES (289, '1592933164', 0, 1, 0, 0, 1); 290 | INSERT INTO `e_logs` VALUES (290, '1592933170', 0, 1, 0, 0, 1); 291 | INSERT INTO `e_logs` VALUES (291, '1592933176', 0, 1, 0, 0, 1); 292 | INSERT INTO `e_logs` VALUES (292, '1592933182', 0, 1, 0, 0, 1); 293 | INSERT INTO `e_logs` VALUES (293, '1592933188', 0, 1, 0, 0, 1); 294 | INSERT INTO `e_logs` VALUES (294, '1592933194', 0, 1, 0, 0, 1); 295 | INSERT INTO `e_logs` VALUES (295, '1592933200', 0, 1, 0, 0, 1); 296 | INSERT INTO `e_logs` VALUES (296, '1592933206', 0, 1, 0, 0, 1); 297 | INSERT INTO `e_logs` VALUES (297, '1592933212', 0, 1, 0, 0, 1); 298 | INSERT INTO `e_logs` VALUES (298, '1592934522', 1, 0, 0, 0, 0); 299 | INSERT INTO `e_logs` VALUES (299, '1592934533', 1, 0, 0, 0, 0); 300 | INSERT INTO `e_logs` VALUES (300, '1592934542', 1, 0, 0, 0, 0); 301 | INSERT INTO `e_logs` VALUES (301, '1592934550', 1, 0, 0, 0, 0); 302 | INSERT INTO `e_logs` VALUES (302, '1592934558', 0, 0, 0, 0, 0); 303 | INSERT INTO `e_logs` VALUES (303, '1592934566', 0, 0, 0, 0, 0); 304 | INSERT INTO `e_logs` VALUES (304, '1592934576', 0, 0, 0, 0, 0); 305 | INSERT INTO `e_logs` VALUES (305, '1592934590', 0, 0, 0, 0, 0); 306 | INSERT INTO `e_logs` VALUES (306, '1592934599', 0, 1, 0, 0, 0); 307 | INSERT INTO `e_logs` VALUES (307, '1592934607', 0, 1, 0, 0, 1); 308 | INSERT INTO `e_logs` VALUES (308, '1592934622', 0, 1, 0, 0, 1); 309 | INSERT INTO `e_logs` VALUES (309, '1592934633', 0, 1, 0, 0, 1); 310 | INSERT INTO `e_logs` VALUES (310, '1592934641', 0, 1, 0, 0, 1); 311 | INSERT INTO `e_logs` VALUES (311, '1592934653', 0, 1, 0, 0, 1); 312 | INSERT INTO `e_logs` VALUES (312, '1592934663', 0, 1, 0, 0, 1); 313 | INSERT INTO `e_logs` VALUES (313, '1592934671', 1, 1, 0, 0, 0); 314 | INSERT INTO `e_logs` VALUES (314, '1592934685', 1, 0, 0, 0, 0); 315 | INSERT INTO `e_logs` VALUES (315, '1592934698', 1, 0, 0, 0, 0); 316 | INSERT INTO `e_logs` VALUES (316, '1592934712', 1, 0, 0, 0, 0); 317 | INSERT INTO `e_logs` VALUES (317, '1592934741', 1, 0, 0, 0, 0); 318 | INSERT INTO `e_logs` VALUES (318, '1592934750', 1, 0, 0, 0, 0); 319 | INSERT INTO `e_logs` VALUES (319, '1592934756', 1, 0, 0, 0, 0); 320 | INSERT INTO `e_logs` VALUES (320, '1592934761', 1, 0, 0, 0, 0); 321 | INSERT INTO `e_logs` VALUES (321, '1592934767', 1, 0, 0, 0, 0); 322 | INSERT INTO `e_logs` VALUES (322, '1592934772', 1, 0, 0, 0, 0); 323 | INSERT INTO `e_logs` VALUES (323, '1592934777', 1, 0, 0, 0, 0); 324 | INSERT INTO `e_logs` VALUES (324, '1592934782', 1, 0, 0, 0, 0); 325 | INSERT INTO `e_logs` VALUES (325, '1592934788', 1, 0, 0, 0, 0); 326 | INSERT INTO `e_logs` VALUES (326, '1592934794', 1, 0, 0, 0, 0); 327 | INSERT INTO `e_logs` VALUES (327, '1592934802', 1, 0, 0, 0, 0); 328 | INSERT INTO `e_logs` VALUES (328, '1592934809', 1, 0, 0, 0, 0); 329 | INSERT INTO `e_logs` VALUES (329, '1592934816', 1, 0, 0, 0, 0); 330 | INSERT INTO `e_logs` VALUES (330, '1592934823', 1, 0, 0, 0, 0); 331 | INSERT INTO `e_logs` VALUES (331, '1592934829', 1, 0, 0, 0, 0); 332 | INSERT INTO `e_logs` VALUES (332, '1592934837', 1, 0, 0, 0, 0); 333 | INSERT INTO `e_logs` VALUES (333, '1592934843', 1, 0, 0, 0, 0); 334 | INSERT INTO `e_logs` VALUES (334, '1592934850', 1, 0, 0, 0, 0); 335 | INSERT INTO `e_logs` VALUES (335, '1592934856', 1, 0, 0, 0, 0); 336 | INSERT INTO `e_logs` VALUES (336, '1592934863', 1, 0, 0, 0, 0); 337 | INSERT INTO `e_logs` VALUES (337, '1592934870', 1, 0, 0, 0, 0); 338 | INSERT INTO `e_logs` VALUES (338, '1592934876', 1, 0, 0, 0, 0); 339 | INSERT INTO `e_logs` VALUES (339, '1592934883', 1, 0, 0, 0, 0); 340 | INSERT INTO `e_logs` VALUES (340, '1592934889', 1, 0, 0, 0, 0); 341 | INSERT INTO `e_logs` VALUES (341, '1592934896', 1, 0, 0, 0, 0); 342 | INSERT INTO `e_logs` VALUES (342, '1592934902', 1, 0, 0, 0, 0); 343 | INSERT INTO `e_logs` VALUES (343, '1592934909', 1, 0, 0, 0, 0); 344 | INSERT INTO `e_logs` VALUES (344, '1592934915', 1, 0, 0, 0, 0); 345 | INSERT INTO `e_logs` VALUES (345, '1592934922', 1, 0, 0, 0, 0); 346 | INSERT INTO `e_logs` VALUES (346, '1592934928', 1, 0, 0, 0, 0); 347 | INSERT INTO `e_logs` VALUES (347, '1592934934', 1, 0, 0, 0, 0); 348 | INSERT INTO `e_logs` VALUES (348, '1592934941', 1, 0, 0, 0, 0); 349 | INSERT INTO `e_logs` VALUES (349, '1592934947', 1, 0, 0, 0, 0); 350 | INSERT INTO `e_logs` VALUES (350, '1592934954', 1, 0, 0, 0, 0); 351 | INSERT INTO `e_logs` VALUES (351, '1592934961', 1, 0, 0, 0, 0); 352 | INSERT INTO `e_logs` VALUES (352, '1592934967', 1, 0, 0, 0, 0); 353 | INSERT INTO `e_logs` VALUES (353, '1592934974', 1, 0, 0, 0, 0); 354 | INSERT INTO `e_logs` VALUES (354, '1592934980', 1, 0, 0, 0, 0); 355 | INSERT INTO `e_logs` VALUES (355, '1592934987', 1, 0, 0, 0, 0); 356 | INSERT INTO `e_logs` VALUES (356, '1592934993', 1, 0, 0, 0, 0); 357 | INSERT INTO `e_logs` VALUES (357, '1592935000', 1, 0, 0, 0, 0); 358 | INSERT INTO `e_logs` VALUES (358, '1592935006', 1, 0, 0, 0, 0); 359 | INSERT INTO `e_logs` VALUES (359, '1592935012', 1, 0, 0, 0, 0); 360 | INSERT INTO `e_logs` VALUES (360, '1592935019', 1, 0, 0, 0, 0); 361 | INSERT INTO `e_logs` VALUES (361, '1592935025', 1, 0, 0, 0, 0); 362 | INSERT INTO `e_logs` VALUES (362, '1592935032', 1, 0, 0, 0, 0); 363 | INSERT INTO `e_logs` VALUES (363, '1592935038', 1, 0, 0, 0, 0); 364 | INSERT INTO `e_logs` VALUES (364, '1592935045', 1, 0, 0, 0, 0); 365 | INSERT INTO `e_logs` VALUES (365, '1592935053', 1, 0, 0, 0, 0); 366 | INSERT INTO `e_logs` VALUES (366, '1592935060', 1, 0, 0, 0, 0); 367 | INSERT INTO `e_logs` VALUES (367, '1592935066', 1, 0, 0, 0, 0); 368 | INSERT INTO `e_logs` VALUES (368, '1592935073', 1, 0, 0, 0, 0); 369 | INSERT INTO `e_logs` VALUES (369, '1592935080', 1, 0, 0, 0, 0); 370 | INSERT INTO `e_logs` VALUES (370, '1592935087', 1, 0, 0, 0, 0); 371 | INSERT INTO `e_logs` VALUES (371, '1592935093', 1, 0, 0, 0, 0); 372 | INSERT INTO `e_logs` VALUES (372, '1592935100', 1, 0, 0, 0, 0); 373 | INSERT INTO `e_logs` VALUES (373, '1592935107', 1, 0, 0, 0, 0); 374 | INSERT INTO `e_logs` VALUES (374, '1592935113', 1, 0, 0, 0, 0); 375 | INSERT INTO `e_logs` VALUES (375, '1592935119', 1, 0, 0, 0, 0); 376 | INSERT INTO `e_logs` VALUES (376, '1592935125', 1, 0, 0, 0, 0); 377 | INSERT INTO `e_logs` VALUES (377, '1592935132', 1, 0, 0, 0, 0); 378 | INSERT INTO `e_logs` VALUES (378, '1592935138', 1, 0, 0, 0, 0); 379 | INSERT INTO `e_logs` VALUES (379, '1592935144', 1, 0, 0, 0, 0); 380 | INSERT INTO `e_logs` VALUES (380, '1592935149', 1, 0, 0, 0, 0); 381 | INSERT INTO `e_logs` VALUES (381, '1592935155', 1, 0, 0, 0, 0); 382 | INSERT INTO `e_logs` VALUES (382, '1592935160', 1, 0, 0, 0, 0); 383 | -------------------------------------------------------------------------------- /上位机源代码及可执行文件/sql/logs: -------------------------------------------------------------------------------- 1 | INSERT INTO `logs` VALUES (1, '1592894060', 36, 70, 199, 101299); 2 | INSERT INTO `logs` VALUES (2, '1592894102', 34, 70, 199, 101299); 3 | INSERT INTO `logs` VALUES (3, '1592894136', 34, 70, 199, 101299); 4 | INSERT INTO `logs` VALUES (4, '1592894163', 34, 70, 199, 101299); 5 | INSERT INTO `logs` VALUES (5, '1592894189', 34, 70, 199, 101299); 6 | INSERT INTO `logs` VALUES (6, '1592894215', 34, 70, 199, 101299); 7 | INSERT INTO `logs` VALUES (7, '1592894243', 34, 70, 199, 101299); 8 | INSERT INTO `logs` VALUES (8, '1592894269', 34, 70, 199, 101299); 9 | INSERT INTO `logs` VALUES (9, '1592894302', 34, 70, 199, 101299); 10 | INSERT INTO `logs` VALUES (10, '1592894332', 34, 70, 199, 101299); 11 | INSERT INTO `logs` VALUES (11, '1592894360', 36, 70, 199, 101299); 12 | INSERT INTO `logs` VALUES (12, '1592894388', 36, 70, 199, 101299); 13 | INSERT INTO `logs` VALUES (13, '1592894415', 36, 70, 199, 101299); 14 | INSERT INTO `logs` VALUES (14, '1592894447', 36, 70, 199, 101299); 15 | INSERT INTO `logs` VALUES (15, '1592894476', 36, 70, 199, 101299); 16 | INSERT INTO `logs` VALUES (16, '1592894503', 36, 70, 199, 101299); 17 | INSERT INTO `logs` VALUES (17, '1592894530', 36, 70, 199, 101299); 18 | INSERT INTO `logs` VALUES (18, '1592894558', 36, 70, 199, 101299); 19 | INSERT INTO `logs` VALUES (19, '1592894589', 36, 70, 199, 101299); 20 | INSERT INTO `logs` VALUES (20, '1592894630', 36, 70, 199, 101299); 21 | INSERT INTO `logs` VALUES (21, '1592894658', 36, 70, 199, 101299); 22 | INSERT INTO `logs` VALUES (22, '1592894686', 36, 70, 199, 101299); 23 | INSERT INTO `logs` VALUES (23, '1592894715', 36, 70, 199, 101299); 24 | INSERT INTO `logs` VALUES (24, '1592894742', 36, 70, 199, 101299); 25 | INSERT INTO `logs` VALUES (25, '1592894768', 36, 70, 199, 101299); 26 | INSERT INTO `logs` VALUES (26, '1592894795', 36, 70, 199, 101299); 27 | INSERT INTO `logs` VALUES (27, '1592894822', 36, 70, 199, 101299); 28 | INSERT INTO `logs` VALUES (28, '1592894848', 36, 70, 199, 101299); 29 | INSERT INTO `logs` VALUES (29, '1592894875', 36, 70, 199, 101299); 30 | INSERT INTO `logs` VALUES (30, '1592894902', 36, 70, 199, 101299); 31 | INSERT INTO `logs` VALUES (31, '1592894929', 36, 70, 199, 101299); 32 | INSERT INTO `logs` VALUES (32, '1592895740', 36, 70, 199, 101299); 33 | INSERT INTO `logs` VALUES (33, '1592895771', 35, 70, 199, 101299); 34 | INSERT INTO `logs` VALUES (34, '1592895798', 35, 70, 199, 101299); 35 | INSERT INTO `logs` VALUES (35, '1592895826', 35, 70, 199, 101299); 36 | INSERT INTO `logs` VALUES (36, '1592895853', 35, 70, 199, 101299); 37 | INSERT INTO `logs` VALUES (37, '1592895882', 35, 70, 199, 101299); 38 | INSERT INTO `logs` VALUES (38, '1592895912', 35, 70, 49, 101299); 39 | INSERT INTO `logs` VALUES (39, '1592895941', 35, 70, 49, 101299); 40 | INSERT INTO `logs` VALUES (40, '1592895968', 35, 70, 49, 101299); 41 | INSERT INTO `logs` VALUES (41, '1592895997', 35, 70, 49, 101299); 42 | INSERT INTO `logs` VALUES (42, '1592896028', 35, 70, 49, 101299); 43 | INSERT INTO `logs` VALUES (43, '1592896603', 35, 70, 49, 101299); 44 | INSERT INTO `logs` VALUES (44, '1592896794', 36, 70, 49, 101299); 45 | INSERT INTO `logs` VALUES (45, '1592896811', 36, 70, 49, 101299); 46 | INSERT INTO `logs` VALUES (46, '1592896828', 36, 70, 49, 101299); 47 | INSERT INTO `logs` VALUES (47, '1592896845', 36, 70, 49, 101299); 48 | INSERT INTO `logs` VALUES (48, '1592896863', 36, 70, 49, 101299); 49 | INSERT INTO `logs` VALUES (49, '1592896879', 36, 70, 49, 101299); 50 | INSERT INTO `logs` VALUES (50, '1592896894', 36, 70, 49, 101299); 51 | INSERT INTO `logs` VALUES (51, '1592896913', 36, 70, 49, 101299); 52 | INSERT INTO `logs` VALUES (52, '1592896931', 36, 70, 49, 101299); 53 | INSERT INTO `logs` VALUES (53, '1592896947', 36, 70, 49, 101299); 54 | INSERT INTO `logs` VALUES (54, '1592896966', 35, 70, 113, 101299); 55 | INSERT INTO `logs` VALUES (55, '1592896982', 35, 70, 139, 101299); 56 | INSERT INTO `logs` VALUES (56, '1592897000', 35, 70, 139, 101299); 57 | INSERT INTO `logs` VALUES (57, '1592897017', 35, 70, 215, 101299); 58 | INSERT INTO `logs` VALUES (58, '1592897035', 35, 70, 215, 101299); 59 | INSERT INTO `logs` VALUES (59, '1592897051', 35, 70, 215, 101299); 60 | INSERT INTO `logs` VALUES (60, '1592897067', 35, 70, 215, 101299); 61 | INSERT INTO `logs` VALUES (61, '1592897084', 35, 70, 215, 101299); 62 | INSERT INTO `logs` VALUES (62, '1592897101', 35, 70, 215, 101299); 63 | INSERT INTO `logs` VALUES (63, '1592897118', 35, 70, 215, 101299); 64 | INSERT INTO `logs` VALUES (64, '1592897860', 35, 70, 215, 101299); 65 | INSERT INTO `logs` VALUES (65, '1592897869', 35, 70, 215, 101299); 66 | INSERT INTO `logs` VALUES (66, '1592897877', 35, 70, 215, 101299); 67 | INSERT INTO `logs` VALUES (67, '1592897885', 35, 70, 215, 101299); 68 | INSERT INTO `logs` VALUES (68, '1592897894', 35, 70, 215, 101299); 69 | INSERT INTO `logs` VALUES (69, '1592897901', 35, 70, 49, 101299); 70 | INSERT INTO `logs` VALUES (70, '1592897908', 35, 70, 49, 101299); 71 | INSERT INTO `logs` VALUES (71, '1592897915', 35, 70, 49, 101299); 72 | INSERT INTO `logs` VALUES (72, '1592897923', 35, 70, 49, 101299); 73 | INSERT INTO `logs` VALUES (73, '1592897930', 35, 70, 49, 101299); 74 | INSERT INTO `logs` VALUES (74, '1592897938', 35, 70, 49, 101299); 75 | INSERT INTO `logs` VALUES (75, '1592897948', 35, 70, 49, 101299); 76 | INSERT INTO `logs` VALUES (76, '1592897956', 35, 70, 49, 101299); 77 | INSERT INTO `logs` VALUES (77, '1592897963', 35, 70, 49, 101299); 78 | INSERT INTO `logs` VALUES (78, '1592897970', 35, 70, 49, 101299); 79 | INSERT INTO `logs` VALUES (79, '1592897979', 35, 70, 49, 101299); 80 | INSERT INTO `logs` VALUES (80, '1592897987', 35, 70, 49, 101299); 81 | INSERT INTO `logs` VALUES (81, '1592897992', 35, 70, 49, 101299); 82 | INSERT INTO `logs` VALUES (82, '1592897998', 35, 70, 49, 101299); 83 | INSERT INTO `logs` VALUES (83, '1592898004', 35, 70, 49, 101299); 84 | INSERT INTO `logs` VALUES (84, '1592898013', 35, 70, 49, 101299); 85 | INSERT INTO `logs` VALUES (85, '1592898020', 35, 70, 49, 101299); 86 | INSERT INTO `logs` VALUES (86, '1592898027', 35, 70, 49, 101299); 87 | INSERT INTO `logs` VALUES (87, '1592898033', 35, 70, 49, 101299); 88 | INSERT INTO `logs` VALUES (88, '1592898041', 35, 70, 49, 101299); 89 | INSERT INTO `logs` VALUES (89, '1592898050', 35, 70, 49, 101299); 90 | INSERT INTO `logs` VALUES (90, '1592898058', 35, 70, 49, 101299); 91 | INSERT INTO `logs` VALUES (91, '1592898065', 35, 70, 49, 101299); 92 | INSERT INTO `logs` VALUES (92, '1592898072', 35, 70, 49, 101299); 93 | INSERT INTO `logs` VALUES (93, '1592898082', 35, 70, 49, 101299); 94 | INSERT INTO `logs` VALUES (94, '1592898089', 35, 70, 49, 101299); 95 | INSERT INTO `logs` VALUES (95, '1592898099', 35, 70, 49, 101299); 96 | INSERT INTO `logs` VALUES (96, '1592898110', 35, 70, 49, 101299); 97 | INSERT INTO `logs` VALUES (97, '1592898117', 35, 70, 49, 101299); 98 | INSERT INTO `logs` VALUES (98, '1592898125', 35, 70, 49, 101299); 99 | INSERT INTO `logs` VALUES (99, '1592898133', 35, 70, 49, 101299); 100 | INSERT INTO `logs` VALUES (100, '1592898141', 35, 70, 49, 101299); 101 | INSERT INTO `logs` VALUES (101, '1592898148', 35, 70, 49, 101299); 102 | INSERT INTO `logs` VALUES (102, '1592898157', 35, 70, 49, 101299); 103 | INSERT INTO `logs` VALUES (103, '1592898167', 35, 70, 49, 101299); 104 | INSERT INTO `logs` VALUES (104, '1592898173', 35, 70, 49, 101299); 105 | INSERT INTO `logs` VALUES (105, '1592898179', 35, 70, 49, 101299); 106 | INSERT INTO `logs` VALUES (106, '1592898186', 35, 70, 49, 101299); 107 | INSERT INTO `logs` VALUES (107, '1592898192', 35, 70, 49, 101299); 108 | INSERT INTO `logs` VALUES (108, '1592898204', 35, 70, 49, 101299); 109 | INSERT INTO `logs` VALUES (109, '1592898213', 35, 70, 49, 101299); 110 | INSERT INTO `logs` VALUES (110, '1592898221', 35, 70, 49, 101299); 111 | INSERT INTO `logs` VALUES (111, '1592898232', 35, 70, 49, 101299); 112 | INSERT INTO `logs` VALUES (112, '1592898240', 35, 70, 49, 101299); 113 | INSERT INTO `logs` VALUES (113, '1592898248', 35, 70, 49, 101299); 114 | INSERT INTO `logs` VALUES (114, '1592898268', 35, 70, 49, 101299); 115 | INSERT INTO `logs` VALUES (115, '1592898277', 35, 70, 49, 101299); 116 | INSERT INTO `logs` VALUES (116, '1592898288', 35, 70, 49, 101299); 117 | INSERT INTO `logs` VALUES (117, '1592898297', 35, 70, 49, 101299); 118 | INSERT INTO `logs` VALUES (118, '1592898308', 35, 70, 49, 101299); 119 | INSERT INTO `logs` VALUES (119, '1592898316', 35, 70, 49, 101299); 120 | INSERT INTO `logs` VALUES (120, '1592898324', 35, 70, 49, 101299); 121 | INSERT INTO `logs` VALUES (121, '1592898332', 35, 70, 49, 101299); 122 | INSERT INTO `logs` VALUES (122, '1592898339', 35, 70, 49, 101299); 123 | INSERT INTO `logs` VALUES (123, '1592898345', 35, 70, 49, 101299); 124 | INSERT INTO `logs` VALUES (124, '1592921147', 30, 70, 113, 101290); 125 | INSERT INTO `logs` VALUES (125, '1592921153', 30, 70, 113, 101290); 126 | INSERT INTO `logs` VALUES (126, '1592921158', 30, 70, 113, 101290); 127 | INSERT INTO `logs` VALUES (127, '1592921163', 30, 70, 113, 101290); 128 | INSERT INTO `logs` VALUES (128, '1592921169', 30, 70, 113, 101290); 129 | INSERT INTO `logs` VALUES (129, '1592921174', 30, 70, 113, 101290); 130 | INSERT INTO `logs` VALUES (130, '1592921180', 30, 70, 113, 101290); 131 | INSERT INTO `logs` VALUES (131, '1592921186', 30, 70, 113, 101290); 132 | INSERT INTO `logs` VALUES (132, '1592921200', 30, 70, 113, 101290); 133 | INSERT INTO `logs` VALUES (133, '1592921206', 30, 70, 113, 101290); 134 | INSERT INTO `logs` VALUES (134, '1592921214', 30, 70, 113, 101290); 135 | INSERT INTO `logs` VALUES (135, '1592921220', 30, 70, 113, 101290); 136 | INSERT INTO `logs` VALUES (136, '1592921227', 30, 70, 113, 101290); 137 | INSERT INTO `logs` VALUES (137, '1592921233', 30, 70, 113, 101290); 138 | INSERT INTO `logs` VALUES (138, '1592921239', 30, 70, 113, 101290); 139 | INSERT INTO `logs` VALUES (139, '1592921245', 30, 70, 113, 101290); 140 | INSERT INTO `logs` VALUES (140, '1592921251', 30, 70, 113, 101290); 141 | INSERT INTO `logs` VALUES (141, '1592921258', 30, 70, 113, 101290); 142 | INSERT INTO `logs` VALUES (142, '1592921264', 30, 70, 113, 101290); 143 | INSERT INTO `logs` VALUES (143, '1592921270', 30, 70, 113, 101290); 144 | INSERT INTO `logs` VALUES (144, '1592921277', 30, 70, 113, 101290); 145 | INSERT INTO `logs` VALUES (145, '1592921283', 30, 70, 113, 101290); 146 | INSERT INTO `logs` VALUES (146, '1592921291', 30, 70, 113, 101290); 147 | INSERT INTO `logs` VALUES (147, '1592921297', 30, 70, 113, 101290); 148 | INSERT INTO `logs` VALUES (148, '1592921304', 30, 70, 113, 101290); 149 | INSERT INTO `logs` VALUES (149, '1592921310', 30, 70, 113, 101290); 150 | INSERT INTO `logs` VALUES (150, '1592932208', 34, 70, 113, 101290); 151 | INSERT INTO `logs` VALUES (151, '1592932214', 34, 70, 113, 101290); 152 | INSERT INTO `logs` VALUES (152, '1592932219', 34, 70, 113, 101290); 153 | INSERT INTO `logs` VALUES (153, '1592932231', 34, 70, 113, 101290); 154 | INSERT INTO `logs` VALUES (154, '1592932237', 34, 70, 113, 101290); 155 | INSERT INTO `logs` VALUES (155, '1592932245', 34, 70, 113, 101290); 156 | INSERT INTO `logs` VALUES (156, '1592932256', 34, 70, 113, 101290); 157 | INSERT INTO `logs` VALUES (157, '1592932262', 34, 70, 113, 101290); 158 | INSERT INTO `logs` VALUES (158, '1592932268', 34, 70, 113, 101290); 159 | INSERT INTO `logs` VALUES (159, '1592932274', 34, 70, 113, 101290); 160 | INSERT INTO `logs` VALUES (160, '1592932280', 34, 70, 113, 101290); 161 | INSERT INTO `logs` VALUES (161, '1592932287', 34, 70, 113, 101290); 162 | INSERT INTO `logs` VALUES (162, '1592932293', 34, 70, 113, 101290); 163 | INSERT INTO `logs` VALUES (163, '1592932300', 34, 70, 113, 101290); 164 | INSERT INTO `logs` VALUES (164, '1592932306', 34, 70, 113, 101290); 165 | INSERT INTO `logs` VALUES (165, '1592932312', 34, 70, 113, 101290); 166 | INSERT INTO `logs` VALUES (166, '1592932318', 34, 70, 113, 101290); 167 | INSERT INTO `logs` VALUES (167, '1592932323', 34, 70, 113, 101290); 168 | INSERT INTO `logs` VALUES (168, '1592932330', 34, 70, 113, 101290); 169 | INSERT INTO `logs` VALUES (169, '1592932336', 34, 70, 113, 101290); 170 | INSERT INTO `logs` VALUES (170, '1592932342', 34, 70, 113, 101290); 171 | INSERT INTO `logs` VALUES (171, '1592932348', 34, 70, 113, 101290); 172 | INSERT INTO `logs` VALUES (172, '1592932355', 34, 70, 113, 101290); 173 | INSERT INTO `logs` VALUES (173, '1592932361', 34, 70, 113, 101290); 174 | INSERT INTO `logs` VALUES (174, '1592932368', 34, 70, 113, 101290); 175 | INSERT INTO `logs` VALUES (175, '1592932374', 34, 70, 113, 101290); 176 | INSERT INTO `logs` VALUES (176, '1592932380', 34, 70, 113, 101290); 177 | INSERT INTO `logs` VALUES (177, '1592932386', 34, 70, 113, 101290); 178 | INSERT INTO `logs` VALUES (178, '1592932391', 34, 70, 113, 101290); 179 | INSERT INTO `logs` VALUES (179, '1592932397', 34, 70, 113, 101290); 180 | INSERT INTO `logs` VALUES (180, '1592932404', 34, 70, 113, 101290); 181 | INSERT INTO `logs` VALUES (181, '1592932410', 34, 70, 113, 101290); 182 | INSERT INTO `logs` VALUES (182, '1592932416', 34, 70, 113, 101290); 183 | INSERT INTO `logs` VALUES (183, '1592932422', 34, 70, 113, 101290); 184 | INSERT INTO `logs` VALUES (184, '1592932429', 34, 70, 113, 101290); 185 | INSERT INTO `logs` VALUES (185, '1592932435', 34, 70, 113, 101290); 186 | INSERT INTO `logs` VALUES (186, '1592932441', 34, 70, 113, 101290); 187 | INSERT INTO `logs` VALUES (187, '1592932448', 34, 70, 113, 101290); 188 | INSERT INTO `logs` VALUES (188, '1592932454', 34, 70, 113, 101290); 189 | INSERT INTO `logs` VALUES (189, '1592932460', 34, 70, 113, 101290); 190 | INSERT INTO `logs` VALUES (190, '1592932473', 34, 70, 113, 101290); 191 | INSERT INTO `logs` VALUES (191, '1592932479', 34, 70, 113, 101290); 192 | INSERT INTO `logs` VALUES (192, '1592932485', 34, 70, 113, 101290); 193 | INSERT INTO `logs` VALUES (193, '1592932491', 34, 70, 113, 101290); 194 | INSERT INTO `logs` VALUES (194, '1592932498', 34, 70, 113, 101290); 195 | INSERT INTO `logs` VALUES (195, '1592932504', 34, 70, 113, 101290); 196 | INSERT INTO `logs` VALUES (196, '1592932510', 34, 70, 113, 101290); 197 | INSERT INTO `logs` VALUES (197, '1592932516', 34, 70, 113, 101290); 198 | INSERT INTO `logs` VALUES (198, '1592932522', 34, 70, 113, 101290); 199 | INSERT INTO `logs` VALUES (199, '1592932528', 34, 70, 113, 101290); 200 | INSERT INTO `logs` VALUES (200, '1592932534', 34, 70, 113, 101290); 201 | INSERT INTO `logs` VALUES (201, '1592932540', 34, 70, 113, 101290); 202 | INSERT INTO `logs` VALUES (202, '1592932546', 34, 70, 113, 101290); 203 | INSERT INTO `logs` VALUES (203, '1592932552', 34, 70, 113, 101290); 204 | INSERT INTO `logs` VALUES (204, '1592932558', 34, 70, 113, 101290); 205 | INSERT INTO `logs` VALUES (205, '1592932564', 34, 70, 113, 101290); 206 | INSERT INTO `logs` VALUES (206, '1592932576', 34, 70, 113, 101290); 207 | INSERT INTO `logs` VALUES (207, '1592932582', 34, 70, 113, 101290); 208 | INSERT INTO `logs` VALUES (208, '1592932589', 34, 70, 113, 101290); 209 | INSERT INTO `logs` VALUES (209, '1592932595', 34, 70, 113, 101290); 210 | INSERT INTO `logs` VALUES (210, '1592932601', 34, 70, 113, 101290); 211 | INSERT INTO `logs` VALUES (211, '1592932607', 34, 70, 113, 101290); 212 | INSERT INTO `logs` VALUES (212, '1592932613', 34, 70, 113, 101290); 213 | INSERT INTO `logs` VALUES (213, '1592932619', 34, 70, 113, 101290); 214 | INSERT INTO `logs` VALUES (214, '1592932625', 34, 70, 113, 101290); 215 | INSERT INTO `logs` VALUES (215, '1592932632', 34, 70, 113, 101290); 216 | INSERT INTO `logs` VALUES (216, '1592932638', 34, 70, 113, 101290); 217 | INSERT INTO `logs` VALUES (217, '1592932644', 34, 70, 113, 101290); 218 | INSERT INTO `logs` VALUES (218, '1592932650', 34, 70, 113, 101290); 219 | INSERT INTO `logs` VALUES (219, '1592932656', 34, 70, 113, 101290); 220 | INSERT INTO `logs` VALUES (220, '1592932662', 34, 70, 113, 101290); 221 | INSERT INTO `logs` VALUES (221, '1592932668', 34, 70, 113, 101290); 222 | INSERT INTO `logs` VALUES (222, '1592932674', 34, 70, 113, 101290); 223 | INSERT INTO `logs` VALUES (223, '1592932680', 34, 70, 113, 101290); 224 | INSERT INTO `logs` VALUES (224, '1592932686', 34, 70, 113, 101290); 225 | INSERT INTO `logs` VALUES (225, '1592932692', 34, 70, 113, 101290); 226 | INSERT INTO `logs` VALUES (226, '1592932699', 34, 70, 113, 101290); 227 | INSERT INTO `logs` VALUES (227, '1592932705', 34, 70, 113, 101290); 228 | INSERT INTO `logs` VALUES (228, '1592932711', 34, 70, 113, 101290); 229 | INSERT INTO `logs` VALUES (229, '1592932716', 34, 70, 113, 101290); 230 | INSERT INTO `logs` VALUES (230, '1592932723', 34, 70, 113, 101290); 231 | INSERT INTO `logs` VALUES (231, '1592932734', 34, 70, 113, 101290); 232 | INSERT INTO `logs` VALUES (232, '1592932739', 34, 70, 113, 101290); 233 | INSERT INTO `logs` VALUES (233, '1592932747', 34, 70, 113, 101290); 234 | INSERT INTO `logs` VALUES (234, '1592932753', 34, 70, 113, 101290); 235 | INSERT INTO `logs` VALUES (235, '1592932760', 34, 70, 113, 101290); 236 | INSERT INTO `logs` VALUES (236, '1592932766', 34, 70, 113, 101290); 237 | INSERT INTO `logs` VALUES (237, '1592932771', 34, 70, 113, 101290); 238 | INSERT INTO `logs` VALUES (238, '1592932777', 34, 70, 113, 101290); 239 | INSERT INTO `logs` VALUES (239, '1592932785', 34, 70, 113, 101290); 240 | INSERT INTO `logs` VALUES (240, '1592932791', 34, 70, 113, 101290); 241 | INSERT INTO `logs` VALUES (241, '1592932797', 34, 70, 113, 101290); 242 | INSERT INTO `logs` VALUES (242, '1592932803', 34, 70, 113, 101290); 243 | INSERT INTO `logs` VALUES (243, '1592932811', 34, 70, 113, 101290); 244 | INSERT INTO `logs` VALUES (244, '1592932817', 34, 70, 113, 101290); 245 | INSERT INTO `logs` VALUES (245, '1592932825', 34, 70, 113, 101290); 246 | INSERT INTO `logs` VALUES (246, '1592932832', 34, 70, 113, 101290); 247 | INSERT INTO `logs` VALUES (247, '1592932839', 34, 70, 113, 101290); 248 | INSERT INTO `logs` VALUES (248, '1592932845', 34, 70, 113, 101290); 249 | INSERT INTO `logs` VALUES (249, '1592932852', 34, 70, 113, 101290); 250 | INSERT INTO `logs` VALUES (250, '1592932860', 34, 70, 113, 101290); 251 | INSERT INTO `logs` VALUES (251, '1592932866', 34, 70, 113, 101290); 252 | INSERT INTO `logs` VALUES (252, '1592932874', 34, 70, 113, 101290); 253 | INSERT INTO `logs` VALUES (253, '1592932881', 34, 70, 113, 101290); 254 | INSERT INTO `logs` VALUES (254, '1592932887', 34, 70, 113, 101290); 255 | INSERT INTO `logs` VALUES (255, '1592932894', 34, 70, 113, 101290); 256 | INSERT INTO `logs` VALUES (256, '1592932900', 34, 70, 113, 101290); 257 | INSERT INTO `logs` VALUES (257, '1592932907', 34, 70, 113, 101290); 258 | INSERT INTO `logs` VALUES (258, '1592932920', 34, 70, 113, 101290); 259 | INSERT INTO `logs` VALUES (259, '1592932925', 34, 70, 113, 101290); 260 | INSERT INTO `logs` VALUES (260, '1592932931', 34, 70, 113, 101290); 261 | INSERT INTO `logs` VALUES (261, '1592932938', 34, 70, 113, 101290); 262 | INSERT INTO `logs` VALUES (262, '1592932945', 34, 70, 113, 101290); 263 | INSERT INTO `logs` VALUES (263, '1592932951', 34, 70, 113, 101290); 264 | INSERT INTO `logs` VALUES (264, '1592932958', 34, 70, 113, 101290); 265 | INSERT INTO `logs` VALUES (265, '1592932965', 34, 70, 113, 101290); 266 | INSERT INTO `logs` VALUES (266, '1592932971', 34, 70, 113, 101290); 267 | INSERT INTO `logs` VALUES (267, '1592932978', 34, 70, 113, 101290); 268 | INSERT INTO `logs` VALUES (268, '1592932985', 34, 70, 113, 101290); 269 | INSERT INTO `logs` VALUES (269, '1592932991', 34, 70, 113, 101290); 270 | INSERT INTO `logs` VALUES (270, '1592932997', 34, 70, 113, 101290); 271 | INSERT INTO `logs` VALUES (271, '1592933002', 34, 70, 113, 101290); 272 | INSERT INTO `logs` VALUES (272, '1592933008', 34, 70, 113, 101290); 273 | INSERT INTO `logs` VALUES (273, '1592933014', 34, 70, 113, 101290); 274 | INSERT INTO `logs` VALUES (274, '1592933019', 34, 70, 113, 101290); 275 | INSERT INTO `logs` VALUES (275, '1592933025', 34, 70, 113, 101290); 276 | INSERT INTO `logs` VALUES (276, '1592933031', 34, 70, 113, 101290); 277 | INSERT INTO `logs` VALUES (277, '1592933037', 34, 70, 113, 101290); 278 | INSERT INTO `logs` VALUES (278, '1592933044', 34, 70, 113, 101290); 279 | INSERT INTO `logs` VALUES (279, '1592933050', 34, 70, 113, 101290); 280 | INSERT INTO `logs` VALUES (280, '1592933056', 34, 70, 113, 101290); 281 | INSERT INTO `logs` VALUES (281, '1592933062', 34, 70, 113, 101290); 282 | INSERT INTO `logs` VALUES (282, '1592933069', 34, 70, 113, 101290); 283 | INSERT INTO `logs` VALUES (283, '1592933077', 34, 70, 113, 101290); 284 | INSERT INTO `logs` VALUES (284, '1592933082', 34, 70, 113, 101290); 285 | INSERT INTO `logs` VALUES (285, '1592933088', 34, 70, 113, 101290); 286 | INSERT INTO `logs` VALUES (286, '1592933094', 34, 70, 113, 101290); 287 | INSERT INTO `logs` VALUES (287, '1592933100', 34, 70, 113, 101290); 288 | INSERT INTO `logs` VALUES (288, '1592933107', 34, 70, 113, 101290); 289 | INSERT INTO `logs` VALUES (289, '1592933113', 34, 70, 113, 101290); 290 | INSERT INTO `logs` VALUES (290, '1592933119', 34, 70, 113, 101290); 291 | INSERT INTO `logs` VALUES (291, '1592933125', 34, 70, 113, 101290); 292 | INSERT INTO `logs` VALUES (292, '1592933130', 34, 70, 113, 101290); 293 | INSERT INTO `logs` VALUES (293, '1592933136', 34, 70, 113, 101290); 294 | INSERT INTO `logs` VALUES (294, '1592933141', 34, 70, 113, 101290); 295 | INSERT INTO `logs` VALUES (295, '1592933147', 34, 70, 113, 101290); 296 | INSERT INTO `logs` VALUES (296, '1592933153', 34, 70, 113, 101290); 297 | INSERT INTO `logs` VALUES (297, '1592933158', 34, 70, 113, 101290); 298 | INSERT INTO `logs` VALUES (298, '1592933164', 34, 70, 113, 101290); 299 | INSERT INTO `logs` VALUES (299, '1592933170', 34, 70, 113, 101290); 300 | INSERT INTO `logs` VALUES (300, '1592933176', 34, 70, 113, 101290); 301 | INSERT INTO `logs` VALUES (301, '1592933182', 34, 70, 113, 101290); 302 | INSERT INTO `logs` VALUES (302, '1592933188', 34, 70, 113, 101290); 303 | INSERT INTO `logs` VALUES (303, '1592933194', 34, 70, 113, 101290); 304 | INSERT INTO `logs` VALUES (304, '1592933200', 34, 70, 113, 101290); 305 | INSERT INTO `logs` VALUES (305, '1592933206', 34, 70, 113, 101290); 306 | INSERT INTO `logs` VALUES (306, '1592933212', 34, 70, 113, 101290); 307 | INSERT INTO `logs` VALUES (307, '1592934522', 34, 70, 113, 101290); 308 | INSERT INTO `logs` VALUES (308, '1592934533', 34, 70, 113, 101290); 309 | INSERT INTO `logs` VALUES (309, '1592934542', 34, 70, 113, 101290); 310 | INSERT INTO `logs` VALUES (310, '1592934550', 34, 70, 113, 101290); 311 | INSERT INTO `logs` VALUES (311, '1592934558', 34, 70, 113, 101290); 312 | INSERT INTO `logs` VALUES (312, '1592934566', 34, 70, 113, 101290); 313 | INSERT INTO `logs` VALUES (313, '1592934576', 34, 70, 113, 101290); 314 | INSERT INTO `logs` VALUES (314, '1592934590', 34, 70, 113, 101290); 315 | INSERT INTO `logs` VALUES (315, '1592934599', 34, 70, 113, 101290); 316 | INSERT INTO `logs` VALUES (316, '1592934607', 34, 70, 113, 101290); 317 | INSERT INTO `logs` VALUES (317, '1592934622', 34, 70, 113, 101290); 318 | INSERT INTO `logs` VALUES (318, '1592934633', 34, 70, 113, 101290); 319 | INSERT INTO `logs` VALUES (319, '1592934641', 34, 70, 113, 101290); 320 | INSERT INTO `logs` VALUES (320, '1592934653', 36, 70, 113, 101290); 321 | INSERT INTO `logs` VALUES (321, '1592934663', 36, 70, 113, 101290); 322 | INSERT INTO `logs` VALUES (322, '1592934671', 36, 70, 113, 101290); 323 | INSERT INTO `logs` VALUES (323, '1592934685', 34, 70, 113, 101290); 324 | INSERT INTO `logs` VALUES (324, '1592934698', 34, 70, 113, 101290); 325 | INSERT INTO `logs` VALUES (325, '1592934712', 34, 70, 113, 101290); 326 | INSERT INTO `logs` VALUES (326, '1592934732', 34, 70, 113, 101290); 327 | INSERT INTO `logs` VALUES (327, '1592934741', 34, 70, 113, 101290); 328 | INSERT INTO `logs` VALUES (328, '1592934750', 34, 70, 113, 101290); 329 | INSERT INTO `logs` VALUES (329, '1592934756', 34, 70, 113, 101290); 330 | INSERT INTO `logs` VALUES (330, '1592934761', 34, 70, 113, 101290); 331 | INSERT INTO `logs` VALUES (331, '1592934767', 34, 70, 113, 101290); 332 | INSERT INTO `logs` VALUES (332, '1592934772', 34, 70, 113, 101290); 333 | INSERT INTO `logs` VALUES (333, '1592934777', 34, 70, 113, 101290); 334 | INSERT INTO `logs` VALUES (334, '1592934782', 34, 70, 113, 101290); 335 | INSERT INTO `logs` VALUES (335, '1592934788', 34, 70, 113, 101290); 336 | INSERT INTO `logs` VALUES (336, '1592934794', 34, 70, 113, 101290); 337 | INSERT INTO `logs` VALUES (337, '1592934802', 34, 70, 113, 101290); 338 | INSERT INTO `logs` VALUES (338, '1592934809', 34, 70, 113, 101290); 339 | INSERT INTO `logs` VALUES (339, '1592934816', 34, 70, 113, 101290); 340 | INSERT INTO `logs` VALUES (340, '1592934823', 34, 70, 113, 101290); 341 | INSERT INTO `logs` VALUES (341, '1592934829', 34, 70, 113, 101290); 342 | INSERT INTO `logs` VALUES (342, '1592934837', 34, 70, 113, 101290); 343 | INSERT INTO `logs` VALUES (343, '1592934843', 34, 70, 113, 101290); 344 | INSERT INTO `logs` VALUES (344, '1592934850', 34, 70, 113, 101290); 345 | INSERT INTO `logs` VALUES (345, '1592934856', 34, 70, 113, 101290); 346 | INSERT INTO `logs` VALUES (346, '1592934863', 34, 70, 113, 101290); 347 | INSERT INTO `logs` VALUES (347, '1592934870', 34, 70, 113, 101290); 348 | INSERT INTO `logs` VALUES (348, '1592934876', 34, 70, 113, 101290); 349 | INSERT INTO `logs` VALUES (349, '1592934883', 34, 70, 113, 101290); 350 | INSERT INTO `logs` VALUES (350, '1592934889', 34, 70, 113, 101290); 351 | INSERT INTO `logs` VALUES (351, '1592934896', 34, 70, 113, 101290); 352 | INSERT INTO `logs` VALUES (352, '1592934902', 34, 70, 113, 101290); 353 | INSERT INTO `logs` VALUES (353, '1592934909', 34, 70, 113, 101290); 354 | INSERT INTO `logs` VALUES (354, '1592934915', 34, 70, 113, 101290); 355 | INSERT INTO `logs` VALUES (355, '1592934922', 34, 70, 113, 101290); 356 | INSERT INTO `logs` VALUES (356, '1592934928', 34, 70, 113, 101290); 357 | INSERT INTO `logs` VALUES (357, '1592934934', 34, 70, 113, 101290); 358 | INSERT INTO `logs` VALUES (358, '1592934941', 34, 70, 113, 101290); 359 | INSERT INTO `logs` VALUES (359, '1592934947', 34, 70, 113, 101290); 360 | INSERT INTO `logs` VALUES (360, '1592934954', 34, 70, 113, 101290); 361 | INSERT INTO `logs` VALUES (361, '1592934961', 34, 70, 113, 101290); 362 | INSERT INTO `logs` VALUES (362, '1592934967', 34, 70, 113, 101290); 363 | INSERT INTO `logs` VALUES (363, '1592934974', 34, 70, 113, 101290); 364 | INSERT INTO `logs` VALUES (364, '1592934980', 34, 70, 113, 101290); 365 | INSERT INTO `logs` VALUES (365, '1592934987', 34, 70, 113, 101290); 366 | INSERT INTO `logs` VALUES (366, '1592934993', 34, 70, 113, 101290); 367 | INSERT INTO `logs` VALUES (367, '1592935000', 34, 70, 113, 101290); 368 | INSERT INTO `logs` VALUES (368, '1592935006', 34, 70, 113, 101290); 369 | INSERT INTO `logs` VALUES (369, '1592935012', 34, 70, 113, 101290); 370 | INSERT INTO `logs` VALUES (370, '1592935019', 34, 70, 113, 101290); 371 | INSERT INTO `logs` VALUES (371, '1592935025', 34, 70, 113, 101290); 372 | INSERT INTO `logs` VALUES (372, '1592935032', 34, 70, 113, 101290); 373 | INSERT INTO `logs` VALUES (373, '1592935038', 34, 70, 113, 101290); 374 | INSERT INTO `logs` VALUES (374, '1592935045', 34, 70, 113, 101290); 375 | INSERT INTO `logs` VALUES (375, '1592935053', 34, 70, 113, 101290); 376 | INSERT INTO `logs` VALUES (376, '1592935060', 34, 70, 113, 101290); 377 | INSERT INTO `logs` VALUES (377, '1592935066', 34, 70, 113, 101290); 378 | INSERT INTO `logs` VALUES (378, '1592935073', 34, 70, 113, 101290); 379 | INSERT INTO `logs` VALUES (379, '1592935080', 34, 70, 113, 101290); 380 | INSERT INTO `logs` VALUES (380, '1592935087', 34, 70, 113, 101290); 381 | INSERT INTO `logs` VALUES (381, '1592935093', 34, 70, 113, 101290); 382 | INSERT INTO `logs` VALUES (382, '1592935100', 34, 70, 113, 101290); 383 | INSERT INTO `logs` VALUES (383, '1592935107', 34, 70, 113, 101290); 384 | INSERT INTO `logs` VALUES (384, '1592935113', 34, 70, 113, 101290); 385 | INSERT INTO `logs` VALUES (385, '1592935119', 34, 70, 113, 101290); 386 | INSERT INTO `logs` VALUES (386, '1592935125', 34, 70, 113, 101290); 387 | INSERT INTO `logs` VALUES (387, '1592935132', 34, 70, 113, 101290); 388 | INSERT INTO `logs` VALUES (388, '1592935138', 34, 70, 113, 101290); 389 | INSERT INTO `logs` VALUES (389, '1592935144', 34, 70, 113, 101290); 390 | INSERT INTO `logs` VALUES (390, '1592935149', 34, 70, 113, 101290); 391 | INSERT INTO `logs` VALUES (391, '1592935155', 34, 70, 113, 101290); 392 | INSERT INTO `logs` VALUES (392, '1592935160', 34, 70, 113, 101290); 393 | -------------------------------------------------------------------------------- /上位机源代码及可执行文件/static/css/bootstrap-reboot.min.css.map: -------------------------------------------------------------------------------- 1 | {"version":3,"sources":["../../scss/bootstrap-reboot.scss","../../scss/_reboot.scss","dist/css/bootstrap-reboot.css","../../scss/vendor/_rfs.scss","bootstrap-reboot.css","../../scss/mixins/_hover.scss"],"names":[],"mappings":"AAAA;;;;;;ACkBA,ECTA,QADA,SDaE,WAAA,WAGF,KACE,YAAA,WACA,YAAA,KACA,yBAAA,KACA,4BAAA,YAMF,QAAA,MAAA,WAAA,OAAA,OAAA,OAAA,OAAA,KAAA,IAAA,QACE,QAAA,MAUF,KACE,OAAA,EACA,YAAA,aAAA,CAAA,kBAAA,CAAA,UAAA,CAAA,MAAA,CAAA,gBAAA,CAAA,KAAA,CAAA,WAAA,CAAA,UAAA,CAAA,mBAAA,CAAA,gBAAA,CAAA,iBAAA,CAAA,mBEgFI,UAAA,KF9EJ,YAAA,IACA,YAAA,IACA,MAAA,QACA,WAAA,KACA,iBAAA,KGlBF,0CH+BE,QAAA,YASF,GACE,WAAA,YACA,OAAA,EACA,SAAA,QAaF,GAAA,GAAA,GAAA,GAAA,GAAA,GACE,WAAA,EACA,cAAA,MAOF,EACE,WAAA,EACA,cAAA,KC9CF,0BDyDA,YAEE,gBAAA,UACA,wBAAA,UAAA,OAAA,gBAAA,UAAA,OACA,OAAA,KACA,cAAA,EACA,iCAAA,KAAA,yBAAA,KAGF,QACE,cAAA,KACA,WAAA,OACA,YAAA,QCnDF,GDsDA,GCvDA,GD0DE,WAAA,EACA,cAAA,KAGF,MCtDA,MACA,MAFA,MD2DE,cAAA,EAGF,GACE,YAAA,IAGF,GACE,cAAA,MACA,YAAA,EAGF,WACE,OAAA,EAAA,EAAA,KAGF,ECvDA,ODyDE,YAAA,OAGF,MExFI,UAAA,IFiGJ,IC5DA,ID8DE,SAAA,SEnGE,UAAA,IFqGF,YAAA,EACA,eAAA,SAGF,IAAM,OAAA,OACN,IAAM,IAAA,MAON,EACE,MAAA,QACA,gBAAA,KACA,iBAAA,YIhLA,QJmLE,MAAA,QACA,gBAAA,UASJ,cACE,MAAA,QACA,gBAAA,KI/LA,oBJkME,MAAA,QACA,gBAAA,KC7DJ,KACA,IDqEA,ICpEA,KDwEE,YAAA,cAAA,CAAA,KAAA,CAAA,MAAA,CAAA,QAAA,CAAA,iBAAA,CAAA,aAAA,CAAA,UEpJE,UAAA,IFwJJ,IAEE,WAAA,EAEA,cAAA,KAEA,SAAA,KAGA,mBAAA,UAQF,OAEE,OAAA,EAAA,EAAA,KAQF,IACE,eAAA,OACA,aAAA,KAGF,IAGE,SAAA,OACA,eAAA,OAQF,MACE,gBAAA,SAGF,QACE,YAAA,OACA,eAAA,OACA,MAAA,QACA,WAAA,KACA,aAAA,OAGF,GAGE,WAAA,QAQF,MAEE,QAAA,aACA,cAAA,MAMF,OAEE,cAAA,EAOF,aACE,QAAA,IAAA,OACA,QAAA,IAAA,KAAA,yBC1GF,OD6GA,MC3GA,SADA,OAEA,SD+GE,OAAA,EACA,YAAA,QExPE,UAAA,QF0PF,YAAA,QAGF,OC7GA,MD+GE,SAAA,QAGF,OC7GA,OD+GE,eAAA,KG7GF,cHoHE,OAAA,QAMF,OACE,UAAA,OChHF,cACA,aACA,cDqHA,OAIE,mBAAA,OCpHF,6BACA,4BACA,6BDuHE,sBAKI,OAAA,QCvHN,gCACA,+BACA,gCD2HA,yBAIE,QAAA,EACA,aAAA,KC1HF,qBD6HA,kBAEE,WAAA,WACA,QAAA,EAIF,SACE,SAAA,KAEA,OAAA,SAGF,SAME,UAAA,EAEA,QAAA,EACA,OAAA,EACA,OAAA,EAKF,OACE,QAAA,MACA,MAAA,KACA,UAAA,KACA,QAAA,EACA,cAAA,ME/RI,UAAA,OFiSJ,YAAA,QACA,MAAA,QACA,YAAA,OAGF,SACE,eAAA,SGvIF,yCFGA,yCD0IE,OAAA,KGxIF,cHgJE,eAAA,KACA,mBAAA,KG5IF,yCHoJE,mBAAA,KAQF,6BACE,KAAA,QACA,mBAAA,OAOF,OACE,QAAA,aAGF,QACE,QAAA,UACA,OAAA,QAGF,SACE,QAAA,KGzJF,SH+JE,QAAA","sourcesContent":["/*!\n * Bootstrap Reboot v4.5.0 (https://getbootstrap.com/)\n * Copyright 2011-2020 The Bootstrap Authors\n * Copyright 2011-2020 Twitter, Inc.\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n * Forked from Normalize.css, licensed MIT (https://github.com/necolas/normalize.css/blob/master/LICENSE.md)\n */\n\n@import \"functions\";\n@import \"variables\";\n@import \"mixins\";\n@import \"reboot\";\n","// stylelint-disable at-rule-no-vendor-prefix, declaration-no-important, selector-no-qualifying-type, property-no-vendor-prefix\n\n// Reboot\n//\n// Normalization of HTML elements, manually forked from Normalize.css to remove\n// styles targeting irrelevant browsers while applying new styles.\n//\n// Normalize is licensed MIT. https://github.com/necolas/normalize.css\n\n\n// Document\n//\n// 1. Change from `box-sizing: content-box` so that `width` is not affected by `padding` or `border`.\n// 2. Change the default font family in all browsers.\n// 3. Correct the line height in all browsers.\n// 4. Prevent adjustments of font size after orientation changes in IE on Windows Phone and in iOS.\n// 5. Change the default tap highlight to be completely transparent in iOS.\n\n*,\n*::before,\n*::after {\n box-sizing: border-box; // 1\n}\n\nhtml {\n font-family: sans-serif; // 2\n line-height: 1.15; // 3\n -webkit-text-size-adjust: 100%; // 4\n -webkit-tap-highlight-color: rgba($black, 0); // 5\n}\n\n// Shim for \"new\" HTML5 structural elements to display correctly (IE10, older browsers)\n// TODO: remove in v5\n// stylelint-disable-next-line selector-list-comma-newline-after\narticle, aside, figcaption, figure, footer, header, hgroup, main, nav, section {\n display: block;\n}\n\n// Body\n//\n// 1. Remove the margin in all browsers.\n// 2. As a best practice, apply a default `background-color`.\n// 3. Set an explicit initial text-align value so that we can later use\n// the `inherit` value on things like `` elements.\n\nbody {\n margin: 0; // 1\n font-family: $font-family-base;\n @include font-size($font-size-base);\n font-weight: $font-weight-base;\n line-height: $line-height-base;\n color: $body-color;\n text-align: left; // 3\n background-color: $body-bg; // 2\n}\n\n// Future-proof rule: in browsers that support :focus-visible, suppress the focus outline\n// on elements that programmatically receive focus but wouldn't normally show a visible\n// focus outline. In general, this would mean that the outline is only applied if the\n// interaction that led to the element receiving programmatic focus was a keyboard interaction,\n// or the browser has somehow determined that the user is primarily a keyboard user and/or\n// wants focus outlines to always be presented.\n//\n// See https://developer.mozilla.org/en-US/docs/Web/CSS/:focus-visible\n// and https://developer.paciellogroup.com/blog/2018/03/focus-visible-and-backwards-compatibility/\n[tabindex=\"-1\"]:focus:not(:focus-visible) {\n outline: 0 !important;\n}\n\n\n// Content grouping\n//\n// 1. Add the correct box sizing in Firefox.\n// 2. Show the overflow in Edge and IE.\n\nhr {\n box-sizing: content-box; // 1\n height: 0; // 1\n overflow: visible; // 2\n}\n\n\n//\n// Typography\n//\n\n// Remove top margins from headings\n//\n// By default, `

`-`

` all receive top and bottom margins. We nuke the top\n// margin for easier control within type scales as it avoids margin collapsing.\n// stylelint-disable-next-line selector-list-comma-newline-after\nh1, h2, h3, h4, h5, h6 {\n margin-top: 0;\n margin-bottom: $headings-margin-bottom;\n}\n\n// Reset margins on paragraphs\n//\n// Similarly, the top margin on `

`s get reset. However, we also reset the\n// bottom margin to use `rem` units instead of `em`.\np {\n margin-top: 0;\n margin-bottom: $paragraph-margin-bottom;\n}\n\n// Abbreviations\n//\n// 1. Duplicate behavior to the data-* attribute for our tooltip plugin\n// 2. Add the correct text decoration in Chrome, Edge, IE, Opera, and Safari.\n// 3. Add explicit cursor to indicate changed behavior.\n// 4. Remove the bottom border in Firefox 39-.\n// 5. Prevent the text-decoration to be skipped.\n\nabbr[title],\nabbr[data-original-title] { // 1\n text-decoration: underline; // 2\n text-decoration: underline dotted; // 2\n cursor: help; // 3\n border-bottom: 0; // 4\n text-decoration-skip-ink: none; // 5\n}\n\naddress {\n margin-bottom: 1rem;\n font-style: normal;\n line-height: inherit;\n}\n\nol,\nul,\ndl {\n margin-top: 0;\n margin-bottom: 1rem;\n}\n\nol ol,\nul ul,\nol ul,\nul ol {\n margin-bottom: 0;\n}\n\ndt {\n font-weight: $dt-font-weight;\n}\n\ndd {\n margin-bottom: .5rem;\n margin-left: 0; // Undo browser default\n}\n\nblockquote {\n margin: 0 0 1rem;\n}\n\nb,\nstrong {\n font-weight: $font-weight-bolder; // Add the correct font weight in Chrome, Edge, and Safari\n}\n\nsmall {\n @include font-size(80%); // Add the correct font size in all browsers\n}\n\n//\n// Prevent `sub` and `sup` elements from affecting the line height in\n// all browsers.\n//\n\nsub,\nsup {\n position: relative;\n @include font-size(75%);\n line-height: 0;\n vertical-align: baseline;\n}\n\nsub { bottom: -.25em; }\nsup { top: -.5em; }\n\n\n//\n// Links\n//\n\na {\n color: $link-color;\n text-decoration: $link-decoration;\n background-color: transparent; // Remove the gray background on active links in IE 10.\n\n @include hover() {\n color: $link-hover-color;\n text-decoration: $link-hover-decoration;\n }\n}\n\n// And undo these styles for placeholder links/named anchors (without href).\n// It would be more straightforward to just use a[href] in previous block, but that\n// causes specificity issues in many other styles that are too complex to fix.\n// See https://github.com/twbs/bootstrap/issues/19402\n\na:not([href]) {\n color: inherit;\n text-decoration: none;\n\n @include hover() {\n color: inherit;\n text-decoration: none;\n }\n}\n\n\n//\n// Code\n//\n\npre,\ncode,\nkbd,\nsamp {\n font-family: $font-family-monospace;\n @include font-size(1em); // Correct the odd `em` font sizing in all browsers.\n}\n\npre {\n // Remove browser default top margin\n margin-top: 0;\n // Reset browser default of `1em` to use `rem`s\n margin-bottom: 1rem;\n // Don't allow content to break outside\n overflow: auto;\n // Disable auto-hiding scrollbar in IE & legacy Edge to avoid overlap,\n // making it impossible to interact with the content\n -ms-overflow-style: scrollbar;\n}\n\n\n//\n// Figures\n//\n\nfigure {\n // Apply a consistent margin strategy (matches our type styles).\n margin: 0 0 1rem;\n}\n\n\n//\n// Images and content\n//\n\nimg {\n vertical-align: middle;\n border-style: none; // Remove the border on images inside links in IE 10-.\n}\n\nsvg {\n // Workaround for the SVG overflow bug in IE10/11 is still required.\n // See https://github.com/twbs/bootstrap/issues/26878\n overflow: hidden;\n vertical-align: middle;\n}\n\n\n//\n// Tables\n//\n\ntable {\n border-collapse: collapse; // Prevent double borders\n}\n\ncaption {\n padding-top: $table-cell-padding;\n padding-bottom: $table-cell-padding;\n color: $table-caption-color;\n text-align: left;\n caption-side: bottom;\n}\n\nth {\n // Matches default `` alignment by inheriting from the ``, or the\n // closest parent with a set `text-align`.\n text-align: inherit;\n}\n\n\n//\n// Forms\n//\n\nlabel {\n // Allow labels to use `margin` for spacing.\n display: inline-block;\n margin-bottom: $label-margin-bottom;\n}\n\n// Remove the default `border-radius` that macOS Chrome adds.\n//\n// Details at https://github.com/twbs/bootstrap/issues/24093\nbutton {\n // stylelint-disable-next-line property-blacklist\n border-radius: 0;\n}\n\n// Work around a Firefox/IE bug where the transparent `button` background\n// results in a loss of the default `button` focus styles.\n//\n// Credit: https://github.com/suitcss/base/\nbutton:focus {\n outline: 1px dotted;\n outline: 5px auto -webkit-focus-ring-color;\n}\n\ninput,\nbutton,\nselect,\noptgroup,\ntextarea {\n margin: 0; // Remove the margin in Firefox and Safari\n font-family: inherit;\n @include font-size(inherit);\n line-height: inherit;\n}\n\nbutton,\ninput {\n overflow: visible; // Show the overflow in Edge\n}\n\nbutton,\nselect {\n text-transform: none; // Remove the inheritance of text transform in Firefox\n}\n\n// Set the cursor for non-`