Здравствуйте, меня зовут Максим и я сотрудник IT отдела одной торговой компании. Как то раз мы с коллегами решили, что нам не хватает в отделе светофора. Мы пока не понимали зачем именно он нам нужен, но непреодолимое "хочу" одолевало нас...
И вот спустя пару минут мы уже ищем его на просторах интернета. Требования были такими: настоящий, дешевый, тёплый-ламповый, можно б/у. Нашли быстро, заказали, оплатили, дождались. Получили, распаковали, разобрали, отмыли.Собрали. Поставили лампочки. Включили все сразу. В кабинете потеплело.
Задумались куда его приспособить и как им управлять.
В тумбочке стола нашёлся Ke-USB24R — по своей сути USB-модуль с четырьмя реле, которыми можно управлять с компьютера, записывая данные в виртуальный COM-порт, плюс 18 IO линий и четыре 10-и битных АЦП. Подробности и инструкции на сайте производителя http://www.kernelchip.ru/Ke-USB24R.php
Подключил через него светофор. Получилось поморгать лампочками отдельно, используя ПО с сайта производителя.
Дальше решили, что неплохо бы прикрутить светофор к системе мониторинга zabbix, которая работает в компании. Светофор должен сигнализировать о проблемах в зависимости от важности сработавших триггеров:
- чрезвычайная и важная — красный,
- средняя и предупреждение — жёлтый,
- когда проблема решается — должен сработать зелёный сигнал и погаснуть жёлтый или красный.
Написал скрипт на PowerShell. Логика работы такова:
- На вход получает три параметра
- числовой идентификатор триггера
- статус триггера (0 — ОК, 1 — Problem)
- числовая важность триггера
- Если пришёл триггер с проблемой — добавляем его в массив, если пришёл триггер с решением проблемы — удаляем его из массива
- Исходя из того какие значения триггеров есть в массиве включается тот или иной сигнал светофора.
Массив триггеров с идентификаторами проблемных триггеров хранится в xml файле.
Я не программист. Сделал как знал и умел, вроде работает без сбоев. Если есть замечания выслушаю и постараюсь учесть в будущем.
#идентификатор триггера
$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.
А в Операциях указал "Выполнить удалённые команды на узлах в сети". Удалённый узел — это компьютер с запущенным zabbix-агентом:
powershell.exe -File C:\Users\User\Desktop\traffic_lights.ps1 {TRIGGER.ID} {TRIGGER.VALUE} {TRIGGER.NSEVERITY}
Таким образом при срабатывании какого-нибудь триггера, выполняется скрипт с нужными параметрами на удалённом компьютере, к которому подключен модуль управления светофором. Загорается или гаснет сигнал.
В итоге получился интересный и функциональный элемент интерьера, очень сильно привлекающий внимание. Приходится отвечать на уйму вопросов типа где мы его взяли и для чего он нам нужен, сколько стоит и так далее. В будущем планирую сделать устройство автономным, уйти от использования компьютера и USB-контроллера. Заменить его каким-нибудь Ethernet-Relay модулем и перенести логику работы на сервер zabbix. Доработать индикацию и повесить его вертикально.
Спасибо за внимание!
Комментарии (29)
olekl
18.11.2016 16:51А не великоват для офиса?
tonny_bennet
18.11.2016 17:00Выбор нашей ситуации был невелик — ограниченность предложения и цены. Наверное можно было поискать меньше размером или взять пешеходные модули с человечками. Но и данный форм-фактор нас в принципе устраивает.
jar_ohty
18.11.2016 17:30Еще есть светофоры-повторители, они где-то вдвое меньше, хоть и не так эффектно выглядят.
NET_KOT
18.11.2016 17:19+3Осталось поставить паровозный гудок, информирующий об окончании рабочего дня.
* * *
Живо напомнило видео про одного умельца, который поставил в квартиру блок управления лифтовыми дверями:
https://www.youtube.com/watch?v=AwppYlu_RgU
gsaw
18.11.2016 17:22Было на хабре уже «Билд-Светофор». Наверное «Еще» в заголовке намекает на это. Но там хотя бы законченное решение, красиво оформленное, а тут «элемент интерьера» на подоконнике валяется.
tonny_bennet
18.11.2016 19:13Да именно светофоры в офисах это не моя придумка: Билд-светофор в офисе, Самодельный билд-светофор в офис, Наш светофор (от Яндекса) Но захотелось иметь свой, тёплый и ламповый светофор.
Действительно, это незаконченный вариант ради того чтобы попробовать стоит продолжать или нет и сделан был на коленке из того что было. Следующая модификация, как я и писал, будет без ПК и на каком-нибудь Ethernet-подобной плате с реле, т.к. не вижу смысла ради моргания тремя лампочками задействовать отдельный компьютер.
И, простите, он не валяется, а лежит. Место куда его повесить уже нашли, но в этой аппаратной реализации делать это не будем.
Andy_Big
18.11.2016 17:44+1Приходится отвечать на уйму вопросов типа где мы его взяли
Так где вы его взяли? :)tonny_bennet
18.11.2016 19:19Нашли на популярном сайте бесплатных объявлений, за 4 500 км и несколько часовых поясов от нас. Связались с продавцом и он отправил нам его транспортной компанией. За что ему огромное спасибо. Неделя ожидания и стоимость доставки равная стоимости самого светофора. :)
Andy_Big
18.11.2016 19:33Спасибо :)
Я думал, где-то их именно продают :)tonny_bennet
18.11.2016 19:52Есть компании которые их изготавливают и продают, от миниатюрных моделей для авто-моек и парковок до полноразмерных. Стоят они дороговато и в большинстве своём светодиодные.
AlexanderG
18.11.2016 18:36+1Можно заюзать светофор типоразмера «Метро», они не очень большие:
tonny_bennet
18.11.2016 19:26Выглядит симпатично, но то с каким трудом удалось найти этот светофор, учитывая, что они достаточно распространены, наводит на мысли что подобный светофор мы бы искали целую вечность.
Legushka
18.11.2016 19:19в крумной айтишной компании всегда будет красный цвет: решаем текущие вопросы, появляются новые
tonny_bennet
18.11.2016 19:22Вообще говоря у zabbix шесть значений важности триггеров:
0 - Не классифицировано, 1 - Информация, 2 - Предупреждение, 3 - Средняя, 4 - Высокая, 5 - Чрезвычайная
Можно подстроить на свой вкус. И сигнализацию светофором сделать не по всему набору триггеров, а по какой-то части. Система очень гибкая.
ArsenAbakarov
18.11.2016 20:33Даа, я Максима знаю лично, он и не такое сможет сделать.
А по теме, круто получилось, эффектно)
NikitosZs
18.11.2016 23:25>>Нашли быстро, заказали, оплатили, дождались.
Сколько в денюжках? Спрашиваю, потому что установка светофора на перекрёстке у нас вышла, кажется, в 1.7млн.рублей, «но это не точно».tonny_bennet
19.11.2016 09:19По 300 р. за секцию, итого 900 р. за весь светофор. Но он был явного вида б/у и грязненький как внутри и снаружи.
Фото светофораNikitosZs
19.11.2016 13:30-1У нас в городе 3 светофора, на разных его концах, т.ч в связке они если и работают, то толку от этого нет. Про согласования не знаю…
lostpassword
19.11.2016 14:20Я подозреваю, сюда ещё входят мачты (столбы) — их тоже надо купить и смонтировать. А это уже несколько дней работ специалистов, плюс строительная техника.
ns3230
19.11.2016 01:05Этим летом в Мелитополе, зная где искать, точно можно было найти) Там все старые ламповые светофоры (чуть менее чем 100 % от всех в городе) на новые светодиодные поменяли, так что списанных должно быть достаточно.
tonny_bennet
19.11.2016 09:21У нас тоже повсеместно меняют светофоры на светодиодные, но мне так и не удалось выяснить куда попадают старые и что с ними дальше происходит.
petro_64
20.11.2016 13:13Пару месяцев назад у нас в Санкт-Петербурге лично видел валающийся старый обычный светофор в канаве, судя по всему — результат замены на новый на перекрестке. До сих пор жалею что не взял :-(
Nataly75
21.11.2016 13:25)).У моей малой (8 лет) в школе ведут урок ПДД. Захотела что бы я сделал «светофорик». Причём, уцепилась серьёзно — отмахнуться не получилось. Делали вдвоём, из подручных материалов — фанерка, бумага, ПВА)). В результате получился полноценный игрушечный вариант (и даже с таймерами обратного отчёта времени). Ну и море восторга как у неё, так и у детей! Да и сама хотя бы слегка прикоснулась к программированию — вместе составляли «алгоритм» и дажее набирали исходный текст.)))
tonny_bennet
21.11.2016 13:40Молодцы :). Думается ребёнок был вовлечён в процесс очень серьёзно. Есть фото и какое-нибудь описание проекта? Поделитесь пожалуйста.
Учась в школе мы оформляли кабинет для уроков по ПДД для младших классов: таблички, дорожные знаки и картинки с основами безопасного движения в городе. Один из педагогов сказала, что было бы неплохо сделать светофор. В её мыслях просто коробка и три сигнала: красный, жёлтый, зелёный, переключаемые тумблерами. Когда рассказал о таком светофоре отцу (теле мастеру с инженерным образованием в машиностроении), у него сразу появилась поправка на то, что сигналов не три, а гораздо больше (красный и жёлтый, зелёный, зелёный мигающий и т.д.) и что просто тумблерами не обойтись. В его голове родилась мысль о переключателе в виде мало оборотистого двигателя, диском из гетинакса с прорезанными дорожками и плавкой контактной группой.
Делать такой светофор мы не решились :).
Nataly75
21.11.2016 18:05Там описывать нечего.))
Деревянная 60х60х10мм подствка из ОСБ. В ней кнопка и зуммер.
По центру бумажная стойка, с двумя АА-аккумуляторами внутри.
Сверху 40х55 прямоугольный собственно светофор, по 3 светодиода с каждой стороны.
На и с двух сторон мелкие 2-разрядные семисегментыне индикаторы — больше не нашлось.
Внутри ардуино-подобный контроллер. Загрузка ПО через верхнюю крышку.))
Вроде мелочь, а возни много. Но чего не сделаешь ради дитяти.))
moropsk
Друзья, 5 баллов за интересную поделку.