
Andrew
14.10.2017
12:46:39
я работаю

Andy
14.10.2017
12:47:16
Насчёт большого количества параметров не понял. Суйте в paiload хоть картинки

Vlad
14.10.2017
12:47:17
Например, можно передать один бит, который показывает, что данные с прошлого раза не менялись

Google

Andrew
14.10.2017
12:47:55
передать один бит — это сильно

Vlad
14.10.2017
12:48:40
Если у меня 200-500 параметров, то биты складываются в байты

Andy
14.10.2017
12:48:55

Andrew
14.10.2017
12:49:18
ну и да, что такое «прошлый раз?»

Vlad
14.10.2017
12:49:46
В предыдущем блоке данных

Andrew
14.10.2017
12:51:50
MQTT не специфиицирует формат передаваемых данных
передавай свои битмаски, в чем проблема

MrSmeet
14.10.2017
12:52:09
Кто работает под clion?

Andrew
14.10.2017
12:52:26
чувак
Я работаю
я работаю

Andy
14.10.2017
12:52:43

Vlad
14.10.2017
12:53:24
Чем тогда его преимущество перед TCP? Там я и передаю что мне нужно

Google

Andrew
14.10.2017
12:55:09
в том, что протокол реализует Pub/Sub, контролирует фрейминг, соединение и QoS

Andy
14.10.2017
12:55:23

Vlad
14.10.2017
12:57:19

Andrew
14.10.2017
12:57:51
поверх tcp

Andy
14.10.2017
12:59:17

Vlad
14.10.2017
13:00:20
Ну и еще вопрос, часто ли вы встречали случай с несколькими подписчиками? И правильно ли я понял, чо в случае с несколькми подписчиками устройство передает данные всем подписчикам. особенно это будет удобно при медленной связи

Andy
14.10.2017
13:05:10

Vlad
14.10.2017
13:05:28
QoS для IOT надо делать на стороне оператора сети, а не протокола.

Andrew
14.10.2017
13:05:44
короче, основная тема mqtt в том, что ты подписываешься, а потом у тебя дергается callback когда данные приходят. Ну и на другой стороне ты просто отправляешь данные и они доходят всем заинтересованным.
+ есть брокер, который умеет роутить сообщения

Vlad
14.10.2017
13:07:41
это и делается на стороне оператора

Andrew
14.10.2017
13:10:24
да с чего бы
вот у тебя девайс, у него очередь на отправку, у него дернулись две публикации, какой пакет ему первым в очередь ставить?

Vlad
14.10.2017
13:13:24
Обе вместе. В одной публикации. Т.е. накладные расходы будут больше данных

Andrew
14.10.2017
13:16:31
ну окей. В очереди висит 10 сообщений, отправляются примерно раз в секунду. Появилось еще одно сообщение с большим приоритетом. Их тоже все вместе отправлять?
«оба вместе» приоретизация так не работает
и о каких накладных расходах ты все время говоришь

Google

Andy
14.10.2017
13:33:10
Или все-таки TCP/IP?
Да, ты прав. Че-то меня переклинило. Но mqtt все равно лучше для маааленьких букашек

Andrew
14.10.2017
13:35:01
было бы еще в MQTT еще RPC
я понимаю, что это Telemetry Transport

Vlad
14.10.2017
13:50:54
Короче, что сделаи мы. Вначале предается словарь. В неим иут названия полей базы, единицы измерения, мин, макс, смещение, масштаб, комментарий итд. Далее идут блоки. Блок не беольше фиксированного размера. В блоке несколько фреймов. Базовый фрейм содержит все поля, данные по кторым имеются. Делта-фрейм содержит только поля, которые поменялись с предидущего фрейма. В начале фрейма битовая маска с признаком налсчия полей. Дальше идут сами данные.
Все это заливается на сервер. На сервере есть возможность смотреть графики, делать экспорт в CSV итд.

Andrew
14.10.2017
13:52:19
главное, не забывать цепь смазывать периодически
вы реально этими битовыми масками-то сколько сэкономили?

Vlad
14.10.2017
13:54:46
Раза 4 минимум.

Andrew
14.10.2017
13:55:56
я так понимаю, большая чать полей — это 1-4 байта

Vlad
14.10.2017
13:56:29
Где-то так. До 8

Andrew
14.10.2017
13:56:58
а сколько типов полей?

Vlad
14.10.2017
13:58:33
Фиг знает.. Штук 30-50

Andrew
14.10.2017
13:59:25
и сколько данных за раз передается?
всмысле сколько типично полей обновляется за квант передачи

Vlad
14.10.2017
14:02:09
Зависит поведения системы. В покое может почти ничего не меняться (10%), в динамике процентов 50%.

Andrew
14.10.2017
14:03:06
а как вообще параметры группируются? Есть какой-то таймер, который смотрит, что поменялось и отправляет пачку?

Vlad
14.10.2017
14:04:33
Просто раз в секунду или реже. Параметры могут приходить, например раз в 10 мс. Но отправляем реже.

Andrew
14.10.2017
14:07:29
ну то есть у вас раз в секунду отправляются около 20-и параметров в среднем по 4 байта, т.е. около 80 байт.
Если бы вы запаковали это во что-нибудь стандартное типа протобуфера или msgpack, то получилось бы порядка 200 байт. Точно ради экономии 100 байт стоило писать велосипед?

Vlad
14.10.2017
14:12:53
Протобуф не подходит. Это хорошо, если у вас все клиенты используют одинаковый формат. У нас есть возможность добавлять поля не меняя ПО на другом конце

Andrew
14.10.2017
14:13:15
окей, msgpack для вас идеальный вариант

Google

Andrew
14.10.2017
14:13:29
как раз для динамических данных

Vlad
14.10.2017
14:19:20
Получится сложнее и медленнее.

Andrew
14.10.2017
14:21:16
все ясно

Vlad
14.10.2017
14:23:12
Объясняю. Проблема 1. Надо передавать не только данные но их отсутвие.

Andrew
14.10.2017
14:24:16
у вас соединение висит, запили keepalive какой-нибудь и будет уверенность, что данных нет

Vlad
14.10.2017
14:24:37
Надо уметь быстро извлекать конкретное поле из фрейма. В случае msgpack надо будет распарсить все даныне с начала фрейма. У меня можно на основе битовой маски

Admin
ERROR: S client not available

Andrew
14.10.2017
14:25:20
так а что в битовой маске лежит, как из нее достать смещение поля?

Vlad
14.10.2017
14:26:07
Это другое. Вот есть у меня температура ОЖ, количество бензина и заряд батарейки. В каждую секнду может поменяться любой парметр. Но меняются они редко. Поэтому, если не менялись, то и не предаются.

Andrew
14.10.2017
14:26:21
да, это понятно

Vlad
14.10.2017
14:26:58
Для этого и битовая маска. В ней для отсутвующих полей ставится ноль.

Andrew
14.10.2017
14:27:18
и это тоже понятно
но как из флага в битмаске получить позицию параметра в посылке?

Vlad
14.10.2017
14:27:43
В случае msgpack все равно придется передавать признак.

Andrew
14.10.2017
14:28:06
в msgpack это будет map и каждому параметру свой ключ соответствует

Vlad
14.10.2017
14:28:14
Есть массив размеров полей. Придется в цикле просумировать.

Andrew
14.10.2017
14:30:05
я согласен, что msgpack линейно парсится, но там парсинг не сильно дольще будет, чем расчет смещения циклом по массиву размеров полей
ну и да, парсится-то это все на сервере

Vlad
14.10.2017
14:46:25
Серверу тоже тяжело

Andrew
14.10.2017
14:48:32
у вас миллион пользователей?

Google

Petr
14.10.2017
14:49:07
вангую что это шина данных между мозгами автомобиля

Vlad
14.10.2017
14:54:25
Например, пользователь может попросить построить график по параметру за неделю. Надо будет распарсить 500 000 записей

Andrew
14.10.2017
14:55:13
но они же уже были переданы на сервер и лежат в бд, при чем тут протокол?

Vlad
14.10.2017
15:03:40
В бд раскладывать не хочется. Это ещё тормознее
Либо во что-то колоночное

Andrew
14.10.2017
15:03:58
и где у вас данные в итоге лежат?

Vlad
14.10.2017
15:08:44
Сейчас в виде отдельных файлов. И сервак который их отдает. Агрегаты в базе

Andrew
14.10.2017
15:10:34
у меня всё…

Vlad
14.10.2017
15:11:07
Будем переделывать. Набираем разработчика

Andrew
14.10.2017
15:11:41
https://habrahabr.ru/company/oleg-bunin/blog/329062/

Vlad
14.10.2017
15:15:40
Я в курсе. Но есть и минусы этих подходов.


Cate
14.10.2017
17:10:07
Друзья. Тут кто-то хотел много интересных докладов на встрече и все такое.
Я что-то не наблюдаю желающих докладики докладывать.
Друзья, готова программа докладов на встречу в рамках ITGM #11:
28 октября, Петербург.
12:00 - 12:45
Кирилл Тихонов (Navico) - "Вычисления на этапе компиляции для микроконтроллерного кода."
Кирилл покажет как можно было раньше и можно теперь переносить часть дорогостоящих вычислений из микроконтроллера на персональный компьютер на этапе компиляции.
45 минут
13:00 - 13:45
Павел Курочкин (GenRnD.ru) - "Рассказ про новинки с Embedded Linux Conference Europe 2017 "
Павел поделится впечатлениями от выставки Embedded Linux Conference Europe 2017, расскажет о новинках и тенденциях в разработках встраиваемых систем.
45 минут
15:00 - 15:45
Строков Андрей (2600) - "Избавиться от проводов за 60 минут"
Мастер-класс с антеннами, кабелями и нескучными картинками, чтобы почувствовать запах эфира, разобраться, почему большая антенна — не всегда хорошо, а маленький импеданс — не всегда непонятно. Как разводить платы, чтобы запеленговать самолет и как принять вайфай из соседнего города.
45 минут
16:00 - 16:45
Круглый стол - "Тендеции развития IoT"
45 минут
Полная программа и регистрация: http://embedded.group/


Valentin
14.10.2017
19:59:51
Где вас можно посмотреть в онлайне?


пикотранзистор
14.10.2017
20:01:09
Научно-технический центр “Протей”, Санкт-Петербург, инженер-программист C++, зарплата от 90к на руки
Ищем инженера-программиста в отдел, занимающийся программной поддержкой железок собственной разработки (http://protei-st.ru/products/mks/):
реализация высокоуровневого API, системных утилит, драйверов. Область деятельности: телефония традиционная, нетрадиционная и VoIP.
Минимальные навыки:
- C++ (в т.ч. C++11) и C, системы контроля версий (работаем с svn, mercurial и git)
- понимание сетевой модели OSI и умение работать с сокетами через POSIX API
- эксперт в администрировании локалхоста
Будет плюсом:
- python
- опыт написания юнит-тестов
- опыт работы с микроконтроллерами/DSP
- знания в области цифровой обработки сигналов
- опыт работы с alsalib
Условия:
- команда 3-4 человека
- белая зарплата по ТК РФ с регулярным пересмотром
- ДМС, полностью оплачиваемый больничный
- гибкий график
О компании:
- разработка и производство аппаратно-программных телекоммуникационных решений (x86, arm, fpga)
- 250+ сотрудников, 15 лет на рынке
- средний возраст сотрудников компании - 28 лет
- офис в 10 минутах от метро «Выборгская»
- у большинства разработчиков в компании Linux на десктопе (в команде - у всех), да и разрабатываем под Linux
Резюме слать сюда: physical_ci@protei.ru. Могу ответить на любые вопросы и в личку (@picokun) или даже тут (я рядовой программист в отделе).
P.S. В отделе с секретами не работаем, форм допуска ни у кого нет, так что можно свободно выезжать заграницу :)


kiltum
14.10.2017
21:25:26
Но что такое «нетрадиционная телефония»?