Un autre feu de circulation dans le bureau

Bonjour, je m'appelle Maxim et je suis un employé du service informatique d'une société commerciale. Une fois, mes collègues et moi avons décidé que le service des feux de circulation nous manquait. Nous ne comprenions pas encore pourquoi nous en avions besoin, mais l'irrésistible «envie» prévalait sur nous ...


image


Et maintenant, après quelques minutes, nous le recherchons déjà sur Internet. Les exigences étaient les suivantes: réel, bon marché, lampe chaude, vous pouvez l'utiliser. Trouvé rapidement, commandé, payé, attendu. Reçu, déballé, démonté, lavé. Mettez les ampoules. Allumé en même temps. Le bureau s'est réchauffé.


Nous nous sommes demandé où l'adapter et comment le gérer.


Ke-USB24R a été trouvé dans le tableau du tableau - en substance, un module USB avec quatre relais qui peuvent être contrôlés à partir d'un ordinateur en écrivant des données sur un port COM virtuel, plus 18 lignes d'E / S et quatre ADC 10 bits. Détails et instructions sur le site Web du fabricant http://www.kernelchip.ru/Ke-USB24R.php


J'ai connecté un feu de circulation à travers lui. Il s'est avéré que les lumières clignotaient séparément, en utilisant un logiciel du site Web du fabricant.


, 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


- , , . .



Le résultat a été un élément intérieur intéressant et fonctionnel qui a beaucoup attiré l'attention. Nous devons répondre à de nombreuses questions telles que où nous l'avons obtenu et pourquoi nous en avons besoin, combien cela coûte, etc. À l'avenir, je prévois de rendre l'appareil autonome, pour éviter d'utiliser un ordinateur et un contrôleur USB. Remplacez-le par un module de relais Ethernet et transférez la logique au serveur zabbix. Modifiez l'affichage et accrochez-le verticalement.


Merci de votre attention!

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


All Articles