कार्यालय में एक और ट्रैफिक लाइट

नमस्कार, मेरा नाम मैक्सिम है और मैं एक ट्रेडिंग कंपनी के आईटी विभाग का कर्मचारी हूं। एक बार, मैंने और मेरे सहयोगियों ने तय किया कि हम ट्रैफिक लाइट विभाग को याद कर रहे हैं। हमें अभी तक यह समझ नहीं आया कि हमें इसकी आवश्यकता क्यों है, लेकिन अप्रतिरोध्य "चाहते" हमारे ऊपर हावी है ...


छवि


और अब, कुछ मिनटों के बाद, हम पहले से ही इंटरनेट पर उसकी तलाश कर रहे हैं। आवश्यकताएं थीं: वास्तविक, सस्ते, गर्म-गर्म, आप उपयोग कर सकते हैं। जल्दी से मिला, आदेश दिया, भुगतान किया, इंतजार किया। प्राप्त, अनपैक्ड, डिसैम्बल्ड, वाश किया हुआ। असेंबल किया हुआ। बल्ब लगाओ। एक बार में सभी को चालू कर दिया। कार्यालय गर्म हो गया।


हमने सोचा कि इसे कहां अनुकूलित किया जाए और इसे कैसे प्रबंधित किया जाए।


के-यूएसबी 24 आर तालिका की तालिका में पाया गया था - संक्षेप में, चार रिले के साथ एक यूएसबी मॉड्यूल जिसे कंप्यूटर से वर्चुअल COM पोर्ट, प्लस 18 आईओ लाइनों और चार 10-बिट एडीसी के लिए डेटा लिखकर नियंत्रित किया जा सकता है। निर्माता की वेबसाइट पर विवरण और निर्देश http://www.kernelchip.ru/Ke-USB24R.php


मैंने इसके माध्यम से एक ट्रैफिक लाइट को जोड़ा। यह निर्माता की वेबसाइट से सॉफ्टवेयर का उपयोग करते हुए, अलग से रोशनी को झपकी देने के लिए निकला।


, 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


- , , . .



परिणाम एक दिलचस्प और कार्यात्मक आंतरिक तत्व था जिसने बहुत अधिक ध्यान आकर्षित किया। हमें बहुत सारे सवालों का जवाब देना होगा जैसे कि हमें यह कहां से मिला है और हमें इसकी आवश्यकता क्यों है, इसकी लागत कितनी है और इतने पर। भविष्य में मैं डिवाइस को स्वायत्त बनाने की योजना बना रहा हूं, कंप्यूटर और यूएसबी नियंत्रक का उपयोग करने से दूर होने के लिए। इसे कुछ ईथरनेट-रिले मॉड्यूल से बदलें और लॉब को zabbix सर्वर पर स्थानांतरित करें। प्रदर्शन को संशोधित करें और इसे लंबवत लटकाएं।


आपका ध्यान के लिए धन्यवाद!

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


All Articles