亿琪软件-开源博客 - Thingsboard
type: channel
link: https://www.yiqisoft.cn/blogs/tag/Thingsboard/
items: 如何无缝扩展 ThingsBoard 功能？原来二次开发如此简单！
items: ThingsBoard 功能扩展，二次开发，个性化，一起搞定！
items: 如何无缝扩展 ThingsBoard 功能？原来二次开发如此简单！【续1】
items: 开源｜ThingsBoard 项目实施及二次开发要点总结
items: ThingsBoard 二次开发：导出数据到 csv/excel
items: ThingsBoard 3.3 版本 OTA 源码分析
items: 如何在 ThingsBoard 前端增加手写签名，并且体现在报告中？
items: 如何在 Kubernetes 中部署 ThingsBoard？步骤很简单，过程很艰辛！
items: 给你的 Thingsboard 管理界面加上 HTTPS 保护

如何无缝扩展 ThingsBoard 功能？原来二次开发如此简单！
type: item
date: 2023-06-06T14:56:00+00:00
description: 众所周知，ThingsBoard 核心采用 Spring Boot 开发，当然，很多人已经在 Spring Boot 之上平步青云，那如何无缝扩展 ThingsBoard 功能，而不改变原有代码结构，且将来无缝升级？ 如果你有 ThingsBoard 服务需求或二次开发需求，请与我们联系： 18616669123 关注我们 关注 ThingsBoard 微信公众号 手动增加微信公众号：thingsboard_cn 访问 ThingsBoard 中文社区网站 访问网址：http://www.thingsboard.club 创建自定义 Spring Boot Starter，实现功能模块 新建 Spring Boot Starter 项目 名称定义为了方便识别： xxx-xxx-spring-boot-starter ![project.png][3] 增加依赖，看需求，自己的项目需要，spring-boot-autoconfigure，必不可少！ ![depends.png][4] 完整pom.xml，自己细品 <?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.3.4.RELEASE</version> <relativePath /> </parent> <groupId>cn.yiqisoft</groupId> <artifactId>report-spring-boot-starter</artifactId> <version>0.0.1</version> <name>EcolabReport</name> <description>Ecolab Report</description> <properties> <java.version>1.8</java.version> </properties> <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web-services</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-devtools</artifactId> <scope>runtime</scope> <optional>true</optional> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-configuration-processor</artifactId> <optional>true</optional> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-autoconfigure</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> <exclusions> <exclus…

ThingsBoard 功能扩展，二次开发，个性化，一起搞定！
type: item
date: 2023-06-06T14:56:00+00:00
description: 本文所有内容都来自原创，思路开阔，敢想敢做，经过不懈努力，终于成功扩展 ThingsBoard 功能模块 如果你有 ThingsBoard 服务需求或二次开发需求，请与我们联系： 18616669123 先来看一段视频，体验一下新增的功能，前端增加的菜单和功能演示。 关注我们 关注 ThingsBoard 微信公众号 手动增加微信公众号：thingsboard_cn 访问 ThingsBoard 中文社区网站 访问网址：http://www.thingsboard.club 前言 此次二次开发，主要是针对 ThingsBoard 新增功能模块，以报表功能为目的，提供一个可以独立与原有功能的 Report/报表 模块，咱们先这么来定义。就像 Device/设备、Asset/资产模块，增删改查必不可少，还需要兼容 ThingsBoard 原有操作习惯，还可以将 Report/报表 分配给特定的 Customer/客户。上图，这是开始的设想： 后端 代码结构 modified: application/src/main/java/org/thingsboard/server/controller/BaseController.java new file: application/src/main/java/org/thingsboard/server/controller/ReportController.java modified: application/src/main/java/org/thingsboard/server/service/security/permission/CustomerUserPermissions.java modified: application/src/main/java/org/thingsboard/server/service/security/permission/Resource.java modified: application/src/main/java/org/thingsboard/server/service/security/permission/TenantAdminPermissions.java modified: application/src/main/resources/thingsboard.yml new file: common/dao-api/src/main/java/org/thingsboard/server/dao/report/ReportService.java modified: common/data/src/main/java/org/thingsboard/server/common/data/CacheConstants.java modified: common/data/src/main/java/org/thingsboard/server/common/data/EntityType.java new file: common/data/src/main/java/org/thingsboard/server/common/data/Report.java new file: common/data/src/main/java/org/thingsboard/server/common/data/ReportInfo.java modified: common/data/src/main/java/org/thingsboard/server/common/data/id/EntityIdFactory.java new file: common/data/src/main/java/org/thingsboard/server/common/data/id/ReportId.java modified: common/data/src/main/java/org/thingsboard/server/common/data/query/EntityFilterType.java new file: common/data/src/main/java/org/thingsboard/server/common/data/query/ReportSearchQueryFilter.java new file: common/data/src/main/java/org/thingsboard/server/common/data/query/ReportTypeFilter.java new file: common/data/src/main/java/org/thingsboard/server/common/dat…

如何无缝扩展 ThingsBoard 功能？原来二次开发如此简单！【续1】
type: item
date: 2023-06-06T14:55:00+00:00
description: 目录 关注我们 关注 ThingsBoard 微信公众号 访问 ThingsBoard 中文社区网站 前期，发表过多个系列文章关于如何无缝扩展 ThingsBoard 功能，其实在实施过程中，还是遇到很多问题，需要提前注意！ 独立于 ThingsBoard 外的功能模块注意要点 关注我们 关注 ThingsBoard 微信公众号 手动增加微信公众号：thingsboard_cn 访问 ThingsBoard 中文社区网站 访问网址：http://www.thingsboard.club 前期，发表过多个系列文章关于如何无缝扩展 ThingsBoard 功能，其实在实施过程中，还是遇到很多问题，需要提前注意！ 如果你有 ThingsBoard 服务需求或二次开发需求，请与我们联系： 18616669123 独立于 ThingsBoard 外的功能模块注意要点 功能模块需要能够独立运行，不管是服务也好，controller 也罢，都要能够正常运行，就类似单元测试跑通，才可以融入到 ThingsBoard 中； 数据表要独立成 sql 文件，便于移植到 ThingsBoard 库中，最好不要跟原有数据表有关联或冲突，尤其不能冲突； 调用系统库表，新建的 Entity 要注意 column 名字于原有一样，使用 @Column(name = "foo_bar")，否则 Bean 建立失败； 如果 Entity 有嵌套调用 POJO，需要将 Entity 设置成 @Proxy(lazy = false)，关闭懒加载，否则无法查询数据； 打包功能模块，需要将 Spring Boot 项目 target 中的 .original 文件安装到本地 maven 库，或者修改 pom.xml 文件来改变 maven 打包规则； 功能模块中的附件，图片，pdf 模板，直接在功能模块 jar 包中，不需要单独导入 ThingsBoard 中； Controller 要单独命名，不能与 ThingsBoard 冲突，API 路径可以复用原有路径，比如：原有是 /api/report/foo，可以增加新的 /api/report/bar； Domain/POJO/Repository等，要独立命名，因为我们以 maven jar 包方式融入 ThingsBoard，都交给 spring 来管理，所以命名要独立；

开源｜ThingsBoard 项目实施及二次开发要点总结
type: item
date: 2023-03-02T13:51:00+00:00
description: 目录 关注我们 关注 ThingsBoard 微信公众号 访问 ThingsBoard 中文社区网站 Thingsboard 项目实施 实施准备 实施要点 总结经验 Thingsboard 二次开发提示 前提 技术栈 尝试 运用技巧 关于 亿琪软件 关注我们 关注 ThingsBoard 微信公众号 手动增加微信公众号：thingsboard_cn 访问 ThingsBoard 中文社区网站 访问网址：http://www.thingsboard.club 最近在实施 ThingsBoard 项目中遇到一些问题总结，还有针对 Thingsboard 二次开发中的提示。 如果你正准备使用 Thingsboard 开源框架作为你的物联网平台来使用，这个文章对你应该有一定帮助。关于 Thingsboard 平台的介绍和基础不是本文的重点，所以，你在阅读本文时，应该具备一些 Thingsboard、物联网平台、MQTT、HTTP、物模型，等基础能力。还有，如果你要实施一套自己的物联网应用，可以参考这个文章：分享｜如何组建一个项目团队来完成物联网应用？ Thingsboard 项目实施 实施准备 统计你所在网络里面的设备、资产、测点、指标、通讯方式、状态等基础信息，可以统计一些信息形成 Excel 表格，越详细越好，多多益善； 基于你对物联网的了解，要把业务结合进来，综合考虑物联网平台到底对你的业务有什么帮助，比如：信息及时性？数据总量？统计分析？降本增效？还是有其他非技术目的？ 要有相关的技术储备，人员储备，还有资金储备，毕竟还是需要不少时间、精力、金钱和欲望投入在里面； 不管如何，你还是应该准备找一个合作伙伴，能够帮助你解决一些你无法预料到的问题，以解燃眉之急； IoT、物联网、平台，这些都是基础设施，并不能完全解决你的所有问题，要摆正 Thingsboard 在你的业务中的正确位置； 至于 Thingsboard 能帮到你什么，能做什么，有什么效果，你可以在本技术博客寻找你的答案，或到互联网找到你所需要的内容； 实施要点 这里以一个工业物联网平台为例，简单介绍一些要点供你参考： 目的：工业物联网平台，当然是为了工业生产服务，例如：这个指标采集上来，频率是多少，数据变化起到什么业务帮助。如果存粹为了做一个物联网平台而做一个，那就无所谓了，只要看上去像个平台，数据在变化，有图有真相，那也行； 方法：典型的实施方法，无非就是采集、汇聚、存储、分析，方法在不同的客户有不同的操作方式，比如：改造老平台是一种有据可循的，推翻老平台又是另一个，还有新建平台也是一脸茫然，不知所措；要根据实际的需求，制定适合自己的实施方法； 过程：来举例说明一个客户的实施过程：在这个客户而已，开源是开放的，免费的，没什么难度的，所以把实施过程简单理解为：1、安装；2、配置；3、调整；4、交付。我把其过程形容为：陷入泥潭的人，越陷越深，最后有可能会失败； 时间：有些客户觉得拿来即用，更何况 Thingsboard 是开源的，那就是多简单的事，其实，我们实施过的项目中，客户越是觉得简单的快速的，都会导致项目延迟，他们忽略了开源并不是你什么也不需要做就可以完成所有实施，赶工期不太适合用 Thingsboard 来做，假如你对开源真的有所了解的话；如果你觉得一个月能搞定，我建议你把时间放大到3个月，中间你会遇到太多的疑问和不知道，如果有合作伙伴能帮你，那你算是幸运儿，有些自己几个星期搞不定的问题，专业人士只需要十分钟； 效果：不要对项目实施的结果报以太多的期望，毕竟 Thingsboard 还有 PE 专业版在那里，开源版本只是提供了基础功能，的确可以让你达到完成一个物联网平台的概念，但是，需要太多的工作量去完善你的业务需求了，效果因人而异，各说纷云。 总结经验 开源贡献：如果你了解开源，你就知道开源不仅仅是索取，也需要贡献，如果你的实施过程中修复的问题并没有得到开源社区的合并，那么说明你以后需要一直去修改它，那是非常不利的局面，所以，建议你参与社区，参与贡献，对你长期使用 Thingsboard 是有帮助的而无害的； 可移植脚本：大版本不变化的情况下，你要尽量综合项目实施过程中的可复用脚本，这样，你在其他项目中就是亮点也是赢利点，这一点是很多实施者所忽视的地方； 形成标杆：一旦你发现客户的思路很有效果，你帮助客户实施完成，且具备一定的效益，你要知道这就是果实，要动得举一反三，运用到其他的客户那里，形成标杆项目，推广下去，毕竟复制/粘贴的成本是最低的。 Thingsboard 二次开发提示 前提 技术栈 其实就下面俩，你要突破的地方，我觉得应该就是 Angular 框架。如果你研究过 Thingsboard 源码，我的意思是你熟读多次，编译N次，简单开发过几次，你就应该明…

ThingsBoard 二次开发：导出数据到 csv/excel
type: item
date: 2022-03-28T13:12:00+00:00
description: 此二次开发主要是基于 ThingsBoard UI 界面上的 js 脚本开发，熟悉 js 开发的朋友应该很容易理解。 从 Dashboard 导出 csv 其实有好几种情况，1是 telemetry 数据导出，2是 attributes 数据导出。 如果你有 ThingsBoard 服务需求或二次开发需求，请与我们联系： 18616669123 目录 关注我们 关注 ThingsBoard 微信公众号 访问 ThingsBoard 中文社区网站 准备工作 新建Dashboard Telemetry 数据导出 Attributes 数据导出 关注我们 关注 ThingsBoard 微信公众号 手动增加微信公众号：thingsboard_cn 访问 ThingsBoard 中文社区网站 访问网址：http://www.thingsboard.club 准备工作 Chrome 浏览器 javascript 基础知识 ThingsBoard UI 二次开发基础知识 Dashbaord 开发经验 新建Dashboard Telemetry 数据导出 导出csv文件内容： timestamp,GasCon 2022-3-21 21:29:0,800 2022-3-21 21:44:0,800 2022-3-25 19:59:0,0 自定义 action，js脚本： let $injector = widgetContext.$scope.$injector; let attributeService = $injector.get(widgetContext .servicesMap.get('attributeService')); let deviceService = $injector.get(widgetContext.servicesMap .get('deviceService')); console.log(widgetContext); let data = widgetContext.data; let dataKeys = []; // get all data keys to array widgetContext.datasources[0].dataKeys.forEach(function( item) { dataKeys.push(item.name); }); let fileTitle = "export-from-list-" + entityName; function timeConverter(UNIX_timestamp) { var a = new Date(UNIX_timestamp); var months = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec' ]; var year = a.getFullYear(); var month = a.getMonth()+1; var date = a.getDate(); var hour = a.getHours(); var min = a.getMinutes(); var sec = a.getSeconds(); var time = year + '-' + month + '-' + date + ' ' + hour + ':' + min + ':' + sec; return time; } function exportCSV() { // first line: header var allLine = ""; dataKeys.unshift("timestamp"); allLine += dataKeys; allLine += "\n"; var key_length = data.length; // 字段数目 var limit = data[0]["data"].length; // 数据行数 var line = new Array(limit + 1); // 包括首行 for (var l = 0; l < limit; l++) line[l] = ""; data.forEach( (item, idx) => { var item_data = item["data"]; var dataKey = item["dataKey"]; for (var j = 0; j < limit; j++) { if (idx == 0) { line[j] += timeConverter(item_data[ j][0]); line[j] += ","; } line[j]…

ThingsBoard 3.3 版本 OTA 源码分析
type: item
date: 2021-08-14T10:35:00+00:00
description: 2021.8.14 第一时间将 TB 3.3 的 OTA 功能进行源码分析，基本思路就是 应用了telemetry 和 attributes ，不复杂，自己实现的话也是要这样来做。这里，只是分析了 CoAP 协议层，其他类似。 如果你有 ThingsBoard 服务需求或二次开发需求，请与我们联系： 18616669123 目录 关注我们 关注 ThingsBoard 微信公众号 访问 ThingsBoard 中文社区网站 1、CoAP 路径： 2、checksum算法 3、OTA Dashboard 4、OTA 固件存储 5、测试脚本 5、升级步骤 关注我们 关注 ThingsBoard 微信公众号 手动增加微信公众号：thingsboard_cn 访问 ThingsBoard 中文社区网站 访问网址：http://www.thingsboard.club 1、CoAP 路径： 按照官方文档里面的路径是错误的，需要改成如下url路径才能获取固件：coap://localhost/fw/$access_token?title=$title&version=$versoin 具体文件位置： /common/transport/coap/src/main/java/org/thingsboard/server/transport/coap/CoapTransportService.java 2、checksum算法 默认支持 SHA256，如果设备端不支持或有其他算法请自取 enum 里面内容。 /common/data/src/main/java/org/thingsboard/server/common/data/ota/ChecksumAlgorithm.java public enum ChecksumAlgorithm { MD5, SHA256, SHA384, SHA512, CRC32, MURMUR3_32, MURMUR3_128 } 3、OTA Dashboard 自带了两个不错的查看 OTA 的dashboard，赶紧收藏起来。 firmware： /application/src/main/data/json/demo/dashboards/firmware.json software： /application/src/main/data/json/demo/dashboards/software.json 4、OTA 固件存储 firmware / software 文件使用 oid 格式存储，隐藏列，无法查看，具体详细内容请自行查看postgresql oid数据类型。 5、测试脚本 https://thingsboard.io/docs/user-guide/resources/firmware/ 目录下 http_firmware_client.py mqtt_firmware_client.py coap_firmware_client.py 基本可以用，但是脚步写的不是很好，有能力的可以自己改。 5、升级步骤 1、服务有一个属性，标记是不是要升级，设备定期去获取这个属性，有的话就下载，提交服务器“下载中”； 2、固定地址下载：包括固件名字和版本号，下载完成：提交服务器“已下载”； 3、设备验证固件包完整性，提交服务器“已验证”； 4、设备开始更新前，提交服务器“更新中”； 5、设备更新完成后，成功提交“已更新”，失败提交“失败”；

如何在 ThingsBoard 前端增加手写签名，并且体现在报告中？
type: item
date: 2021-06-16T00:36:00+00:00
description: 目录 关注我们 关注 ThingsBoard 微信公众号 访问 ThingsBoard 中文社区网站 准备工作 增加签名用的 signature pad 包 新增用于签名的组建 新增配套 service 处理 后端图片处理 代码示例 TS 文件 HTML 文件 结果展示 关注我们 关注 ThingsBoard 微信公众号 手动增加微信公众号：thingsboard_cn 访问 ThingsBoard 中文社区网站 访问网址：http://www.thingsboard.club 准备工作 当然，首先必须要有 ThingsBoard 二次开发基础，可以在本博客中搜索“二次开发”，你会得到很多提升。 如果你有 ThingsBoard 服务需求或二次开发需求，请与我们联系： 18616669123 增加签名用的 signature pad 包 https://www.npmjs.com/package/angular2-signaturepad，根据提示，加入到 package.json 中，确保模块运行正常。 新增用于签名的组建 手工创建或通过命令行创建，sign.component.ts, sign.component.html, sign.component.scss，并且加入到 module.ts 新增配套 service 处理 页面点击触发签名框弹出，保存签名图片到数据库的请求。 后端图片处理 后端需要将前端提交的数据保存到数据库，还需要将数据展现在前端页面。 代码示例 TS 文件 import { Component, Inject, OnInit, SkipSelf, ViewChild } from '@angular/core'; import { ErrorStateMatcher } from '@angular/material/core'; import { MAT_DIALOG_DATA, MatDialogRef } from '@angular/material/dialog'; import { Store } from '@ngrx/store'; import { AppState } from '@core/core.state'; import { FormBuilder, FormControl, FormGroup, FormGroupDirective, NgForm, Validators } from '@angular/forms'; import { ReportService } from '@core/http/report.service'; import { Report, ReportFill } from '@shared/models/report.models'; import { DialogComponent } from '@shared/components/dialog.component'; import { Router } from '@angular/router'; import { SignaturePad } from 'angular2-signaturepad'; export interface ReportSignObservationDialogData { report: Report; } @Component({ selector: 'tb-report-sign-observation-dialog', templateUrl: './sign-report-observation-dialog.component.html', styleUrls: ['./sign-report-observation-dialog.component.scss'], providers: [{provide: ErrorStateMatcher, useExisting: ReportSignObservationDialogComponent}] }) export class ReportSignObservationDialogComponent extends DialogComponent<ReportSignObservationDialogComponent, Report> implements OnInit, ErrorStateMatcher { @ViewChild(SignaturePad) signaturePad: SignaturePad; private signaturePadOptions: Object = { // passed through to szimek/signature_pad …

如何在 Kubernetes 中部署 ThingsBoard？步骤很简单，过程很艰辛！
type: item
date: 2020-11-22T01:11:00+00:00
description: 目录 关注我们 关注 ThingsBoard 微信公众号 访问 ThingsBoard 中文社区网站 众所周知，Kubernetes（k8s）太火了，太牛了，咱们把部署在 ThingsBoard 上更是理所当然。一句话总结：步骤很简单，过程很艰辛！ 准备 Docker 和 Kubernetes 环境 安装 Docker Desktop CE 版本 安装 Kubenetes 本地版本 kubectl version --client !/bin/bash get images show images !/bin/bash get images (ui) show images kubectl version kubectl apply -f k8s-dashboard.yaml kubectl proxy kubectl apply -f https://raw.githubusercontent.com/kubernetes/ingress-nginx/controller-v0.41.2/deploy/static/provider/cloud/deploy.yaml kubectl apply -f ingress-nginx.yaml docker pull k8s.gcr.io/ingress-nginx/controller:v0.41.2@sha256:1f4f402b9c14f3ae92b11ada1dfe9893a88f0faeb0b2f4b903e2c67a0c3bf0de kubectl get pods -n ingress-nginx -l app.kubernetes.io/name=ingress-nginx --watch 关注我们 关注 ThingsBoard 微信公众号 手动增加微信公众号：thingsboard_cn 访问 ThingsBoard 中文社区网站 访问网址：http://www.thingsboard.club 众所周知，Kubernetes（k8s）太火了，太牛了，咱们把部署在 ThingsBoard 上更是理所当然。一句话总结：步骤很简单，过程很艰辛！ 准备 Docker 和 Kubernetes 环境 安装 Docker Desktop CE 版本 笔者使用的老版本 MacBook Pro 13，下载安装 Docker Desktop CE 版本，这个比较简单，官方下载，安装即可完成，启动。 ![docker.png][1] 启用 Docker Desktop 中 Kubernetes ![kubernetes-in-docker.png][2] 哇塞，是不是太简单了？当然不会那么容易搞定，你会一直出现 “Starting” 的状态，别傻等，要去 Google 一下。关键字：如何成功启动 Docker 自带的 Kubernetes？ 总之，你一定要找到办法解决你的 Kubernetes 成功启动。 安装 Kubenetes 本地版本 安装 Kubernetes，就是简单，本地安装搞定 # brew install kubernetes-cli kubectl version --client Client Version: version.Info{Major:"1", Minor:"19", GitVersion:"v1.19.4", GitCommit:"d360454c9bcd1634cf4cc52d1867af5491dc9c5f", GitTreeState:"clean", BuildDate:"2020-11-12T01:09:16Z", GoVersion:"go1.15.4", Compiler:"gc", Platform:"darwin/amd64"} - 为了让 Docker Desktop 启动 k8s，需下载相关的 docker images，需要通过一个脚本 docker-images-k8s.sh，然后运行，从 aliyun 下载 docker image 比较快。 !/bin/bash set -e KUBE_VERSION=v1.19.3 KUBE_PAUSE_VERSION=3.2 ETCD_VERSION=3.4.13-0 COREDNS_VERSION=1.7.0 GCR_URL=k8s.gcr.io ALIYUN_URL=registry.cn-hangzhou.aliyuncs.com/google_containers get images images=(kube-proxy:${KUBE_VERSION} kube-scheduler:${KUBE_VERSION} kube-controller-manager:${K…

给你的 Thingsboard 管理界面加上 HTTPS 保护
type: item
date: 2020-09-24T12:11:00+00:00
description: 目录 关注我们 关注 ThingsBoard 微信公众号 访问 ThingsBoard 中文社区网站 修改 /usr/share/thingsboard/conf/thingsboard.yml, 将 false 改成 true； 新建 /usr/share/thingsboard/conf/keystore 目录，且此目录下，增加自己的证书 keystore.p12，并授权 thingsboard 用户和组，命令行输入 重启 thingsboard 即可 Chrome 下，无法访问自己制作的证书网站，方法在此 关注我们 关注 ThingsBoard 微信公众号 手动增加微信公众号：thingsboard_cn 访问 ThingsBoard 中文社区网站 访问网址：http://www.thingsboard.club 修改 /usr/share/thingsboard/conf/thingsboard.yml, 将 false 改成 true； # Enable/disable SSL support enabled: "${SSL_ENABLED:true}" 新建 /usr/share/thingsboard/conf/keystore 目录，且此目录下，增加自己的证书 keystore.p12，并授权 thingsboard 用户和组，命令行输入 mkdir /usr/share/thingsboard/conf/keystore keytool -genkey -alias tomcat \ -keystore keystore.p12 \ -storetype PKCS12 \ -keyalg RSA \ -validity 730 \ -keysize 2048 chown -R thingsboard:thingsboard /usr/share/thingsboard/conf/keystore 重启 thingsboard 即可 systemctl restart thingsboard Chrome 下，无法访问自己制作的证书网站，方法在此 关于 Chrome 无法打开自定义的网站证书网站方法