Разбираясь с потерей пакетов udp случайно нашел, что установить флаг SO_BROADCAST для udp сокета нельзя. Сделать Multicast можно, а конкретно флаги поставить нельзя, поскольку в стандартных библиотеках нет получения handle из объекта.
Так библиотеки для того и нужны, чтобы упростить программирование ценой уменьшения функциональности.
Если такой подход не устраивает, не пользуйтесь библиотеками.
На то оно и широкополосное вещание. Если все кто слушает радио, будут отвечать ведущему передачи, что будет творится в студии? Причем здесь библиотека. Хочешь обратку, сам организовывай, в этом вообще нет проблем. В 99% ваша хотелка ни кому не нужна.
Библиотеки разные бывают. Вот на DS3231 много разных. Есть с минимумом - только время считать, Есть полностью все возможности покрывают. Официальных библиотек минимум. Всё остальное творчество энтузиастов. А с энтузиастов какой спрос? Вот было бы тогда ВТБ бы платно - было бы к чему претензии предъявлять.
Так разговор идёт про библиотеки, которые в пакете с esp32. Т.е. получается энтузазисты так пишут, что адабрямс этого?
Последнее время прихожу к выводу, что мелкие поделки умных программистов - энтузазисты не воспринимают, и мало того сами тащат это в продакшн проекты. Системный подход и качество проверки - на уровне школьников, т.е 0. Зачастую новые версии библиотек могут легко убить проект, который собран для старой версии без использования люков. Просто тип переменной может поменяться и все.
Поскольку я веду аналитику по устройствам умного дома, то данные выводы сильно коррелируют с обновлениями больших производителей устройств. Это очень видно как раз на модулях esp. Например - управление телевизорами по сети нормально работает только в HA на python, поскольку только там допили многое, но не все.
@Diskless
вы не могли бы потратить 5 минут и поправить жаргон и опечатки в своем тексте? Ведь вопрос даже не в том, что читать противно - я не граммар-наци, а в том что вообще непонятно, о чем вы ведете речь.
Ну и уважение к другим участникам стоит проявить…
Поясняю на примере. Озадачился я управлением телевизорами по сети. Задача - полное управление с обратной связью, если телевизор имеет любой тип соединения с домашней сетью.
Изучаем рынок устройств. Конечных устройств для управления через сеть нет. Есть интеграция через производителя, но это не нужно, поскольку производитель может “махнуть хвостом”.
Начал изучать API телевизоров. Понял что есть старый “стандарт” SOAP, который есть практически на всех телевизорах, но есть нюансы - использование websocket и websocket через ssl.
Задача N1 - детектирование имеющихся телевизоров на основе upnp. Дело хорошее и переходим к модулям. Как поймать пакет от телевизора, чтобы убить 2-х зайцев - детектировать и в случае смены ip в локальной сети заново получить его для управления?
Изучаем SSDP пример. Он есть для esp8266, а для esp32 его нет. А разработчик библиотек для esp32 и esp8266 один и тот же - Hristo Gochkov. И почему то нет примера для esp32, а для esp8266 есть. ESP9266SSDP. В обоих случаях должен использоваться Multicast адрес, но на esp8266 все работает и без него, а на esp32 нет. Опять же - из объекта нельзя вытащить socket, чтобы поставить параметр, хотя внутри объекта функция setsockopt используется, но только для esp32, а у esp8266 нет. Получается, что библиотеки, которые используются из lwip мы юзаем по полной, а надстройкой мы режем по самое не балуйся. Получается, что библиотеки надстройки мы поправить можем, но не факт тогда, что при передаче скетча - он заработает. Либо тащить все в проект, но тогда пропадает смысл надстроек.
Там еще дополнительная грабля есть: аргумент для setsockopt должен быть int
а во вторых, держитесь за стулья - структура sockaddr, в которой ты указал свой броадкаст адрес (не надейся что 255.255.255.255 прокатит - надо броадкаст адрес именно сети, т.е. типа 192.168.4.255), должна еще и в памяти сидеть ровно - 4 байта alignment.
По крайней мере раньше такая фишка была :)))).
Ну и допиши свой функционал к ним в либу, пройдись diff’ом и отошли им патч. Я так делаю иногда, обычно принимают.
Вот и я про то. Но если человек взялся писать системные вещи, то должен понимать, что не он определяет режим работы сокета, а тот, кто пишет и пользуется. Иначе все это “системное ПО” - пустая трата времени и засирание мозгов. Может это у него так проявляется его ЭГО?
Ну, принято считать, что Ардуино это детский сад, отсюда, соответственно и качество кода, написанного коммьюнити.
Я вот смотрю на ESP32 Arduino Core и морщусь. Ну фигово же написано. А поверх этого - еще и фигово написанные библиотеки. Чудо, что оно вообще работает :))
Странные претензии. Он вам ничего не должен. На сколько хватило квалификации - так и написал. Знаете и умеете написать лучше - напишите и выложите свою либу или хотя бы выкатите PR к этой.
Вам уже выше написали - в ардуино экосистеме практически нет “стандартного” или “профессионального” софта. Все библиотеки в той или иной степени написаны самими пользователями, большинство из которых - любители.
Причем не только библиотеки, а и почти все пакеты поддержки разных плат - совместное творчество кучи энтузиастов самой разной квалификации.
Вся тема изначально мимо. Баги в библиотеках самое обычное дело, я их нахожу почти в каждой либе. О них не на форум писать надо, а автору кода на ГитХабе.
Судя по теме, опыт использования Гитхаб у вас не особо большой. Вы не привыкли открывать issues в случае багов и никогда не готовили PullRequest-ов для внесения правок в чужой код, верно?
Это принесло бы куда больше пользы, чем пустое резонерство на форуме.
Тут не согласен.
Решения проблем, связанных с ошибками в ардуино библиотеках - очень часто находятся именно на гите, хотя бы просто потому, что все ардуино библиотеки лежат именно там. И аудитория Гита не в пример шире, чем охват любого из форумов