在sensor下创建一个新platform 修正

在sensor下创建一个新platform 修正

homeassistant-HA文档-第6课 在sensor下创建一个新platform 修正

"""
文件名:sensor.py.
 
文件位置:HomeAssistant配置目录/custom_components/hachina/sensor.py
演示程序,在sensor下创建一个新platform.
 
"""
# 引入一个产生随机数的库
from random import randint
import logging
 
# 在homeassistant.const中定义了一些常量,我们在程序中会用到
from homeassistant.const import (
    ATTR_ATTRIBUTION, ATTR_FRIENDLY_NAME, TEMP_CELSIUS)
from homeassistant.helpers.entity import Entity
 
_LOGGER = logging.getLogger(__name__)
 
# 定义实体的OBJECT_ID与一些属性值
OBJECT_ID = "hachina_temperature"
ICON = "mdi:yin-yang"
ATTRIBUTION = "随机显示的温度"
FRIENDLY_NAME = "温度"
 
 
def setup_platform(hass, config, add_devices, discovery_info=None):
    """配置文件在sensor域下出现hachina平台时,会自动调用hachina目录下sensor.py中的setup_platform函数."""
    _LOGGER.info("setup platform sensor.hachina...")
 
    # 定义一个设备组,在其中装入了一个我们定义的设备HAChinaTemperatureSensor
    dev = []
    sensor = HAChinaTemperatureSensor()
    dev.append(sensor)
 
    # 将设备加载入系统中
    add_devices(dev, True)
 
 
class HAChinaTemperatureSensor(Entity):
    """定义一个温度传感器的类,继承自HomeAssistant的Entity类."""
 
    def __init__(self):
        """初始化,状态值为空."""
        self._state = None
 
    @property
    def name(self):
        """返回实体的名字。通过python装饰器@property,使访问更自然(方法变成属性调用,可以直接使用xxx.name)."""
        return OBJECT_ID
 
    @property
    def registry_name(self):
        """返回实体的friendly_name属性."""
        return FRIENDLY_NAME
 
    @property
    def state(self):
        """返回当前的状态."""
        return self._state
 
    @property
    def icon(self):
        """返回icon属性."""
        return ICON
 
    @property
    def unit_of_measurement(self):
        """返回unit_of_measuremeng属性."""
        return TEMP_CELSIUS
 
    @property
    def device_state_attributes(self):
        """设置其它一些属性值."""
        if self._state is not None:
            return {
                ATTR_ATTRIBUTION: ATTRIBUTION,
            }
 
    def update(self):
        """更新函数,在sensor组件下系统会定时自动调用(时间间隔在配置文件中可以调整,缺省为30秒)."""
        _LOGGER.info("Update the state...")
        self._state = randint(-100, 100)

注意:此段代码开头注释部分已经被我更改了目录说明。大家按照我这个目录来创建。包括文件名也改成了sensor.py .

这个demo 是组件sensor 配置在hachina平台的应用。

那么这样就需要在hachina的目录下配置3个文件:

- __init__.py
- manifest.json
- sensor.py

init.py: 不需要编写核心逻辑,空着就行。

manifest.json 代码如下:

{
  "domain": "hachina",
  "name": "hachina",
  "documentation": "https://www.hachina.io/3973.html#comments",
  "requirements": ["requests"],
  "codeowners": [],
  "dependencies": []
}

sensor.py: 就是最上面的代码。

最后就是配置根目录下的configuration.yaml文件

sensor: 
  - platform: hachina
    scan_interval: 3

就这样关掉服务 然后hass 重启就可以了

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 当然可以! 为了创建一个UUV模型,你需要使用BPY库中的三维建模工具,这是Blender的Python API中包含的一个模块,可以使用Python脚本来创建和操作Blender中的三维模型。 下面是一些简单的示例代码,它使用BPY库来创建一个UUV模型: ``` import bpy # 创建一个的场景 scene = bpy.context.scene # 创建一个的空的模型对象 uuv = bpy.data.objects.new("UUV", None) # 将模型添加到场景中 scene.collection.objects.link(uuv) # 创建一个的空的点组 vertices = [] # 创建UUV的顶点 vertices.append((0, 0, 0)) vertices.append((1, 0, 0)) vertices.append((1, 1, 0)) vertices.append((0, 1, 0)) vertices.append((0, 0, 1)) vertices.append((1, 0, 1)) vertices.append((1, 1, 1)) vertices.append((0, 1, 1)) # 创建UUV的三角面 faces = [] faces.append((0, 1, 2, 3)) faces.append((4, 5, 6, 7)) faces.append((0, 4, 5, 1)) faces.append((1, 5, 6, 2)) faces.append((2, 6, 7, 3)) faces.append((3, 7, 4, 0)) # 创建一个的空的网格对象 mesh = bpy.data.meshes.new("UUV_Mesh") # 将顶点和三角面添加到网格中 mesh.from_pydata(vertices, [], faces) # 更网格 mesh.update() # 将网格附加到模型上 uuv.data = mesh # 将模型的位置设置为原点 uuv.location = (0, 0, 0) ``` 这 ### 回答2: 使用bpy创建一个uuv模型可以通过以下步骤进行: 1. 导入必要的库: ``` import bpy ``` 2. 创建一个的场景: ``` bpy.ops.scene.new() ``` 3. 创建一个空的网格对象: ``` bpy.ops.mesh.primitive_cube_add(size=1) uuv = bpy.context.object ``` 4. 将网格对象设置为UUV模型: ``` uuv.name = "UUV" uuv["type"] = "UUV" ``` 5. 设置UUV模型的外观和属性: ``` # 设置颜色 uuv.color = (0.0, 0.0, 1.0) # 设置大小和比例 uuv.scale = (2, 2, 2) # 设置光滑程度 bpy.ops.object.shade_smooth() ``` 6. 设置UUV的运动控制器: ``` # 添加运动控制器 bpy.ops.object.armature_add() armature = bpy.context.object # 添加骨骼 bpy.ops.object.editmode_toggle() bpy.ops.armature.bone_primitive_add(name="thruster_bone") bpy.ops.object.editmode_toggle() # 将UUV模型连接到骨骼上 bpy.ops.object.select_all(action='DESELECT') uuv.select_set(True) bpy.context.view_layer.objects.active = armature bpy.ops.object.parent_set(type='ARMATURE') ``` 7. 设置UUV的传感器: ``` # 添加激光雷达传感器 bpy.ops.mesh.primitive_cylinder_add(radius=0.2, depth=0.1, location=(0, 0, 1)) # 设置激光雷达传感器的外观和属性 sensor = bpy.context.object sensor.name = "Lidar" sensor["type"] = "Sensor" sensor.color = (0.0, 1.0, 0.0) sensor.location = (0, 0, 1) ``` 这些是使用bpy创建一个简单的UUV模型的基本步骤。根据实际需求,可以添加更多的功能和细节来完善UUV模型。 ### 回答3: 在使用bpy创建UUV(水下无人机)模型之前,需要先安装并导入bpy模块: ```python import bpy ``` 接下来,我们可以开始创建UUV模型。首先,我们需要创建一个空的3D场景: ```python bpy.ops.wm.read_factory_settings() bpy.ops.object.select_all(action='DESELECT') bpy.ops.object.select_by_type(type='MESH') bpy.ops.object.delete() bpy.ops.object.select_by_type(type='LAMP') bpy.ops.object.delete() bpy.ops.object.select_by_type(type='CAMERA') bpy.ops.object.delete() ``` 然后,我们可以通过添加基本的3D几何体来创建UUV的形状,比如一个长方体: ```python bpy.ops.mesh.primitive_cube_add(size=1.0, location=(0, 0, 0)) cube = bpy.context.object ``` 接下来,我们可以通过修改对象的属性和尺寸,来调整UUV的外观: ```python cube.scale = (1, 2, 0.5) # 修改长方体的尺寸 cube.location = (0, 0, -0.5) # 修改长方体的位置 # 在长方体上添加一个圆柱体 bpy.ops.mesh.primitive_cylinder_add(radius=0.5, depth=1.0, location=(0, -0.5, 0)) cylinder = bpy.context.object cylinder.scale = (1, 1, 0.75) # 修改圆柱体的尺寸 # 将圆柱体连接到长方体上,形成一个UUV模型 bpy.ops.object.select_all(action='DESELECT') cube.select_set(True) cylinder.select_set(True) bpy.context.view_layer.objects.active = cube bpy.ops.object.join() ``` 通过上述代码,我们成功创建了一个简单的UUV模型。当然,根据你的需求,你可以进一步通过调整参数和添加其他几何体,来定制和扩展你的UUV模型。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值