Introdução
Neste artigo, vou falar sobre como usamos Zabbix e Wirenboard para monitorar equipamentos de produção, como conseguimos obter dados de linhas e fontes de recursos básicos. O artigo descreve o conceito e os principais pontos da organização do monitoramento por meio de software livre, mas nĂŁo discutirá sistemas sĂ©rios da classe SCADA. Minha tarefa era implantar rapidamente o monitoramento sem investimento de capital e começar a receber dados o mais rápido possĂvel do que já existe.
Uma tarefa
Temos linhas transportadoras de matéria-prima e produtos acabados, temos fornos, autoclaves e outras peças que são úteis na produção. Tudo isso consome diversos recursos (gás, água, eletricidade) e exige monitoramento (em funcionamento ou ocioso). Precisamos de um monitoramento que nos permita identificar gargalos na produção e tirar conclusões sobre a eficiência do uso de recursos e equipamentos.
Dificuldades de integração
Infelizmente, todos os equipamentos de produção são controlados por seus próprios controladores locais, nem todos têm uma interface de rede, todos têm seus próprios protocolos, o acesso ao sistema operacional é fechado, sensores analógicos são usados ​​- poucas pessoas querem compartilhar informações com o mundo exterior.
Alterar tudo Ă© demorado, caro e difĂcil, e vocĂŞ precisa obter os dados agora, a conclusĂŁo: vocĂŞ precisa estar incorporado.
Controlador
Escolhemos Wirenboard como controlador . Um Linux completamente aberto está rodando a bordo, vocĂŞ pode instalar quaisquer pacotes adicionais, ele tem seu prĂłprio mecanismo de regras e uma interface web. O fabricante do controlador produz toda a linha necessária de sensores e medidores que se comunicam entre si usando o protocolo aberto Modbus RTU. Todos os dados sĂŁo coletados no MQTT. Na minha opiniĂŁo, MQTT Ă© a forma mais adequada de coletar e entregar dados de telemetria, o protocolo Ă© aberto e o mais fácil de usar possĂvel.
Zabbix-mqtt-Wirenboard
O Zabbix nĂŁo funciona diretamente com MQTT, mas Ă© possĂvel usar mĂłdulos externos, aqui estĂŁo duas opções que usei.
- Zabbix , MQTT mosquitto_sub. : «UserParameter=mqtt.value[*],mosquitto_sub -t '$1' -C 1», Zabbix , item key mqtt.value[ ].
, – MQTT . , , Zabbix . «retain», , Zabbix , , . – , . , .
Zabbix 4.2 zbx_mqtt. Zabbix , , JSON . «» . Preprocessing: – .
– -. :
/ .
, WB-MCM8 c modbus 32, , MQTT Wirenboard.
/devices/wb-mcm8_32/controls/Input 1 counter
/devices/wb-mcm8_32/controls/Input 2 counter
…
/devices/wb-mcm8_32/controls/Input 8 counterZabbix MasterItem_WB-MCM8_32 External check. .

key : mqtt["-t=/devices/wb-mcm8_32/#","--mqtt-host={HOST.CONN}"] :
mqtt[] –
-t=/devices/wb-mcm8_32/# - wb-mcm832
--mqtt-host={HOST.CONN} - Wirenboard. {HOST.CONN}
, Zabbix JSON, :
{…"/devices/wb-mcm8_32/controls/Input 7 counter": "3129705", "/devices/wb-mcm8_32/controls/Input 3 counter": "1885652", "/devices/wb-mcm8_32/controls/Input 1 counter/meta/type": "value", "/devices/wb-mcm8_32/controls/Input 5/meta/order": "13", "/devices/wb-mcm8_32/controls/Input 8/meta/order": "16"…}dependent item, .

key , mqtt . Preprocessing.

JSONPath -
Check for error in JSON - wb-mcm8 : , , Zabbix .
Simple change - , () – Simple change.
, , . , , .
WB-MAP3H. , , . ( ) ( , – ). (, , ), ( ).

, . , , – .
Delta Modbus TCP RTU
Delta, Modbus TCP. Modbus Zabbix libzbxmodbus. , TCP, com RTU Modbus. , .
Zabbix Master item, 17 Modbus TCP, , .
modbus_read[{$MODBUS_ADDRESS},1,4110,3,17*s]
$MODBUS_ADDRESS – Zabbix, ip , «tcp://192.168.0.2»
1 – Modbus. «1», RTU ,
4110 – ,
3 – Modbus. 3 –
17*s – , 17 , int16 (s=int16, f=float, b=bit )
5 Zabbix – Test, JSON 17 ( 4110 4126).
{"4110":967,"4111":960,"4112":395,"4113":0,"4114":0,"4115":0,"4116":665,"4117":803,"4118":2500,"4119":2500,"4120":447,"4121":999,"4122":1224,"4123":2154,"4124":1493,"4125":1254,"4126":418}, Preprocessing steps JSONPath = $.4110 4110 . , : In range 0 1500, – . Discard unchanged , .

Siemens
Siemens S7 profinet / profibus, Snap7. zbx_s7_get , .

s7_get.py :
s7_get.py[{HOST.CONN},{$S7.RACK},{$S7.SLOT},{$S7.DB},6,bool,--json]{HOST.CONN} – , ip ( host interface)
{$S7.RACK} – , rack id
{$S7.SLOT} – ,
{$S7.DB} – , id
6 - offset
Bool – , true / false. int float.
--json – . json, master item .
JSON, ( ).
{"6": ["True", "False", "False", "True", "False", "True", "True", "False"]}Linx 5900
Linx 5900 ( , ). , , - .
Zabbix moxa NPORT 5150. tcp rs232 serial /dev/ttyr01 linux , Zabbix . Linx Remote Communications Interface (RSI). , ( ).
: 1b 02 08 1b 03
: 1b 06 00 00 08 da bc b9 01 1b 03
:
1b 06 -
00 00
08 – 8 ( )
da bc b9 01 -
1b 03
UINT32 - Little Endian (DCBA)
01 B9 BC 8F 28949647
01 B9 BC DA 28949722
01 B9 BD 25 28949797, , .
Zabbix serial.get. Item key :
serial.get[/dev/ttyr01,5,1b02081b03,uint32]Zabbix , .
:
( )
OEE
( )
( )
:
, . lorawan
CAS
P.S.
Este artigo foi escrito antes do lançamento do Zabbix 5.2. A nova versão está focada em trabalhar com iot e já tem a capacidade de receber dados de MQTT e Modbus sem módulos adicionais, pelo que muitos agradecimentos aos desenvolvedores do Zabbix. Agradecimentos especiais a @wabbit pelos módulos no git https://github.com/v-zhuravlev, eles deram o impulso principal para o desenvolvimento do monitoramento.