jetlinks之Thing

提示:项目原因,有幸结识一50多岁的老博士,觉得这位老博士是个技术控,挺佩服的,不知道自己达知命之年时会在做什么,或许也是在做技术吧!之前聊过一些低代码,今天聊到物联网平台,谈了一些物联网的看法,博士说物联网平台的关键技术是"规则引擎",好吧,其实自己最早学习jetlinks的初衷是想学习下“物模型”… 路漫漫其修远兮!

文章目录

  • jetlinks之Thing
  • 前言
  • 一、物实例
    • 1.实例简介
    • 2.属性
    • 3.构造器
  • 二、物模板
    • 1.属性
    • 2.构造器

前言

本章主要介绍“物实例”相关代码及实现。


一、物实例

1.实例简介

该包是jetlink-core包下org.jetlinks.core.defaults 包下代码


提示:如上StorageConfigurable 已经不是第一次遇见了,可配置存储

Thing 物实例接口,可通过此接口获取物的物模型以及相关配置信息.。
DefaultThing 物实例默认实现。

属性解析:
ThingType 物类型定义,通常使用枚举实现此接口
ThingMetadata 物模型定义 包含 事件 属性 功能 标签定义
ThingTemplate 物模版,统一定义物模型等信息

2.属性

类型 字段 描述 备注
String id 主键
ThingType type 设备元数据更新
Mono<ConfigStorage> storageMono 配置存储器
Mono<ThingMetadata> metadataMono 物模型定义
Mono<ThingTemplate> templateMono 物模板定义
long lastMetadataTime 模型最后更新时间
ThingMetadata metadataCache 物模型缓存
ThingMetadataCodec metadataCodec 物模型编码器
Function<Thing,ThingRpcSupport> rpcFactory rpc创建工厂

3.构造器

 public DefaultThing(ThingType thingType,String id,Mono<ConfigStorage> storageSupplier,ThingMetadataCodec metadataCodec,ThingsRegistry registry,Function<Thing,ThingRpcSupport> rpcFactory) {this.id = id;this.type = thingType;this.storageMono = storageSupplier;this.metadataCodec = metadataCodec;this.rpcFactory=rpcFactory;this.templateMono = this.getSelfConfig(ThingsConfigKeys.templateId).flatMap(templateId -> registry.getTemplate(this.type, templateId));this.metadataMono = this//获取最后更新物模型的时间.getSelfConfig(lastMetadataTimeKey.getKey()).map(Value::asLong).flatMap(i -> {//如果时间一致,则直接返回物模型缓存.if (i.equals(lastMetadataTime) && metadataCache != null) {return Mono.just(metadataCache);}lastMetadataTime = i;//加载真实的物模型return this.getSelfConfig(metadata).flatMap(metadataCodec::decode).doOnNext(metadata -> metadataCache = metadata);})//获取物模版的物模型.switchIfEmpty(Mono.defer(() -> getTemplate().flatMap(ThingTemplate::getMetadata)));}

代码如下(示例): mark一下

二、物模板

物模版,统一定义物模型等信息

1.属性

代码如下(示例):

类型 字段 描述 备注
String id 主键
Mono<ConfigStorage> storageMono 设备元数据更新
Mono<ThingMetadata> metadataMono 物模型定义
long lastMetadataTime 物模板定义
ThingMetadata metadataCache 物模型缓存
ThingMetadataCodec metadataCodec 物模型编码器

2.构造器

代码如下(示例):

  public DefaultThingTemplate(ThingType thingType,String id,ConfigStorageManager storageManager,ThingMetadataCodec metadataCodec) {this.id = id;this.storageMono = storageManager.getStorage("thing-template:" + thingType.getId() + ":" + id);this.metadataCodec = metadataCodec;this.metadataMono = this//获取最后更新物模型的时间.getConfig(ThingsConfigKeys.lastMetadataTimeKey).flatMap(i -> {//如果时间一致,则直接返回物模型缓存.if (i.equals(lastMetadataTime) && metadataCache != null) {return Mono.just(metadataCache);}lastMetadataTime = i;//加载真实的物模型return this.getConfig(metadata).flatMap(metadataCodec::decode).doOnNext(metadata -> metadataCache = metadata);});}

jetlinks之Thing(六)相关推荐

  1. WebStorm前端启动JetLinks 物联网基础平台(2.x)

    目录 一.环境准备 二.下载源码 三.安装依赖 ​四.修改配置 五.启动项目 六.访问项目 一.环境准备 1.降级node版本为12.22.0 使用node版本管理器gnvm_苍穹之跃的博客-CSDN ...

  2. 国内|开源|物联网平台|Jetlinks物理网平台自定义协议开发

    自定义协议开发 技术交流群:2021514 环境准备和开发工具 JDK:1.8+ MAVEN:3.1+ (注意不要使用全局仓库配置,可能导致依赖无法下载) 开发工具:idea 第一步 通过idea创建 ...

  3. Docker入门六部曲——Swarm

    原文链接:http://www.dubby.cn/detail.html?id=8738 准备工作 安装Docker(版本最低1.13). 安装好Docker Compose,上一篇文章介绍过的. 安 ...

  4. Docker入门六部曲——Stack

    原文链接:http://www.dubby.cn/detail.html?id=8739 准备知识 安装Docker(版本最低1.13). 阅读完Docker入门六部曲--Swarm,并且完成其中介绍 ...

  5. Docker入门六部曲——服务

    原文链接:http://www.dubby.cn/detail.html?id=8735 准备 已经安装好Docker 1.13或者以上的版本. 安装好Docker Compose.如果你是用的是Do ...

  6. PyTorch 学习笔记(六):PyTorch hook 和关于 PyTorch backward 过程的理解 call

    您的位置 首页 PyTorch 学习笔记系列 PyTorch 学习笔记(六):PyTorch hook 和关于 PyTorch backward 过程的理解 发布: 2017年8月4日 7,195阅读 ...

  7. 受用一生的高效 PyCharm 使用技巧(六)

    http://www.sohu.com/a/329854019_654419 大家好,今天我又来给大家更新 PyCharm 的使用技巧. 从第一篇开始,一直到本篇,一共更新了6篇文章,每篇 5 个小技 ...

  8. 操作系统学习笔记 第六章:设备管理(王道考研)

    本文章基于网课: 2019 王道考研 操作系统 考试复习推荐资料:操作系统复习总结 - 百度文库 (baidu.com) 需要相关电子书的可以关注我的公众号BaretH后台回复操作系统 第一章:操作系 ...

  9. 王道考研 计算机网络笔记 第六章:应用层

    本文基于2019 王道考研 计算机网络: 2019 王道考研 计算机网络 个人笔记总结 第一章:王道考研 计算机网络笔记 第一章:概述&计算机网络体系结构 第二章:王道考研 计算机网络笔记 第 ...

  10. TVM性能评估分析(六)

    TVM性能评估分析(六) Figure 1. The workflow of development PC, compile, deploy to the device, test, then mod ...

最新文章

  1. 技术一般,却被破格提拔!肯定有黑幕......
  2. 计算机的云是什么意思_高考倒计时!现在学什么专业好?答案是……
  3. iptv直播_全球IPTV高清直播网络电视+4K频道
  4. silverlight 获取文本框焦点
  5. 互利网上数字金融典型场景: 消费金融
  6. 剑指offer01--二叉树的最近公共祖先
  7. WCF Endpoint分类
  8. 瑞友客户端无法建立跟远程计算机的连接,瑞友天翼终端错误信息的原因以及解决方法大全.doc...
  9. AngularJS 的常用特性(四)
  10. Linux 磁带机型号,请教一下,爱华的磁带机型号大全,里面的字母什么意思?
  11. 计算机教室布线施工方案,最新计算机教室施工方案.docx
  12. 红帽Linux多点触摸,Linux系统实现多点触摸
  13. 这一年很幸运,平平淡淡的|2021 年度总结
  14. Turtle库画小猫咪
  15. Swiper实现手风琴式的图片展示
  16. html伸缩布局,HTML-CSS:伸缩布局
  17. 开年第一炸:黑马程序员1月就业报告新鲜出炉!
  18. python外星人入侵游戏打包
  19. Revit 2022安装教程(附详细安装步骤+激活教程)
  20. 芯科EFR32BG22芯片,详细分析与nRF52805和CC2640R2F区别

热门文章

  1. 柯美服务器处理文件慢,处理打印机在打印文件时打印速度过慢的原因 看完你就知道了...
  2. 概率论与数理统计基础概念整理
  3. 【Hadoop学习笔记】大数据框架原理及主要工具概述
  4. AIDA64内存与缓存测试过了算稳定吗_【AMD R52600X】装机实录、基本特性介绍及性能测试...
  5. 计算机水平cet2是什么等级,英语cet2等级考试试题
  6. 关于机械硬盘坏道(超时无响应、低速区域、掉盘)的修复尝试
  7. 公开信息查询的一些方法,查征信,查婚姻状况,查询公开个人信息
  8. java scene_JavaFX中场景(Scene)的意义是什么?
  9. 英文论文的proposal怎么写?
  10. python除数为0报错_Python3报错-Python入门到精通