Здравствуйте, меня зовут Максим и я сотрудник IT отдела одной торговой компании. Как то раз мы с коллегами решили, что нам не хватает в отделе светофора. Мы пока не понимали зачем именно он нам нужен, но непреодолимое "хочу" одолевало нас...


image


И вот спустя пару минут мы уже ищем его на просторах интернета. Требования были такими: настоящий, дешевый, тёплый-ламповый, можно б/у. Нашли быстро, заказали, оплатили, дождались. Получили, распаковали, разобрали, отмыли.Собрали. Поставили лампочки. Включили все сразу. В кабинете потеплело.


Задумались куда его приспособить и как им управлять.


В тумбочке стола нашёлся Ke-USB24R — по своей сути USB-модуль с четырьмя реле, которыми можно управлять с компьютера, записывая данные в виртуальный COM-порт, плюс 18 IO линий и четыре 10-и битных АЦП. Подробности и инструкции на сайте производителя http://www.kernelchip.ru/Ke-USB24R.php


Подключил через него светофор. Получилось поморгать лампочками отдельно, используя ПО с сайта производителя.


Дальше решили, что неплохо бы прикрутить светофор к системе мониторинга zabbix, которая работает в компании. Светофор должен сигнализировать о проблемах в зависимости от важности сработавших триггеров:


  • чрезвычайная и важная — красный,
  • средняя и предупреждение — жёлтый,
  • когда проблема решается — должен сработать зелёный сигнал и погаснуть жёлтый или красный.

Написал скрипт на PowerShell. Логика работы такова:


  1. На вход получает три параметра
    • числовой идентификатор триггера
    • статус триггера (0 — ОК, 1 — Problem)
    • числовая важность триггера
  2. Если пришёл триггер с проблемой — добавляем его в массив, если пришёл триггер с решением проблемы — удаляем его из массива
  3. Исходя из того какие значения триггеров есть в массиве включается тот или иной сигнал светофора.

Массив триггеров с идентификаторами проблемных триггеров хранится в 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


Таким образом при срабатывании какого-нибудь триггера, выполняется скрипт с нужными параметрами на удалённом компьютере, к которому подключен модуль управления светофором. Загорается или гаснет сигнал.



В итоге получился интересный и функциональный элемент интерьера, очень сильно привлекающий внимание. Приходится отвечать на уйму вопросов типа где мы его взяли и для чего он нам нужен, сколько стоит и так далее. В будущем планирую сделать устройство автономным, уйти от использования компьютера и USB-контроллера. Заменить его каким-нибудь Ethernet-Relay модулем и перенести логику работы на сервер zabbix. Доработать индикацию и повесить его вертикально.


Спасибо за внимание!

Поделиться с друзьями
-->

Комментарии (29)


  1. moropsk
    18.11.2016 16:46
    +2

    Друзья, 5 баллов за интересную поделку.


  1. olekl
    18.11.2016 16:51

    А не великоват для офиса?


    1. tonny_bennet
      18.11.2016 17:00

      Выбор нашей ситуации был невелик — ограниченность предложения и цены. Наверное можно было поискать меньше размером или взять пешеходные модули с человечками. Но и данный форм-фактор нас в принципе устраивает.


      1. jar_ohty
        18.11.2016 17:30

        Еще есть светофоры-повторители, они где-то вдвое меньше, хоть и не так эффектно выглядят.


  1. NET_KOT
    18.11.2016 17:19
    +3

    Осталось поставить паровозный гудок, информирующий об окончании рабочего дня.
    * * *
    Живо напомнило видео про одного умельца, который поставил в квартиру блок управления лифтовыми дверями:
    https://www.youtube.com/watch?v=AwppYlu_RgU


    1. miha2
      21.11.2016 10:00

      Благодаря вашей ссылке залип на 2-3 часа на канале лифтера :)


  1. gsaw
    18.11.2016 17:22

    Было на хабре уже «Билд-Светофор». Наверное «Еще» в заголовке намекает на это. Но там хотя бы законченное решение, красиво оформленное, а тут «элемент интерьера» на подоконнике валяется.


    1. tonny_bennet
      18.11.2016 19:13

      Да именно светофоры в офисах это не моя придумка: Билд-светофор в офисе, Самодельный билд-светофор в офис, Наш светофор (от Яндекса) Но захотелось иметь свой, тёплый и ламповый светофор.

      Действительно, это незаконченный вариант ради того чтобы попробовать стоит продолжать или нет и сделан был на коленке из того что было. Следующая модификация, как я и писал, будет без ПК и на каком-нибудь Ethernet-подобной плате с реле, т.к. не вижу смысла ради моргания тремя лампочками задействовать отдельный компьютер.

      И, простите, он не валяется, а лежит. Место куда его повесить уже нашли, но в этой аппаратной реализации делать это не будем.


  1. Andy_Big
    18.11.2016 17:44
    +1

    Приходится отвечать на уйму вопросов типа где мы его взяли

    Так где вы его взяли? :)


    1. tonny_bennet
      18.11.2016 19:19

      Нашли на популярном сайте бесплатных объявлений, за 4 500 км и несколько часовых поясов от нас. Связались с продавцом и он отправил нам его транспортной компанией. За что ему огромное спасибо. Неделя ожидания и стоимость доставки равная стоимости самого светофора. :)


      1. Andy_Big
        18.11.2016 19:33

        Спасибо :)
        Я думал, где-то их именно продают :)


        1. tonny_bennet
          18.11.2016 19:52

          Есть компании которые их изготавливают и продают, от миниатюрных моделей для авто-моек и парковок до полноразмерных. Стоят они дороговато и в большинстве своём светодиодные.


          1. Andy_Big
            18.11.2016 20:03

            Да, я уже пробежался по гуглу. Дороговато — не то слово :)


  1. AlexanderG
    18.11.2016 18:36
    +1

    Можно заюзать светофор типоразмера «Метро», они не очень большие:
    image
    image


    1. tonny_bennet
      18.11.2016 19:26

      Выглядит симпатично, но то с каким трудом удалось найти этот светофор, учитывая, что они достаточно распространены, наводит на мысли что подобный светофор мы бы искали целую вечность.


  1. Legushka
    18.11.2016 19:19

    в крумной айтишной компании всегда будет красный цвет: решаем текущие вопросы, появляются новые


    1. tonny_bennet
      18.11.2016 19:22

      Вообще говоря у zabbix шесть значений важности триггеров:
      0 - Не классифицировано, 1 - Информация, 2 - Предупреждение, 3 - Средняя, 4 - Высокая, 5 - Чрезвычайная

      Можно подстроить на свой вкус. И сигнализацию светофором сделать не по всему набору триггеров, а по какой-то части. Система очень гибкая.


  1. ArsenAbakarov
    18.11.2016 20:33

    Даа, я Максима знаю лично, он и не такое сможет сделать.
    А по теме, круто получилось, эффектно)


    1. tonny_bennet
      18.11.2016 20:40

      Спасибо, Арс.:)


  1. NikitosZs
    18.11.2016 23:25

    >>Нашли быстро, заказали, оплатили, дождались.
    Сколько в денюжках? Спрашиваю, потому что установка светофора на перекрёстке у нас вышла, кажется, в 1.7млн.рублей, «но это не точно».


    1. tonny_bennet
      19.11.2016 09:19

      По 300 р. за секцию, итого 900 р. за весь светофор. Но он был явного вида б/у и грязненький как внутри и снаружи.

      Фото светофора
      image


      1. NikitosZs
        19.11.2016 13:30
        -1

        У нас в городе 3 светофора, на разных его концах, т.ч в связке они если и работают, то толку от этого нет. Про согласования не знаю…


    1. lostpassword
      19.11.2016 14:20

      Я подозреваю, сюда ещё входят мачты (столбы) — их тоже надо купить и смонтировать. А это уже несколько дней работ специалистов, плюс строительная техника.


  1. ns3230
    19.11.2016 01:05

    Этим летом в Мелитополе, зная где искать, точно можно было найти) Там все старые ламповые светофоры (чуть менее чем 100 % от всех в городе) на новые светодиодные поменяли, так что списанных должно быть достаточно.


    1. tonny_bennet
      19.11.2016 09:21

      У нас тоже повсеместно меняют светофоры на светодиодные, но мне так и не удалось выяснить куда попадают старые и что с ними дальше происходит.


  1. petro_64
    20.11.2016 13:13

    Пару месяцев назад у нас в Санкт-Петербурге лично видел валающийся старый обычный светофор в канаве, судя по всему — результат замены на новый на перекрестке. До сих пор жалею что не взял :-(


  1. Nataly75
    21.11.2016 13:25

    )).У моей малой (8 лет) в школе ведут урок ПДД. Захотела что бы я сделал «светофорик». Причём, уцепилась серьёзно — отмахнуться не получилось. Делали вдвоём, из подручных материалов — фанерка, бумага, ПВА)). В результате получился полноценный игрушечный вариант (и даже с таймерами обратного отчёта времени). Ну и море восторга как у неё, так и у детей! Да и сама хотя бы слегка прикоснулась к программированию — вместе составляли «алгоритм» и дажее набирали исходный текст.)))


    1. tonny_bennet
      21.11.2016 13:40

      Молодцы :). Думается ребёнок был вовлечён в процесс очень серьёзно. Есть фото и какое-нибудь описание проекта? Поделитесь пожалуйста.

      Учась в школе мы оформляли кабинет для уроков по ПДД для младших классов: таблички, дорожные знаки и картинки с основами безопасного движения в городе. Один из педагогов сказала, что было бы неплохо сделать светофор. В её мыслях просто коробка и три сигнала: красный, жёлтый, зелёный, переключаемые тумблерами. Когда рассказал о таком светофоре отцу (теле мастеру с инженерным образованием в машиностроении), у него сразу появилась поправка на то, что сигналов не три, а гораздо больше (красный и жёлтый, зелёный, зелёный мигающий и т.д.) и что просто тумблерами не обойтись. В его голове родилась мысль о переключателе в виде мало оборотистого двигателя, диском из гетинакса с прорезанными дорожками и плавкой контактной группой.

      Делать такой светофор мы не решились :).


  1. Nataly75
    21.11.2016 18:05

    Там описывать нечего.))
    Деревянная 60х60х10мм подствка из ОСБ. В ней кнопка и зуммер.
    По центру бумажная стойка, с двумя АА-аккумуляторами внутри.
    Сверху 40х55 прямоугольный собственно светофор, по 3 светодиода с каждой стороны.
    На и с двух сторон мелкие 2-разрядные семисегментыне индикаторы — больше не нашлось.
    Внутри ардуино-подобный контроллер. Загрузка ПО через верхнюю крышку.))
    Вроде мелочь, а возни много. Но чего не сделаешь ради дитяти.))