Инструменты пользователя

Инструменты сайта


настройка_modbus

Различия

Показаны различия между двумя версиями страницы.

Ссылка на это сравнение

Предыдущая версия справа и слева Предыдущая версия
Следующая версия
Предыдущая версия
Следующая версия Следующая версия справа и слева
настройка_modbus [2022/09/15 21:25]
Sanch-KK
настройка_modbus [2022/11/01 01:54]
Sanch-KK
Строка 321: Строка 321:
 "fan" :{"emit":"edem/air/vents/zal3/fan","@V":null}, "fan" :{"emit":"edem/air/vents/zal3/fan","@V":null},
 </code> </code>
 +В этом случае, после того, как мы что-то записали в регистр, при следующем же опросе устройства, это будет обнаружено (если значение изменилось) и будут предприняты настроенные действия (например, значение будет отправлено по MQTT и отобразится в мобильном приложении Home Assistant)
  
-И еще один фильтр: при попытке записать в регистр значение, не отличающееся от последнего полученного при опросе, такая попытка будет проигнорирована. Такое поведение отключить нельзя.+<del>И еще один фильтр: при попытке записать в регистр значение, не отличающееся от последнего полученного при опросе, такая попытка будет проигнорирована. Такое поведение отключить нельзя.</del>
  
 ===== Запись в Modbus устройство ===== ===== Запись в Modbus устройство =====
Строка 409: Строка 410:
 </code> </code>
  
 +===== Mapping значений и команд контроллера в регистры Modbus =====
 +
 +Рассмотрим на примере вентустановки
 +Допустим, регистр 41 отвечает за включение установки. Соответственно, в него надо записать "1" для всех рабочих режимов:
 +  * AUTO
 +  * ON
 +  * HEAT
 +  * FAN_ONLY
 +Для команды OFF записываем 0
 +
 +Это реализуется строкой 
 +"on":{"reg":41,"type":"u8l","id":1,"map":{"cmd":[["OFF",0],["ON",1],["AUTO",1],["HEAT",1],["FAN_ONLY",1]]}}
 +
 +наличие "id"=1 позволяет не только напрямую управлять данным регистром при помощи именованного параметра "on" (топика air/on/set) но и привязать его к командному суффиксу канала
 +
 +Соответственно, доступно управление по командному топику air/cmd
 +
 +В нашей вентустановке за переключение режима работы (нагрев-вентиляция-авто) отвечает отдельный регистр 43
 +
 +настроим отображение режима работы на требуемые значения данного регистра и, также, привяжем это отображение к командному топику ("id":1)
 +
 +"pmode":{"reg":43,"type":"u8l","id":1,"map":{"cmd":[["AUTO",3],["HEAT",2],["FAN_ONLY",1]]}},
 +
 +теперь при переключении режимов в регистр 43 будет записываться 3 для Авторежима, 2 - для режима нагрева, 1 - для режима вентиляции
 +
 +Еще лайфхак:
 +<code>
 +"humpwr":{"reg":39998,"map":{"cmd":[null,["ON",1],["OFF",0]],"val":null}},
 +</code>
 +В примере выше, в значения регистра будет маппироваться только команда, поступающая на humpwr. Команда ON в 1, команда OFF в 0
 +
 +первый null перед массивом соответствия команда -> значение по умолчанию, которое будет использоваться если не удастся подобрать команду. (null тут можно не указывать)
 +Если не подобрали - пытаемся преобразовать по значению
 +
 +Если не использовать "val":null - то значения, отправляемые в humpwr/set будут передаваться в регистр без преобразований. Использование null обеспечивает игнорирование значений (не команд)
 +
 +(описание не завершено)
 +
 +<code>
 +"modbus":
 +  {
 +    "airset":{
 +              "baud":9600,
 +              "serial":"8E1",
 +              "poll":{"regs":[[0,60],1008],"delay":2000},
 +              "par":
 +      
 +                            "on":{"reg":41,"type":"u8l","id":1,"map":{"cmd":[["OFF",0],["ON",1],["AUTO",1],["HEAT",1],["FAN_ONLY",1]]}},
 +                            "fanspeed":{"reg":42,"type":"u8l","id":7,"map":{"cmd":"fan"}},
 +                            "offbyfan":{"reg":41,"type":"u8l","id":7,"map":{"cmd":[1,["OFF",0]]}},
 +                            "pmode":{"reg":43,"type":"u8l","id":1,"map":{"cmd":[["AUTO",3],["HEAT",2],["FAN_ONLY",1]]}},
 +                            "tset":{"reg":44,"type":"u8l","id":2},
 +
 +                            "di":{"reg":47,"type":"u8l"},
 +                            "dp":{"reg":48,"type":"u8l"},
 +                            "dt":{"reg":49,"type":"u8l"},
 +
 +                            "fault":{"reg":1008}
 +              }
 +              }
 +  }
 +},
 +"items":
 +{
 +  "vent":[14,[247,"airset",
 +    
 +    {
 +      "tset":{"emit":"edem/s_out/vent/set","@V":null},
 +      "pmode":{"emit":"edem/s_out/vent/cmd","@V":null},
 +      "fanspeed":{"emit":"edem/s_out/vent/fan","@V":null},
 +      "on":{"emit":"edem/s_out/vent/oncmd","@V":null},
 +      
 +      "ruheat":{"emit":"edem/s_out/vent/ruheat"},
 +      "ruslow":{"emit":"edem/s_out/vent/rupump"},
 +      "ramode":{"emit":"edem/s_out/vent/ramode"},
 +      "rfanspd":{"emit":"edem/s_out/vent/rfanspd"},
 +      "rfanlvl":{"emit":"edem/s_out/vent/rfanlvl"},
 +      "rpumpon":{"emit":"edem/s_out/vent/rpumpon"},
 +      "rtemp":{"emit":"edem/s_out/vent/rtemp"},
 +      "rtempset":{"emit":"edem/s_out/vent/rtempset"},
 +      "fault":{"emit":"edem/s_out/vent/fault"},
 +      
 +      "tautoheat":{},
 +      "tautocool":{},
 +      "di":{},
 +      "dp":{},
 +      "dt":{},
 +      "fanmin":{},
 +      "fanmax":{},
 +      "tmreheat":{},
 +      "tairfreeze":{},
 +      "twaterstart":{},
 +      "twatershut":{},
 +      "twateridle":{},
 +      "fanauto":{"emit":"edem/s_out/vent/fanauto/set","@V":null},
 +      "numspeed":{},
 +      "offbyfan":{}
 +    }
 +    ]]
 +}      
 +</code>
  
настройка_modbus.txt · Последнее изменение: 2023/10/25 01:56 — Admin