Перейти к публикации
iT4iT.CLUB

Kitsum

Пользователи
  • Публикации

    424
  • Зарегистрирован

  • Посещение

  • Дней в лидерах

    234

Сообщения, опубликованные пользователем Kitsum


  1. Доброе время суток

    В 02.07.2018 в 06:21, afvar сказал:

    Повторил месяца 3-4 назад, подправил под себя.... и забыл пароль :)

    Как можно сбросить?

    Хорошая задачка. Полагаю, что Вы используете последнюю версия проекта. Решить задачу можно тремя способами и они потребуют физического доступа к контроллеру.

    1. В основном файле проекта, практически в самом начале, имеется описание констант отвечающих за инициализацию Serial монитора. 
      /* Консоль */
      #define console Serial    // Обязательно закомментируйте эту строку перед финальной загрузкой программы
      #define consoleSpeed 115200

      Если Вы не воспользовались подсказкой из комментария, то пароль засветится в консоли при рестарте контроллера.

    2. Еще один вариант, это затереть конфигурационный файл, но сделать это можно только загрузив по новой файлы WEB сервера. Эта операция полностью удаляет текущее содержимое области флешь памяти, выделенную под внутривенную файловую систему и записывает её новый образ. При этом файл конфигурации в образе отсутствует и будет создан самим контроллером в ходе выполнения программы. Данные авторизации будут сброшены по умолчанию - admin\admin

    3. Еще один способ подразумевает обновление программы микроконтроллера и игнорирование части конфигурационного файла или его удаление, но тогда обновлять программу придется дважды. Второй раз чтобы откатить изменения и восстановить функционал. Для этого в файле webserver.h найдите функцию bool http::authorized() она отвечает за проверку авторизации пользователя с помощью cookies. Приведите её к следующему виду.

      bool http::authorized() {
        return true;
      }

      После загрузки программы Вы сможете зайти в панель управления обойдя форму авторизации и изменить пароль. Данный способ хорош если Вам необходимо сохранить ключи доступа к внешним серверам и т.п

    В Вашем случае другого способа перехватить пароль нет т.к он передается только от пользователя к микроконтроллеру и никогда в обратную сторону. Подбор пароля тоже усложнен т.к лимит попыток входа ограничен и Вы вероятно спровоцируете тревогу поднятую функцией bool http::security() её описание и подробный комментарий также можно посмотреть в файле webserver.h

    Это первое, что приходит в голову, но если вы найдете другой способ, то дайте знать, буду очень признателен.

    Теперь о графиках и выхода за приделы суточного интервала.

    Графики отъедают очень много памяти, да и сам проект про то как получилось у меня, а не как стоит делать, но все же. Вам предстоит внимательно поработать с несколькими файлами:

    1. Файл sensors.h в котором описана логика работы с сенсорами. В описании класса sensors имеется приватная переменная содержащая размер массива выделяемого под хранение лога для каждого сенсора в котором эти самые логи активированы.
      byte logSize = 144;

      Значение 144 выбрано исходя из интервала между точками на графике, который равен 10-и минутам. Полные сутки содержат 144 значение. Чтобы увеличить количество выделенной памяти, необходимо увеличить это значение. Увеличьте это значение до адекватного и необходимо для Вас значения, главное, чтобы оно было кратно 144.

      byte logSize = 432;     // Вариант для трех дней
      byte logSize = 144 * 5; // Или иной вариант записи для 5-и дней (по мне такой вариант записи более предпочтителен)

      Главное не перегнуть палку, всегда следите за памятью.

    2. Файл users_auto.h или users_bme280_x2.h или Ваш файл, в котором описаны используемые сенсоры. Вот пример описывающий датчик температуры.

      sensors.add(T, device::out, 0x76, "out_temperature", out_init, out_temp, true);

      Последнее значение метода add, то которое true, указывает, что необходимо вести логи. У тех сенсоров, для которых не требуется видение логов, не указывайте это значение вообще или измените его на false. Оставьте только действительно необходимые логи.

    3. Файл index.htm содержит две функции в которых производится построение графика

      $(".sensor .log").click(function(){
      	/* ... */
      });
      
      $("#graph").click(function() {
      	/* ... */
      });

      Обе эти функции содержат расчетное временное значение первой точки графика в мс.

      new Date().getTime() - obj.timeAdjustment - 143 * 10 * 60 * 1000;

      Необходимо сдвинуть его на выбранный вами интервал времени, например, три дня.

      new Date().getTime() - obj.timeAdjustment - (144 * 3 - 1) * 10 * 60 * 1000;

      Вроде бы на этом все, надеюсь не обсчитался в точках.

    4. Сохраняем и обновляем программу и файлы.

    Что касаемо самих файлов WEB сервера и их упаковки:

    1. Как все уже правильно заметили, файлы упакованы только для уменьшения их размера, можно использовать их без сжатия. Но при наличии у микроконтроллера сжатого файла и его не сжатой копии, приоритет будет отдан сжатому файлу и именно он будет отдан пользователю при загрузке страницы.
    2. Оригинальные файлы сжаты с помощью архиватора 7-Zip. Формат сжатия GZIP, уровень сжатия Ультра (максимально возможный).
    3. Исходный код файлов написан в кодировке UTF-8

    Сугубо мое мнение: если Вы хотите внести серьезные изменения в код, то стоит воспользоваться специализированным редактором, который сможет предупредить об опечатки или нарушении синтаксиса. Рекламировать ничего не буду, в сети множество редакторов для WEB разработок с поддержкой HTML и JavaScript

    • Like 1
    • Thanks 3

  2. @Maikl9999 доброе время суток.

    График масштабируется автоматически и после суток работы приделы значений (в данном случае давления) будут скорректированы. Выглядеть это будет следующим образом.

    espws.local_mm2.pngespws.local_mm1.png

    Вы можете попробовать задать нижний придел указав значение параметра min для нужной шкалы у объекта yAxis в функции chart (см index.htm). Но помните, что изначально массив с данными графика наполнен нулями и как отреагирует плагин на поднятие нижней границы я, в данный момент, проверить не могу. Попробуйте поэкспериментировать.

    Вот ссылка на интересующий Вас раздел в документации к API плагина highchartshttps://api.highcharts.com/highcharts/yAxis.min

    • Thanks 1

  3. @Alex_DIY Используем 2.4.0 в системе мониторинга и сушки подвала гаража. За раз передаем 11 параметров по протоколу MQTT на сервер mqtt.it4it.club и никаких проблем не испытываем. Также параллельно передаем схожее количество параметров на "народный мониторинг" и "ThingSpeak".

    image.png


  4. Сугубо мое мнение, что выбрана не удачная библиотека, я бы заменил её на эту https://github.com/finitespace/BME280

    Среди всяческих плюшек поддерживает смену адреса, таким образом избавляет от кучи проблем.

    • Thanks 1

  5. @ololonly Если я правильно понимаю, то в документации по Domoticz говорится, что данные должны передаваться в формате json в соответствии с установленной структурой сообщения. Сама метеостанция передают непосредственно сами значение полученные от датчиков (тип float). Данные с каждого сенсора кладутся в соответствующие им топики. Путь топика выстраивается исходя из логики "Корневой путь" + "идентификатор датчика". Таким образом если в поле корневого пути указать myhome, а датчики имеют идентификаторы: out_temperatureout_humidity и out_pressure, то соответствующие данные будут отправлены в топики:

    • myhome/out_temperature
    • myhome/out_humidity
    • myhome/out_pressure

    Для связи с Domoticz необходимо доработать код метеостанции. По сути просто добавить дополнительный сервис в services.h где будет производиться упаковка данных с сенсоров в json приемлемая для Domoticz. Далее сервис добавляем в планировщик задач. Все необходимое для этого уже реализовано.


  6. В 18.05.2018 в 16:07, doc_bravn сказал:

    Можно ли его подключить к esp8266 и как его запустить?

    Вам придется задействовать один из портов микроконтроллеров и настроить его на вход. На этот порт нужно подать сигнал с логического выхода электронного преобразователя, идущего в комплекте с "сенсором". Далее просто опрашиваете порт и делаете соответствующие выводы. Также можно снимать показания с АЦП выхода, но у ESP8266 только один АЦП, возможно его стоит оставить для чего-то более нужного.

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

    Думаю, что Вам стоит более пристально присмотреть к BME280 (температура + влажность + давление). Из показаний температуры и влажности можно вычислить так называемую "точку росы", по простому, это температура при которой влага в воздухе начинает конденсироваться. Если она совпадает с текущей температурой, то как минимум на улице туман или дождь, и уж точно не жаркий солнечный день. Если температуры приблизительно равны (плюс/минус погрешность), то смотрим на давление, если оно снизилось по сравнению с ранее собранными значениями (помним, что мы ведем суточный график) или опустилось ниже определенного уровня (возможно стоит вести учет среднесуточных значений для сенсоров) то считаем, что идет дождь. Возможно это сработает, в любом случае было бы интересно посмотреть на некоторую статистику.

    В 18.05.2018 в 21:37, Dark FeniX сказал:

    Вроде всё работает, но проблема с передачей данных на MQTT осталась.

    Вы пробовали передавать на стоковой прошивке показания на другой сервер? Например на mqtt.it4it.club

    В данный момент моя домашняя метеостанция использует последнюю опубликованную прошивку в стоковом варианте и передает показания на данный брокер, проблем с передачей нет. Также пробовал передавать показания на домашний брокер и на тестовый удаленный, все в норме. К сожалению, повторить вашу проблему не получается. Возможно причина в чем-то еще... пока сложно сказать.


  7. Друзья, всем доброго времени суток. Хоть нас и немного, но все же хочется иметь представление какой источник питания приемлем для Вас при питании такой системы умного дома, как блок учета показаний импульсных счетчиков расхода воды.

    Возможно Вы уже используете какой-то вариант или сталкивались с подводными камнями одного из указанных в опросе.

    Буду премного Вам признателен за участите.


  8. Категорически всех приветствую.

    Выкинул стабильную 2.0 версию. Серьезных изменений нет, скорее проведена небольшая работа над ошибками. В очередной раз выражаю огромную благодарность всем, кто участвует в этом. И так, что было изменено:

    1. Поправлен порядок отображения сенсоров в web интерфейсе. Введена простая и понятная система нумерации в замен именованного списка. Датчики отображаются в обратном порядке их объявления. Систему можно легко переделать и инвертировать отображение, дайте знать если Вам будет это интересно.
    2. Хоть я и не смог воссоздать некоторые единичные проблемы с отправкой данных на внешние сервера (в частности mqtt) но все же были внесены некоторые правки в services.h. В частности, в функции mqttPublish и restAPIsend добавлена передача контроля системным задачам esp в список которых входит обработка сетевых соединений. Объект HTTPClient был перенесен в функцию restAPIsend, это спорный момент, родившийся в ходе борьбы с утечкой памяти в ESP8266 v2.4.1
    3. Запись в суточный журнал показаний сенсоров убрана из холодного старта планировщика задач. Это необходимо, чтобы датчики, использующие само калибровку, могли её произвести и в журнал пошли более адекватные показания. Также из-за этого при построении графика в web интерфейсе используется сдвиг на одну позицию меньше чем размер всего журнала (143 точки место 144) иначе временная шкала графика не будет соответствовать реальности со сдвигом в 10 минут.
    4. В файле tools.h был добавлен "Медианный фильтр", он нужен для уменьшения уровня шума в показаниях датчиков. По умолчанию фильтр использует 5 измерений и производит фильтрацию каждый раз при обновлении массива показаний. Сам фильтр объявляется как переменная типа medianFilter_t и работать с ней необходимо также как с любой переменной типа float - если необходимо добавить значение в фильтр, то используется оператор = или +=, а при обращении к переменной (при условии наполнения массива данных) на выходе получаем отфильтрованное значение. По сути medianFilter_t "мимикрирует" под тип float, претворяясь не тем, чем он есть на самом деле, для выполнения своих задач. Конечно этот термин не корректен, но это тестовый фильтр и мне хочется использовать именно это понятие в описании принципов его использования. Таким образом, чтобы задействовать фильтр в уже готовом проекте достаточно просто заменить тип у уже описанной переменной с float на medianFilter_t и это позволит избавиться от переписывания всего кода для реализации наполнения массива данных и последующей фильтрации. Просто работайте с ним как с обычной переменной.
    5. Исправлена проблема с обработкой заголовков Access-Control-Allow при отладке web интерфейса без загрузки файла index.htm на микроконтроллер. Теперь необходимо просто раскомментировать соответствующие строки в функции void http::sendServerHeaders() в файле webserver.h, а в index.htm изменить переменную var domain = ""; указав полный http адрес web сервера микроконтроллера (http://espws.local/ или http://192.168.0.15/ смотрите по обстоятельствам).
    6. В web интерфейсе в разделе "Настройка / Система" добавлен вывод внутреннего таймера millis в читаемом человеческом виде (дни и часы). Он понадобился мне для выявления багов в ходе построения графиков показаний, возможно он будет полезен и Вам.

    И теперь самое главное, это проблема с кодировкой при обновлении программы микроконтроллера. Проблема проявляется при загрузке программы через web интерфейс. Я заметил, что проблема (лично у меня) проявляется только если после изменений в описании сенсоров, проект не был сохранен (Ctrl + S) и был произведен экспорт бинарного файла, который и был загружен в дальнейшем. Если перед экспортом сохранять проект, то проблема уходит. Понаблюдайте за этим моментом у себя, возможно это решение данной проблемы.

    Еще раз напоминаю об утечки памяти в ESP8266 v2.4.1, используйте v2.4.0


  9. Друзья, всем доброго времени суток. Моя домашняя метеостанция восстановлена, но в ходе поиска и исправления ошибок на которые Вы указали и дальнейших тестов (приходится проводить длительные эксперименты, примерно 1-2 суток на каждый т.к некоторые проблемы сразу не проявляются) была выявлена серьезная утечка памяти. Убил много времени на поиск проблемы в проекте метеостанции, но к сожалению, она оказалась в самой платформе ESP8266 v2.4.1. Пришлось откатиться на v2.4.0 и начать тесты с нуля. Проблема проявляется при работе с объектом WiFiClient, а значит при работе со всеми удаленными серверами (MQTT, RestAPI,  ...). Отслеживать состояние решения проблемы можно на GitHub. Это важный момент и его стоит отслеживать.


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

    bool mqttPublish(String topic, String data) {
      if (conf.param("mqtt_path").length()) topic = conf.param("mqtt_path") + "/" + topic;
      return mqttAPI.publish(topic.c_str(), data.c_str(), true);
    }
    bool mqttPublish(String topic, float data) { return mqttPublish(topic, String(data)); }

    Это должно решить Вашу проблему и добавить поддержку как float, так и String типа без изменения основного кода.


  11. Доброе время суток

    16 часов назад, Maks Crezi сказал:

    Доброй погоды всем!  так-же повторил бета версию.. приятно удивлен структурированностью кода. Подскажите, куда запилить библиотечку для приема радиодатчиков Орегон, с учетом что она прерывание слушает.. или не взлетит?? 

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

    1. Подключите используемую библиотеку в пользовательском .h файле или в основном .ino файле
    2. Объявите сенсор, как это делается в примере, идущем с используемой библиотекой, опишите прерывание (убедитесь, что порт не занят)
    3. Объявите глобальную переменную и при каждом прерывании записывайте переданные данные с датчика в неё
    4. Опишите новый сенсор опираясь на пример программного сенсора из файла users_auto.h и в коде, используя оператор return, верните значение, хранимое в описанной ранее, глобальной переменной. Но помните, что возвращаемое значение должно иметь тип float и в случае необходимости произведите нужные преобразования.

    Все должно взлететь.

    3 часа назад, Forester сказал:

    А кто-нибудь проверял работу MQTT? Что-то у меня не работает. Хотя на предыдущих версиях работало.

    Что выводиться в Serial монитор при отправке данных?


  12. Доброе время суток

    В 24.03.2018 в 17:02, RusD сказал:

    Сначала все было нормально, но сегодня стало показывать плюс 10 градусов на улице и влажность 28 и десятые и сотые доли бегают туда-сюда.

    Проверьте в каком состоянии находится датчик, не попадали ли на него осадки.

    В 25.03.2018 в 12:07, wildray сказал:

    Как сделать чтоб в вебе первое было "Температура" потом влажность и т.д.

    Небольшое упоминание можно посмотреть тут.

    В 25.03.2018 в 12:07, wildray сказал:

    и еще вопросик, где-то выше упоминалось о цвете индикаторов круговых, типа плюс красный минус синий.....это в планах?!?

    В файле index.htm имеется функция chenge вызываемая каждые 5 секунд для получения новых данных от микроконтроллера. В её коде я оставил закомментированную строку показывающую как можно изменить цвет индикатора на примере сенсора с идентификатором out_temperature

    $('.out_temperature').trigger('configure', {"fgColor":"#FF0000"});

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

    21 час назад, Вадим сказал:

    Ни как не получается направление ветра с градусов перевести в быстрее понятное  "С", "СВ", и так далее... Может кто поможет.

    Для ESP8266 попробуйте такой вариант, он хоть и топорный, но частично решает Вашу задачу.

    struct markup_t {
      uint8_t min;
      uint8_t max;
      String  side;
    };
    
    const markup_t grid[9] = {
        {0,   22,  "Север"},
        {23,  67,  "Северо-восток"},
        {68,  112, "Восток"},
        {113, 157, "Юго-восток"},
        {158, 202, "Юг"},
        {203, 247, "Юго-запад"},
        {248, 292, "Запад"},
        {293, 337, "Северо-запад"},
        {338, 360, "Север"}
    };
    
    String direction(uint8_t degree) {
      for (byte i=0; i<9; i++) {
        if (degree >= grid[i].min and degree <= grid[i].max) return grid[i].side;
      }
      return "error";
    }
    
    void setup() {
      Serial.begin(115200);
    }
    
    void loop() {
      uint8_t degree = random(0, 360);
      Serial.printf("%d:\t%s\n", degree, direction(degree).c_str());
      delay(5000);
    }

    Должно получится что-то подобное

    Скрытый текст

    image.png

     


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

    С Вашей помощью, я надеюсь отловить основные баги и довести проект до более-менее адекватного состояния. Часть из того, что уже упоминалось было поправлено. Под вопросом еще находится работа с Кириллицей, хоть необходимые изменения и были внесены, требуется продолжить тестирование.

    Пока под вопросом как реализовать вывод логов с тех сенсоров на которых они ведутся. На данный момент имена сенсоров с которых пишутся логи стали кликабельны в web интерфейсе и вызывают отрисовку графика, но только с данными по этому сенсору. Хочу еще раз напомнить, что логи отъедают оперативную память контроллера, а т.к проект любительский то она не сильно то и экономится, в общем, смотрите по обстоятельствам.

    В 07.03.2018 в 20:01, wildray сказал:

    Смотрю в меню датчики на i2c- нет ничего. В коде ничего не менял, так и остался бме он. Подключил gy21. Перегрузил есп - в списке датчиков ничего нет. Подключил другой бме - в списке ничего нет. Я так понимаю, мне уже нужно свечку идти ставить, ауру отбеливать :).

    i2c сканер не завязан с библиотеками датчиков и работает самостоятельно, используется стандартный объект Wire реализующий связь на шине и идущий в комплекте с файлами среды разработки. Возможно на шине действительно ничего нет.

    В 07.03.2018 в 20:01, wildray сказал:

    Хотел еще спрсить, по поводу датчиков, bme280 которые с стабом идут на борту. С есп понятно d1+d2+gnd+3.3v. А если делать такое на witty cloud, бутерброд? Да, нашел по таблице те же гпио 4+5+gnd+vcc, но в последнем 5в идет. Датчику нормально, а гпио?

    Я не заказывал подобные платы, но могу сказать точно, что сам контроллер работает от напряжения 3.3V. Могу предположить, что на Вашем модуле DC-DC преобразователь все-таки распаян. Также хочу отметить, что данное питание можно получить от USB-TTL конвертера который используется на данном модуле. Ну а что касаемо 5V логики, то это только на Ваш страх и риск, но я советую внимательно изучить документацию на Witty Cloud, возможно там все-таки 3.3V.

    В 10.03.2018 в 13:21, LogOFF сказал:

    Можно ли в первый пост добавить:

    Обязательно все добавлю. На данный момент просто не хватает времени, прошу немного потерпеть.

    В 10.03.2018 в 13:21, LogOFF сказал:

    3. gpio.h GPIO 12 (D6) - превышение установленной температуры, возможно ли изменить уставку с охлаждения на нагрев, ага, а 14 на разность абсолютной влажности, можно ли одновременно использовать 12 и 14?

    В коде это очень легко делает, но если Вы хотите иметь возможность выбора в web интерфейсе, то на это может потребоваться время т.к это надо как-то графически оформить, а мои таланты по дизайну и верстке хромают. И, что Вы подразумевали под разностью абсолютной влажности? Вы хотите изменять это значение по аналогии с другими портами?

    Вы можете использовать одновременно 12 и 14 порты микроконтроллера, а точнее тот функционал, который предоставлен в качестве примера. Управление портами совершенно не связано между собой, они даже разнесены в разные функции и прописаны как разные задачи в планировщике. Смело экспериментируйте, но все тесты проводите на слаботочной нагрузке, и все проверяйте по 10, а лучше по 100 раз, мы все люди и нам свойственно ошибаться.

    В 10.03.2018 в 13:21, LogOFF сказал:

    ага, или так, или этак, оба нужны будут, по второму вопрос, а датчик освещенности снаружи возможен?

    Вы вольны указать любое расположение у сенсора. Это делается в его описании (смотрите пример с двумя датчиками BME280):

    • device::out
    • device::in

    Вообще за этим типом данных скрываются целые числа, но пришлось привести их к такому визуальному (для человека) состоянию т.к если оставить простую возможность указать номер списка в который будет произведено добавление сенсора на web странице, то у пользователя может появится желание указать не 1 или 2, а например, 3 или 100500 и это приведет к сбою и последующим вопросам. А так компилятор попытается проконтролировать, что Вы укажите одно из доступных значений.

    В 10.03.2018 в 13:21, LogOFF сказал:

    настройки не сохранены по следующим причинам ...

    Исправлено. Максимальная длинна увеличена до 63 знаков. Еще раз напомню, как производится фильтрация данных на web странице. Процесс обработки полей запускается событием нажатия на кнопку сохранить.

    $(".settings input[type='submit']").click(function() {
    	/* тут весь код обработки форм */
    });

    Обрабатываются не все существующие поля, а только те, чья группа сейчас открыта (ну или раздел, кому как удобнее). В коде Вы можете найти вызов функций, использующих регулярные выражения для проверки содержимого полей. Сами выражения очень простые, но этого должно быть достаточно для того, чтобы можно было остановить обработку и не отправить на контроллер всякую ерунду. На текущий момент используются следующие функции, названия должны объяснять, что они проверяют

    function checkLogin(login) { return login.match(/^[a-z0-9_]{3,30}$/i); }
    function checkPassw(passw) { return passw.match(/^.{5,63}$/); }
    function checkSSID(ssid) { return ssid.match(/^[a-z0-9_. -]{3,30}$/i); }
    function checkHostAddr(host) { return host.match(/^((?!(0|127|255))((25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)|((([a-z0-9\-]{1,10}\.){1,3})?([a-z0-9\-]{2,26})\.)[a-z]{2,6})$/i); }
    function checkMqttPath(path) { return path.match(/^[a-z0-9_/]{3,200}$/i); }
    function checkThingSpeakKey(key) { return key.match(/^[A-Z0-9]{16}$/); }
    function checkNarodmonId(id) { return id.match(/^[A-Z0-9-:]{12,18}$/); }
    function checkGPIO(val) { return val.match(/^([\-]?[0-9]{1,3})$/); }
    function checkMDNS(name) { return name.match(/^([a-z0-9]{3,16})$/); }

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

    В 10.03.2018 в 18:06, MOHAX сказал:

    Еще две перезаливки (обе по воздуху), все тоже на одной версии (2.0.0) , и вот результат:

    Возможно Вы используете версию прошивки микроконтроллера в которой не задан заголовок с точным указанием кодировки. Обратите внимание на файл webserver.h и на константу

    #define headerJson F("application/json; charset=utf-8")

    и на то, где она используется. Дайте знать о Ваших результатах.

    В 08.03.2018 в 11:33, vavandemidov сказал:

    Предыдущий вариант прошивки был рабочий. Просьба к автору темы выложить его опять и обновления выкладывать не удаляя старые версии. 

    Сделано.

    • Like 1

  14. @ewanpips Спасибо, что указали на ошибку, директивы условной компиляции добавлялись в последнюю очередь и тут виной только моя невнимательность и спешка. Все будет поправлено уже сегодня вечером. Также будут добавлены примеры для датчиков SSC811 и MAX44009.

    @Prana_dk Спасибо, что поделились Вашим опытом. Я постараюсь все перепроверить. Если Ваш проект открытый, то не могли бы Вы поделиться ссылкой на него?


  15. @Prana_dk спасибо за подсказку, мы попробовали добавить явное указание кодировки сразу как проблема появилась, но на сколько я понял со слов @pasha413, проблема осталась. Также если запрос выполнять не силами ajax, а напрямую через браузер, получаем аналогичный результат. Я для тестов в основном использую браузер Google Chrome, а @pasha413 Yandex Browser и если я не ошибаюсь, то они основаны на одном движке и должны обрабатывать запросы одинаково, но опять же у меня проблема ни разу не проявилась. Возможно что-то на поверхности... Если у Вас будут еще мысли по этой проблеме, буду признателен если поделитесь с нами, постараемся все проверить.


  16. @Prana_dk доброе время суток. На данный момент отправляется заголовок "application/json", а кодировка всех файлов проекта utf-8, этого должно быть достаточно для корректной передачи кириллицы. Также настораживает тот факт, что проблема не постоянная и уходит при повторной компиляции проекта, а в моем случае она и вовсе не проявлялась. Если Вас не затруднит, не могли бы Вы дать пояснения к причинам замены заголовка?


  17. @ewanpips В таком случае все должно работать, если конечно Вы используете верный (зарегистрированный) ID устройства. Проверьте верен ли используемый идентификатор и посмотрите на ответ сервера, он будет отображен в Serial мониторе.


  18. @ewanpips доброе время суток.

    Могу предположить, что после внесенных изменений в датчики Вы не модифицировали функцию описанную в service.h отвечающую за отправку данных на народный мониторинг

    void sendDataToNarodmon() {
    	/* код отправки данных на сервис "Народный мониторинг" */
    }

    Возможно Вы внесли изменения в имена идентифицирующие сенсоры. В приведенном примере производится отправка данных сенсоров со следующими идентификаторами:

    1. out_light
    2. out_temperature
    3. out_humidity
    4. out_pressure

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


  19. 4 часа назад, pasha413 сказал:

    Просто, как мне, так удобнее использовать порты i2c d5 и d6

    Я использовал порты по умолчанию, но если это разовая операция, то их легко поменять, изменив номера портов указанные при инициализации i2c шины. Но стоит учесть, что эти порты пересекаются с управлением нагрузкой, придется внести соответствующие изменения в файле gpio.h

    4 часа назад, pasha413 сказал:

    с обновлением файловой системы ясно, а как обновить прошивку (код программы) удаленно?

    В первую очередь, Вам нужно убедиться, что контроллер запустился при наличии перемычки между GPIO-0 (D3) и 3.3V. Об этом упоминалось тут. Теперь Вам необходимо получить скомпилированную прошивку, для этого в Arduino IDE воспользуйтесь пунктом меню "Скетч/Экспорт бинарного файла" или Ctrl + Shift + U, готовый бинарник появится в корне проекта. Остается только зайти на страницу конфигурации микроконтроллера и в разделе "Обновление прошивки" перетащить полученный файл в указанную область.

    Что касаемо кодировки, то я предполагаю, что компилятор не смог переварить кириллицу. Почему так произошло мне пока неизвестно, возможно имеют место быть дополнительные факторы. Поэкспериментировал на разных машинах, но все они c одинаковой операционной системой и версиями IDE и ESP, все работает, и кириллица не теряется. Также все отлично выводится в Serial монитор, хотя в сети есть упоминания, что у людей проблемы с печатью кириллицей. Можете попробовать добавить в конце функции Setup вывод структуры сенсоров в терминал и посмотреть на результат.

    console.println(sensors.list());

    Пока что изменил все заголовки для плагина Knob на латинские аналоги. Кстати, при использовании латиницы, Вы можете регулировать порядок добавления индикаторов в web путем изменения последовательности их объявления. Добавление будет произведено в обратном порядке, как упоминалось ранее.

×
×
  • Создать...