Подписка в MQTT

Serega66
Offline
Зарегистрирован: 23.03.2018
Добрый день!
прошу помощи в написании кода.
Оговорюсь сразу, я не програмист, поэтому если можно сильно не пинайте.
      Пытаюсь сделать счетчик импульсов электроучета 3200 импульсов = 1 квт с отправкой данных на сервер MQTT.
Возникла проблема, при перезагрузке микроконтроллера отсчет начнется опять с ноля. 
У меня возникла такая идея: если при загрузке микроконтроллера подписатся на топик в MQTT и получить с него последние данные чтобы начать отсчет с этих данных. В цикле у меня получается получить топик по подписке, но контроллер сначала отправляет а потом принимает данные соответственно  получаем по подписке ноль.
     Подскажите пожалуйста, есть ли возможность получить топик до начала основного цикла в сетапе или в самом начале цикла один раз? И как это сделать на практике поскольку у меня нехватает знаний. 
Буду очень признателен за образец куска кода который это может сделать.
qwone
qwone аватар
Offline
Зарегистрирован: 03.07.2016

Serega66, вот пример темы, когда топикстартер не в курсе темы самого вопроса. MQTT — упрощённый сетевой протокол разумеется в нем нельзя подписаться, потому что это свод правил и все. Так что объяснения будут точно не по теме. Ардуина перезапускаемая это клиент, который сетью подключен к брокеру(серверу). И разумеется при перезапуске Ардуина должна спросить у сервера, а что там с моими данными и получить эти данные. https://habrahabr.ru/company/intel/blog/304228/

Serega66
Offline
Зарегистрирован: 23.03.2018

Уважаемый qwone, это не ответ знающего человека, это обрывки общих фраз, если просто то ни о чем. Как вы пишите: "разумеется в нем нельзя подписаться, потому что это свод правил и все" а в следующей строке противоречите сами себе "Ардуина должна спросить у сервера, а что там с моими данными и получить эти данные". ХА-ХА-ХА лучше не писать если незнаешь.

Для справки 1) MQTT это вполне перспективный сетевой протокол для интернета вещей. 

                    2) Ардуина не спрашивает а что с моими данными, а подписывается на топик и в случае обновления информации в топике брокер отправляет информацию подписчику (Ардуине)

Мой вопрос был к знающим людям, можно ли взять информацию с брокера пока она не обновилась. Может есть какая то команда которую я как начинающий незнаю. или может как то подругому можно сохранить подсчет импульсов в Ардуине. В любом случае это вопрос не к вам. Я так вижу вы не практик, а если теоретик то очень слабый, отсюда и сарказм с которым вы отвечаете людям на форуме, типа я пять лет протирал штаны в институте на програмиста и ничего немогу, а вы тут самопальщики однодневки прете в космонавты.

Serega66
Offline
Зарегистрирован: 23.03.2018

Неужели нет на форуме знающих людей? Если нельзя получить с брокера информацию никак кроме подписки то подскажите как можно сохранить подсчет импульсов в Ардуине при отключении питания? EEPROM не предлагать его ресурса хватит на подсчет 10 - 30 квт после чего он умрет. 

inspiritus
Offline
Зарегистрирован: 17.12.2012

Serega видимо твоей темой еще тут особо никто не озадачивался. 

Тебе ответили как смогли.  Епром можно использовать с плавающей адресацией, тогда его хватает оччень надолго.

А если ты сюда пришел гадить на голову уважаемым тут людям , то лес справа , и слева тоже.

Ну а ежели если непонятно , то придет Тот , о ком упоминать не принято и пошлет открытым текстом.

Serega66
Offline
Зарегистрирован: 23.03.2018

Непонял? Разве я неправ? вы почитайте ответ уважаемого вами человека. Если я незнаю, я не пишу, если знаю и могу помочь я помогу, если спросил то хотелось бы получить адекватный ответ, а не то что написал ваш товарищ если я неправ и здесь так не принято попросите модератора удалить мой аккаунт я не обижусь. Знать мне тут нечего делать.

andriano
andriano аватар
Offline
Зарегистрирован: 20.06.2015

Serega66, здесь форум по Ардуино, а не по MQTT. MQTT здесь оффтопик.

Если Вы специалист по MQTT, опишите подробно, что это такое и с чем его едят, тогда вероятность, что Вам помогут каким-то образом сопрячь MQTT с Ардуино заметно увеличится.

Serega66
Offline
Зарегистрирован: 23.03.2018

Если не цитировать википедию и не писать заумными словами, то это протокол связи по TCP/IP сети, как раз для АРДУИНО подключенного к сети например W5100 шилдом для АРДУИНО УНО или МЕГА если вы в курсе про таковые.

andriano
andriano аватар
Offline
Зарегистрирован: 20.06.2015

А зачем мне быть в курсе, это ведь не я вопросы задаю.

Это обязанность вопрошающего - вводить окружающих в курс дела.

inspiritus
Offline
Зарегистрирован: 17.12.2012

Атмелевские процессоры в оценочных платах , ардуинами прозванных , многое умеют.

Ардуино неисчерпаемо как атом :), а с w5100 тем более.

кто то когданить находит ейное новое применение. 

Если первым станешь в новом применении , и познаешь оное , поделись знанием.

и будут тебе тут респекты

 

Serega66
Offline
Зарегистрирован: 23.03.2018

Извините, я думал здесь на форуме знающие люди.

inspiritus
Offline
Зарегистрирован: 17.12.2012

 

это называется чайка мэнэджмэнт , прилетел обосрал и улетел.

еще спроси тут про mesh сети и блокчейн

Serega66
Offline
Зарегистрирован: 23.03.2018

увы, если б знал решение, то я бы не пришел сюда с глупыми вопросами. Я только учусь и делаю на даче очумелый дом. и пока не нашел решение как сохранить показания счетчика в ардуине при отключении питания. на сервер они приходят но затираются при перезагрузке МК.

qwone
qwone аватар
Offline
Зарегистрирован: 03.07.2016
Serega66
Offline
Зарегистрирован: 23.03.2018

Большое спасибо. Буду думать в этом направлении.

Обидно что прежде чем получишь пинок в нужном направлении приходится столько пустых ответов прочитать.

ven-til
Offline
Зарегистрирован: 13.02.2018

Serega66 пишет:

Большое спасибо. Буду думать в этом направлении.

А почему нельзя посчитать правильные данные на стороне подписчика?

sadman41
Offline
Зарегистрирован: 19.10.2016

Serega66 пишет:

Неужели нет на форуме знающих людей? Если нельзя получить с брокера информацию никак кроме подписки то подскажите как можно сохранить подсчет импульсов в Ардуине при отключении питания? EEPROM не предлагать его ресурса хватит на подсчет 10 - 30 квт после чего он умрет. 

Если брокер рассылает данные подписчикам сразу после получения их от публикатора и не хранит их сам, то откуда он их возьмет при запросе от вашей ардуины в случайный момент времени - придумает что ли, поковыряв пальцем в носу?

Вместо EEPROM можно взять F-RAM, теоретически. Или в большой EEPROM производить циклическую запись по всему объему, как уже подсказали ранее.

andriano
andriano аватар
Offline
Зарегистрирован: 20.06.2015

Ресурс flash меньше ресурса EEPROM, а потому советовать замену второго первым, когда ТС явно указал неприемлемость из соображений ограниченного ресурса, вряд ли оправдано.

Serega66
Offline
Зарегистрирован: 23.03.2018

sadman41 вы правы насчет брокера по подписке. Я какраз и интересовался, есть ли другие варианты получения данных из брокера пока он не обновился на ноль (в моем случае), чтобы не городить другие варианты сохранения данных. Но похоже SD карта будет более приемлемым вариантом у нее и ресурс больше и в случае выхода из строя и замена копеечная. Буду заказывать кардридер

sadman41
Offline
Зарегистрирован: 19.10.2016

Serega66 пишет:

Но похоже SD карта будет более приемлемым вариантом у нее и ресурс больше и в случае выхода из строя и замена копеечная. Буду заказывать кардридер

Кстати, если вам хватит 56 байт памяти, то можете поставить DS1307: 56-Byte, Battery-Backed, General-Purpose RAM with Unlimited Writes

Как часы они, конечно, гумно, но как память...

Serega66
Offline
Зарегистрирован: 23.03.2018

Спасибо за совет я нашел другой вариант решения своей проблемы. у меня на сервере очумелого дома кроме MQTT брокера работает MajorDomo это сервер умного дома? он на PHP и mySQL, так вот он тоже подписчик у брокера и там сохраняются показания счетчика и пока брокер не получил новых (нулевых) показаний от перезагрузившейся ардуинки надо их запросить у сервера, есть возможность HTTP запроса, в браузере я вытянул нужные показания. Но поскольку я начинающий в програмировании, то столкнулся опять с проблемой как отправить с ардуины запрос и получить данные на ардуину. В интернете полно информации как отправить с ардуины на сервер, а вот в обратную сторону пока не нашел. Учу мат часть, с теорией вроде полегче, а вот с практикой тяжко. Не хочется наваять код стиральной машины и просить помощи поправить ошибки.

ven-til
Offline
Зарегистрирован: 13.02.2018

Serega66 пишет:

там сохраняются показания счетчика

Так в чем проблема к сохраненым показаниям прибавлять новые показания от ардуины?

Serega66
Offline
Зарегистрирован: 23.03.2018

Правильно. для меня проблема вытащить их в ардуинку, я незнаю как сделать корректный запрос на сервер

Serega66
Offline
Зарегистрирован: 23.03.2018

в браузере это выглядит http://(IP-сервера)/api/data/Counter01.value

ven-til
Offline
Зарегистрирован: 13.02.2018

Serega66 пишет:

Правильно. для меня проблема вытащить их в ардуинку, я незнаю как сделать корректный запрос на сервер

Вы меня не поняли, зачем их в ардуину тащить, если подсчитывать значения можно на стороне MajorDomo.

То есть, если старое значение в MajorDomo > чем пришло от ардуины,  то значит ардуина перезагрузилась и начала прислать с нуля. И к эти новым значениям надо просто добавлять старое.

Serega66
Offline
Зарегистрирован: 23.03.2018

В PHP я вобще полный ноль пользуюсь только типовыми настройками из интерфейса