Des alimentations redondantes sont utilisées partout. Ils fournissent une alimentation électrique ininterrompue aux dispositifs de sécurité et d'alarme incendie, aux équipements de contrôle d'accès et à d'autres systèmes. Dans notre entreprise, en tant que telles sources, en règle générale, nous utilisons des appareils de ZAO NVP Bolid. Certains d'entre eux, comme le RIP-12-6 / 80M3-R-RS, ont une interface RS485, ce qui leur permet d'être inclus dans le système de surveillance.
Outils de surveillance
Nous utilisons Zabbix 5.2. Nous recevrons les données du RIP en utilisant le protocole Modbus RTU sur TCP. La prise en charge de ce protocole est implémentée dans Zabbix à l'aide du module chargeable libzbxmodbus . De plus, le convertisseur de protocole C2000-PP (ver. 1.32) en mode «Maître» et le convertisseur d'interface série (RS485 vers Ethernet) sont impliqués dans le processus de surveillance.
Objets de surveillance
Pour commencer, décidons ce que nous pouvons contrôler exactement. De la documentation pour RIP-12-6 / 80M3-R-RS et S2000-PP, il s'est avéré que nous pouvons compter sur l'obtention de l'état de sept zones (AL) et des valeurs numériques de courant et de tension. Au cours des expériences, j'ai pu reproduire les états suivants de la boucle:
Boucle # 0 Etat de l' appareil
149 |
Piratage du boîtier de l'appareil |
Le bâtiment RIP est ouvert |
152 |
Restauration du boîtier de l'appareil |
Bâtiment RIP fermé |
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 :
( 2000-),
2000- (Modbus RTU),
, , 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,
1 ,
2 ,
220 ,
,
Status,
Iout,
Uout,
1,
2,
Capacity,
Uin,
MODBUS.
RIP 12 mod 56 RIP 12 6 80 M3 R RS
: 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
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 EXTENDED, rip_12_mod_56.sh.
RIP 12 mod 56 RIP 12 6 80 M3 R RS. - - . , . , .
!