Спасибо за ответы, ещё раз. Разобрался в теме, на сколько потребовалось.
Внедрил Infrastructure as Code для настройки релейных модулей. Ниже предлагаю вариант решения, может кому-нибудь поможет.
Структура реализованного решения.
В нашем случае потребовалось подкрутить настройки WB-MGE v2:
Далее, используя ссылки выше, собрал контейнер, заслал в него настройки:
$ docker run -it
-p 22:22
–env MODBUS_DEVICES=“:<Условный ID который будет использоваться в Ansible>”
–env MODBUS_EMAIL_ADMIN="admin@example.com"
–env MODBUS_CREDENTIAL=“login:ssh-rsa some_public_key”
h963z57/modbus_client-docker:main
После чего используя login:ssh_private_key с помощью ansible задаю настройки, ниже привожу пример простого скрипта, но нужно быть осторожным если релейных модулей много, при быстром включении может выбить свет - проверено.
- name: DANGE MASTER
hosts: MODBUS_CLIENT
become: true
vars:
OFFICE:
# FLOOR_UNDEGROUND
- {id: 12, slave: 119}
- {id: 12, slave: 79}
# FLOOR_ONE
- {id: 1, slave: 34}
- {id: 2, slave: 149}
- {id: 3, slave: 169}
- {id: 4, slave: 113}
- {id: 4, slave: 59}
- {id: 5, slave: 84}
- {id: 5, slave: 21}
# FLOOR_TWO
- {id: 6, slave: 168}
- {id: 6, slave: 74}
- {id: 7, slave: 153}
- {id: 8, slave: 62}
- {id: 9, slave: 116}
- {id: 10, slave: 119}
- {id: 10, slave: 90}
- {id: 11, slave: 86}
- {id: 11, slave: 107}
- {id: 11, slave: 80}
- {id: 11, slave: 90}
- {id: 13, slave: 154}
# ================= Safe zone ======================
COMMON_CONFIGURATION: false
DEFAULT_VALUE:
ACTION_AFTER_POWER_REBOOT: 1 #Last state 0 - offed
# ================= Danger zone ====================
DANGEROUS_IS_MY_SECOND_NAME: false
POWER_STATUS : false
tasks:
- name: Common settings
block:
- name : Change defult state aster power off/on
shell: bash -c "modbus_client --debug -mrtu -b9600 -pnone -s2 /dev/ttyRS485-{{ item.id }} -a{{ item.slave }} -t0x06 -r6 {{ DEFAULT_VALUE.ACTION_AFTER_POWER_REBOOT }}" >> /var/log/modbus/modbus_client.log
with_items: "{{ OFFICE }}"
- name : Change default type button
shell: bash -c "modbus_client --debug -mrtu -b9600 -pnone -s2 /dev/ttyRS485-{{ item.id }} -a{{ item.slave }} -t0x10 -r9 -c 6 0 0 0 0 0 0" >> /var/log/modbus/modbus_client.log
with_items: "{{ OFFICE }}"
when : COMMON_CONFIGURATION is true
# =============== REALLY DENGEROUS ==================
- name : Danger zone
block:
- name : Set POWER_STATUS as 1
set_fact:
POWER_VALUE: 1
when : POWER_STATUS is true
- name : Set POWER_STATUS as 0
set_fact:
POWER_VALUE: 0
when : POWER_STATUS is false
- name : Set POWER_DELAY as 5
set_fact:
POWER_DELAY: 5
when : POWER_STATUS is true
- name : Set POWER_STATUS as 0
set_fact:
POWER_DELAY: 0
when : POWER_STATUS is false
- name : Poweroff 1 output
shell : bash -c "modbus_client --debug -mrtu -b9600 -pnone -s2 /dev/ttyRS485-{{ item.id }} -a{{ item.slave }} -t0x0F -r0 {{ POWER_VALUE }}" >> /var/log/modbus/modbus_client.log
with_items : "{{ OFFICE }}"
loop_control:
pause : "{{ POWER_DELAY }}"
- name : pause for prevent power destroy
pause :
seconds: 10
when : POWER_STATUS is true
- name : Poweroff 2 output
shell : bash -c "modbus_client --debug -mrtu -b9600 -pnone -s2 /dev/ttyRS485-{{ item.id }} -a{{ item.slave }} -t0x0F -r1 {{ POWER_VALUE }}" >> /var/log/modbus/modbus_client.log
with_items : "{{ OFFICE }}"
loop_control:
pause : "{{ POWER_DELAY }}"
- name : pause for prevent power destroy
pause :
seconds: 10
when : POWER_STATUS is true
- name : Poweroff 3 output
shell : bash -c "modbus_client --debug -mrtu -b9600 -pnone -s2 /dev/ttyRS485-{{ item.id }} -a{{ item.slave }} -t0x0F -r2 {{ POWER_VALUE }}" >> /var/log/modbus/modbus_client.log
with_items : "{{ OFFICE }}"
loop_control:
pause : "{{ POWER_DELAY }}"
- name : pause for prevent power destroy
pause :
seconds: 10
when : POWER_STATUS is true
- name : Poweroff 4 output
shell : bash -c "modbus_client --debug -mrtu -b9600 -pnone -s2 /dev/ttyRS485-{{ item.id }} -a{{ item.slave }} -t0x0F -r3 {{ POWER_VALUE }}" >> /var/log/modbus/modbus_client.log
with_items : "{{ OFFICE }}"
loop_control:
pause : "{{ POWER_DELAY }}"
- name : pause for prevent power destroy
pause :
seconds: 10
when : POWER_STATUS is true
- name : Poweroff 5 output
shell : bash -c "modbus_client --debug -mrtu -b9600 -pnone -s2 /dev/ttyRS485-{{ item.id }} -a{{ item.slave }} -t0x0F -r4 {{ POWER_VALUE }}" >> /var/log/modbus/modbus_client.log
with_items : "{{ OFFICE }}"
loop_control:
pause : "{{ POWER_DELAY }}"
- name : pause for prevent power destroy
pause :
seconds: 10
when : POWER_STATUS is true
- name : Poweroff 6 output
shell : bash -c "modbus_client --debug -mrtu -b9600 -pnone -s2 /dev/ttyRS485-{{ item.id }} -a{{ item.slave }} -t0x0F -r5 {{ POWER_VALUE }}" >> /var/log/modbus/modbus_client.log
with_items : "{{ OFFICE }}"
loop_control:
pause : "{{ POWER_DELAY }}"
when: DANGEROUS_IS_MY_SECOND_NAME is true
Кому интересно, ссылка на репозиторий.
Чуть подробнее о самом контейнере.