Подписка в MQTT
- Войдите на сайт для отправки комментариев
Пт, 23/03/2018 - 16:11
Добрый день!
прошу помощи в написании кода.
Оговорюсь сразу, я не програмист, поэтому если можно сильно не пинайте.
Пытаюсь сделать счетчик импульсов электроучета 3200 импульсов = 1 квт с отправкой данных на сервер MQTT.
Возникла проблема, при перезагрузке микроконтроллера отсчет начнется опять с ноля.
У меня возникла такая идея: если при загрузке микроконтроллера подписатся на топик в MQTT и получить с него последние данные чтобы начать отсчет с этих данных. В цикле у меня получается получить топик по подписке, но контроллер сначала отправляет а потом принимает данные соответственно получаем по подписке ноль.
Подскажите пожалуйста, есть ли возможность получить топик до начала основного цикла в сетапе или в самом начале цикла один раз? И как это сделать на практике поскольку у меня нехватает знаний.
Буду очень признателен за образец куска кода который это может сделать.
Serega66, вот пример темы, когда топикстартер не в курсе темы самого вопроса. MQTT — упрощённый сетевой протокол разумеется в нем нельзя подписаться, потому что это свод правил и все. Так что объяснения будут точно не по теме. Ардуина перезапускаемая это клиент, который сетью подключен к брокеру(серверу). И разумеется при перезапуске Ардуина должна спросить у сервера, а что там с моими данными и получить эти данные. https://habrahabr.ru/company/intel/blog/304228/
Уважаемый qwone, это не ответ знающего человека, это обрывки общих фраз, если просто то ни о чем. Как вы пишите: "разумеется в нем нельзя подписаться, потому что это свод правил и все" а в следующей строке противоречите сами себе "Ардуина должна спросить у сервера, а что там с моими данными и получить эти данные". ХА-ХА-ХА лучше не писать если незнаешь.
Для справки 1) MQTT это вполне перспективный сетевой протокол для интернета вещей.
2) Ардуина не спрашивает а что с моими данными, а подписывается на топик и в случае обновления информации в топике брокер отправляет информацию подписчику (Ардуине)
Мой вопрос был к знающим людям, можно ли взять информацию с брокера пока она не обновилась. Может есть какая то команда которую я как начинающий незнаю. или может как то подругому можно сохранить подсчет импульсов в Ардуине. В любом случае это вопрос не к вам. Я так вижу вы не практик, а если теоретик то очень слабый, отсюда и сарказм с которым вы отвечаете людям на форуме, типа я пять лет протирал штаны в институте на програмиста и ничего немогу, а вы тут самопальщики однодневки прете в космонавты.
Неужели нет на форуме знающих людей? Если нельзя получить с брокера информацию никак кроме подписки то подскажите как можно сохранить подсчет импульсов в Ардуине при отключении питания? EEPROM не предлагать его ресурса хватит на подсчет 10 - 30 квт после чего он умрет.
Serega видимо твоей темой еще тут особо никто не озадачивался.
Тебе ответили как смогли. Епром можно использовать с плавающей адресацией, тогда его хватает оччень надолго.
А если ты сюда пришел гадить на голову уважаемым тут людям , то лес справа , и слева тоже.
Ну а ежели если непонятно , то придет Тот , о ком упоминать не принято и пошлет открытым текстом.
Непонял? Разве я неправ? вы почитайте ответ уважаемого вами человека. Если я незнаю, я не пишу, если знаю и могу помочь я помогу, если спросил то хотелось бы получить адекватный ответ, а не то что написал ваш товарищ если я неправ и здесь так не принято попросите модератора удалить мой аккаунт я не обижусь. Знать мне тут нечего делать.
Serega66, здесь форум по Ардуино, а не по MQTT. MQTT здесь оффтопик.
Если Вы специалист по MQTT, опишите подробно, что это такое и с чем его едят, тогда вероятность, что Вам помогут каким-то образом сопрячь MQTT с Ардуино заметно увеличится.
Если не цитировать википедию и не писать заумными словами, то это протокол связи по TCP/IP сети, как раз для АРДУИНО подключенного к сети например W5100 шилдом для АРДУИНО УНО или МЕГА если вы в курсе про таковые.
А зачем мне быть в курсе, это ведь не я вопросы задаю.
Это обязанность вопрошающего - вводить окружающих в курс дела.
Атмелевские процессоры в оценочных платах , ардуинами прозванных , многое умеют.
Ардуино неисчерпаемо как атом :), а с w5100 тем более.
кто то когданить находит ейное новое применение.
Если первым станешь в новом применении , и познаешь оное , поделись знанием.
и будут тебе тут респекты
Извините, я думал здесь на форуме знающие люди.
это называется чайка мэнэджмэнт , прилетел обосрал и улетел.
еще спроси тут про mesh сети и блокчейн
увы, если б знал решение, то я бы не пришел сюда с глупыми вопросами. Я только учусь и делаю на даче очумелый дом. и пока не нашел решение как сохранить показания счетчика в ардуине при отключении питания. на сервер они приходят но затираются при перезагрузке МК.
https://www.youtube.com/watch?v=TWBzFzLPXxI
Большое спасибо. Буду думать в этом направлении.
Обидно что прежде чем получишь пинок в нужном направлении приходится столько пустых ответов прочитать.
Большое спасибо. Буду думать в этом направлении.
А почему нельзя посчитать правильные данные на стороне подписчика?
Неужели нет на форуме знающих людей? Если нельзя получить с брокера информацию никак кроме подписки то подскажите как можно сохранить подсчет импульсов в Ардуине при отключении питания? EEPROM не предлагать его ресурса хватит на подсчет 10 - 30 квт после чего он умрет.
Если брокер рассылает данные подписчикам сразу после получения их от публикатора и не хранит их сам, то откуда он их возьмет при запросе от вашей ардуины в случайный момент времени - придумает что ли, поковыряв пальцем в носу?
Вместо EEPROM можно взять F-RAM, теоретически. Или в большой EEPROM производить циклическую запись по всему объему, как уже подсказали ранее.
https://www.youtube.com/watch?v=TWBzFzLPXxI
Ресурс flash меньше ресурса EEPROM, а потому советовать замену второго первым, когда ТС явно указал неприемлемость из соображений ограниченного ресурса, вряд ли оправдано.
sadman41 вы правы насчет брокера по подписке. Я какраз и интересовался, есть ли другие варианты получения данных из брокера пока он не обновился на ноль (в моем случае), чтобы не городить другие варианты сохранения данных. Но похоже SD карта будет более приемлемым вариантом у нее и ресурс больше и в случае выхода из строя и замена копеечная. Буду заказывать кардридер
Но похоже SD карта будет более приемлемым вариантом у нее и ресурс больше и в случае выхода из строя и замена копеечная. Буду заказывать кардридер
Кстати, если вам хватит 56 байт памяти, то можете поставить DS1307: 56-Byte, Battery-Backed, General-Purpose RAM with Unlimited Writes
Как часы они, конечно, гумно, но как память...
Спасибо за совет я нашел другой вариант решения своей проблемы. у меня на сервере очумелого дома кроме MQTT брокера работает MajorDomo это сервер умного дома? он на PHP и mySQL, так вот он тоже подписчик у брокера и там сохраняются показания счетчика и пока брокер не получил новых (нулевых) показаний от перезагрузившейся ардуинки надо их запросить у сервера, есть возможность HTTP запроса, в браузере я вытянул нужные показания. Но поскольку я начинающий в програмировании, то столкнулся опять с проблемой как отправить с ардуины запрос и получить данные на ардуину. В интернете полно информации как отправить с ардуины на сервер, а вот в обратную сторону пока не нашел. Учу мат часть, с теорией вроде полегче, а вот с практикой тяжко. Не хочется наваять код стиральной машины и просить помощи поправить ошибки.
там сохраняются показания счетчика
Так в чем проблема к сохраненым показаниям прибавлять новые показания от ардуины?
Правильно. для меня проблема вытащить их в ардуинку, я незнаю как сделать корректный запрос на сервер
в браузере это выглядит http://(IP-сервера)/api/data/Counter01.value
Правильно. для меня проблема вытащить их в ардуинку, я незнаю как сделать корректный запрос на сервер
Вы меня не поняли, зачем их в ардуину тащить, если подсчитывать значения можно на стороне MajorDomo.
То есть, если старое значение в MajorDomo > чем пришло от ардуины, то значит ардуина перезагрузилась и начала прислать с нуля. И к эти новым значениям надо просто добавлять старое.
В PHP я вобще полный ноль пользуюсь только типовыми настройками из интерфейса