TOC

  1. Intro
  2. TagModel
    1. 元模型
    2. 实体
    3. 标签
      1. 标签名称
      2. 标签种类
    4. Id
    5. 展示名
    6. 例子
  3. Structure
  4. TimeZones
  5. Units
  6. Grids
  7. Filters
  8. Zinc
  9. Json
  10. Trio
  11. Csv
  12. Rest
  13. Ops
  14. Auth
  15. VFDs
  16. Networks
  17. Energy
  18. Zones
  19. AHUs
  20. VAVs
  21. UnitaryEquips
  22. Chillers
  23. Boilers
  24. Tanks
  25. ElecPanels
  26. Lighting
  27. Builds
  28. Bacnet
  29. ChangeLog
  30. License

TagModel

元模型

在Project Haystack 项目中,我们定义了建筑设备和运营的模型。但是,像每个模型一样,我们必须为我们的模型使用一些框架。或者换句话说,什么是模型的模型 - 元模型?

如果我们以Java编程语言构建模型,则元模型将是Java类,我们的分类法将被定义为面向对象的类层次结构。如果使用关系数据库,关系模式将是我们的元模型。在oBIX中,元模型是oBIX协议。在RDF中,元模型是主语-谓语-宾语 - 对象三元组。

我们的操作数据的原始来源很可能已经在上面定义的元模型中。然而,像面向对象的类层次结构或关系型数据库这样的刻板结构并不适合楼宇自动化系统的领域,因为每个项目基本上都是独一无二的。考虑一个AHU(空气处理单元),是否有一类层次结构可以描述AHU功能的每个独特组合?由于AHUs往往是针对每个设施进行自定义构建的,所以任何一个单一的固定架构将不可能在多个项目中使用。

为了解决这些独特的挑战,Project Haystack 使用了一个非常简单的元模型:*标签*。标签是可以与像AHU这样的实体相关联的键/值对。因为标签是简单和动态的,它们可以非常灵活地构建标准化模型,这些模型可以在每个项目或每个设备的基础上轻松定制。此外,标签模型可以轻松地集成或分层在传统模型(例如OO类或关系模式)之上。

实体

一个 实体 是在现实世界中的一些物理对象的抽象。实体包括站点,设备,传感器点,气象站等。在软件系统中,实体可能被建模为数据库中的记录,楼宇自动化系统中的对象,或者也可能只是CSV文件中的一行。

Haystack没有对实体的存储或管理方式进行任何具体设计,而是定义如何使用特定 键/值 对来标记这些实体。通过使用标准化标签库,我们可以构建一个允许行业语义理解的分类法。最终的结果是,我们都可以省钱地将数据从一个专有系统映射到另一个专有系统。

如果一个实体的具体定义被存储在数据库中,那么我们将使用术语*record*或*rec*与实体(entity)互换。我们经常使用REST API中的术语rec来描述客户端与haystack实体的服务器数据库间的交互。

标签

一个 标签 是应用到实体的键/值对。标签定义关于实体的事实或属性。例如,如果我们将 site 标签应用于实体,那么我们声明该实体表示一个建筑物。如果我们还添加 geoAddr 标签,我们正在声明建筑物的街道地址。

标签名称

标签名称仅限于以下字符:

限制使用标签名称,确保它们可以方便地用作编程语言和数据库中的标识符。

标签种类

一个标签种类是指标签所允许某个值类型。以下是原子标量标签类型:

有三种集合标签类型:

Id

id标签使用Ref值类型对系统中的实体的唯一标识进行建模。虽然实体的范围未定义,但在给定的系统或项目中必须是唯一的。该标识符可被其他实体用来交叉引用诸如 siteRef,ahuRef等正在使用的标签。

展示名

dis标签被用于所有实体,它是定义描述实体的显示文本的标准方式。Dis标签的值应当简短(小于30或40个字符),但又能充分描述实体。

例子

我们来看一个描述一个站点的实体的简单例子:

id: @whitehouse
dis: "White House"
site
area: 55000ft²
geoAddr: "1600 Pennsylvania Avenue NW,  Washington, DC"
tz: "New_York"
weatherRef: @weather.washington

在上面的例子中,我们有一个包含七个标签的实体:`id`,`site`,`dis`,`area`,`geoAddr`,`tz`和`weatherRef`。 按惯例编写示例时,我们将分行列出每个标签或用逗号分隔。`site` 标签没有明确的值,因此它被看做标识标签。 dis,`geoAddr`和`tz`标签具有双引号表示的字符串值。区域标签具有以平方英尺为单位的标量表示的数字值。 weatherRef标签是对另一个实体的引用,我们使用“@”字符开头表示。