Здравствуйте уважаемые программисты! Обращаюсь к Вам за советом с целью решения поставленной мною задачи. Сразу хочу Вас поставить в известность о своих знаниях касаемо PHP - начальные, ибо я не тревожит Вас и не создавал бы эту тему. Цель состоит в следующем: Разработать алгоритм обработки информации с контроллеров(клиентов) на сервере, с последующей записью этой информации в БД (MYSQL). Обмен данными между клиентом и сервером реализован посредством протокола web-socket. Для общего понимания расскажу как все устроено: Существует беспроводная ZigBee сеть, которая содержит контроллер-координатор, который посредством данной беспроводной сети, получает от ведомых контроллеров различную статистику некоторых параметров. После сбора статистики, контроллер-координатор отправляет данную информацию на сервер посредством протокола GPRS. Передаваемая информация представляет собой структурированный набор данных в виде фрейма (F1 FF 06 13 и т.д.). Далле я выполняю парсер данных и записываю ее в бд. Вопрос: Как реализовать работу с контроллером(клиентом) в рамках сессии? Т.е. например, существует 10 таких контроллеров, и все они подключились к серверу, как мне обрабатывать информацию от каждого из них в рамках активного соединения? Необходимо реализовать работу таким образом, чтобы сервер понимал, что при подключении клиента, все последующие сообщения статистики ведомых контроллеров относились только к нему. Возможно мой вопрос не корректен, но я по необходимости предоставлю схему работы для Вас, так сказать чтобы все описанное выше, было предметным. Сейчас я реализовал работу с одним контроллером, но мне не удаётся реализовать работу с двумя, так как серверу абсолютно все равно, кто шлёт информацию. Начинается путаница и несоответствие данных. Прошу Вас дать рекомендации. У меня есть соображения на счет того, что ответ на мой вопрос кроется непосредственно в методе реализации сокет сервера. Утром скину листинг и схему.
@Вадим Круговой По мимо данных контроллер должен так же передавать свои идентификатор. Когда контроллер будешь прошивать, задай им каждому номера. Эти номера так же вбей в базу в отдельную таблицу, с описанием контроллера.
Контроллер-координатор, осуществляющий отправку данных на сервер имеет уникальный номер IMEI, который служит идентификатором. Есть таблица "справочник контроллеров координаторов" и таблица "журнал данных" При первом подключении к серверу, уникальные данные о координаторе записываются в справочник, а информация с динамическими параметрами, например такими как: напряжение питания, ток потребления и т.д., записывается в таблицу "журнал данных", при этом каждая новая запись в журнале, соответствует ключевой записи (т.е. непосредственно относящейся к этому контроллеру). С контроллером координатором - проблем нет! Но вот как получать данные от остальных контроллеров "ведомых", с которыми он состоит в беспроводной сети, при этом сервер должен понимать, что все входящие данные относятся к модулю-координатору. Представьте 10 таких соединений. Как с ними работать в рамках сессии... --- Добавлено --- Здравствуйте. Я строил вопрос в рамках только одного направления, т.е. сбора статистики, так сказать разбил задачу на подзадачи. Естественно управление работой также должно быть реализовано. Соединение должно быть постоянным как и обмен данными между клиентом и сервером.
Ведомый контроллер отдает данные? Да отдает. Он может отдать как его зовут? Да может =) Он же понимает где напряжение питания, а где ток потребления , так же и поймет где у него просто название. Даже если у вас тупо идет так 380, 140, вася0001 Ему же можно обяснить что первая цифра это одно, следующая это другое... --- Добавлено --- --- Добавлено --- Контроллеру координатору должно быть пофиг, он просто передает данные. А вот в твоей БД уже видно к кому относятся данные Код (Text): data1 | data2 | data3 | IMEI 221 | 4 | василий001 | 12345 220 | 4 | василий002 | 12345 222 | 4 | василий003 | 12345
Здравствуйте. Я строил вопрос в рамках только одного направления, т.е. сбора статистики, так как . Естественно управление работой также должно быть реализовано. Соединение должно быть постоянным как и обмен данными между клиентом и сервером. --- Добавлено --- Как понимать что Василий001, Василий002, Василий003 относятся непостредствонно к IMEI 12345 в рамках этого же прозрачного TCP соединения!?
@Вадим Круговой почему не mac 1-6 ? Три рабочие и три в резерве? --- Добавлено --- Код (Text): data1 | data2 | data3 | IMEI 221 | 4 | mac1 | 12345 220 | 4 | mac2 | 12345 222 | 4 | mac3 | 12345 221 | 4 | mac1 | 67890 220 | 4 | mac2 | 67890 222 | 4 | mac3 | 67890 221 | 4 | mac1 | 13680 220 | 4 | mac2 | 13680 222 | 4 | mac3 | 13680
Как понимать что Василий001, Василий002, Василий003. Это ежесекундно повторяющиеся данные. --- Добавлено --- Ну вот например. Есть клиент 1 есть Клиент 2 и Клиент 3. И эти клиенты постоянно шлют данные. Данные | Клиент abc | Клиент 1 aaa | Клиент 2 bba | Клиент 1 123 | Клиент 3 333 | Клиент 3 Как понимать к какому клиенту относятся эти данные?
Я уже не знаю как вам объяснить по другому. Хоть в АСУТП 8 лет проработал. Вот у вас есть контроллер. Он собирает данные с каких то датчиков. У него там программка, где четко написано в модуле ввода вывода что приходит что уходит. И каким то образом прописаны данные которые он собирает. Вам к этим данным нужно прописать имя контроллера. Каким угодно образом. Когда контроллер координатор будет собирать данные он неведомым для себя образом заберет и имя контроллера, потому что он должен забирать все что там есть. То есть у вас помимо данных с датчика будет и имя, уникальное для каждого контроллера. Вам останется только перед записью данных со всех контроллеров умудрится записать и имя контроллера. И не записывать в таблицу так: Данные | Клиент abc | Клиент 1 aaa | Клиент 2 bba | Клиент 1 123 | Клиент 3 333 | Клиент 3 а записывать так Код (Text): температура | давление| напряжение| ток| сопротивление| имя контроллера| клиент a | b | c | d | e | василий | клиент 1 Более того я бы вообще абстрагировался от всех контроллеров. А вас есть датчики, у всех датчиков есть позиция где они стоят. Поэтому в базу надо писать не клиент1,2,3. А конкретно позицию датчика. И таблица должна выглядеть так: Название датчика | Параметр датчика ПЕ0213 | 234 РЕ2334 | 4
Вместо названия датчика, там должна быть позиция. Всякие датчики и контроллеры могут выходить из строя, не надо к ним жестко привязываться. --- Добавлено --- @Вадим Круговой и для наглядности:
Ну вот например. Есть клиент 1 есть Клиент 2 и Клиент 3. И эти клиенты постоянно шлют данные. Данные | Клиент abc | Клиент 1 aaa | Клиент 2 bb | Клиент 1 abc | Клиент 3 abc | Клиент 3 Благодарю Вас за уделенное мне время. Я уловил смысл предложенной Вами схемы работы.
Если контроллер или датчик выйдет из строя вам будет проще. --- Добавлено --- @Вадим Круговой вас один фиг в будущем попросят вытягивать данные например за прошлый год. А если у вас за этот промежуток сгорел 1 контроллер и 10 датчиков вы эти данные никак не вытянете. А так у вас есть четкая позиция. И она никогда не изменится.