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!