github.com/e154/smart-home@v0.17.2-0.20240311175135-e530a6e5cd45/doc/content/ru/docs/plugins/modbus/modbus_rtu.md (about)

     1  ---
     2  title: "Modbus rtu"
     3  linkTitle: "modbus rtu"
     4  date: 2021-10-20 
     5  description: >
     6  
     7  ---
     8  
     9  В системе **Smart Home** реализован плагин Modbus RTU, который обеспечивает взаимодействие с устройствами по протоколу 
    10  Modbus RTU. Плагин предоставляет метод `ModbusRtu(FUNC, ADDRESS, COUNT, COMMAND)`, позволяющий отправлять команды и
    11  получать данные по указанному протоколу.
    12  
    13  Аргументы метода `ModbusRtu`:
    14  
    15  1. `FUNC`: Код функции Modbus, указывающий тип операции, которую следует выполнить с устройством.
    16  2. `ADDRESS`: Адрес устройства Modbus, к которому отправляется команда.
    17  3. `COUNT`: Количество регистров или битов, которые следует прочитать или записать.
    18  4. `COMMAND`: Команда, которую необходимо выполнить, указывающая дополнительные параметры и настройки.
    19  
    20  Пример использования:
    21  
    22  ```javascript
    23  const COMMAND = []
    24  const FUNC = 'ReadHoldingRegisters'
    25  const ADDRESS = 0
    26  const COUNT = 16
    27  
    28  const response = ModbusRtu(FUNC, ADDRESS, COUNT, COMMAND);
    29  console.log(response);
    30  ```
    31  
    32  Метод `ModbusRtu` позволяет отправлять команды Modbus RTU, выполнять чтение или запись регистров и получать данные от 
    33  устройств. Вы можете использовать этот метод в вашем проекте **Smart Home** для взаимодействия с устройствами, поддерживающими 
    34  протокол Modbus RTU.
    35  
    36  {{< alert color="warning" >}}Для работы с modbus rtu устройством требуется настроенная **нода**{{< /alert >}}
    37  
    38  ### Настройка:
    39  
    40  * slave_id `1-32`
    41  * baud `9600, 19200`
    42  * data_bits `5-9`
    43  * timeout `milliseconds`
    44  * stop_bits `1-2`
    45  * sleep `milliseconds`
    46  * parity `none, odd, even`
    47  
    48  ### Команды:
    49  
    50  * произвольный набор
    51  
    52  ### Атрибуты
    53  
    54  * произвольный набор
    55  
    56  ### Статус
    57  
    58  * произвольный набор
    59  
    60  ----------------
    61  
    62  ### Доступные функции
    63  
    64  **1 битные функции**
    65  
    66  ReadCoils           
    67  ReadDiscreteInputs  
    68  WriteSingleCoil     
    69  WriteMultipleCoils
    70  
    71  **16 битные функции**
    72  
    73  ReadInputRegisters          
    74  ReadHoldingRegisters        
    75  ReadWriteMultipleRegisters  
    76  WriteSingleRegister         
    77  WriteMultipleRegisters
    78  
    79  
    80  ----------------
    81  
    82  ### javascript свойства
    83  
    84  * ENTITY_ID
    85  * ModbusRtu
    86  * entityAction
    87  * Action
    88  
    89  ```coffeescript
    90  # константа с уникальным id устройства
    91  const ENTITY_ID
    92  ````
    93  
    94  ```coffeescript
    95  # выполнение команды(функции) на устройсте:
    96  result = ModbusRtu func, addr, count, command
    97  ```
    98  
    99  |  значение  | описание  |
   100  |-------------|---------|
   101  | func | функция для выполнения на устройстве  |
   102  | addr | Адрес первого регистра (40108-40001 = 107 =6B hex)  |
   103  | count | Количество требуемых регистров (чтение 3-х регистров с 40108 по 40110) |
   104  | command | Команда |
   105  
   106  
   107  ```coffeescript
   108  # функция-обработчик события действий:
   109  entityAction = (entityId, actionName, args)->
   110  ```
   111  
   112  |  значение  | описание  |
   113  |-------------|---------|
   114  | entityId | уникальное id устройства  |
   115  | actionName | системное наименование действия  |
   116  | args | Type: map[string]any |
   117  
   118  {{< alert color="warning" >}}Объект **Action** доступен в скриптах действий и скриптах закрепленных за устройством.{{< /alert >}}
   119  ```coffeescript
   120  state = {
   121    new_state: 'ENABLED',
   122    attribute_values: {
   123      heat: false
   124    },
   125    settings_value: {},
   126    storage_save: true
   127  } 
   128  # сохранение состояния 
   129  EntitySetState ENTITY_ID, state
   130  ```
   131  
   132  |  значение  | описание  |
   133  |-------------|---------|
   134  | new_state | уникальное системное наименование состояния |
   135  | attribute_values | значения атрибутов ранее определенных для устройства |
   136  | settings_value | значения настроек ранее определенных для устройства |
   137  | storage_save | признак записи среза состояния в БД |
   138  
   139  ----------------
   140  
   141  ### пример coffeescript кода
   142  
   143  ```coffeescript
   144  # ModbusRtu
   145  # ##################################
   146  "use strict";
   147  
   148  checkStatus = ->
   149    COMMAND = []
   150    FUNC = 'ReadHoldingRegisters'
   151    ADDRESS = 0
   152    COUNT = 16
   153    
   154    # выполнение команды(функции) на устройсте:
   155    res = ModbusRtu FUNC, ADDRESS, COUNT, COMMAND
   156    print res.error
   157    print res.result
   158    print res.time
   159  
   160  # функция-обработчик события действий:
   161  entityAction = (entityId, actionName, args)->
   162    switch actionName
   163      when 'ON' then doOnAction()
   164      when 'OFF' then doOffAction()
   165      when 'CHECK' then checkStatus()
   166      when 'ON_WITH_ERR' then doOnErrAction()
   167  
   168  ```
   169  
   170