jetlinks之Thing(六)

jetlinks之Thing

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


前言

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


一、物实例

1.实例简介

该包是jetlink-core包下org.jetlinks.core.defaults 包下代码
在这里插入图片描述
在这里插入图片描述
提示:如上StorageConfigurable 已经不是第一次遇见了,可配置存储

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

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

2.属性

类型字段描述备注
Stringid主键
ThingTypetype设备元数据更新
Mono<ConfigStorage>storageMono配置存储器
Mono<ThingMetadata>metadataMono物模型定义
Mono<ThingTemplate>templateMono物模板定义
longlastMetadataTime模型最后更新时间
ThingMetadatametadataCache物模型缓存
ThingMetadataCodecmetadataCodec物模型编码器
Function<Thing,ThingRpcSupport>rpcFactoryrpc创建工厂

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.属性

代码如下(示例):

类型字段描述备注
Stringid主键
Mono<ConfigStorage>storageMono设备元数据更新
Mono<ThingMetadata>metadataMono物模型定义
longlastMetadataTime物模板定义
ThingMetadatametadataCache物模型缓存
ThingMetadataCodecmetadataCodec物模型编码器

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);

                });
    }
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
JetLinks开源物联网平台基于Java8、Spring Boot 2.x、WebFlux、Netty、Vert.x、Reactor等开发,是一个开箱即用,可二次开发的企业级物联网基础平台。平台实现了物联网相关的众多基础功能,能帮助你快速建立物联网相关业务系统。 JetLinks开源物联网平台核心特性: 支持统一物模型管理,多种设备,多种厂家,统一管理。 统一设备连接管理,多协议适配(TCP、MQTT、UDP、CoAP、HTTP等),屏蔽网络编程复杂性,灵活接入不同厂家不同协议的设备。 灵活的规则引擎,设备告警,消息通知,数据转发。可基于SQL进行复杂的数据处理逻辑。 地理位置:统一管理地理位置信息,支持区域搜索。 数据可视化:实现拖拽配置数据图表,设备组态等。 JetLinks开源物联网平台技术栈: Spring Boot 2.2.x Spring WebFlux 响应式Web支持 R2DBC 响应式关系型数据库驱动 Project Reactor 响应式编程框架 Netty、Vert.x 高性能网络编程框架 ElasticSearch 全文检索,日志,时序数据存储 PostgreSQL 业务功能数据管理 hsweb framework 4 业务功能基础框架     JetLinks开源物联网平台 更新日志: v1.9 1、增加设备独立物模型支持,可给单独的设备配置物模型. 2、基本实现GB28181国标视频设备接入,支持直播,云台控制,级联操作.(选配模块) 3、RabbitMQ增加routeKey配置,可在配置文件中指定device.message.writer.rabbitmq.consumer-route-key和device.message.writer.rabbitmq.producer-route-key.(Pro) 4、当设置了device.message.writer.rabbitmq.consumer=false时,不创建MQ消费者.(Pro) 5、设备支持独立物模型,可单独配置设备的物模型. 6、适配tdengine 2.0.16.0,优化sql长度策略. (pro) 7、优化规则引擎编辑器,实现组件模块化动态加载.(Pro) 8、修复启动服务时,如果某个产品物模型发布失败,导致后面的产品终止发布的问题. 9、增加ignoreLatest消息头,message.addHeader("ignoreLatest",true) 忽略记录最新数据到数据库. 10、修复租户下操作设备告警提示无权限.(Pro) 11、优化租户在解绑成员时,同时解绑成员的资产信息.(Pro) 12、优化子设备消息回复处理 13、物模型属性增加存储方式功能,可配置部分属性不存储. 14、增加虚拟属性功能,可通过规则来计算出虚拟属性值.(Pro) 15、增加租户成员绑定(TenantMemberBindEvent),解绑(TenantMemberUnBindEvent)事件.可通过spring-event订阅处理此事件.(Pro) 16、优化子设备状态检查,当检查子设备状态时,将会尝试发送ChildDeviceMessage<DeviceStateCheckMessage>给网关,处理后返回ChildDeviceMessageReply<DeviceStateCheckMessageReply>. 17、增加ClickHouse设备数据存储策略支持.(Pro) 18、增加权限过滤功能,可配置禁止赋予自己没有的权限给其他用户.hsweb.permission.filter相关配置 19、设备和产品的租户绑定逻辑优化: 绑定设备时,自动绑定产品.解绑产品时,自动解绑设备.(Pro) 20、用户管理增加租户权限控制.(Pro) 21、当向keepOnline的设备发送消息时,如果原始连接已断开,将返回CONNECTION_LOST错误. 22、设置keepOnline的会话将被持久化,重启服务后自动恢复.(Pro) 23、默认关闭设备最新数据存储,通过jetlinks.device.storage.enable-last-data-in-db=true开启.(Pro) 24、属性物模型增加属性值来源,配置为手动时,在发送修改属性指令(WritePropertyMessage)时,将直接生效,不会发送到设备. 25、优化租户资产解绑逻辑,当删除数据时,解绑资产全部的绑定关系.(Pro) 26、用户管理,机构管理增加租户端支持,租户可以自己管理自己的用户和机构.(Pro)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值