Eine weitere Ampel im Büro

Hallo, mein Name ist Maxim und ich bin Mitarbeiter der IT-Abteilung eines Handelsunternehmens. Einmal haben meine Kollegen und ich entschieden, dass uns die Ampelabteilung fehlt. Wir haben noch nicht verstanden, warum wir es brauchten, aber das unwiderstehliche "Bedürfnis" setzte sich gegen uns durch ...


Bild


Und jetzt, nach ein paar Minuten, suchen wir ihn bereits im Internet. Die Anforderungen waren: echte, billige, warme Lampe, die man benutzen kann. Schnell gefunden, bestellt, bezahlt, gewartet. Erhalten, ausgepackt, zerlegt, gewaschen. Zusammengebaut. Setzen Sie die Glühbirnen. Auf einmal eingeschaltet. Das Büro wurde wärmer.


Wir haben uns gefragt, wo wir es anpassen und wie wir es verwalten sollen.


Ke-USB24R wurde im Nachttisch gefunden - im Wesentlichen ein USB-Modul mit vier Relais, die von einem Computer aus gesteuert werden können, indem Daten auf einen virtuellen COM-Port geschrieben werden, sowie 18 E / A-Leitungen und vier 10-Bit-ADCs. Details und Anweisungen auf der Website des Herstellers http://www.kernelchip.ru/Ke-USB24R.php


Ich habe eine Ampel angeschlossen. Es stellte sich heraus, dass die Lichter mithilfe der Software von der Website des Herstellers separat blinkten.


, 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


- , , . .



Das Ergebnis war ein interessantes und funktionales Innenelement, das sehr viel Aufmerksamkeit auf sich zog. Wir müssen viele Fragen beantworten, z. B. woher wir es haben und warum wir es brauchen, wie viel es kostet und so weiter. In Zukunft plane ich, das Gerät autonom zu machen, um nicht mehr einen Computer und einen USB-Controller zu verwenden. Ersetzen Sie es durch ein Ethernet-Relay-Modul und übertragen Sie die Logik auf den zabbix-Server. Ändern Sie die Anzeige und hängen Sie sie vertikal auf.


Vielen Dank für Ihre Aufmerksamkeit!

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


All Articles