项目四:基于ONNET的智慧小区安全防护系统及其可视化

任务一:创建智慧小区安全防护系统产品设备
1.1实训目的
  1、通过OneNET物云平台新建MQTT产品;
  2、根据场景创建产品物模型;
  3、创建基于MQTT协议的云平台设备;
  4、查看设备运行状态及数据返回。

1.2实训步骤

1.2.1创建基于 MQTT 协议的产品
  步骤1 “全部产品服务”--------> “物联网开放平台

f8bffaa49ba02c7f956311ae61ded136.png

步骤2 点击“产品开发”功能,点击“创建产品”。


bfe813af8a0c6c5c35b52ffd533a9b11.png

选择产品品类,智能化方式为“设备接入”方式,其中“节点类型”选择“直连设备”,“接入协议”选择“MQTT协议”,“数据协议”选择“OneJson”,“联网方式”选“Wi-Fi”,“开发方案”选择“自定义方案”

image.png

1.2.2创建产品物模型步骤
  步骤1 进入产品开发详情页面

96b65433fcf844420ab0bfab35141607.png

步骤2 点击“设置物模型”,进入物模型管理页面,按下述步骤添加系统功能点和自定义功能点。


image.png

步骤3 在弹出的添加页面中,选择如下图所示的系统功能点,点击“添加。

613f6e4c4065762fe6c7be25d80c64c6.png
image

步骤4 点击“添加自定义功能点”

image

在弹出的添加页面中,填写以下字段内容。

image.png
image.png

步骤5 保存物模型

image

点击“保存”按钮,则创建的物模型在 OneNET 平台上生效。

image

1.2.3 创建 MQTT 的设备

步骤1点击设备管理
  在刚建立产品列表的操作项中点击“设备管理”,页面即进入设备列表管理页面。

image.png

步骤2 添加一个设备,用于模拟真实设备接入
 因为是新创建的产品,没有设备,点击“添加设备”:

image

在弹出的页面中,添加单个设备,所属产品选择刚建立的产品,设备名称输入Controller

image

步骤3 再添加一个设备
  再点击“添加设备”,该设备名称输入Simulator后续操作与上述一致

image

1.2.4 设备状态及信息查看

步骤1 查看设备是否运行
  点击“设备管理”,“设备状态”展示了对应设备的运行状态。

f417d749375e134082365a0286c074f6.png

步骤2 查看设备信息
  点击“详情”,在详情页面,查看设备及归属产品的详细信息。

image.png

1.3 拓展实训部分

1.3.1 设备分组管理
  步骤1 创建设备分组支持设备分组功能,将不同产品下的不同设备组合在一起。

image

点击“设备分组”进入分组管理页面,点击“添加分组”,填写分组名称,点击“新建”完成创建。

image

点击“详情”,进入当前设备分组信息页面。

image.png

步骤2
  
点击添加设备”按钮,选择创建好的设备,右侧会自动出现该设备信息,表示已被选择加入到当前分组中。点击“确定”按钮完成将设备加入到分组的操作。**

image

1.5 实训笔记

MQTT是一种基于发布/订阅模式的轻量级消息传输协议,专为受限环境(如网络不稳定、带宽有限、设备处理能力有限等)设计,用于物联网(IoT)设备之间的通信。
物模型是物联网领域中的一个概念,它定义了设备在云平台上的数据模型,包括设备的功能描述、属性、服务和事件等。物模型是设备与云平台之间交互的抽象表示,它使得不同厂商、不同类型的设备能够以统一的方式进行管理和控制。

任务二:智慧小区安全防护系统模拟设备接入

2.1 实训目的

1、通过模拟工具调试设备接入;
  2、通过模拟设备,实现属性上报;
  3、OneNET 云平台下发命令到模拟设备;

2.2.1 模拟设备接入OneNET 平台

**步骤1 获取产品 ID,设备名称,设备密匙


image.png

步骤2 使用 Token 计算工具,获得 token 信息
  res:products/产品ID/devices/设备名称
  et:用在线时间戳工具,计算生成一个 5 天后时间点,得到一串形如填写示例的数字。
  key:设备密匙

image

步骤3 安装并配置 MQTT.fx 工具模拟设备信息

6c4e06000206cc94c731bea3bf748f78.png

(1) 设置 Profile Name:可设置一个名字
  (2) 设置 Broker Address:mqtts.heclouds.com (MQTT 设备接入平台网址)
  (3) 设置 Broker 端口:1883
  (4) 设置 Client ID:设备名称

在“General”中,设置:
  (5) MQTT 协议版本号:取消默认勾中,选择版本为 3.1.1

image

点击 “User Credentials”:
  (6) 设置 User Name:产品 ID
  (7) 设置 Password:token}

image

  步骤4 使用 MQTT.fx 工具模拟设备接入
  运行 MQTT.fx 工具,点击“Connect”,正常运行下Connect 按钮变灰,右侧 Disconnect 按钮处于激活状态。
image.png

当工具正常连接后,手动刷新,查看当前模拟的设备显示为在线状态

image

2.2.2 模拟设备接入OneNET 云平台实现属性上报

步骤1 订阅属性上报结果通知
点击”Subscribe”,在其中的输入框填写属性上报结果通知topic。
  $sys/产品 ID/设备名称/thing/property/post/reply
  其中产品 ID、设备名称,根据实际创建的产品和设备信息替换,将替换后完整的 topic,填入模拟工具“Subscribe”选项页中的输入框,如下图所示:

image.png

点击“Subscribe”向平台订阅该主题,平台返回成功后,工具左侧中的已订阅主题列表会有一条记录,且该主题下当前消息数为 0。

image

  步骤2 发送属性上报消息
  点击“Publish”选项页表头,切换到消息发送页,在输入框中填入属性上报 topic 主题,该 topic为:
  $sys/产品 ID/设备名称/thing/property/post

image

在下空白编辑区中,输入如下内容:

{
   "id": "123",
   "version": "1.0",
   "params": {
       "distance": {
           "value": 28.88,//上报的属性值,填入一个合适的数字即可,如 28.88
           "time": 1998234235711//属性值上报时间,该参数可删除不填,如果填写,需用时间戳计算工具获得当前时刻的时间戳(单位ms)
       }
   }
}

输入后,点击“Publish”。

步骤3 查看属性上报结果
  点击“Subscribe”,查看属性上报结果通知消息 topic 收到的消息如下图示例:
  可以看到最新的一条消息,标识了消息的 id 和 code,其中 id 的值为发送时的 id 值,code 值为 200表示该条消息成功送达 OneNET 平台

image

注:该图为本组成员所截
  步骤4 OneNET 平台中查看设备的属性最新值
  回到 OneNET 平台中设备管理页面,进入“Simulator”设备详情,查看当前设备各个属性的最新数据,确认显示出通过模拟工具上报来的 value 值:
image

2.2.3 OneNET 平台下发属性值到模拟工具

步骤1 订阅接收平台下发属性数据的 topic
  设备侧如需要收到平台下发的数据,需要订阅接收平台下发数据的 topic,该 topic 为:
  $sys/产品 ID/设备名称/thing/property/set
  点击“Subscribe”,在其中的输入框填写平台下发属性数据的 topic。点击“Subcribe”完成订阅,如下所示。

image

  步骤2 OneNET 平台下发属性数据
  在“设备管理”中选择要下发属性的设备(Simulator 设备),点击详情,切换功能为“设备调试”
image

步骤3 模拟设备中查看收到的属性数据值
  点击Subscribe”,可以看到已订阅列表中,关于平台下发属性数据的topic, 当前消息数是 1。点击右侧消息列表最下方一条消息,可以看到其中的内容信息,收到的值与前一步骤中下发的值相同。

image

2.3 拓展实训部分

2.3.1 仿真设备信息上传

步骤1 进入设备调试功能
  在“设备管理”中选择要下发上报信息的设备( Simulator 设备),点击详情进入设备信息页面,切换功能为“设备调试”。

image

步骤2 启动设备模拟器
  注:如果此时页面提示设备已经登陆,需要先检查,之前模拟工具是否还处于连接状态中,如是则点击模拟工具中的“Disconnect”按钮,并等待一定时间再次刷新页面,直到页面显示可以启动调试。

image

点击“启动调试”按钮。启动后,属性上报 Tab 页展示了当前设备可以上报的数据点


image.png

步骤3 输入当前设备的WiFi定位信息上报
 通过输入关键字搜索定位到“WiFi定位”,勾中前面的选框,并点击右侧下拉展开箭头,在该数据点下的“热点mac信息”输入框中输入某个WiFi热点的mac地址信息,点击下方的“属性上报”。

image

<meta charset="utf-8">

观察页面右侧显示的数据上报及平台回应信息,确认数据成功上报。

image

步骤4 在设备详情页面查看设备上报的热点位置信息数据
  返回设备详情页面,切换“属性”页面,查看设备属性点的数据信息。

image

2.4 实训笔记

MQTT(Message Queuing Telemetry Transport)是一种轻量级的消息传输协议,它专为物联网(IoT)中的低带宽、高延迟或不可靠的网络连接而设计。MQTT模拟设备接入的原理主要涉及以下几个方面:

  1. 客户端与服务器架构

    • 客户端(Client):模拟设备通常作为MQTT客户端,负责发布(Publish)消息到特定的主题(Topic)或订阅(Subscribe)感兴趣的主题以接收消息。
    • 服务器(Broker):MQTT服务器,也称为代理(Broker),负责接收所有客户端的发布消息,并将其传递给订阅了相应主题的客户端。
  2. 连接过程

    • 模拟设备(客户端)首先需要与MQTT代理建立TCP/IP连接。
    • 连接建立后,客户端发送CONNECT消息给代理,代理响应CONNACK消息确认连接。
    • 客户端可以选择性地发送用户名和密码进行认证,或者使用其他安全机制如TLS/SSL来保证通信安全。
  3. 消息发布与订阅

    • 客户端通过发布PUBLISH消息到特定的主题来发送数据。
    • 客户端通过发送SUBSCRIBE消息来订阅感兴趣的主题,代理会记录这些订阅信息。
    • 当有消息发布到已订阅的主题时,代理会将消息发送给所有订阅了该主题的客户端。
  4. 消息质量(QoS)

    • MQTT支持三种不同的消息服务质量(QoS)级别:0(最多一次)、1(至少一次)、2(恰好一次)。
    • 模拟设备可以根据需要选择合适的QoS级别来确保消息的可靠传输。
  5. 保持活动状态(Keep Alive)

    • 客户端和代理之间会设置一个保持活动状态的时间间隔,以确保连接不会因为长时间无数据传输而断开。
    • 如果在这个时间内没有消息交换,客户端会发送PINGREQ消息,代理响应PINGRESP消息,以此来维持连接。
  6. 断开连接

    • 当模拟设备需要断开连接时,它会发送DISCONNECT消息给代理,然后关闭TCP/IP连接。

任务三:基于真实设备接入 OneNET 平台

3.1 实训目的

1、基于真实设备,搭建软硬件环境,接入 OneNET 平台并实现设备属性上报;
  2、通过OneNET 平台的“设备调试”实现设备属性下发;
  3、通过OneNET 平台的“API 调试”实现设备属性下发;
  4、直接基于API 方式实现设备属性下发;

3.2 实训步骤

3.2.1 真实设备接入OneNET 平台实现属性上报

步骤1 基于 OneNET 物联网实验箱搭建实训项目终端硬件平台
  选取 OneNET 物联网实验箱“核心模块”以及“Wifi 模块”、“蜂鸣器模块”、 “超声波模块”进行搭建

步骤2 修改设备程序的 OneNET 平台网络接入配置参数
  修改如下几处代码,让工程具备正确的网络访问以及 OneNET 平台接入验证和适配本次实训任务所需的物模型数据属性上报、写入能力。具体代码文件在工程中的位置如下图所示

image

A. 工程相对路径\device\src\net_device.c 约 677 行处,将{wifi}、{password}替换为设备所在 Wifi 网络用户名和密码(将{}括号一起替换,下同);

image

B. 工程相对路径\onenet\src\onenet.c 约 56 行处,依次修改{设备密钥}、{产品 id}、{设备名称}为之前步骤中在 OneNET 平台 中所创建的产品、设备相关信息,本例中设备名称就是之前步骤中创建的“Controller”设备,并对应填入其设备密钥;

image

步骤3 编译工程,连接下载器烧写程序到设备中
  下载器的连接以及烧写过程略。下载成功后设备重新加电,等待一定时间,进入下一步。

步骤4 OneNET 平台侧查看设备状态
  登录 OneNET 平 台 ,查看“Controller”设备运行状态为在线,具体操作与前述步骤中查看设备状态相同,图略。若此时设备显示为不在线,则排查前面关于网络接入、OneNET 鉴权等代码修改处是否有误。

image

步骤5 OneNET 平台侧查看设备上报数据信息
  进入设备详情页面,查看属性表格页展示的各个数据点显示的信息。(下图仅为示例参考)

image

3.2.2 下发属性在终端设备上执行生效(设备调试)

步骤1 通过 OneNET平台 的设备调试方式进行属性下发
  打开设备管理列表页面,选择之前步骤中创建的MQTT产品下的“Controller”设备,点击“详情”进入设备详情页面,并点击 “设备调试”选项,进入 OneNET 平台 的设备调试功能页面。本任务中,需要切换调试方式为“应用模拟器”,下方页面展示了可以设置的属性(物模型中可写的属性功能点)。

image
image

先勾选一个功能点,然后设置下发的数值。(以蜂鸣器为例,这是一个 bool 型功能点,勾选后,可设置值为 true、false 两个之一,本次任务选择 true 作为下发数值)点击页面下方的“属性设置”按钮,右侧调试日志展示了下发的报文,设备端也同时将该数值执行生效。


image

3.2.3 下发属性在终端设备上执行生效(API 调试)

步骤2 进入“API 调试”功能页面
  点击“运维监控”菜单下“API 调试”子菜单,并展开工作页面左列显示的大类调试类别中的“物模型使用”下拉列表,选择“设置设备属性”API项,如下图所示:

image

  在中间页面展示的必填参数中,填写页面中输入必要的参数,如下图所示,本次任务中,填入真实接入的设备“Controller”所对应的相关信息:
image

  其中的params内容填写要设置的属性标识符以及对应设置值,本次任务中设置蜂鸣器状态为true,文本示例参考如下:

{
 "beep": true
}

点击下方的“执行”按钮,等待一会儿后,设备端执行下发的属性值(蜂鸣器响),同时右侧列页面刷新显示出调用结果,也就是整个API 模拟调用的报文交互结果。几个红色框强调处,是api 调用的关键信息。实际的API 接口调用能否正确,需要这几处关键信息填写正确。


image

3.2.4 基于API 方式实现设备属性下发

步骤1 填入必要参数
  1、根据API文档的信息,确定设备属性设置的请求方式、请求 url ,填入到 Postman 工具url填写栏,将 Postman工具url填写栏前面的下拉选项改为“POST”。

image

  2、确定请求 body 内容及格式,以蜂鸣器属性值(beep)下发为例, product_id为产品ID,device_name为设备名称,params 为需要下发的结构化数据,同时包含了要下发的“beep”属性点的值,示例中为 true 数据。以键值对形式将上述需要设置的具体参数组装为 body 报文内容,最终填入 Postman 工具的 Body 选项页内。

{
"product_id": "84qVvid4b5",
"device_name": "Controller",
"params":
{
 "beep": true
}
}

3、确定请求的 Header 内容,这里需要一个向 OneNET 平台鉴权所需的必要信息字段,就是“authorization ”信息,res 参数须以“userid/ 用户 ID”的格式填入,版本号须为“2022-05-01”,字段具体内容根据实际情况进行填入。

image

  步骤2 发起 API 请求,查看结果
  发起请求前确认当前真实设备已在线,以蜂鸣器属性值(beep)下发为例,通过 postman 发起请求, 通过平台鉴权后,该请求会下发到对应的真实设备,打开蜂鸣器开关,蜂鸣器会按照程序里预置的逻辑进行鸣响。
image

3.2.5 基于OneNET 云平台的场景联动

步骤 1 进入 OneNET 平台 场景联动管理功能
  进入 OneNET 平台 控制台页面,点击“数据流转”菜单下“场景联动”子菜单,进入场景联动管理功能页面。

image

  步骤2 创建场景联动规则
  点击页面右上角“新建场景”,填写场景名称,这里我们需要一个“距离太近告警”的场景,点击添加进入下一步。
image

  步骤3 编辑距离探测告警的联动规则
  1、触发方式:“设备触发”
  2、选择产品分组:“选择产品”
  3、选择具体产品:选择之前实训任务中创建的MQTT产品名称
  4、选择设备: 选择该产品下的Controller设备
  5、选择信息源类型:“设备功能点”
  6、选择功能:选择该产品下的“距离”数据点
  7、修改关系运算符:“<”
  8、数值:填入 "5"
image

  其次点击增加“执行动作”,在“动作一”内容中,依次选择:
  1、选择动作类型:“设备执行”
  2、选择产品分组:“选择产品”
  3、选择具体产品:选择之前实训任务中创建的MQTT产品名称
  4、选择设备: 选择该产品下的Controller设备
  5、选择功能:选择该产品下的“蜂鸣器”
  6、数据值选择 "1"。
image

  点击“确定”创建好改场景信息,并修改其启用状态为“开”。
image

  步骤4 再新增一个联动规则,实现距离安全时取消告警
  参考步骤3 描述,再新增一个联动规则,名称可以为“距离安全取消告警”。该规则的具体条件及动作与步骤3大部分相同,除了其中的条件部分,距离逻辑判断修改为“>”,数值为“20”,执行动作部分,蜂鸣器的数值改为“0”。最后点击“确认”按钮,并同样将该条场景规则的启用状态改为“开”
image

  步骤5 设备上线,观察场景实现效果
  近距离遮挡超声波模块的距离探测器探头,稍等一定时间后,蜂鸣器模块鸣叫,移开超声波模块遮挡, 再稍等一定时间后,蜂鸣器模块停止鸣叫。
注:如设备未按场景联动的规则逻辑执行,可通过场景列表该条场景的“查询日志”进入查看场景联动日志,分析具体原因。
image

3.3实训笔记

红外距离探测器主要依靠红外光的发射与接收来确定距离。当红外光照射到物体上时,会根据物体的性质反射回一部分光线。这些反射回来的光线被探测器捕捉并转换为电信号,经过处理后用于计算发射点与物体之间的距离。

任务四:安全防护系统的可视化实现

4.1 实训目的

1、学会OneNET 平台数据可视化编辑器的使用;
  2、能够进行可视化数据源的配置;
  3、对智慧小区安全防护系统进行可视化展现。

4.2 实训步骤

4.2.1 物联网云平台可视化组件配置运用

步骤1 创建一个可视化项目

image

  首先新增一个可视化项目,在弹出的模板选择页面,选择一个 2D 项目模板下的“空白模板”作为本次项目可视化的基础模板,填写位于右侧的项目名称、项目描述后,点击“确定”完成可视化项目创建。
image

  可以选择具有一定页面效果的模板比如“模板-智慧园区“,后续根据需要删减部分控件。
image

  步骤2 增加数据源模板
  点击左侧菜单“数据管理”下“数据源模板”子菜单,右侧页面中,点击“创建数据源模板”,预先为界面展示距离的变化图表建立一个数据来源模板。
image

  在展开的配置项中,先设定第一项的“数据类 ”型为“物联网平台”,这时页面会切换为配置从“物联网平台”抓取数据所需的必要信息。依次填写带“”的所有项:
image

  
步骤3 编辑可视化页面及各个组件*
image

  选择一个合适的图表,若是空白模板,则添加一个图表

image

步骤4 设置图表的数据来源
  保持折线图处于选择状态(可再次双击折线图,右侧出现属性修改页),现在切换到“数据”属性 Tab页。选择“数据绑定方式”为“数据源”,此时“数据源选择”下拉列表为“请选择”状态,点击“管理数据源”按钮,弹出“数据源管理”页面。

image

点击“数据源模板”Tab 页,展示目前所有的数据源模板,可以看到一条在之前步骤中已经创建好的记录(名称为 distance),点击该记录操作列中最右图标:“以此模板创建数据源”。关闭窗口回到视图编辑页面。

image

此时“数据源选择”下拉列表会出现一条可选的记录,形如“distance_XXXX”,代表以“distance” 模板生成的记录,平台自动追加后缀加以命名。选择该条记录作为折线图的数据源。

image

步骤5 设置不使用数据过滤器
  点击 “使用数据过滤器”前面的勾选框,去掉勾选,即不使用数据过滤器。点击“数据处理结果”按钮,查看弹出的窗口中展示的数据,这些数据就是设备定时上报的属性点形成的(图例中的 value对应的值,就是上报的间隔距离值)。关闭弹出窗口继续下一步。

image

步骤6 设置图表的横轴列展示字段名与数据提供字段相匹配
  现在切换回“样式”属性 Tab 页。展开“数据系列”的节点,修改列字段名为“value”,保持与数据源中提供的数值字段“value”相一致。

image

步骤7 预览可视化视图并回到编辑状态迭代优化视图效果
  编辑视图界面,可以看到折线图已显示出实际的折线数据图表,可以点击右上角“预览”按钮,在全页面状态下查看整个可视化视图的效果。

image

步骤8 保存视图,完成可视化项目
完成视图编辑后,点击顶部的“保存”按钮(编辑状态和预览状态均可),完成项目保存。

image
image

4.3 实训笔记

物联网(IoT)平台的可视化页面是一个用户界面(UI),它允许用户通过图形化的方式监控、管理和控制连接到平台的物联网设备。这些页面通常提供以下功能:

  1. 设备监控
    • 实时数据显示:展示设备上传的实时数据,如温度、湿度、位置等。
    • 状态更新:显示设备的运行状态,如在线/离线、正常/异常等。
  2. 数据可视化
    • 图表和图形:使用折线图、柱状图、饼图等来展示数据趋势和模式。
    • 仪表盘:提供一个综合视图,汇总关键性能指标(KPIs)和统计信息。
  3. 设备管理
    • 设备列表:列出所有连接的设备,包括设备ID、类型、位置等信息。
    • 配置和控制:允许用户对设备进行配置更改,如设置阈值、更新固件、发送控制命令等。
  4. 报警和通知
    • 异常检测:当设备数据超出预设阈值时,系统会触发报警。
    • 通知系统:通过电子邮件、短信或应用内通知向用户发送警报信息。
  5. 用户权限管理
    • 角色和权限分配:根据用户角色分配不同的权限,如管理员、操作员、访客等。
    • 安全设置:确保只有授权用户可以访问敏感数据和控制功能。
  6. 数据分析和报告
    • 历史数据查询:允许用户查询和分析历史数据。
    • 定制报告:生成和导出定制的报告,帮助用户进行决策支持。
  7. 集成和扩展
    • API接口:提供API接口,允许与其他系统或服务集成。
    • 插件和扩展:支持第三方插件或扩展,以增强平台功能。
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 211,423评论 6 491
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,147评论 2 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 157,019评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,443评论 1 283
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,535评论 6 385
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,798评论 1 290
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,941评论 3 407
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,704评论 0 266
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,152评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,494评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,629评论 1 340
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,295评论 4 329
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,901评论 3 313
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,742评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,978评论 1 266
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,333评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,499评论 2 348

推荐阅读更多精彩内容