Сразу оговорюсь, что мой опыт "программирования" под *nix-системы ограничивается написанием скриптов на bash. Поэтому обращаюсь к спецам за помощью в определении направления: какую документацию читать, по каким языкам, механизмам и т.д. Какой путь выбрать.
Задача следующая. Имеется офисная АТС, передающая лог звонков по COM-порту, и сервер на FreeBSD 8.0. Нужно решить две задачи:
1. Сервер должен принимать лог от АТС и расфасовывать его в базу данных MySQL (оная уже работает на сервере)
2. Сервер должен мгновенно отправлять информацию о поступившем звонке на рабочую станцию Windows по сети (чтобы секретарша видела кто звонит на экране ещё до поднятия трубки)
С первой задачей наверняка справится ATSlog. Но как написать программу для второй задачи, которая будет перехватывать лог от станции, не мешая работе ATSlog? Или придётся писать программу для обеих задач?
Теперь подробно о второй задаче. Насколько я понимаю, нужно будет написать приложение под Windows, которое будет подключаться к демону FreeBSD по сети на определённый порт и реагировать на получаемые данные (искать клиента в базе по номеру звонящего и отображать информацию на экране большими буквами). Значит, нужно написать сетевой демон, который слушает определённый порт и обрабатывает данные получаемые по COM-порту в реальном времени. Какой язык программирования лучше использовать для этой задачи?
>[оверквотинг удален]
> С первой задачей наверняка справится ATSlog. Но как написать программу для второй
> задачи, которая будет перехватывать лог от станции, не мешая работе ATSlog?
> Или придётся писать программу для обеих задач?
> Теперь подробно о второй задаче. Насколько я понимаю, нужно будет написать приложение
> под Windows, которое будет подключаться к демону FreeBSD по сети на
> определённый порт и реагировать на получаемые данные (искать клиента в базе
> по номеру звонящего и отображать информацию на экране большими буквами). Значит,
> нужно написать сетевой демон, который слушает определённый порт и обрабатывает данные
> получаемые по COM-порту в реальном времени. Какой язык программирования лучше использовать
> для этой задачи?Язык программирования фактически любой, но на вашем месте я бы подумал на предмет web-морды/приложения, платформонезависимо и ненадо изобретать сетевых демонов.
Незнаю как в мускуле, а в postgresql можно по триггеру например запустить стороннее приложение.
Вроде по описанию
https://ru.wikipedia.org/wiki/Socket.IO
может вам помочь
Не, web-морду делать не хочу, ибо система должна работать как часы: браузер завис/закрылся, секретарша сидит в соц. сети, смотрит фотки на полный экран - пофигу, окно должно появиться как штык! Так что будет клиент-серверная система: сервер на freebsd и клиент на windows.
А что если я просто напишу скрипт на bash? Например:while read -r line < /dev/cuau1; do
# отправляем $line в качестве аргумента обработчику
doneИ обработчик тоже на bash, который использует команду "nc", чтобы передать информацию клиенту по TCP или UDP протоколу.
Будет ли такой вариант надёжно работать? Не будет ли пропускать символы/строки, получаемые по com-порту?
> Задача следующая. Имеется офисная АТС, передающая лог звонков по COM-порту, и сервер
> 2. Сервер должен мгновенно отправлять информацию о поступившем звонке на рабочую станциюа разве логи звонков пишутся не по факту их, звонков, ОКОНЧАНИЯ?
>> Задача следующая. Имеется офисная АТС, передающая лог звонков по COM-порту, и сервер
>> 2. Сервер должен мгновенно отправлять информацию о поступившем звонке на рабочую станцию
> а разве логи звонков пишутся не по факту их, звонков, ОКОНЧАНИЯ?Спецы по АТС говорят, что в нормальных АТС поведение настраивалось, по дефолту - по факту окончания, при перенастройке - каждый "чих" это событие ...
Другое дело, что в COM будет гора всего насвете лететь, и нужен анализ что именно нам АТС сказала и нужно ли нам это обрабатывать.
Моя АТС KX-TDA100 настроена таким образом, что выдаёт информацию о поступлении вызова в момент его поступления мгновенно.
Ахтунг! Не работает второй com-порт на сервере! Не могу понять, почему.
Подключаю девайс к первому порту (что на задней панели), ввожу команду:
cu -l /dev/cuau0 -s19200
получаю читабельные данные.
Подключаю ко второму порту (что выведен на слот корпуса через переходник), ввожу команду:
cu -l /dev/cuau1 -s19200
не получаю ничего.
Переходник проверял на другой материнке - работает.
Материнка сервера X7SBA, в биосе "Serial Port B" включён, выставлен режим "Normal". Куда копать?
Оказывается, существуют два вида распиновки внутреннего разъема COM-порта на материнках! В понедельник проверю.
> Оказывается, существуют два вида распиновки внутреннего разъема COM-порта на материнках!
> В понедельник проверю.скачай мануал по маме - там пины разъемов подписаны ))
>> Оказывается, существуют два вида распиновки внутреннего разъема COM-порта на материнках!
>> В понедельник проверю.
> скачай мануал по маме - там пины разъемов подписаны ))Нету в мануале распиновки. Придётся прозванивать тестером.
>>> Оказывается, существуют два вида распиновки внутреннего разъема COM-порта на материнках!
>>> В понедельник проверю.
>> скачай мануал по маме - там пины разъемов подписаны ))
> Нету в мануале распиновки. Придётся прозванивать тестером.модель мамы?!
> Нету в мануале распиновки. Придётся прозванивать тестером.oCTbIHb
gonoJHuTeJbHbIe COM-nopTbI BuguMo npocTo BbIKJ@4eHbI
nocMoTpu B BIOS u B MaHyaJe - HaMaMe MoryT 6bITb nepeMbI4Ku
>> Нету в мануале распиновки. Придётся прозванивать тестером.
> oCTbIHb
> gonoJHuTeJbHbIe COM-nopTbI BuguMo npocTo BbIKJ@4eHbI
> nocMoTpu B BIOS u B MaHyaJe - HaMaMe MoryT 6bITb nepeMbI4KuВ биосе проверил - порт включён. На маме по ком-порту не вижу никаких перемычек. В понедельник разберусь с распиновкой.
>>> Нету в мануале распиновки. Придётся прозванивать тестером.
>> oCTbIHb
>> gonoJHuTeJbHbIe COM-nopTbI BuguMo npocTo BbIKJ@4eHbI
>> nocMoTpu B BIOS u B MaHyaJe - HaMaMe MoryT 6bITb nepeMbI4Ku
> В биосе проверил - порт включён. На маме по ком-порту не вижу
> никаких перемычек. В понедельник разберусь с распиновкой.Таки да, распиновка была не той. Перепаял выкидыш - всё заработало!
таки да, начала за mysql, закончили про pinout.
как в том анекдоте "Судья достал из коробки апельсин и сказал задумчиво: “КОСОЙ, БЛИН, ОТДАЙ
БРАТЬЯМ КОРОВУ!”"
> Какой язык программирования лучше использовать для этой задачи?Взгляните на язык Python.
Лаконичен. Довольно прост для обучения. Есть на всех платформах, что легко позволяет писать переносимые приложения. Много дополнительных модулей для чего угодно - serial comm., сетевые приложения, базы данных, http, xml, rpc, json и т.д.
В базовом пакете для Винды есть модуль tkinter - для простых графических приложений на основе tcl/tk.
Проследил за работой простого скрипта на bash. Вроде всё работает, строки не пропускает. Если всё же будут проблемы, попробую Python. Спасибо за ответы!