Olá, meu nome é Maxim e sou funcionário do departamento de TI de uma empresa comercial. Certa vez, meus colegas e eu decidimos que estávamos perdendo o departamento de semáforo. Ainda não entendemos por que precisávamos disso, mas o irresistível "desejo" prevaleceu sobre nós ...

E agora, depois de alguns minutos, já estamos procurando por ele na Internet. Os requisitos foram: real, barato, lâmpada quente, você pode usar. Encontrado rapidamente, ordenado, pago, esperado. Recebido, desembalado, desmontado, lavado. Coloque as lâmpadas. Ligou tudo de uma vez. O escritório ficou mais quente.
Nós nos perguntamos onde adaptá-lo e como gerenciá-lo.
O Ke-USB24R foi encontrado na tabela da tabela - em essência, um módulo USB com quatro relés que podem ser controlados a partir de um computador, gravando dados em uma porta COM virtual, além de 18 linhas IO e quatro ADCs de 10 bits. Detalhes e instruções no site do fabricante http://www.kernelchip.ru/Ke-USB24R.php
Liguei um semáforo através dele. Acabou por piscar as luzes separadamente, usando o software do site do fabricante.
, zabbix, . :
PowerShell. :
- — , —
- .
xml .
. , . .
traffic_lights.ps1
$trigger_id = $args[0]
$trigger_status = $args[1]
$trigger_nsev = $args[2]
$red = 1
$yellow = 2
$green = 3
$triggers=@{}
$triggers = Import-Clixml -Path C:\Users\User\Desktop\DB_traffic_lights.xml
if ($trigger_status -eq 1)
{
if (!$triggers.ContainsKey($trigger_id))
{
$triggers.Add($trigger_id,$trigger_nsev)
}
}
else
{
if ($triggers.ContainsKey($trigger_id))
{
$triggers.Remove($trigger_id)
}
}
$triggers | Export-Clixml -Path C:\Users\User\Desktop\DB_traffic_lights.xml
$red_turn_on = $false
$yellow_turn_on = $false
foreach ($trigger in $triggers)
{
switch ($trigger.Values)
{
0 { }
1 { }
2 { $yellow_turn_on = $true }
3 { $yellow_turn_on = $true }
4 { $red_turn_on = $true }
5 { $red_turn_on = $true }
}
}
$port = New-Object System.IO.Ports.SerialPort
$port.PortName = 'COM4'
$port.BaudRate = '9600'
$port.Parity = "None"
$port.Handshake = "None"
$port.DataBits = 8
$port.StopBits = 1
$port.ReadTimeout = 500
$port.WriteTimeout = 500
$port.DtrEnable = $true
$port.RtsEnable = $true
$port.Open()
if ($port.IsOpen -eq $true)
{
if($trigger_status -eq "0")
{
$command = '$KE,REL,' + $red + ',0'+"`r"
$port.WriteLine($command)
$command = '$KE,REL,' + $yellow + ',0'+"`r"
$port.WriteLine($command)
$command = '$KE,REL,' + $green + ',1'+"`r"
$port.WriteLine($command)
Start-Sleep -Milliseconds 300
$command = '$KE,REL,' + $green + ',0'+"`r"
$port.WriteLine($command)
Start-Sleep -Milliseconds 300
$command = '$KE,REL,' + $green + ',1'+"`r"
$port.WriteLine($command)
Start-Sleep -Milliseconds 300
$command = '$KE,REL,' + $green + ',0'+"`r"
$port.WriteLine($command)
Start-Sleep -Milliseconds 300
}
if ($red_turn_on)
{
$command = '$KE,REL,' + $red + ',1'+"`r"
$port.WriteLine($command)
}
if ($yellow_turn_on)
{
$command = '$KE,REL,' + $yellow + ',1'+"`r"
$port.WriteLine($command)
}
}
$port.Close()
zabbix- ( -> ), : = , = OK.
" ". — zabbix-:
powershell.exe -File C:\Users\User\Desktop\traffic_lights.ps1 {TRIGGER.ID} {TRIGGER.VALUE} {TRIGGER.NSEVERITY}
- , , . .
O resultado foi um elemento interior interessante e funcional que atraiu muita atenção. Temos que responder muitas perguntas, como onde conseguimos e por que precisamos, quanto custa e assim por diante. No futuro, pretendo tornar o dispositivo autônomo, para evitar o uso de um computador e um controlador USB. Substitua-o por algum módulo Ethernet-Relay e transfira a lógica para o servidor zabbix. Modifique a exibição e pendure-a na vertical.
Obrigado pela atenção!