{"repo":"ruffjs/tio","free":true,"listed":false,"github":"https://github.com/ruffjs/tio","clone":"git clone https://github.com/ruffjs/tio.git","description":"a tiny iothub, simple and useful. 轻量的 iothub，用经典的物模型简化 iot 应用开发","language":"Go","stars":54,"topics":["go","iot","iothub","mqtt","device-shadow","shadow","lightweight","mysql","sqlite","vue3"],"license":"MIT","category":"databases-storage","readme_excerpt":"tio [![license][license]](LICENSE) 中文 English tio 是一个轻量的 IotHub 核心实现。 t 代表 tiny （微小）， io 代表其职责是在设备与服务端之间提供通信渠道，也可理解为 iothub。 为什么会有这个项目 在我们实际的项目和产品中，使用过和深度了解过 AWS IoT、Azure IotHub、阿里云物联网平台等。曾经遇到过以下场景和问题： - 私有化部署 ：部署到客户指定的环境下，没有使用公有云的条件 - 物联网定向卡问题 ：有些提供方只支持 IP 白名单，但公有云的服务往往会有多个 IP ，甚至不同区域解析到的 IP 也不一样，且 IP 过一段时间会发生变化 - 被公有云厂商绑定 ：切换到不同公有云厂商的物联网平台，有比较大的成本 - 低成本运行 ：初期业务尝试或规模比较小的项目，客户抱着尝试探索的目的，比较在乎成本控制，而公有云平台服务往往开通服务后有一个起步的每月费用 当我们去寻找一个支持私有化部署的 “IotHub”时，在开源社区中没找到一个这样定位的项目，大多是作为“物联网平台”的形式出现。然而，一些场景是不需要物联网平台中其他各种用不到的功能，也不愿意承受其比较重的代码实现和部署运维，加之各自的抽象设计和公有云厂商“经典”的抽象设计差异比较多。 于是，就设想能不能基于各大云厂商通过多年实践和相互间学习借鉴而形成的 IoTHub 的核心抽象和设计，开发一个轻量实用的 “IoTHub”。一个完整的 IotHub 是个庞大的东西（见个云厂商的产品文档），但其核心内涵其实是对“物模型”（或叫设备模型）的抽象和设计，而物模型中 Shadow（设备影子或叫设备孪生）又是一个大家都事实上非常雷同的一个核心抽象。 基于此，tio 在 2022-09-07 日诞生。通过在多个项目和产品中的实践，确实能解决问题。想着其他有类似需求的人或许也需要这样的东西，于是将其完整开源出来。 主要特点 - 轻量 ：部署最简可以只有一个 golang 编译出的二进制程序（特别适合于开发、测试和设备数量不多的场景）；当然也可以根据需要使用不同的数据库和消息中间件来提供更好的性能 - 简单 ：专注于 IotHub 的核心功能，不求大而全，保持简单稳定。并提供了 web 调试管理后台，便于调试和对 tio 接口的熟悉 - 实用 ：简化与物联网设备的交互过程和实现，特别是通过 设备影子 （Shadow）的抽象简化了服务端和设备的交互 - 生产可用 ：已在生产环境多个项目和产品中使用 - 与主流公有云 IotHub 一脉相承 ：深度参考了主流公有云厂商的设计抽象，经得起推敲；对于熟悉这部分的人，其知识可被迁移使用；对于既有私有化部署又有公有云部署（使用公有云IotHub）的场景，其对接方式非常类似，不会对原有流程和代码带来大的影响 主要组件 - Thing：用于设备的基本管理，例如：CRUD、授权认证 - Connector：设备连接层（目前主要是 MQTT broker），有内置 MQTT Broker 和 EMQX 的集成 - Shadow：设备影子，类似于 AWS IoT Shadow、Azure Device Twin、阿里云设备影子，各大公有云厂商都有设备影子（名称各有不同）的抽象，且其内涵都高度一致，在我们实际的项目开发中确实是非常有用的工具，极大地减少上层业务系统和设备交互的复杂度和心智负担 - 设备直接方法（Direct Method）：服务端对设备的方法调用，采用“请求-响应”模式，类似于 HTTP","default_branch":null,"files":null,"tree":[],"storefront":"/r/ruffjs","claimed":false,"request_supported":{"post":"https://gitbuyer.com/r/ruffjs/tio/request-supported","requests":0},"note":"indexed from public GitHub; nothing is for sale on this page. Clone it from GitHub. Paid listings live at /search."}