Como eu monitorei RIP-12 de Bolid

Fontes de alimentação redundantes são usadas em todos os lugares. Eles fornecem alimentação ininterrupta para dispositivos de segurança e alarme de incêndio, equipamentos de controle de acesso e outros sistemas. Em nossa empresa, como tais fontes, como regra, usamos dispositivos de ZAO NVP Bolid. Alguns deles, como o RIP-12-6 / 80M3-R-RS, possuem interface RS485, o que permite que sejam incluídos no sistema de monitoramento.





Ferramentas de monitoramento

Estamos usando o Zabbix 5.2. Receberemos dados do RIP usando o protocolo Modbus RTU sobre TCP. O suporte para este protocolo é implementado no Zabbix usando o módulo carregável libzbxmodbus . Além disso, o conversor de protocolo C2000-PP (ver. 1.32) no modo “Master” e o conversor de interface serial (RS485 para Ethernet) estão envolvidos no processo de monitoramento.





Objetos de monitoramento

Para começar, vamos decidir o que exatamente podemos controlar. Da documentação para RIP-12-6 / 80M3-R-RS e S2000-PP, constatou-se que podemos contar com a obtenção do estado de sete zonas (AL) e valores numéricos de corrente e tensão. Durante os experimentos, fui capaz de reproduzir os seguintes estados do loop:





Loop # 0 Status do dispositivo





149





Hacking the device case





O edifício RIP está aberto





152





Restauração da caixa do dispositivo





Prédio RIP fechado





250













№1





193













192













199













250













№2





194









7,5





195









7,5





250













№3 №4 №1 №2





200









10 ,





202









7





211









11





250













№5





196













197













250













№6





1





220





< 150 > 250





2





220





150…250





250













, . , , №3 №4 [204] , №0 - [203] . , . , .





, . UProg :





  1. ( 2000-),





  2. 2000- (Modbus RTU),





  3. , , 2000-. , , -, , -, .





UProg.  Configuração S2000-PP
UProg. 2000-

:





  • - , 126,





  • - 0 6,





  • - , №0 "3 - ", - "8- / ".





Zabbix

, Zabbix libzbxmodbus Modbus-. - C2000-, , .





  • .





  • , .





, RIP 12 mod 56 RIP 12 6 80 M3 R RS. Request " ". : modbus_read[{$MODBUS_PORT},{$MODBUS_SLAVE},{$STATUS_REG},3,7*uint16] . , modbus C2000-.





  • {MODBUS_PORT} - (enc - Modbus RTU over TCP), .





  • {MODBUS_SLAVE} - Modbus UID 2000- ( UProg ).





  • {STATUS_REG} - №0 . : " 2000-" + 40000 - 1. : 450+40000-1 = 40449.





Request - 2000- JSON. JSON , 2000-, - :





{
  "40449":39115,
  "40450":51195,
  "40451":50171,
  "40452":51963,
  "40453":51451,
  "40454":50683,
  "40455":763
}
      
      



Request 7 . - JSON . :





  • Status - ( №0),





  • Uout - ( №1),





  • Iout - ( №2),





  • Ubat1 - 1 ( №3),





  • Ubat2 - 2 ( №4),





  • Capacity - ( №5),





  • Uin - ( №6).





№0 (Status), . JSONPath, 256, .





, JSONPath. javascritpt-. , Iout ( №2) javascript- :





function (value){
    var reg = parseInt({$STATUS_REG})+2;
    var data = JSON.parse(value);
    return data[reg];
}
      
      



. :





  1. ,





  2. ,





  3. ,





  4. 1,





  5. 2,





  6. 1 ,





  7. 2 ,





  8. 220 ,





  9. ,





  10. Status,





  11. Iout,





  12. Uout,





  13. 1,





  14. 2,





  15. Capacity,





  16. Uin,





  17. MODBUS.





RIP 12 mod 56 RIP 12 6 80 M3 R RS

RIP 12 mod 56 RIP 12 6 80 M3 R RS em fotos
RIP 12 mod 56 RIP 12 6 80 M3 R RS
Um exemplo de criação de um host

: RIP 12 mod 56 RIP 12 6 80 M3 R RS, RIP 12 mod 56 RIP 12 6 80 M3 R RS.





. , modbus- 2000-. , - . libzbxmodbus, .. c .





, , - , Zabbix. libzbxmodbus , .





, libzbxmodbus , .





shell

, , flock. Modbus modpoll. /usr/lib/zabbix/externalscripts rip_12_mod_56.sh





#!/bin/bash
# rip_12_mod_56.sh

# $1 - protocol://host:port
# $2 - Modbus UID
# $3 - Status register
# $4 - Offset (0 - 6)

# Example of requesting statuses:       ./rip_12_mod_56.sh enc://127.0.0.1:4001 1 40000
# Example value request:                ./rip_12_mod_56.sh enc://127.0.0.1:4001 1 40000 3

(($# < 3)) && { printf '%s\n' "You have given little data. Command exited with non-zero"; exit 1; }

lockfile=$(echo "$1" | awk -F "://" '{print $2}')

setzone()
{
        modpoll -m $1 -a $4 -r 46181 -0 -1 -c 1 -p $3 $2 $5> /dev/null 2>&1

    (($? != 0)) && { printf '%s\n' "Command exited with non-zero"; exit 1; }

    sleep 0.15
}

getvalue ()
{
        value=$(modpoll -m $1 -a $4 -r 46328 -0 -1 -c 1 -t 4:hex -p $3 $2 |grep ]: |awk '{print $2}')
        printf "%d" $value
}

getstatus ()
{
        status=$(modpoll -m $1 -a $4 -r $5 -1 -c 7 -t 4:hex -p $3 $2 | grep ]: | awk -F "0x" 'BEGIN { printf"["} NR!=7{printf "\""$2"\","} NR==7 {printf "\""$2"\""} END { printf "]"}')
    echo "{ \"status\": $status }"
}

(
        flock -e 200

        protocol=$(echo $1 | awk -F "://" '{print $1}');
        host=$(echo $1 | awk -F "://" '{print $2}' | awk -F ":" '{print $1}')
        port=$(echo $1 | awk -F "://" '{print $2}' | awk -F ":" '{print $2}')
        register=$(($3+1))

        if (($# >= 4)); then
                zone=$(($register+$4-40000))

                setzone $protocol $host $port $2 $zone

                echo $(getvalue $protocol $host $port $2)

                sleep 0.15

                exit 0
        fi

        echo $(getstatus $protocol $host $port $2 $register)

        sleep 0.15;

) 200> /tmp/$lockfile
      
      



Zabbix .





RIP 12 mod 56 RIP 12 6 80 M3 R RS EXTENDED

Request " ". : rip_12_mod_56.sh[{$MODBUS_PORT}, {$MODBUS_SLAVE}, {$STATUS_REG}]. RIP 12 mod 56 RIP 12 6 80 M3 R RS, Request - JSON .





JSON JSONPath. :





{
  "status": ["98CB","C7FB","C3FB","CAFB","C8FB","C5FB","02FB"]
}
      
      



. .

, Request 7 . - JSON .





5 " ".





  • Uout_value - , .





  • Iout_value - , .





  • Ubat1_value - №1, .





  • Ubat2_value - №2, .





  • Uin_value - , .





: rip_12_mod_56.sh[{$MODBUS_PORT}, {$MODBUS_SLAVE}, {$STATUS_REG}, < >].





, RIP 12 mod 56 RIP 12 6 80 M3 R RS.





RIP 12 mod 56 RIP 12 6 80 M3 R RS EXTENDED

RIP 12 mod 56 RIP 12 6 80 M3 R RS ESTENDIDO em fotos
RIP 12 mod 56 RIP 12 6 80 M3 R RS EXTENDED
Último RIP 12 mod 56 RIP 12 6 80 M3 R RS ESTENDIDO
RIP 12 mod 56 RIP 12 6 80 M3 R RS EXTENDED

: RIP 12 mod 56 RIP 12 6 80 M3 R RS EXTENDED, rip_12_mod_56.sh.





RIP 12 mod 56 RIP 12 6 80 M3 R RS. - - . , . , .





, , . .





!








All Articles