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
配置变量
确定在发生错误时是否关闭了设备连接,默认值为true。一些串行RS485适配器在打开时会提供垃圾,这会导致断开连接和新连接,可以继续进行。如果在运行的通信中,调试日志包含来自Pymodbus的消息,则带有文本“清洁…”,然后尝试此参数。
是时候在连接后延迟以秒为单位发送消息的时候了。建立连接后,一些Modbus设备通常需要延迟1-2秒才能准备通信。如果设备在连接后没有响应消息,则此参数可能会有所帮助。备注:延迟仅在连接和第一个消息之间。
配置网络连接
对于网络(类型:TCP
/UDP
/rtuovertcp
)连接,将以下内容添加到您的configuration.yaml
文件,除了常见参数:
#示例Configuration.yaml输入TCP连接modbus:-名称:“HUB1”类型:TCP主持人:IP地址港口:502
配置串行连接
对于串行连接,将以下内容添加到您的configuration.yaml
文件,除了常见参数:
#示例Configuration.yaml条目modbus:-名称:集线器1类型:系列波特率:9600字节:8方法:RTU平价:e港口:/dev/ttyusb0停止:1
配置多个连接
与相同/不同的多个连接是可能的类型:
。
#示例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_interval:999奴隶:0
配置变量
如果scan_interval = 0轮询停止,则在几秒钟内定义实体的更新间隔。实体是不可用的,直到收到第一个响应为止,除了具有scan_interval = 0的实体外,这些实体可从启动中获得。
配置data_type和struct
气候和传感器共享data_type和struct的设置。
#示例configuration.yaml条目用于平台公共参数modbus:-类型:TCP主持人:ip_address_1港口:2020名称:“HUB1”传感器:-名称:传感器1数据类型:int
配置变量
响应表示(INT8,INT16,INT32,INT64,UINT8,UINT16,UINT32,UINT64,FLOAT16,FLOAT16,FLOAT32,FLOAT64,String)。int/uint
被默默地转换为INT16/UINT16
。
配置平台二进制传感器
Modbus二进制传感器允许您从标准状态开/关的线圈中收集数据。
要在安装中使用modbus二进制传感器,请添加以下内容configuration.yaml
文件,除了常见参数:
#示例configuration.yaml输入binary_sensor配置modbus:-名称:集线器1类型:TCP主持人:IP地址港口:502binary_sensors:-名称:“binary_sensor1”地址:100scan_interval:20奴隶:1-名称:“binary_sensor2”地址:110device_class:门输入类型:iNCETE_INPUT
配置变量
此Modbus实例中可用的所有binary_sensor的列表,如果没有binary_sensors,则省略。
这类型/类用于UI(例如“门”)。
配置平台气候
Modbus气候平台使您可以监视恒温器并设置目标温度。
要在安装中使用modbus恒温器,请添加以下内容configuration.yaml
文件,除了常见参数和响应恢复:
#示例Configuration.yaml条目modbus:-名称:集线器1类型:TCP主持人:IP地址港口:502气候:-名称:“沃特洛F4T”地址:27586输入类型:保持数数:1数据类型:风俗max_temp:35min_temp:15抵消:0精确:1规模:0.1max_temp:30结构体:“> f“target_temp_register:2782temp_step:1温度_unit:C
服务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_open:1state_opening:2state_closed:0state_closing:3status_register:119status_register_type:保持-名称:“门2”地址:118
配置变量
该阵列包含您所有modbus封面的列表。
这类型/类将图标设置在前端的封面。
一个值status_register
或者登记
代表开放式封面。请注意,此状态也应在您的连接modbus盖上支持。如果不报告该州,将无法检测到该州。
一个值status_register
或者登记
代表关闭封面。请注意,此状态也应在您的连接modbus盖上支持。如果不会重新驱逐该州,则将无法检测到该州。
示例:由线圈控制的modbus盖
此示例显示了使用线圈控制的Modbus盖的配置。不支持开放/关闭等中介状态。盖子状态每10秒从Modbus进行投票。
modbus:-名称:集线器1类型:TCP主持人:IP地址港口:502盖子:-名称:门1奴隶:1线圈:1device_class:门scan_interval:10-名称:门2奴隶:2线圈:2device_class:门scan_interval:10
示例:由线圈控制的modbus封面,从寄存器读取其状态
此示例显示了使用线圈控制的Modbus盖的配置。实际封面状态是从status_register
。我们还指定了寄存器值,以与状态打开/开放/封闭/关闭匹配。盖子状态每10秒从Modbus进行投票。
modbus:-名称:集线器1类型:TCP主持人:IP地址港口:502盖子:-名称:门1奴隶:1device_class:门scan_interval:10线圈:1status_register:1status_register_type:输入state_opening:1state_open:2state_closing:3state_closed:4
示例:由固定寄存器控制的modbus盖
此示例显示了使用保留寄存器控制的Modbus封面的配置,我们还从中读取当前封面状态。我们还指定了寄存器值,以与状态打开/开放/封闭/关闭匹配。盖子状态每10秒从Modbus进行投票。
modbus:-名称:集线器1类型:TCP主持人:IP地址港口:502盖子:-名称:门1奴隶:1device_class:门scan_interval:10登记:1state_opening:1state_open:2state_closing:3state_closed:4
示例:由保留寄存器控制的modbus封面,从状态寄存器读取其状态
此示例显示了使用保留寄存器控制的Modbus盖的配置。但是,封面状态是从一个status_register
。在这种情况下,我们仅指定了state_open
和state_closed
,对于其余的,使用默认值。盖子状态每10秒从Modbus进行投票。
modbus:-名称:集线器1类型:TCP主持人:IP地址港口:502盖子:-名称:门1奴隶:1device_class:门scan_interval:10登记:1status_register:2register_type:保持state_open:1state_closed:0
配置平台风扇
这modbus
风扇平台允许您控制modbus线圈或寄存器。
要在安装中使用Modbus风扇,请添加以下内容configuration.yaml
文件,除了常见参数:
#示例Configuration.yaml条目modbus:-类型:TCP主持人:IP地址港口:502粉丝:-名称:“fan1”地址:13write_type:线圈-名称:“fan2”奴隶:2地址:14write_type:线圈核实:-名称:“寄存器1地址:11Command_on:1command_off:0核实:输入类型:保持地址:127state_on:25state_off:1
配置平台灯
这modbus
轻型平台使您可以控制modbus线圈或寄存器。
要在安装中使用modbus灯,请添加以下内容configuration.yaml
文件,除了常见参数:
#示例Configuration.yaml条目modbus:-类型:TCP主持人:IP地址港口:502灯:-名称:“Light1”地址:13write_type:线圈-名称:“Light2”奴隶:2地址:14write_type:线圈核实:-名称:“寄存器1地址:11Command_on:1command_off:0核实:输入类型:保持地址:127state_on:25state_off:1
配置平台传感器
这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传感器的列表。
这类型/类传感器将图标设置在前端。
这state_class传感器。
如果将比例或偏移指定为浮点值,则将使用双精度浮点算术来计算最终值。这可能会导致大于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_on:1command_off:0核实:输入类型:保持地址:127state_on:25state_off:1
打开一个问题
打开问题时,请至少添加您当前的配置(或缩放版本),至少:
- modbus配置线
- 实体(传感器等)线
为了使开发人员更好地识别问题,请添加以下几行中的configuration.yaml:
记录器:日志:homeassistant.components.modbus:调试pymodbus.client:调试
并重新启动家庭助理,重现必威是什么问题,并将日志包括在问题中。