教你用华为云玩转物联网开发

本篇文章将带大家了解物联网数据在华为云loT平台上端到端流转的过程,并指导大家基于华为云IoTDA及可视化大屏服务DLV,搭建物联网可视化大屏应用,进而学习物联网开发相关知识。

本文会分为以下3个部分进行介绍

  1. 物联网应用端到端开发概述

  2. 实操讲解零代码搭建物联网监控大屏(含控制台功能讲解)

  3. 华为云loT - 从联到用,构筑全场景物联网云服务

1、 物联网应用端到端开发概述

1. 物联网基础架构

[图片上传失败...(image-ae52a6-1679725062168)]

首先我们在了解端对端开发流程之前,我们可以先整体了解一下物联网基础架构,比较典型的是五层架构,从上图可以看到五层架构包含以下:

感知层:这是物联网架构的第一层。在感知层中,许多传感器和执行器用于收集有用的信息,例如温度,水分含量,入侵者检测,声音等。该层的主要函数是从周围环境获取信息并将数据传递到另一层,以便可以根据该信息执行某些操作。

边缘层:边缘计算利用近数据端的边缘结点直接对数据源数据进行计算处理,将部分或全部计算任务从云中心分散到各个边缘节点进行计算处理,分担了云中心的工作量,一定程度上减少了网络中数据的交换量,特点是:本地化、实时性、低能耗。

网格层:充当接入和传输网络的管道的作用,在这一层,会降相关的数据上报到云端,也就是平台层。

平台层: 平台层其实指的就是物联网平台,它作为承接设备与行业的中间服务,承载了抽象化的业务逻辑及标准化的核心数据模型,实现设备的快速接入,同时提供强大的模块化能力,支撑行业应用场景下的各类需求。

应用层:应用程序层基于从中间件层获得的信息来管理所有应用程序过程,常用案例有智慧园区、车联网、智慧城市、智慧工厂等。

2. 华为云物联网端到端开发介绍

开发操作 开发说明
产品开发 主要呈现物联网平台的界面查询与操作,包括产品管理、产品模型开发、插件开发、在线调试等。
应用开发 主要为业务应用与物联网平台的集成对接开发,包括API接口调用、业务数据获取和HTTPS证书管理。
设备开发 主要为设备与物联网平台的集成对接开发,包括设备接入物联网平台、业务数据上报和对平台下发控制命令的处理。

[图片上传失败...(image-90e96b-1679725062168)]

从引导图可以看出,开发者可以登录控制台完成创建产品,模型定义,同时结合在线调试工具完成相关的插件开发,基于平台已经创建的产品,可以根据提供的应用API,调试完成后上线到对应的应用商店以供使用。

针对设备侧开发我们在选择接入方式上可以使用SDK接入,模组接入,以及使用原生的协议接入,完成设备侧开发之后,我们端侧集成完可以进行在线调试,业务通过后,完成注册设备,就可以将设备进行商用。

3. 应用创新是物联网发展的核心

[图片上传失败...(image-55a820-1679725062168)]

这里列举了几个可视化大屏案例,基于云计算的工业互联网实时监控平台,某运输行业大数据平台,某企业安全态势感知,某公司数据追测平台等等,最终企业要做相关决策或者运营的时候,更多是依赖我们的可视化大屏,得到相关数据时,辅助相关的业务决策。

2、 实操讲解:零代码搭建物联网监控大屏

[图片上传失败...(image-be9688-1679725062168)]

接下来讲解零代码搭建互联网监控大屏,主要涉及到的相关服务是通过设备接入物联网平台,上报相关的数据,同时通过物联网平台的规则引擎转发数据至OBS,最后结合DLV服务进行数据的可视化。

1. 场景说明

物联网解决方案中,作为数据主体的“物”可能数量会非常大,产生的数据已经无法通过传统的数据处理服务进行处理。如何分析与利用这庞大的物联网设备数据对物联网企业来说又是一个新的挑战。

华为云物联网平台提供规则引擎能力,支持将设备上报的数据转发至华为云其他云服务,可实现将海量数据通过对象存储服务(OBS)存储,再由数据可视化服务(DLV)读取数据呈现为可视化报表,实现数据的一站式采集、处理和分析。

[图片上传失败...(image-51bebb-1679725062168)]

设备上报数据到物联网平台,物联网平台将数据以CSV格式存储到对象存储服务(OBS),数据可视化服务(DLV)从OBS文件读取数据并展现为多个维度的报表。

2. 整体流程

  1. 创建MQTT协议产品、开发产品模型、并注册设备。

  2. 创建数据转发规则,将数据以CSV格式持久化至OBS服务。

  3. 配置数据可视化服务(DLV)展示OBS中物联网数据。

  4. 使用设备模拟器上报数据,验证DLV大屏数据实时刷新。

3. 前提条件

• 已注册华为云官方帐号。未注册可单击注册页面完成注册。

• 已完成实名制认证。未完成可在华为云上单击实名认证完成认证,否则无法使用设备接入功能。

• 已开通设备接入服务。未开通则访问设备接入服务,单击“立即使用”后开通该服务。

• 已开通OBS服务。未开通则访问OBS服务,单击“立即使用”后开通该服务。

• 已开通数据可视化DLV服务。未开通则访问数据可视化DLV服务,单击“立即使用”后开通该服务。

4. 创建产品和设备

  1. 访问设备接入服务,单击“立即使用”进入设备接入控制台。

  2. 选择左侧导航栏的“产品”,单击右上角下拉框,选择新建产品所属的资源空间。

  3. 单击右上角的“创建产品”,创建一个基于MQTT协议的产品,填写参数后,单击“确认”。

[图片上传失败...(image-c94a94-1679725062168)]

  1. 为上一步创建的产品导入产品模型,请参考导入产品模型。

  2. 选择第3步创建的产品,在该产品下注册设备、请参考注册单个设备。

5. 数据转发规则配置

(1) 选择左侧导航栏的“规则>数据转发”,单击右上角的“创建规则”。

(2) 参考下表参数说明,填写规则内容。以下参数取值仅为示例,您可参考用户指南创建自己的规则,填写完成后单击“创建规则”。

[图片上传失败...(image-5175b-1679725062168)]

参数名 参数说明
规则名称 自定义,如iotda-obs。
规则描述 自定义,如数据转发至OBS服务。
数据来源 选择“设备属性”。
触发事件 自动匹配“设备属性上报”。
资源空间 和上一步创建的产品所在的资源空间保持一致。

(3) 单击“设置转发目标”页签,单击“添加”,设置转发目标。

[图片上传失败...(image-c3de3c-1679725062168)]

参考下表参数说明,填写转发目标。填写完成后单击“确定”。

参数名 参数说明
转发目标 选择“对象存储服务(OBS)”
区域 选择“对象存储服务”区域。若未授权访问此区域的服务,请根据界面提示,配置云服务访问授权。
存储桶 选择桶。若没有,请前往OBS服务创建桶
自定义目录 自定义存储数据目录
文件名称 自定义存储数据文件名
文件类型 选择“CSV”
转发字段----目标存储字段 OBS服务中生成文件和流转数据的对应关系列表

本实践中用到的转发字段和转发目标如下:

转发字段 转发目标
notify_data.header.app_id appId
notify_data.header.device_id DeviceId
notify_data.body.services[0].properties.orderID orderID
notify_data.body.services[0].properties.area area
notify_data.body.services[0].properties.orderTime orderTime
notify_data.body.services[0].properties.goods goods
notify_data.body.services[0].properties.amount amount

示例:如果设备上报的属性如下,需要把"orderID"保存到CSV文件,需要设置转发字段为”notify_data.body.services[0].properties.orderID”,转发目标为”orderID”。

{

"resource" : "device.property",

"event" : "report",

"event_time" : "20220812T121212Z",

"notify_data" : {

"header" : {

"device_id" : "d4922d8a-6c8e-4396-852c-164aefa6638f",

"product_id" : "ABC123456789",

"app_id" : "d4922d8a-6c8e-4396-852c-164aefa6638f"

},

"body" : {

"services" : [ {

"service_id" : "order",

"properties" : {

"orderID" : "0001"

},

"event_time" : "20220812T121212Z"

} ]

}

}

}

(4) 单击“启动规则”,激活配置好的数据转发规则。

[图片上传失败...(image-af0472-1679725062168)]

6. 数据上报及验证数据是否转发成功

(1) 使用MQTT模拟器连接到平台(模拟器使用请参考:使用MQTT.fx调测)。

(2) 使用模拟器进行属性上报(参考:设备属性上报)。

上报内容如下:

{

"services": [{

"service_id": "order",

"properties": {

"orderID": "0000001",

"area": "南山区",

"orderTime": "20220815T121215Z",

"goods": "商品01",

"amount": 30.5

},

"event_time": "20220815T121215Z"

}

]

}

(3) 前往OBS控制台,查看转发目标设置的文件是否生成

[图片上传失败...(image-ba9db7-1679725062168)]

7. 配置数据可视化服务

配置数据可视化服务,新建数据报表视图。

(1) 登录华为云官方网站,访问数据可视化服务

(2) 单击“进入控制台”

(3) 访问DLV控制台“我的数据”页面,单击“新建数据连接”,新建CSV文件数据连接(详情请参考:新建CSV文件数据连接 ,若您未开通DLV服务,可单击“体验试用”获取30天的基础版免费试用)

[图片上传失败...(image-c9a167-1679725062168)]

(4) 新建CSV文件数据连接中文件来源选择OBS文件,文件路径选择创建规则时指定的转发目标

[图片上传失败...(image-49664c-1679725062168)]

(5) 访问DLV控制台“我的大屏”页面,新建大屏添加并编辑组件实现下图效果(参考:创建大屏、编辑大屏)。也可以通过附件导入大屏(具体操作步骤请参考:导入导出大屏,自动售货机监控)

[图片上传失败...(image-c8ab00-1679725062168)]

(6) 选择上一步创建或导入的大屏进入编辑页面,分别设置每个组件的数据源

注意:

通过附件导入大屏时,各个组件的的数据转换器已经设置完成,只需要修改数据源为自己的CSV文件,即可完成大屏开发。

如果需要手动开发组件, 下面以”订单金额”为例,演示如何将CSV文件中数据展示到DLV。

(7) 选中订单金额对应的数字翻牌组件,在右侧属性窗口,切换到”数据”页签,选择数据源类型为“CSV”

[图片上传失败...(image-f85b6e-1679725062168)]

(8) 选择步骤4创建的数据连接

[图片上传失败...(image-811b9b-1679725062168)]

(9) 切换到“数据转换器“页签,新建一个名称为“sumAmount“的数据转换器,编写转换器代码(参考:使用数据转换器 )

[图片上传失败...(image-9ecef1-1679725062168)]

转换器源码:

var sumAmount =0.0;

for(var i = data.length-1; i >=0; i--){

sumAmount +=Number(data[i].amount);

}

return[{

"name":"",

"value": sumAmount

}];

(10) 选择组件,更改数据转换器为“sumAmount“,点击“更新查询“,就可以看到数据刷新到组件。(这样“订单金额“组件就完成开发,按照这个方法即可完成其他组件的开发)

[图片上传失败...(image-4670b6-1679725062168)]

(11) 大屏制作完成后点击右上角的“预览”或“发布”按钮即可完成大屏的预览和发布

[图片上传失败...(image-f78bda-1679725062168)]

8. 模拟数据上报及结果验证

(1) 使用MQTT模拟器连接到平台(模拟器使用请参考:使用MQTT.fx调测)

(2) 使用模拟器进行属性上报(参考:设备属性上报)

上报内容如下:

{

"services": [{

"service_id": "order",

"properties": {

"orderID": "0000002",

"area": "罗湖区",

"orderTime": "20220815T121215Z",

"goods": "商品02",

"amount": 30.5

},

"event_time": "20220815T121215Z"

}

]

}

(3) 打开数据可视化服务查看数据是否刷新

[图片上传失败...(image-f6bf26-1679725062168)]

到这里我们就完成了整个物联网监控大屏端到端到开发配置,以及模拟数据上报最终结果的预览呈现。

3、 华为云loT - 从联到用,构筑全场景物联网云服务

1. loT设备接入:全场景设备极简上云

(1) 功能总览

设备接入服务:全场景极简设备接入,亿级设备接入和百万级高并发通信,数据上云按需流转

[图片上传失败...(image-53b166-1679725062168)]

设备接入服务支持将设备上报平台的数据推送给行业应用或者是流转给其他云服务,接下来针对设备的接入服务进行展开讲解。

(2) 设备接入

全接入广覆盖、多设备全场景极简联接上云

[图片上传失败...(image-a75bd8-1679725062168)]

IOT SDK集成开发的好处就是我们可以直接调用SDK封装好的方法实现设备的直连,简化了我们集成开发的难度。只要是支持TCP/IP协议的设备就可以通过WIFI或者2/3/4/5G网络直接接入云端。

sdk预集成,模组-流量-云平台一站式采购,设备上电即上云

[图片上传失败...(image-9fd510-1679725062168)]

从上图可以看出,设备厂家在选择开发时,如果选择带有IOT SDK的设备模组,只需要关注设备的指令与模组通信,就可以实现设备的极简快速上云,相比于传统的开发模式,大大减少了对接的难度和联调的周期。

轻量化,多语言Device SDK使能端侧智能,支持厂商灵活适配

[图片上传失败...(image-6e7b84-1679725062168)]

核心能力

功能模块化,按需移植更轻量

• RAM容量最小仅需32KB,根据设备资源情况按需移植功能模块

多语言,多OS,开放易用

• 覆盖主流编程语言,降低开发门槛

• 支持多种OS及RTOS,主流OS全覆盖

云端下发规则,端侧执行更智能

• 在云端配置设备间信任关系及通信规则,一键下发

• 设备间基于OpenHarmony软总线实现横向互联

设备级异常检测,设备防护更安全

• 设备级异常检测,实现配置风险、密钥泄露等及时预警

• 端侧支持国密算法,帮助端侧实现加密算法国产化

(3) 设备管理

标准物模型统一数据格式,提供设备级标准 API,批量复制,按需调用

[图片上传失败...(image-151df5-1679725062168)]

简便易用

简化应用对接,不依赖硬件开发联调;统,数据结构对接多家厂商设备相关API调用量达亿次/月

丰富生态

联合芯片、模组、智能硬件等几十家loT合作伙伴,沉淀标准物模型品类300多个,覆盖工业、园区、城市、智联生活等

高效、安全、稳定的 OTA升级能力,云网协同提高弱设备升级成功率

[图片上传失败...(image-c9e7a0-1679725062168)]

核心能力

FOTA/SOTA全面支持

• FOTA:固件升级,用于设备硬件的底层“驱动程序”

• SOTA:软件升级,用于设备系统软件和应用软件

NB网络低速场景特殊优化

• 通过自定义的PCP应用层协议,降低弱设备的资源占用率

• 按照网络信号覆盖情况,灵活调整设备升级并发数量,提高升级成功率

安全、灵活的升级策略

• 支持可视化任务配置、自定义升级时间、升级范围、升级版本、重试策路等,满足各类升级诉求

• 自定义升级包token过期时间,升级包校验,防篡改、高安全

海量设备同时升级

• 通过批量任务管理,提供多线程、高并发的升级能力,完成百万级设备快速升级,安全漏洞快速修复

匹配业务组织的角色分权,设备分域管理,区域自治,全局统筹

[图片上传失败...(image-20fd90-1679725062168)]

优势

分域管理资源隔离

在同一实例下创建多个资源空间,实现多业务应用的分域管理

同一设备不同权限看护

API级权限控制,满足企业对权限最小化的安全管控要求

灵活自定义角色权限

针对每个层级的管理员,上层管理员可根据实际情况分配不同的角色权限

(4) 消息通信

在消息通信方面,首先要介绍的是编解码插件功能

编解码插件:零代码实现数据格式转换,设备数据码流翻译器

[图片上传失败...(image-ac7810-1679725062168)]

比较经典的场景是设备资源受限,低功耗,或者考虑节省流量等方面,采用二进制码流的格式上报数据,这种情况下需要在云端通过编解码插件将二进制格式转为符合物模型的Json格式。

相关的优势体现在支持多种开发方式,降低开发门槛,提升了开发效率和支持界面图形化开发,零代码打通消息到物模型数据流

泛协议适配,开放灵活,支持多行业,多场景的设备上云

[图片上传失败...(image-dea078-1679725062168)]

场景

• 交通、水利、消防、电力等行业的设备通过预集成的行业协议解析插件平滑接入,开箱即用

• 厂家私有协议设备可通过开发解析插件快速接入设备无须改造

• 无需额外采购服务器、网络等资源,无需构建针对协议插件的运维能力,部署到平台统一托管运维

优势

• 多:可支持30+行业协议,丰富插件市场

• 易:私有协议一键部署,平台托管免运维

• 稳:统一监控运维,解析异常实时感知

海量 Topic订阅,支持设备-应用,设备-设备到双向通信

在设备通信方面有两个典型的应用场景,第一个是设备到应用的双向通信,我们上层应用通过消息订阅及时感知设备的变化,也就是设备状态变化和故障信息上报,OTA升级等等。

第二个是设备与设备到端到端通信,可以概括为两个要点,一个是一对一对设备通信,另一个是双向通信,比较典型的场景是AGV机器人即时通信,实现多机协作。

[图片上传失败...(image-9add29-1679725062168)]

(5) 规则引擎

一路流转,多路分发,强大,灵活的数据订阅和流转能力

[图片上传失败...(image-d7f58b-1679725062168)]

同时平台提供规则引擎相关能力,也就是智能设备接入平台上报数据之后,可以结合平台的流转规则将设备数据流转到上层应用通道Kafka、DIS、MQTT等等,也可以转发给云服务进行数据存储、分析、集成等等,也可以转发给LTS、DLV进行监控、数据可视化呈现。

同时平台也提供了SQL自定义订阅流转规则,支持基于SQL的自定义规则,可通过SQL愈发实现精细化数据清洗、过滤、数据格式转换等功能。

万级联动规则实现跨应用 /子系统的多设备自动化协同

[图片上传失败...(image-77af20-1679725062168)]

上图是华为园区消防应急处理,消防联动的展示

消防报警 -> 摄像头跟踪- > 短信推送 ->应急指引 -> 门禁联动 ->广播通知

(6) 设备发放

设备发放:云端批量发放,设备自动就近接入

[图片上传失败...(image-732c9b-1679725062168)]

从上图对比可以看出有了华为云IOT设备发放服务之后,设备厂商只需要以唯一的地址批量覆盖,然后相关设备发放给不同的客户,客户拿到设备进行上电激活后,设备会根据云端的地址进行业务交互,由云端判断设备所在区域进行自动的就近接入,这样就实现了设备的上电上云,就近接入。

(7) 监控运维

设备异常检测:设备安全状态可视,识别异常行为设备,确保企业安全生产

[图片上传失败...(image-d4fdcd-1679725062168)]

能力

• 支持13种检测项,实时监测第三方恶意攻击行为、设备自身异常行为

• 支持租户视角海量设备的安全可视

• 根据异常检测模型给出具体的处理建议

价值

• 识别单设备/同类设备的异常:降低大规模设备被入侵、甚至发起大规模

DDoS攻击的可能

• 实现设备预测性维护:根据设备生产执行和异常情况进行预测性维护、判断

设备是否异常,避免因设备异常造成停工停产,提前识别风险。

2. 全球SIM联接:物联网流量及管理平台

全球SIM联接:让联接更简单、智能

[图片上传失败...(image-90889e-1679725062168)]

全球SIM联接云服务是什么

全球SIM联接服务是基于移动运营商提供无线蜂窝联接,为物联网设备提供2/3/4G物联网上网流量

典型应用场景

(1) 通用场景:物联网设备提供需要2/3/4G无线蜂窝连接,不需要挖沟铺线

典型行业:三表(电表、水表、气表):POS机、共享电动车等

(2) 跨国业务,享受本地资费:国内统一人口购买到海外当地流量

• 典型行业:车企(销售海外)、物流、运输、保健等

(3) 运营商切换,享受更低资费:不换卡可换运营商网络

• 全球SIM联接可提供空中写卡自主更换和选择运营商

• 典型行业:新零售、运输、汽车出海等

全球SIM联接云服务提供什么

(1) 流量套餐(每月流量)

国内:30M、100M、500M、1G、2G、3G、5G、10G、30G共7档

运营商:中国移动、中国联通、中国电信

海外:10M、30M、100G共三档(仅限eSIM和vSIM)

(2) SIM卡类型

• 普通实体卡;消费级三切卡、消费级双切卡、贴片卡

• eSIM&vSIM

3. IOT数据分析:物联网领域的专属分析平台

[图片上传失败...(image-9dddf9-1679725062168)]

核心价值

• 数据清洗:提供基于Flink实时计算引擎的0代码数据清洗工具,拖拽式开发,快速定义数据清洗逻辑

• 温冷分层:提供时序+OBS的温冷分层管理技术 有效降低海量数据存储的成本

• 李生模型:支持资产数据建模,提供图形化建楼美工具,支持批量快速定义设备/资产模型,让数据不再难懂

• 数据分析:提供多种分析工具,包括时序分析,流分析,批分析,满足不同分析场景需要

总结: IOT数据分析服务是针对物联网领域的专属分析平台,其核心的要点是针对我们的IOT设备实时采集的数据,或者是批量导入的IOT子系统的数据进行转换、删除、去重、差值等相关的清洗操作,将转换过的数据关联到再数据分析服务上建立的模型相关的点位上,同时也支持温冷分层存储,并且根据平台提供的数据分析能力,对进行清洗后的数据进行进一步的分析处理之后,面向我们的应用侧开放使用,典型的场景有实时监控、统计分析、智能决策等。

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,098评论 5 476
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,213评论 2 380
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 149,960评论 0 336
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,519评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,512评论 5 364
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,533评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,914评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,574评论 0 256
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,804评论 1 296
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,563评论 2 319
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,644评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,350评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,933评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,908评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,146评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,847评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,361评论 2 342

推荐阅读更多精彩内容