modbus


modbus是控制PLC(可编程逻辑控制器)和RTU(远程终端单元)的串行通信协议。集成严格遵守协议规范。Modbus支持所有遵循Modbus标准的设备。设备之间的通信可以是串行(RS-485),TCP或UDP连接。Modbus集成允许多个通信,例如串行与TCP或不同TCP连接的设备结合使用。

配置modbus

首先,您定义如何与Modbus设备进行通信,然后定义交换的信息。Modbus集成使您可以使用多个连接。

配置modbus公共参数

该配置的一部分对于所有类型的通信都是常见的。将以下内容添加到您的configuration.yaml文件:

modbus-名称HUB1”CLOSS_COMM_ON_ERROR真的延迟5暂停5类型TCP

配置变量

CLOSS_COMM_ON_ERROR 布尔 ((选修的,默认:正确

确定在发生错误时是否关闭了设备连接,默认值为true。一些串行RS485适配器在打开时会提供垃圾,这会导致断开连接和新连接,可以继续进行。如果在运行的通信中,调试日志包含来自Pymodbus的消息,则带有文本“清洁…”,然后尝试此参数。

延迟 整数 ((选修的,默认:0

是时候在连接后延迟以秒为单位发送消息的时候了。建立连接后,一些Modbus设备通常需要延迟1-2秒才能准备通信。如果设备在连接后没有响应消息,则此参数可能会有所帮助。备注:延迟仅在连接和第一个消息之间。

message_wait_milliseconds 整数 ((选修的

是时候在请求之间等待毫秒。

默认:

30对于串行连接,0对于其他所有内容。

名称 细绳 ((选修的,默认:modbus_hub

此中心的名称。必须是唯一的,因此在设置多个实例时是必需的。

重试 整数 ((选修的,默认:3

重试请求的次数。

retry_on_empty 布尔 ((选修的,默认:false

收到和空消息时重试请求。

暂停 整数 ((选修的,默认:5

超时在几秒钟内等待响应。

类型 细绳 必需的

交流类型。可能的值是TCPModbus消息带有Modbus TCP框架在TCP/IP上,UDPmodbus消息带有modbus tcp框架,在UDP上,rtuovertcp带有包装器TCP/IP模拟串行线的Modbus消息。

配置网络连接

对于网络(类型:TCP/UDP/rtuovertcp)连接,将以下内容添加到您的configuration.yaml文件,除了常见参数

#示例Configuration.yaml输入TCP连接modbus-名称HUB1”类型TCP主持人IP地址港口502

配置变量

主持人 细绳 必需的

modbus设备的IP地址,例如192.168.1.1

港口 整数 必需的

通信的网络端口。

类型 细绳 必需的

与Modbus连接的类型需要为TCP或者UDP或者rtuovertcp对于此设置。

配置串行连接

对于串行连接,将以下内容添加到您的configuration.yaml文件,除了常见参数

#示例Configuration.yaml条目modbus-名称集线器1类型系列波特率9600字节8方法RTU平价e港口/dev/ttyusb0停止1

配置变量

波特率 整数 必需的

串行连接的速度。

字节 整数 必需的

串行连接的字节;可5,,,,6,,,,7或者8

方法 细绳 必需的

连接与Modbus的方法RTU或者ASCII

平价 细绳 必需的

串行连接的均等;可e,,,,o或者n

港口 细绳 必需的

您的Modbus设备连接到家庭助理主机的端口。必威是什么必威体育存款

停止 整数 必需的

串行连接的停止键1或者2

类型 细绳 必需的

与Modbus连接的类型需要为系列对于此设置。

配置多个连接

与相同/不同的多个连接是可能的类型:

#示例Configuration.yaml输入多个TCP连接modbus-类型TCP主持人ip_address_1港口2020名称HUB1”-类型UDP主持人ip_address_2港口501名称HUB2

评论:名称:多个连接需要,因为它必须是唯一的。

modbus服务

Modbus集成除了特定于平台的服务外,还提供了两种通用写入服务。

服务 描述
modbus.write_register 写注册或寄存器
modbus.write_coil 写线圈或线圈

描述:

属性 描述
中心 集线器名称(省略时默认为“ modbus_hub”)
单元 从属地址(0-255),替代奴隶
奴隶 从属地址(0-255),替代单位
地址 登记册的地址(例如138)
价值 (write_register)单个值或16位值的数组。单个值将调用Modbus功能代码0x06。数组将调用Modbus功能代码0x10。值可能需要反向排序。例如,要设置0x0004,您可能需要设置[4,0],这取决于您CPU的字节顺序
状态 (write_coil)单个布尔或一系列布尔值。单个布尔值将调用modbus功能代码0x05。数组将调用modbus功能代码0x0f

Modbus集成还提供通信停止/重新启动服务。这些服务不会进行任何重新配置​​,而只需停止/启动Modbus通信层即可。

服务 描述
modbus.stop 停止通信
modbus.restart 重新启动通信(如果运行,请先停止)

描述:

属性 描述
中心 集线器名称(省略时默认为“ modbus_hub”)

示例:编写Float32类型寄存器

编写float32数据类型寄存器使用网络格式10.0==0x41200000(网络订单浮动十六进制)。

服务modbus.write_register数据地址<目标寄存器地址>单元<目标从地址>中心<集线器名称>价值[[0x4120,,,,0x0000这是给予的

配置modbus平台

Modbus平台实体是在Modbus配置中配置的。

配置平台公共参数

所有modbus平台共享一组常见参数。

#示例configuration.yaml条目用于平台公共参数modbus-类型TCP主持人ip_address_1港口2020名称HUB1”传感器-名称传感器1scan_interval999奴隶0

配置变量

lazy_error_count 整数 ((选修的,默认:0

在将实体设置为不可用之前,收到错误的消息数。该参数可用于防止自发错误破坏统计图。

名称 细绳 必需的

平台实体的名称必须在平台内是唯一的。

scan_interval 整数 ((选修的,默认:10

如果scan_interval = 0轮询停止,则在几秒钟内定义实体的更新间隔。实体是不可用的,直到收到第一个响应为止,除了具有scan_interval = 0的实体外,这些实体可从启动中获得。

奴隶 整数 ((选修的,默认:0

奴隶的数量。

唯一身份 细绳 ((选修的

独特地标识该传感器的ID。如果两个传感器具有相同的独特ID,则家庭助理将引起例外。必威是什么

配置data_type和struct

气候和传感器共享data_type和struct的设置。

#示例configuration.yaml条目用于平台公共参数modbus-类型TCP主持人ip_address_1港口2020名称HUB1”传感器-名称传感器1数据类型int

配置变量

数据类型 细绳 ((选修的,默认:INT16

响应表示(INT8,INT16,INT32,INT64,UINT8,UINT16,UINT32,UINT64,FLOAT16,FLOAT16,FLOAT32,FLOAT64,String)。int/uint被默默地转换为INT16/UINT16

抵消 漂浮 ((选修的,默认:0

最终偏移(输出=比例 *值 +偏移)。

精确 整数 ((选修的,默认:0

有效小数的数量。

规模 漂浮 ((选修的,默认:1

比例因子(输出=比例 *值 +偏移)。

结构体 细绳 ((选修的

如果数据类型是定制指定的,在这里预计会有双引号的Python结构,以格式化字符串以解开该值。有关详细信息,请参见Python文档。例子:> i

默认:

F

交换 细绳 ((选修的,默认:无

交换字节/单词的顺序,选项为没有任何,,,,字节,,,,单词,,,,word_byte

唯一身份 细绳 ((选修的

独特地标识该传感器的ID。如果两个传感器具有相同的独特ID,则家庭助理将引起例外。必威是什么

配置平台二进制传感器

Modbus二进制传感器允许您从标准状态开/关的线圈中收集数据。

要在安装中使用modbus二进制传感器,请添加以下内容configuration.yaml文件,除了常见参数

#示例configuration.yaml输入binary_sensor配置modbus-名称集线器1类型TCP主持人IP地址港口502binary_sensors-名称binary_sensor1”地址100scan_interval20奴隶1-名称binary_sensor2”地址110device_class输入类型iNCETE_INPUT

配置变量

binary_sensors 地图 ((选修的

此Modbus实例中可用的所有binary_sensor的列表,如果没有binary_sensors,则省略。

地址 整数 必需的

登记册的地址。

device_class 细绳 ((选修的

类型/类用于UI(例如“门”)。

输入类型 细绳 ((选修的,默认:线圈

地址类型(iNDETE_INPUT/COIL)

唯一身份 细绳 ((选修的

独特地标识该传感器的ID。如果两个传感器具有相同的独特ID,则家庭助理将引起例外。必威是什么

slave_count 整数 ((选修的

生成X-1从属二进制传感器,允许读取具有单个读取混乱的多个线圈。

配置平台气候

Modbus气候平台使您可以监视恒温器并设置目标温度。

要在安装中使用modbus恒温器,请添加以下内容configuration.yaml文件,除了常见参数响应恢复

#示例Configuration.yaml条目modbus-名称集线器1类型TCP主持人IP地址港口502气候-名称沃特洛F4T”地址27586输入类型保持数数1数据类型风俗max_temp35min_temp15抵消0精确1规模0.1max_temp30结构体> f“target_temp_register2782temp_step1温度_unitC

配置变量

气候 地图 ((选修的

此Modbus实例中所有可用气候的列表。

地址 整数 必需的

当前温度的登记地址(过程值)。

数数 整数 ((选修的

要阅读的寄存器数量。

默认:

1或计算是否data_type不是结构

输入类型 细绳 ((选修的,默认:持有

modbus寄存器类型(保持,,,,输入)用于当前温度。

max_temp 整数 ((选修的,默认:35

最大设定点温度。

min_temp 整数 ((选修的,默认:5

最低设定值温度。

target_temp_register 整数 必需的

目标温度的登记地址(设定点)。

temp_step 漂浮 ((选修的,默认:0.5

支持的步长可以提高/降低目标温度。

温度_unit 细绳 ((选修的,默认:C

温度单元由Current_TEMP_REGISTER报告。c或f

唯一身份 细绳 ((选修的

独特地标识该传感器的ID。如果两个传感器具有相同的独特ID,则家庭助理将引起例外。必威是什么

服务modbus.set-temperature

服务 描述
set_temperature 设定温度。需要价值要通过,这是所需的目标温度。价值应该与数据类型

配置平台盖

modbus盖平台使您可以控制盖子(例如百叶窗,滚筒快门或车库门)。

目前,平台盖支持封面的开放和关闭。您可以使用线圈或持有寄存器控制盖子。

封面用途input_type:线圈无法确定中介状态,例如开放和关闭。线圈仅存储两个状态 - “ 0”是指盖上封面,“ 1”意味着盖子打开。为了允许检测中介状态,有一个可选的status_register属性。它将使您能够将命令(例如,打开封面)写入线圈中,并通过寄存器读取当前封面状态。此外,您可以指定值state_open,,,,state_opening,,,,state_closed, 和state_closing属性。这些将与从status_register

如果您的封面使用„ nput_type:holding(默认值)要发送命令,它也可以读取中间状态。为了调整哪个值表示哪个状态,您可以微调可选状态属性,例如state_open`。这些可选状态值也用于指定写入寄存器中的值。如果指定可选的status_register属性,将从status_register而不是用于发送命令的寄存器中读取封面状态。

要在安装中使用Modbus盖,请添加以下内容configuration.yaml文件,除了常见参数

#示例Configuration.yaml条目modbus-名称集线器1类型TCP主持人IP地址港口502盖子-名称门1device_class输入类型线圈地址117state_open1state_opening2state_closed0state_closing3status_register119status_register_type保持-名称门2”地址118

配置变量

盖子 地图 必需的

该阵列包含您所有modbus封面的列表。

地址 整数 必需的

地址线圈/登记

device_class device_class ((选修的,默认:无

类型/类将图标设置在前端的封面。

输入类型 细绳 ((选修的,默认:持有

modbus寄存器类型(保存,输入),默认保存。

state_open 整数 ((选修的,默认:1

一个值status_register或者登记代表开放式封面。如果您的配置使用登记属性,此值将写入保留寄存器以打开封面。

state_closed 整数 ((选修的,默认:0

一个值status_register或者登记代表封闭式封面。如果您的配置使用登记属性,此值将写入保留寄存器以关闭封面。

state_opening 整数 ((选修的,默认:2

一个值status_register或者登记代表开放式封面。请注意,此状态也应在您的连接modbus盖上支持。如果不报告该州,将无法检测到该州。

state_closing 整数 ((选修的,默认:3

一个值status_register或者登记代表关闭封面。请注意,此状态也应在您的连接modbus盖上支持。如果不会重新驱逐该州,则将无法检测到该州。

status_register 整数 ((选修的

登记册的地址,将从该地址阅读所有封面状态。如果指定登记属性,而不是status_register属性,您的主寄存器也将用作状态寄存器。

status_register_type 细绳 ((选修的

modbus寄存器类型(保存,输入),默认保存。

唯一身份 细绳 ((选修的

独特地标识该传感器的ID。如果两个传感器具有相同的独特ID,则家庭助理将引起例外。必威是什么

示例:由线圈控制的modbus盖

此示例显示了使用线圈控制的Modbus盖的配置。不支持开放/关闭等中介状态。盖子状态每10秒从Modbus进行投票。

modbus-名称集线器1类型TCP主持人IP地址港口502盖子-名称门1奴隶1线圈1device_classscan_interval10-名称门2奴隶2线圈2device_classscan_interval10

示例:由线圈控制的modbus封面,从寄存器读取其状态

此示例显示了使用线圈控制的Modbus盖的配置。实际封面状态是从status_register。我们还指定了寄存器值,以与状态打开/开放/封闭/关闭匹配。盖子状态每10秒从Modbus进行投票。

modbus-名称集线器1类型TCP主持人IP地址港口502盖子-名称门1奴隶1device_classscan_interval10线圈1status_register1status_register_type输入state_opening1state_open2state_closing3state_closed4

示例:由固定寄存器控制的modbus盖

此示例显示了使用保留寄存器控制的Modbus封面的配置,我们还从中读取当前封面状态。我们还指定了寄存器值,以与状态打开/开放/封闭/关闭匹配。盖子状态每10秒从Modbus进行投票。

modbus-名称集线器1类型TCP主持人IP地址港口502盖子-名称门1奴隶1device_classscan_interval10登记1state_opening1state_open2state_closing3state_closed4

示例:由保留寄存器控制的modbus封面,从状态寄存器读取其状态

此示例显示了使用保留寄存器控制的Modbus盖的配置。但是,封面状态是从一个status_register。在这种情况下,我们仅指定了state_openstate_closed,对于其余的,使用默认值。盖子状态每10秒从Modbus进行投票。

modbus-名称集线器1类型TCP主持人IP地址港口502盖子-名称门1奴隶1device_classscan_interval10登记1status_register2register_type保持state_open1state_closed0

配置平台风扇

modbus风扇平台允许您控制modbus线圈或寄存器。

要在安装中使用Modbus风扇,请添加以下内容configuration.yaml文件,除了常见参数

#示例Configuration.yaml条目modbus-类型TCP主持人IP地址港口502粉丝-名称fan1”地址13write_type线圈-名称fan2”奴隶2地址14write_type线圈核实-名称寄存器1地址11Command_on1command_off0核实输入类型保持地址127state_on25state_off1

配置变量

粉丝 地图 必需的

该阵列包含您所有Modbus风扇的列表。

地址 整数 必需的

线圈号或注册。

Command_on 整数 ((选修的,默认:1

值得写的价值以打开风扇。

command_off 整数 ((选修的,默认:0

值得写的价值以关闭风扇。

write_type 细绳 ((选修的,默认:持有

地址类型(固定/线圈或持有/线圈用于数组调用)。

名称 细绳 必需的

风扇的名称。

核实 地图 ((选修的

从Modbus设备读取以验证风扇。如果没有属性,则使用切换寄存器配置。如果省略,则没有进行验证,但是每个切换都会设置风扇状态。

地址 整数 ((选修的,默认:写地址

要阅读的地址。

延迟 整数 ((选修的,默认:0

写入和验证之间的延迟。

输入类型 整数 ((选修的,默认:write_type

地址的类型(保留/线圈/离散/输入)。

state_on 整数 ((选修的,默认:与command_on相同

风扇打开时的价值。

state_off 整数 ((选修的,默认:与command_off相同

当风扇关闭时价值。

唯一身份 细绳 ((选修的

独特地标识该传感器的ID。如果两个传感器具有相同的独特ID,则家庭助理将引起例外。必威是什么

配置平台灯

modbus轻型平台使您可以控制modbus线圈或寄存器。

要在安装中使用modbus灯,请添加以下内容configuration.yaml文件,除了常见参数

#示例Configuration.yaml条目modbus-类型TCP主持人IP地址港口502-名称Light1”地址13write_type线圈-名称Light2”奴隶2地址14write_type线圈核实-名称寄存器1地址11Command_on1command_off0核实输入类型保持地址127state_on25state_off1

配置变量

地图 必需的

该阵列包含所有modbus灯的列表。

地址 整数 必需的

线圈号或注册。

Command_on 整数 ((选修的,默认:1

值得写的价值以打开风扇。

command_off 整数 ((选修的,默认:0

值得写的价值以关闭灯。

write_type 细绳 ((选修的,默认:持有

地址类型(固定/线圈或持有/线圈用于数组调用)。

核实 地图 ((选修的

从Modbus设备读取以验证灯光。如果没有属性,则使用切换寄存器配置。如果省略,则没有进行验证,但是每个切换都会设置灯的状态。

地址 整数 ((选修的,默认:写地址

要阅读的地址。

延迟 整数 ((选修的,默认:0

写入和验证之间的延迟。

输入类型 整数 ((选修的,默认:write_type

地址的类型(保留/线圈/离散/输入)。

state_on 整数 ((选修的,默认:与command_on相同

当灯打开时的价值。

state_off 整数 ((选修的,默认:与command_off相同

当灯熄灭时价值。

唯一身份 细绳 ((选修的

独特地标识该传感器的ID。如果两个传感器具有相同的独特ID,则家庭助理将引起例外。必威是什么

配置平台传感器

modbus传感器允许您从modbus寄存器。

要在安装中使用modbus传感器,请添加以下内容configuration.yaml文件,除了常见参数响应恢复

#示例Configuration.yaml条目modbus-名称集线器1类型TCP主持人IP地址港口502传感器-名称传感器1测量单位°C奴隶1地址100-名称Sensor2测量单位毫克地址110数数2-名称传感器3测量单位°C奴隶1地址120输入类型输入数据类型漂浮规模0.01抵消-273.16精确2

配置变量

传感器 地图 必需的

该阵列包含所有Modbus传感器的列表。

地址 整数 必需的

注册号码。

数数 整数 ((选修的

要阅读的寄存器数量。

默认:

1或计算是否data_type不是结构

device_class device_class ((选修的,默认:无

类型/类传感器将图标设置在前端。

输入类型 细绳 ((选修的

modbus寄存器类型(保存,输入),默认保存。

名称 细绳 必需的

传感器的名称。

scan_interval 整数 ((选修的,默认:15

在几秒钟内定义传感器的更新间隔。

奴隶 整数 必需的

从属的数量(TCP和UPD MODBUS的可选)。

测量单位 细绳 ((选修的

单位要附加价值。

state_class 细绳 ((选修的

state_class传感器。

唯一身份 细绳 ((选修的

独特地标识该传感器的ID。如果两个传感器具有相同的独特ID,则家庭助理将引起例外。必威是什么

slave_count 整数 ((选修的

生成X-1从传感器,允许读取具有单个读取混乱的多个寄存器。

如果将比例或偏移指定为浮点值,则将使用双精度浮点算术来计算最终值。这可能会导致大于2^53的值的精度丧失。

完整的例子

示例温度传感器具有默认扫描间隔:

modbus-名称集线器1类型TCP主持人IP地址港口502传感器-名称ROOM_1奴隶10地址0输入类型保持测量单位°Cstate_class测量数数1规模0.1抵消0精确1数据类型整数

配置平台开关

modbus开关平台允许您控制modbus线圈或寄存器。

要在安装中使用modbus开关,请将以下内容添加到您的configuration.yaml文件,除了常见参数

#示例Configuration.yaml条目modbus-类型TCP主持人IP地址港口502开关-名称Switch1地址13write_type线圈-名称switch2奴隶2地址14write_type线圈核实-名称寄存器1地址11Command_on1command_off0核实输入类型保持地址127state_on25state_off1

配置变量

开关 地图 必需的

该阵列包含所有modbus开关的列表。

地址 整数 必需的

线圈号或注册

Command_on 整数 ((选修的,默认:1

写入以打开开关的价值。

command_off 整数 ((选修的,默认:0

写入以关闭开关的价值。

write_type 细绳 ((选修的,默认:持有

地址的类型(固定/线圈或存储/线圈用于数组调用)

核实 地图 ((选修的

从Modbus设备读取以验证开关。如果没有属性,则使用切换寄存器配置。如果省略,则没有进行验证,但是每个切换都会设置开关的状态。

地址 整数 ((选修的,默认:写地址

要阅读的地址。

延迟 整数 ((选修的,默认:0

写入和验证之间的延迟。

输入类型 整数 ((选修的,默认:write_type

地址的类型(持有/线圈/离散/输入或存储/线圈用于数组调用)

state_on 整数 ((选修的,默认:与command_on相同

开关打开时值。

state_off 整数 ((选修的,默认:与command_off相同

开关关闭时值。

唯一身份 细绳 ((选修的

独特地标识该传感器的ID。如果两个传感器具有相同的独特ID,则家庭助理将引起例外。必威是什么

打开一个问题

打开问题时,请至少添加您当前的配置(或缩放版本),至少:

  • modbus配置线
  • 实体(传感器等)线

为了使开发人员更好地识别问题,请添加以下几行中的configuration.yaml:

记录器日志homeassistant.components.modbus调试pymodbus.client调试

并重新启动家庭助理,重现必威是什么问题,并将日志包括在问题中。

建立在modbus之上