# 设备连接和设置

- 把所有设备通过网线**连接到局域网**
- 通过服务器、路由管理器或者IP工具**获取局域网内设备ip**
- **登录设备**:在浏览器输入设备ip和端口号:192.168.0.131:82, 用户名是root, 密码是abc123。
- **设置服务器指向**:在设备界面点击"网络"--“服务器管理”, 输入`mandun_url`,设置服务器指向为`192.168.0.252:8080/ebx-bishop/data/carry`
- **重启服务器**:点击"系统"--"重启"--"执行重启"

# 宿主环境

- **安装NetCore2.0.5的服务器宿主环境**:双击`dd-env`目录下`NetCore`目录下的`DotNetCore.2.0.5-WindowsHosting.exe`文件

# MySQL数据库

- **安装mysql服务**:双击`dd-env`目录下`mysql`目录下的`NT-mysql-Install.bat`文件。会在服务中多出一个`MysqlServer`服务。
- **修改mysql的配置文件**:打开`dd-env`目录下`mysql`目录下的`my.ini`文件。
```
bind-address=0.0.0.0
port=3306
skip_grant_tables
```
- **启动mysql服务**:双击`dd-env`目录下`mysql`目录下的`NT-mysql-Start.bat`文件。会在进程中多出一个`mysqld.exe`进程。
- **安装Navicat客户端**:双击`dd-tools`下`Navicat Premium_11.2.7简体中文版`目录下的`navicat112_premium_cs_x64.exe`文件,安装完毕再双击`PatchNavicat.exe`文件。
- **连接mysql数据库**:依次点击"连接"、"MySQL",在界面上填写如下:
```
连接名:自定义
主机名或IP地址:localhost
端口:3306
用户名:root
密码:lcDb_!@34%^_Mantunsci
勾选"保存密码"
```
点击"连接测试"。如果连接成功,点击"确定"按钮。

# Redis缓存数据库

- **安装redis服务**:双击`dd-env`目录下的`redis`目录下的`NT-redis-Install.bat`文件。会在服务中多处一个`redis-server`服务。
- **启动redis服务**:双击`dd-env`目录下的`redis`目录下的`NT-redis-Start.bat`文件。会在进程中多处一个`redis-server.exe`进程。
- **安装redis客户端**:双击`dd-tools`目录下的`Redis`目录下的`redis-desktop-manager-0.9.3.817.exe`文件。
- **连接redis服务器**:点击`连接到Redis服务器`
```
名字:自定义
地址:127.0.0.1
端口:6321
验证:_ebx_cnto_r_srv
安全:无
```
点击"好"按钮。

# 创建主数据库teche

```
数据库名:teche
字符集:utf8mb4--UTF-8 Unicode
排序规则:utf8mbs_general_ci
```

# 创建用户数据库techeuser

```
数据库名:techeusr
字符集:utf8mb4--UTF-8 Unicode
排序规则:utf8mbs_general_ci
```

# 创建定时任务数据库quartznet

- 创建数据库
```
数据库名:quartznet
字符集:utf8mb4--UTF-8 Unicode
排序规则:utf8mbs_general_ci
```

- 执行语句

```
# By: Ron Cordell - roncordell
#  I didn't see this anywhere, so I thought I'd post it here. This is the script from Quartz to create the tables in a MySQL database, modified to use INNODB instead of MYISAM.


# make sure you have UTF-8 collaction for best .NET interoperability
# CREATE DATABASE quartznet CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;

DROP TABLE IF EXISTS QRTZ_FIRED_TRIGGERS;
DROP TABLE IF EXISTS QRTZ_PAUSED_TRIGGER_GRPS;
DROP TABLE IF EXISTS QRTZ_SCHEDULER_STATE;
DROP TABLE IF EXISTS QRTZ_LOCKS;
DROP TABLE IF EXISTS QRTZ_SIMPLE_TRIGGERS;
DROP TABLE IF EXISTS QRTZ_SIMPROP_TRIGGERS;
DROP TABLE IF EXISTS QRTZ_CRON_TRIGGERS;
DROP TABLE IF EXISTS QRTZ_BLOB_TRIGGERS;
DROP TABLE IF EXISTS QRTZ_TRIGGERS;
DROP TABLE IF EXISTS QRTZ_JOB_DETAILS;
DROP TABLE IF EXISTS QRTZ_CALENDARS;

CREATE TABLE QRTZ_JOB_DETAILS(
SCHED_NAME VARCHAR(60) NOT NULL,
JOB_NAME VARCHAR(60) NOT NULL,
JOB_GROUP VARCHAR(60) NOT NULL,
DESCRIPTION VARCHAR(250) NULL,
JOB_CLASS_NAME VARCHAR(250) NOT NULL,
IS_DURABLE BOOLEAN NOT NULL,
IS_NONCONCURRENT BOOLEAN NOT NULL,
IS_UPDATE_DATA BOOLEAN NOT NULL,
REQUESTS_RECOVERY BOOLEAN NOT NULL,
JOB_DATA BLOB NULL,
PRIMARY KEY (SCHED_NAME,JOB_NAME,JOB_GROUP))
ENGINE=InnoDB;

CREATE TABLE QRTZ_TRIGGERS (
SCHED_NAME VARCHAR(60) NOT NULL,
TRIGGER_NAME VARCHAR(60) NOT NULL,
TRIGGER_GROUP VARCHAR(60) NOT NULL,
JOB_NAME VARCHAR(60) NOT NULL,
JOB_GROUP VARCHAR(60) NOT NULL,
DESCRIPTION VARCHAR(250) NULL,
NEXT_FIRE_TIME BIGINT(19) NULL,
PREV_FIRE_TIME BIGINT(19) NULL,
PRIORITY INTEGER NULL,
TRIGGER_STATE VARCHAR(16) NOT NULL,
TRIGGER_TYPE VARCHAR(8) NOT NULL,
START_TIME BIGINT(19) NOT NULL,
END_TIME BIGINT(19) NULL,
CALENDAR_NAME VARCHAR(60) NULL,
MISFIRE_INSTR SMALLINT(2) NULL,
JOB_DATA BLOB NULL,
PRIMARY KEY (SCHED_NAME,TRIGGER_NAME,TRIGGER_GROUP),
FOREIGN KEY (SCHED_NAME,JOB_NAME,JOB_GROUP)
REFERENCES QRTZ_JOB_DETAILS(SCHED_NAME,JOB_NAME,JOB_GROUP))
ENGINE=InnoDB;

CREATE TABLE QRTZ_SIMPLE_TRIGGERS (
SCHED_NAME VARCHAR(60) NOT NULL,
TRIGGER_NAME VARCHAR(60) NOT NULL,
TRIGGER_GROUP VARCHAR(60) NOT NULL,
REPEAT_COUNT BIGINT(7) NOT NULL,
REPEAT_INTERVAL BIGINT(12) NOT NULL,
TIMES_TRIGGERED BIGINT(10) NOT NULL,
PRIMARY KEY (SCHED_NAME,TRIGGER_NAME,TRIGGER_GROUP),
FOREIGN KEY (SCHED_NAME,TRIGGER_NAME,TRIGGER_GROUP)
REFERENCES QRTZ_TRIGGERS(SCHED_NAME,TRIGGER_NAME,TRIGGER_GROUP))
ENGINE=InnoDB;

CREATE TABLE QRTZ_CRON_TRIGGERS (
SCHED_NAME VARCHAR(60) NOT NULL,
TRIGGER_NAME VARCHAR(60) NOT NULL,
TRIGGER_GROUP VARCHAR(60) NOT NULL,
CRON_EXPRESSION VARCHAR(120) NOT NULL,
TIME_ZONE_ID VARCHAR(80),
PRIMARY KEY (SCHED_NAME,TRIGGER_NAME,TRIGGER_GROUP),
FOREIGN KEY (SCHED_NAME,TRIGGER_NAME,TRIGGER_GROUP)
REFERENCES QRTZ_TRIGGERS(SCHED_NAME,TRIGGER_NAME,TRIGGER_GROUP))
ENGINE=InnoDB;

CREATE TABLE QRTZ_SIMPROP_TRIGGERS
  (          
    SCHED_NAME VARCHAR(60) NOT NULL,
    TRIGGER_NAME VARCHAR(60) NOT NULL,
    TRIGGER_GROUP VARCHAR(60) NOT NULL,
    STR_PROP_1 VARCHAR(512) NULL,
    STR_PROP_2 VARCHAR(512) NULL,
    STR_PROP_3 VARCHAR(512) NULL,
    INT_PROP_1 INT NULL,
    INT_PROP_2 INT NULL,
    LONG_PROP_1 BIGINT NULL,
    LONG_PROP_2 BIGINT NULL,
    DEC_PROP_1 NUMERIC(13,4) NULL,
    DEC_PROP_2 NUMERIC(13,4) NULL,
    BOOL_PROP_1 BOOLEAN NULL,
    BOOL_PROP_2 BOOLEAN NULL,
    TIME_ZONE_ID VARCHAR(80) NULL,
    PRIMARY KEY (SCHED_NAME,TRIGGER_NAME,TRIGGER_GROUP),
    FOREIGN KEY (SCHED_NAME,TRIGGER_NAME,TRIGGER_GROUP) 
    REFERENCES QRTZ_TRIGGERS(SCHED_NAME,TRIGGER_NAME,TRIGGER_GROUP))
ENGINE=InnoDB;

CREATE TABLE QRTZ_BLOB_TRIGGERS (
SCHED_NAME VARCHAR(60) NOT NULL,
TRIGGER_NAME VARCHAR(60) NOT NULL,
TRIGGER_GROUP VARCHAR(60) NOT NULL,
BLOB_DATA BLOB NULL,
PRIMARY KEY (SCHED_NAME,TRIGGER_NAME,TRIGGER_GROUP),
INDEX (SCHED_NAME,TRIGGER_NAME, TRIGGER_GROUP),
FOREIGN KEY (SCHED_NAME,TRIGGER_NAME,TRIGGER_GROUP)
REFERENCES QRTZ_TRIGGERS(SCHED_NAME,TRIGGER_NAME,TRIGGER_GROUP))
ENGINE=InnoDB;

CREATE TABLE QRTZ_CALENDARS (
SCHED_NAME VARCHAR(60) NOT NULL,
CALENDAR_NAME VARCHAR(60) NOT NULL,
CALENDAR BLOB NOT NULL,
PRIMARY KEY (SCHED_NAME,CALENDAR_NAME))
ENGINE=InnoDB;

CREATE TABLE QRTZ_PAUSED_TRIGGER_GRPS (
SCHED_NAME VARCHAR(60) NOT NULL,
TRIGGER_GROUP VARCHAR(60) NOT NULL,
PRIMARY KEY (SCHED_NAME,TRIGGER_GROUP))
ENGINE=InnoDB;

CREATE TABLE QRTZ_FIRED_TRIGGERS (
SCHED_NAME VARCHAR(60) NOT NULL,
ENTRY_ID VARCHAR(140) NOT NULL,
TRIGGER_NAME VARCHAR(60) NOT NULL,
TRIGGER_GROUP VARCHAR(60) NOT NULL,
INSTANCE_NAME VARCHAR(60) NOT NULL,
FIRED_TIME BIGINT(19) NOT NULL,
SCHED_TIME BIGINT(19) NOT NULL,
PRIORITY INTEGER NOT NULL,
STATE VARCHAR(16) NOT NULL,
JOB_NAME VARCHAR(60) NULL,
JOB_GROUP VARCHAR(60) NULL,
IS_NONCONCURRENT BOOLEAN NULL,
REQUESTS_RECOVERY BOOLEAN NULL,
PRIMARY KEY (SCHED_NAME,ENTRY_ID))
ENGINE=InnoDB;

CREATE TABLE QRTZ_SCHEDULER_STATE (
SCHED_NAME VARCHAR(60) NOT NULL,
INSTANCE_NAME VARCHAR(60) NOT NULL,
LAST_CHECKIN_TIME BIGINT(19) NOT NULL,
CHECKIN_INTERVAL BIGINT(19) NOT NULL,
PRIMARY KEY (SCHED_NAME,INSTANCE_NAME))
ENGINE=InnoDB;

CREATE TABLE QRTZ_LOCKS (
SCHED_NAME VARCHAR(60) NOT NULL,
LOCK_NAME VARCHAR(40) NOT NULL,
PRIMARY KEY (SCHED_NAME,LOCK_NAME))
ENGINE=InnoDB;

CREATE INDEX IDX_QRTZ_J_REQ_RECOVERY ON QRTZ_JOB_DETAILS(SCHED_NAME,REQUESTS_RECOVERY);
CREATE INDEX IDX_QRTZ_J_GRP ON QRTZ_JOB_DETAILS(SCHED_NAME,JOB_GROUP);

CREATE INDEX IDX_QRTZ_T_J ON QRTZ_TRIGGERS(SCHED_NAME,JOB_NAME,JOB_GROUP);
CREATE INDEX IDX_QRTZ_T_JG ON QRTZ_TRIGGERS(SCHED_NAME,JOB_GROUP);
CREATE INDEX IDX_QRTZ_T_C ON QRTZ_TRIGGERS(SCHED_NAME,CALENDAR_NAME);
CREATE INDEX IDX_QRTZ_T_G ON QRTZ_TRIGGERS(SCHED_NAME,TRIGGER_GROUP);
CREATE INDEX IDX_QRTZ_T_STATE ON QRTZ_TRIGGERS(SCHED_NAME,TRIGGER_STATE);
CREATE INDEX IDX_QRTZ_T_N_STATE ON QRTZ_TRIGGERS(SCHED_NAME,TRIGGER_NAME,TRIGGER_GROUP,TRIGGER_STATE);
CREATE INDEX IDX_QRTZ_T_N_G_STATE ON QRTZ_TRIGGERS(SCHED_NAME,TRIGGER_GROUP,TRIGGER_STATE);
CREATE INDEX IDX_QRTZ_T_NEXT_FIRE_TIME ON QRTZ_TRIGGERS(SCHED_NAME,NEXT_FIRE_TIME);
CREATE INDEX IDX_QRTZ_T_NFT_ST ON QRTZ_TRIGGERS(SCHED_NAME,TRIGGER_STATE,NEXT_FIRE_TIME);
CREATE INDEX IDX_QRTZ_T_NFT_MISFIRE ON QRTZ_TRIGGERS(SCHED_NAME,MISFIRE_INSTR,NEXT_FIRE_TIME);
CREATE INDEX IDX_QRTZ_T_NFT_ST_MISFIRE ON QRTZ_TRIGGERS(SCHED_NAME,MISFIRE_INSTR,NEXT_FIRE_TIME,TRIGGER_STATE);
CREATE INDEX IDX_QRTZ_T_NFT_ST_MISFIRE_GRP ON QRTZ_TRIGGERS(SCHED_NAME,MISFIRE_INSTR,NEXT_FIRE_TIME,TRIGGER_GROUP,TRIGGER_STATE);

CREATE INDEX IDX_QRTZ_FT_TRIG_INST_NAME ON QRTZ_FIRED_TRIGGERS(SCHED_NAME,INSTANCE_NAME);
CREATE INDEX IDX_QRTZ_FT_INST_JOB_REQ_RCVRY ON QRTZ_FIRED_TRIGGERS(SCHED_NAME,INSTANCE_NAME,REQUESTS_RECOVERY);
CREATE INDEX IDX_QRTZ_FT_J_G ON QRTZ_FIRED_TRIGGERS(SCHED_NAME,JOB_NAME,JOB_GROUP);
CREATE INDEX IDX_QRTZ_FT_JG ON QRTZ_FIRED_TRIGGERS(SCHED_NAME,JOB_GROUP);
CREATE INDEX IDX_QRTZ_FT_T_G ON QRTZ_FIRED_TRIGGERS(SCHED_NAME,TRIGGER_NAME,TRIGGER_GROUP);
CREATE INDEX IDX_QRTZ_FT_TG ON QRTZ_FIRED_TRIGGERS(SCHED_NAME,TRIGGER_GROUP);

commit; 
```

# 网站配置

- **查看服务器IP**:比如是:`192.168.0.252`
- **设置appsettings.json文件**:在`dd-dev_版本号`目录下的`appsettings.json`文件中修改如下:
```
{
  "ConnectionStrings": {
    "IDENTITY_CONN": "server=192.168.0.252;port=3306;database=techeusr;user=root;password=lcDb_!@34%^_Mantunsci;SslMode=none",
    "TaiHe_CONN": "server=192.168.0.252;port=3306;database=teche;user=root;password=lcDb_!@34%^_Mantunsci;SslMode=none;default command timeout=180",
    "CJ_CONN": "server=192.168.0.252;port=3306;database=ebx;user=root;password=lcDb_!@34%^_Mantunsci;SslMode=none"
  },
  "Logging": {
    "IncludeScopes": false,
    "Debug": {
      "LogLevel": {
        "Default": "Warning"
      }
    },
    "Console": {
      "LogLevel": {
        "Default": "Warning"
      }
    }
  },
  "App": {
    "ip": "192.168.0.252:8080",
    "server": "192.168.0.252",
    "cjapi": "http://192.168.0.252:8080/api/",
    "xmapi": "http://192.168.0.252:8080/api/",
    "bjInterval": 180 //计算报警的频率,按每秒钟队列保守处理4个回路
  },
  "AllowedHosts": "*"
}
```

# 网站运行

- **确保mysql已经启动**:在服务中的名称是`MysqlServer`
- **确保redis已经启动**:在服务中的名称是`redis-server`
- **运行网站**: 在`dd-dev_版本号`目录下,按住`shift+右键`,点击`在此处打开命令窗口`,在控制台输入`dotnet.exe TaiHe.Electricity.Web.dll`
- **确保teche数据库中已经有了所有表**
- **确保techeuser数据库中已经有了所有表**
- **往teche的kaiguanapplication添加一条记录**。
```
INSERT INTO kaiguanapplication(NAME, DelFlag) VALUES('照明',0)
```
- **登录**:打开网站`192.168.8.131:8080`,输入用户名`TecheFwd2018`,点击"登录"按钮

# 项目管理

点击左侧"工作人员"-"项目管理"。
```
项目名称:
管理员用户名:
密码:
姓名:
手机号:
```

# 楼层管理

点击左侧"工作人员"-"楼层管理",右侧在相应项目行点击“编辑”按钮,点击左上角"添加楼层"按钮。
```
楼层名称:
排序:
```

# 区域管理

点击左侧"工作人员"-"区域管理",右侧在相应楼层行点击“编辑”按钮,点击左上角"添加区域"按钮。
```
区域名称:
排序:
```

# 电箱管理

点击左侧"工作人员"-"区域管理",点击左上角"添加电箱"按钮。

```
电箱名称:
添加至:区域
选择项目:
选择楼层:
选择区域:
```

# 模块管理

点击左侧"工作人员"-"模块管理"。这里呈现所有向服务器发送数据的模块,如果有模块不在本地局域网内,可删除。

# 开关管理

点击左侧"工作人员"-"开关管理"。点击左上角"添加"按钮,点击"选择电箱"按钮,找到对应的电箱选择"选择" 按钮。

```
选择电箱:
模块类型:回路模块
是否有三相:没有三相
模块MAC:
排序:
备注:
```

# 菜单管理

点击左侧"权限管理"-"菜单管理",点击"同步菜单"按钮。
```
电工
    可视化管理
    当前报警
    开关报警
设备管理
    可视化管理
    电工管理
    报警设置
    当前报警
    定时管理
    场景管理
    回路管理
    报警策略
    开关报警
```

# 可视化管理

点击左侧"可视化管理",点击"查看楼层",点击区域图片。点击界面上某个按钮尝试。