sprut / Hub

Sprut.Hub
170 stars 12 forks source link

Неполный шаблон для WB-M1W2 для контроллера modbus #2330

Closed zykov-as closed 1 year ago

zykov-as commented 1 year ago

Подробное описание ошибки Имеется WB-M1W2, требуется использовать его входы в режиме дискретного входа. Для этого считываются значения с регистров 0 и 1 (значение 0 - разомкнут, 1 - замкнут. Формат bool, Тип Discrete input, Доступ RO). Но в текущем шаблоне указано только чтение регистров 7 и 8 (в режиме работы 1-Wire там показания температуры с датчиков).

Как воспроизвести ? Шаги для воспроизведения ошибки, описывать как для "тупых" максимально подробно:

  1. В регистры 275 (1 вход) и 276 (2 вход) записать значение 1 чтобы перевести входы в дискретный режим
  2. Подключить WB-M1W2 к spruthub через контроллер modbus
  3. Добавится новое устройство у которого только сервисы температуры (регистры 7 и 8)

Ожидаемое поведение Ожидается появление сервиса который читает состояние регистров 0 и 1. Можно сделать просто 4 сервиса (2 температуры, 2 дискретных входа) и лишние просто вручную скрыть (если например используются датчики температуры, то вручную скрыть дискретные, либо наоборот). Либо идеальный вариант, если такое возможно, то считывать состояние регистров 275 и 276, и если 0 - то создавать сервис датчика температуры, если 1 - создавать сервис состояния дискретного входа.

Еще бы плюсом добавить в интерфейс возможность изменять значение регистров 275 и 276, чтобы прямо из спрута можно было настраивать режимы входов.

Скриншоты/ Логи Приложите скриншоты или логи, для описания проблемы.

Пожалуйста, заполните следующую информацию:   - Версия: [например, IOS]

Дополнительные материалы Ссылка на документацию и список регистров WB-M1W2 https://wirenboard.com/wiki/pdf/WB-M1W2_1-Wire_to_Modbus_Temperature_Measurement_Module.pdf

image

zykov-as commented 1 year ago

сделал шаблон, добавил туда 2 сервиса дискретных входов. Убрал сервис, показывающий внутреннюю температуру самого wb-m1w2 (показывает погоду на юпитере https://wirenboard.com/wiki/WB-M1W2:_Errata )

` { "manufacturer": "WirenBoard", "model": "WB-M1W2", "modelId": "WBM1W2", "catalogId": 72, "status": "Done", "init": [ { "modelId": { "type": "String", "address": 200, "function": "Input", "length": 6 }, "firmware": { "type": "String", "address": 250, "function": "Input", "length": 15 } } ], "services": [ { "name": "Температура снаружи 1", "type": "TemperatureSensor", "characteristics": [ { "type": "CurrentTemperature", "link": { "address": 7, "function": "Input", "scale": 0.0625, "minStep": 0.1, "pollingTime": 60000 } } ] }, { "name": "Температура снаружи 2", "type": "TemperatureSensor", "characteristics": [ { "type": "CurrentTemperature", "link": { "address": 8, "function": "Input", "scale": 0.0625, "minStep": 0.1, "pollingTime": 60000 } } ] }, { "name": "Вход 1", "type": "ContactSensor", "endpoint": 1, "characteristics": [ { "type": "ContactSensorState", "link": { "address": 0, "function": "Discrete", "pollingTime": 100 } } ] }, { "name": "Вход 2", "type": "ContactSensor", "endpoint": 1, "characteristics": [ { "type": "ContactSensorState", "link": { "address": 1, "function": "Discrete", "pollingTime": 100 } } ] } ], "options": [ { "link": { "type": "Integer", "address": 128, "function": "Holding" }, "name": "Modbus-адрес устройства", "type": "Integer", "value": 1, "minValue": 1, "maxValue": 252 } ] }

`

Шаблон проверен, оба режима работают корректно. Просьба обновить его в спруте

zykov-as commented 1 year ago

Обновил шаблон, добавил переключатель режимов 1-wire/дискретный вход { "manufacturer": "WirenBoard", "model": "WB-M1W2", "modelId": "WBM1W2", "catalogId": 72, "status": "Done", "init": [ { "modelId": { "type": "String", "address": 200, "function": "Input", "length": 6 }, "firmware": { "type": "String", "address": 250, "function": "Input", "length": 15 } } ], "services": [ { "name": "Температура снаружи 1", "type": "TemperatureSensor", "characteristics": [ { "type": "CurrentTemperature", "link": { "address": 7, "function": "Input", "scale": 0.0625, "minStep": 0.1, "pollingTime": 60000 } } ] }, { "name": "Температура снаружи 2", "type": "TemperatureSensor", "characteristics": [ { "type": "CurrentTemperature", "link": { "address": 8, "function": "Input", "scale": 0.0625, "minStep": 0.1, "pollingTime": 60000 } } ] }, { "name": "Вход 1", "type": "ContactSensor", "endpoint": 1, "characteristics": [ { "type": "ContactSensorState", "link": { "address": 0, "function": "Discrete", "pollingTime": 100 } } ] }, { "name": "Вход 2", "type": "ContactSensor", "endpoint": 1, "characteristics": [ { "type": "ContactSensorState", "link": { "address": 1, "function": "Discrete", "pollingTime": 100 } } ] } ], "options": [ { "link": { "type": "Integer", "address": 128, "function": "Holding" }, "name": "Modbus-адрес устройства", "type": "Integer", "value": 1, "minValue": 1, "maxValue": 252 }, { "link": { "type": "Integer", "address": 275, "function": "Holding" }, "name": "Режим работы входа 1", "type": "Integer", "value": 0, "values": [ { "value": 0, "name": "1-wire" }, { "value": 1, "name": "Дискретный вход" } ] }, { "link": { "type": "Integer", "address": 276, "function": "Holding" }, "name": "Режим работы входа 2", "type": "Integer", "value": 0, "values": [ { "value": 0, "name": "1-wire" }, { "value": 1, "name": "Дискретный вход" } ] } ] }