Jump to content
iT4iT.CLUB

All Activity

This stream auto-updates     

  1. Yesterday
  2. Уважаемые форумчане испытываю желание нарисовать печатную плату под проект метеостанции для заказа на производстве в связи с этим хотелось бы спросить как видите это вы ? какие элементы добавить ? на данный момент понятно одно - она должна быть круглая для того чтобы поместить ее в будку стивенсона , у платы центральное отверстие под шпильку которое будет обведено полигоном для возможности использовать саму шпильку если возникнет необходимость , питание 5 вольт чтобы меньше было проблем с подбором блока питания. Жду пожеланий и уточнений .
  3. Last week
  4. Добрый день! в sensors.h указано byte logSize = 144; , т.е. как и было, больше ничего не менял в скетче, связанного с графиками. Если index.htm не влияет на перезагрузки, тогда не знаю что смотреть. попробую еще отключить ProMini с NRF. стал изменять частоту отправки на народный монитор, сбор данных с датчиков и частоту проверки шины. При установке проверки и инициализации датчиков на 10 минут, сбора данных с датчиков 1, 3, 6 минут (с уличного датчика данные передаются каждые 3 минуты) на графике народного монитора обнаружил что ошибочные(нулевые ) значения длятся 10 минут. Изменил проверку шины и инициализацию датчиков на 20 минут, ошибочные данные на графике длятся от 20минут. Ошибки появляются как на народном мониторе, так и на графиках ESPшки , причём время появления ошибки разное на всех графиках. Можно ли вообще отключать проверку шины? Может проверка не дружит с ProMini? ошибка длительностью 10мин (проверка шины и инициализация датчиков на 10 минут, сбора данных с датчиков 6 минут) ошибка длительностью 20мин (проверка шины и инициализация датчиков на 20 минут, сбора данных с датчиков 1 минута)
  5. Добрый день! Ничего не делал, перестали перезагружаться. Видимо, код адаптировался. Понаблюдаю еще.
  6. Проверьте повторно этот код, возможно, как раз в конце суток, Вы пытаетесь писать за приделы массива, что приводит к краху. Работа index.htm не может влиять на микроконтроллер т.к весь код этого файла обрабатывается на стороне браузера. Контроллер принимает участие только в ответах на запросы API. По умолчанию контроллер полностью работает в автономном режиме, без подключения WiFi, сторонних сервисов, и внешней логики. Ставим в гараж, накидываем датчики, нагрузку, двигаем ползунки в web интерфейсе и в бой. Все остальное уже последствия различной степени интеграции в пользовательскую кухню. На данном этапе существования проекта можно легко добавить практически все идеи, описываемые в этой теме.
  7. У меня тоже малина с москитом и я искренне не понимаю зачем заставлять контроллер принимать решение когда это может сделать малина. Добавляем node-red и получаем гибкую систему настроек и логики событий доступных в браузере
  8. Добрый день! Благодарю за отзывчивость! Я Вас уже, наверное, достал своими вопросами. Програмный сенсор памяти я не убирал и на одной ESP добавил график на него. Сколько не смострел, значения не выходят за диапазон 49к-52к. там где ровно - примерно 51100-51200, где пики - примерно 51700. когда происходит перезагрузка непонятно, но где-то к концу суток построения графика. Ранее пытался поднять частоту сбора данных на графики, как-то не получилось. Вроде бы вернул всё обратно. Попробую перепроверить файл index.htm, может там что-то накосячил. Раньше такого, кажется , не было
  9. А вот это оставлять так не стоит. Не пытались выяснить через какое время после старта это происходит или после какого события? Обратите внимание, что в Serial монитор периодически сбрасываются данные о свободной памяти (freeHeap), это значение не должно постоянно уменьшаться. Обычно, после выполнения всех заданий в планировщике это значение останавливается на фиксированной отметке и больше не уменьшается. Также для отслеживания памяти через web можно добавить программный сенсор. sensors.add(new knob_t(0, 81920, "1", "RAM", "Byte"), device::in, "ram", [&](){ return 81920 - ESP.getFreeHeap(); }); Это первое с чего стоит начать. Также можете отключать разные части кода и смотреть на работу в течении суток. И помните, что в ESP8266 v2.4.1 для Arduino IDE имеется утечка памяти. Я рекомендую использовать 2.4.2. В общем, не бросайте эту ситуацию. Лично я использую Zabbix, передача данных идет через MQTT. Но думаю, что стоит отталкиваться от того, на чем вы можете развернуть какую-либо систему мониторинга. Эту возможность планировалось реализовать в текущей версии, но выход ESP32 перебросил свободное время хобби микроконтроллеров на себя. Это вполне возможно в будущем.
  10. Благодарю за ответ и помощь! У меня что-то обе ESPки перезагружаются примерно 1 раз в сутки, поэтому корректного маштабирования графика мне не видать как своих ушей. Видимо, надо думать куда аккумулировать данные и оттуда строить гафики (что-то своё, не народномониторное). Нет ли какой-нибудь ссылки как построить простенький сервер для этих целей. В следующей версии не планируете получать данные на ESP с удаленных датчиков через NRF подключенной к slave ардуине по i2c?
  11. Вы вполне можете так сделать, но, как и нулевые значения, это по-прежнему будут не настоящие данные на протяжении всего начального суточного графика. Тут уже кому, что больше нравится. Лично для меня логически более понятно, когда данные начинают поступать от 0, особенно если отображаются несколько источников информации, я сразу вижу, когда контроллер начал его наполнение. Если требуется более детально рассмотреть динамику изменений и при этом исключить влияние на масштабирование со стороны пограничных значений, я использую выделение нужной области, в народе просто зуммирование. Выделение интересующей нас области Результат зуммирования Смотрите как будет удобнее лично Вам.
  12. Супер! Работает! Спасибо! Да, после отправки сообщения я понял, что в процентном отношении колебания давления значительно меньше, чем остальных параметров, посему оно и выглядит прямой. А нельзя ли при запуске ESP первым значением с датчика заполнить все ячейки, а потом замещать их новыми данными? Тогда сразу графики будут презентабельными
  13. Проблема действительно была в коде и искать её нужно в файле sensors.h, нас интересует метод clear String sensors::clear(float value) { if ((int)value == 0) return "0"; else if (value - (int)value == 0) return String((int)value); else return String(value); } Данный код используется для обрезания лишних нулей после запятой при формировании json объекта с данными журнала для их передачи в web интерфейс. Смысл был в уменьшении размера передаваемого объекта. Проблема крылась в самой первой проверке, её не смогут пройти числа меньше от -1 до 1 из-за приведения их к целому значению. Замените его на более явный и понятный код String sensors::clear(float value) { if (value == 0) return "0"; if (value - (int16_t)value == 0) return String((int16_t)value); return String(value); } Вот пример его работы на числах близких к нулю 0.000000, 0 0.123400, 0.12 0.500000, 0.50 -0.900000, -0.90 1.000000, 1 0.987654, 0.99 9.000000, 9 Есть другие, более лучшие способы обработки, постараюсь их рассмотреть в следующей версии проекта, но есть вероятность, что в этой части кода не будет нужды. Уверяю Вас, что все графики масштабируются одинаково. Все дело в том, что: Фактические показания барометра всегда находятся в узкой полосе по оси Y относительно лимитов этой оси График автоматически масштабируется под минимальные и максимальные значения переданных ему данных Изначально массив с данными для графика заполнен нулевыми значениями во всем своем диапазоне Получается, что пока все нулевые значения не будут вытеснены из массива, а это первые 24 часа работы, график будет строиться с учетом этих значений т.к для него это живые данные, хотя в человеческом понимании (появление значений по оси Y отличных от 0) это дает ошибочное чувство, что график только начал наполняться и визуально изменяться. Даже если Вы перезапустите контроллер и откроете график до того, как контроллер начнет перезапись массива с логами, Вы увидите полностью построенный график, но просто все значения по оси Y равны 0. Обратите внимание, как выглядит график давления после первых суток работы. Вот пример на сайте разработчика плагина, который демонстрирует динамическое обновление данных на графике, но, если Вы уделите просмотру этого демо чуть больше времени, то заметите как происходит автоматическое масштабирование графика по шкале Y в зависимости от минимального и максимального значения в переданном массиве данных. https://www.highcharts.com/demo/live-data Возможно в API можно найти свойство, отвечающее за выход значения по оси Y за определенные лимиты и регулирующее поведение графика, но это мои догадки, ответ нужно искать в документации от Highcharts.
  14. Добрый день! Подскажите, пожалуйста, возможно ли масштабировать график давления сразу по получении данных, как это происходит с другими графиками? Кроме как установить принудительно min и max пределы оси Y? Например, присваивать минимальному и максимальному значениям первое показание с датчика , а потом последующии данные сравнивать и, при необходимости, заменять ими минимальное и максимальное значения? А то как-то давление совсем грустно выглядит.
  15. отключение медианного фильтра дало только более плавные графики (в моей конфигурации); Взял актуальную прошивку, заменил только считывание с датчиков температуры и влажности на арифметические прогрессии от -1,9 и от +1,9 с шагом +0,1 и -0,1 соответственно. Показания от -1 до +1 округляет до нуля как с фильтром, так и без фильтра. На круглых диаграммах данные в этом диапазоне отображаются корректно.
  16. в логе эти данные нулевые (те которые в диапазоне от -1 до +1) контроль околонулевых значений.pdf
  17. @init.d У Вас ряд явных проблем при работе с массивом. for (int i = 0; i < KEYS; i++) kst = DIS; // состояние датчика задается константой Место присвоения значения конкретному элементу массива, тут произведена попытка записать в память, где находится весь массив, значение константы DIS. Место этого код должен был выглядеть следующим образом. for (int i = 0; i < KEYS; i++) kst[i] = DIS; Вообще два одинаковых цикла for можно и одним заменить, но если честно, то наполнение массива kst не имеет смысла т.к массив был заполнен при объявлении, просто заполните его нужными значениями. boolean kst[KEYS] = {0}; Та же самая ситуация происходит и в цикле loop - двойные циклы и попытка перезаписать память, значениями которых там быть не должно. for (int i = 0; i < 3; i++) kst = ex1.digitalRead(i); for (int i = 0; i < 3; i++){ if (kst[i] == ACT) { // если хотя бы 1 ключ активен String state = "Active"; Serial.println (state); } } А хотели, видимо, получить это bool state = false; // Водим bool переменную чтобы не спамить Active в Serial если более одного порта активно for (int i = 0; i < KEYS; i++) { // Все делаем в одном цикле с лимитом указанным к KEYS kst[i] = ex1.digitalRead(i); // Пишем состояние порта в соответствующий элемент массива if (kst[i] == ACT) state = true; // Меняем состояние если хотябы один порт в состоянии ACT } if (state) Serial.println("Active"); // Сообщаем о состоянии ACT Ну и все в таком духе. А если по нормальному, то надо использовать прерывания, PCF8575 их поддерживает. Но опять вопрос, зачем нужен этот расширитель портов, если не задействованы стандартные порты микроконтроллера (в данном случае UNO). Выкидываем PCF и используем прерывания на стандартных портах. Почитать о них можно тут https://www.arduino.cc/reference/en/language/functions/external-interrupts/attachinterrupt/ И в таком случае код будет выглядеть совсем иначе, а работать намного быстрее и стабильнее. Единственный минус, это всего два порта поддерживающих прерывания у UNO.
  18. Доброе время суток. Не совсем понятно, эти проблемы и на локальных графиках тоже или только на народном мониторинге? Если на локальных тоже провалы, значит вы в течении какого-то времени получаете такие данные т.к на наполнение медианного фильтра требуется время, а это не менее трех запросов данных (по умолчанию размер буфера фильтра равен пяти). Тут не все так просто, гарантировать целостность данных нельзя т.к никаких проверок попросту нет. Наличие данных, похожих на настоящие, в одном элементе массива не дает гарантии, что в других элементах все также хорошо. Для повышения надежности используется механизм проверки контрольной суммы, алгоритм выбирается в зависимости от конкретной ситуации. Например, мы отправляем 1 байт полезной нагрузки, пусть это будет чисто 123 или ‭01111011‬ в двоичной системе счисления, следом за ним отправляем еще 1 байт который будет представлять из себя контрольную сумму. Содержимое второго байта зависит от алгоритма, который мы выбираем, пусть это будет битовая операция "И" (AND) и по завершению расчетов мы хотим видеть 0, что будет сигналом о корректности данных. Таким образом второй байт должен содержать такую последовательность бит, чтобы в ходе операции получить значение 0. В нашем примере, второй бит должен содержать число 132 или ‭10000100‬ в двоичной системе счисления. На принимающей стороне производим расчет: 01111011 & 10000100 = 00000000 Также доступны и другие битовые операции https://ru.wikipedia.org/wiki/Битовые_операции Для каждой конкретной задачи требуется свой алгоритм, конечно не факт, что это будут именно битовые операции. Используется только медианный фильтр. Чтобы отключить его, перейдите в файл sensors.h и найдите строку medianFilter_t lastDimension; Замените её на float lastDimension; Медианный фильтр использует float для хранения значений, на практике он нужен только чтобы сгладит пиковые выбросы, спровоцированные кратковременными внешними изменениями в среде в которой находятся сенсоры. В последних исходниках проекта имеются только сжатые файлы, но поддерживаются оба варианта. Приоритет отдается сжатому файлу т.к его транспортировка требует меньше времени. Вы можете удалить архивную копию, но предварительно убедитесь, что на контроллере имеется его распакованный вариант, иначе могут быть небольшие трудности. Явного округления в коде не предусматривалось, давайте искать. Для начала, стоит посмотреть на данные передаваемые от контроллера в web интерфейс. Сделать это можно пройдя по ссылке http://espws.local/api/sensors/log (espws.local стоит заменить на ip адрес если пытаетесь открыть ссылку с устройства не поддерживающего mDNS или имеющего проблемы при работе с зоной .local). Еще более наглядный вариант, это зайти на главную страницы web сервера микроконтроллера, открыть режим разработчика в браузере (раздел network), далее открыть график и поймать запрос на страницу /api/sensors/log. В окне ответа сервера ищем вкладку с предварительным просмотром, там будет разобранный json ответ с данными. Просмотрите эти данные и попытайтесь определить, получаете ли Вы эти значения уже округленными или это происходит во время создания самого графика. На народном мониторинге используется тот же самый плагин для создания графиков, что и в проекте метеостанции. Вы можете изменять визуализацию как Вам больше нравится, но в приделах возможностей самого плагина. Вот ссылка на сайт разработчика https://www.highcharts.com/ они предоставляют очень наглядные демо и всю документацию для создания собственной визуализации данных, это могут быть не только графики. Постараюсь в ближайшее время воссоздать Вашу проблему с округлением, но с разовыми пропажами данных все сложнее т.к это касается непосредственно Вашего кода.
  19. Добрый день! Сегодня ночью были удачные сочетания температури и влажности (иначе бы не заметил). Проанализировав графики ESP и народного монитора пришел к выводу, что ESP все данные от -1 до +1 округляет ровно к нулю. Подскажите, пожалуйста, где это отключить в программе? Еще один вопрос№2, можно ли в графиках ESP смещать на графике оси У так, как примерно на народном монитере, чтобы было видно когда температура приближается к точке росы? И еще один вопрос№3, в форуме не нашел, как можно изменить частоту передачи данных на narodmon? возможно, более редкая отправка данных решит проблему с эпизодичеккими отправками нулевой температуры на графике narodmon? не факт, но попробовать надо. Благодарю за ответ
  20. Добрый день! Подскажите, пожалуйста, для чего в Data два файла index - index.htm и index.htm.gz ? Как я понял , приоритет имеют сжатые файлы, но их неудобно редактировать. Можно ли удалить сжатый файл и пользоваться только index.htm? Благодарю за ответ.
  21. Добрый день! Как отключить медианный фильтр и фильтр Кальмана? Толи они, толи еще что-то не дает строить график температуры от 0 до 1 градС. На диаграмме температура отражается корректно, на графике стабильно "0".
  22. Не пойму эти стиралки полоскалки на атмеге ?
  23. Earlier
  24. При ремонтах быстро проверить исправность всех портов контроллера. https://youtu.be/L2GGxcC4844
  25. svchekalin Сначала поляна. потом за столом..
  1. Load more activity
×
×
  • Create New...