Hola, mi nombre es Maxim y soy empleado del departamento de TI de una empresa comercial. Una vez, mis colegas y yo decidimos que nos faltaba el departamento de semáforos. Todavía no entendíamos por qué lo necesitábamos, pero el irresistible "deseo" prevaleció sobre nosotros ...

Y ahora, después de un par de minutos, ya lo estamos buscando en Internet. Los requisitos eran: real, barato, lámpara cálida, puede usar. Encontrado rápidamente, ordenado, pagado, esperado. Recibido, desempacado, desmontado, lavado. Pon las bombillas. Encendido todo a la vez. La oficina se calentó.
Nos preguntamos dónde adaptarlo y cómo gestionarlo.
Ke-USB24R se encontró en la tabla de la tabla: en esencia, un módulo USB con cuatro relés que se pueden controlar desde una computadora escribiendo datos en un puerto COM virtual, más 18 líneas IO y cuatro ADC de 10 bits. Detalles e instrucciones en el sitio web del fabricante http://www.kernelchip.ru/Ke-USB24R.php
Conecté un semáforo a través de él. Resultó parpadear las luces por separado, utilizando el software del sitio web del 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}
- , , . .
El resultado fue un elemento interior interesante y funcional que llamó mucho la atención. Tenemos que responder muchas preguntas, como dónde lo obtuvimos y por qué lo necesitamos, cuánto cuesta, etc. En el futuro planeo hacer que el dispositivo sea autónomo, para evitar el uso de una computadora y un controlador USB. Reemplácelo con algún módulo de relé Ethernet y transfiera la lógica al servidor zabbix. Modifique la pantalla y cuélguela verticalmente.
Gracias por su atencion!