传感器实体
传感器是提供一些信息的只读实体。信息具有价值,并且可选地具有测量单位。平台实体派生自homeassistant.components.sensor.SensorEntity
特性
属性应该始终只从内存返回信息,而不执行 I/O(如网络请求)。实现 update() 或 async_update() 来获取数据。
不要为传感器实体添加 extra_state_attributes,而是创建一个附加传感器实体。不改变的属性只在数据库中保存一次。如果 extra_state_attributes 和传感器值都频繁变化,这会快速增加数据库的大小。
可用设备类别
如果指定设备类别,您的传感器实体还需要返回正确的测量单位。
可用状态类
请谨慎选择传感器的状态类别。在大多数情况下,应选择状态类 SensorStateClass.MEASUREMENT 或不带 last_reset 的状态类 SensorStateClass.TOTAL,这将在下面的 如何选择state_class和last_reset 中进一步解释。
实体选项
用户可以配置传感器,这是通过将 sensor 实体选项存储在传感器的实体注册表项中来完成的。
恢复传感器状态
重新启动或重新加载后恢复状态的传感器不应扩展 RestoreEntity,因为它不存储 native_value,而是存储可能已被传感器基础实体修改的 state。恢复状态的传感器应扩展 RestoreSensor 并从 async_added_to_hass 调用 await self.async_get_last_sensor_data,以访问存储的 native_value 和 native_unit_of_measurement。
长期统计
如果实体有,Home Assistant支持将传感器存储为长期统计数据
正确的属性。要选择统计数据,传感器必须具有
state_class 设置为有效状态类之一:SensorStateClass.MEASUREMENT、SensorStateClass.TOTAL 或
SensorStateClass.TOTAL_INCREASING。
对于某些设备类别,统计数据的单位被标准化为例如
可以在一张图中绘制多个传感器。
不代表总金额的实体
Home Assistant 跟踪统计期间的最小值、最大值和平均值。这
state_class 属性必须设置为 SensorStateClass.MEASUREMENT,并且 device_class 不得设置为
SensorDeviceClass.DATE、SensorDeviceClass.ENUM、SensorDeviceClass.ENERGY、SensorDeviceClass.GAS、SensorDeviceClass.MONETARY 之一,
SensorDeviceClass.TIMESTAMP、SensorDeviceClass.VOLUME 或 SensorDeviceClass.WATER。
代表总金额的实体
跟踪总金额的实体有一个可以选择定期重置的值, 例如本月的能源消耗量、今天的能源产量、上周用于房屋供暖的颗粒重量或每年的增长量 股票投资组合。编译第一个统计数据时传感器的值用作初始零点。
如何选择state_class和last_reset
建议尽可能使用不带 last_reset 的状态类别 SensorStateClass.TOTAL,仅当不带 last_reset 的状态类别 SensorStateClass.TOTAL 不适用于传感器时,才应使用带 last_reset 的状态类别 SensorStateClass.TOTAL_INCREASING 或 SensorStateClass.TOTAL。
示例:
- 传感器的值永远不会重置,例如一生总能源消耗或生产:state_class
SensorStateClass.TOTAL、last_reset未设置或设置为None - 传感器的值可能会重置为 0,并且其值只能增加:状态类别
SensorStateClass.TOTAL_INCREASING。示例:能源消耗与计费周期一致,例如每月,每次断开连接时电能表都会重置为 0 - 传感器的值可以重置为 0,并且其值可以增加和减少:状态类
SensorStateClass.TOTAL、last_reset在值重置时更新。示例:净能耗与计费周期一致,例如每月。 - 每次状态更新时都会重置传感器的状态,例如传感器每分钟都会更新过去一分钟的能耗:状态类
SensorStateClass.TOTAL、last_reset每次状态更改都会更新。
国家级SensorStateClass.TOTAL
对于状态类别为 SensorStateClass.TOTAL 的传感器,last_reset 属性可以
可选择设置为获得仪表周期的手动控制。
传感器首次添加到 Home Assistant 时的状态用作初始状态
零点。当last_reset改变时,零点将被设置为0。
如果没有设置last_reset,则传感器第一次添加时的值将用作
计算 sum 统计数据时的零点。
换句话说:更新统计数据时的逻辑是更新
当前状态与前一个状态之差的总和列
除非 last_reset 已更改,在这种情况下不要添加任何内容。
没有last_reset的状态类SensorStateClass.TOTAL的示例:
状态类 SensorStateClass.TOTAL 与 last_reset 的示例:
状态类 SensorStateClass.TOTAL 的示例,其中初始状态位于开始处
新的仪表周期的值不为0,但以0作为零点:
国家级SensorStateClass.TOTAL_INCREASING
对于 state_class SensorStateClass.TOTAL_INCREASING 的传感器,递减的值是
解释为新仪表周期的开始或更换仪表。这是
重要的是,集成确保该值不会错误地减少
从存在测量噪声的传感器计算值的情况。有
一定的容忍度,状态变化之间的减少 < 10% 将不会触发新的仪表
循环。该状态类适用于煤气表、电表、水表等。
计算时传感器读数减小时的值不会作为零点
sum 统计,零点将设置为 0。
换句话说:更新统计数据时的逻辑是更新 当前状态与前一个状态之差的总和列 除非差值为负,在这种情况下不要添加任何内容。
状态类 SensorStateClass.TOTAL_INCREASING 的示例:
状态类 SensorStateClass.TOTAL_INCREASING 的示例,其中传感器未重置为 0:

