Outro semáforo no escritório

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 ...


imagem


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. :



    • (0 — , 1 — Problem)
  1. — , —
  2. .

xml .


. , . .


traffic_lights.ps1
# 
$trigger_id = $args[0] 
#0 - , 1 - Problem
$trigger_status = $args[1] 
#   . 0 -  , 1 - , 2 - , 3 - , 4 - , 5 - .
$trigger_nsev = $args[2] 

#     
$red = 1
$yellow = 2
$green = 3

#    Key - ID , Value -   
$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 -  
            0 {  }

            #1 - 
            1 {  }

            #2 - 
            2 { $yellow_turn_on = $true }

            #3 - 
            3 { $yellow_turn_on = $true }

            #4 - 
            4 { $red_turn_on = $true }

            #5 - 
            5 { $red_turn_on = $true }
        }
}

#[System.IO.Ports.SerialPort]::getportnames()
$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.


image


" ". — zabbix-:


powershell.exe -File C:\Users\User\Desktop\traffic_lights.ps1 {TRIGGER.ID} {TRIGGER.VALUE} {TRIGGER.NSEVERITY}

image


- , , . .



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!

Source: https://habr.com/ru/post/pt399371/


All Articles