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

Kitsum

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

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

  • Посещение

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

    234

Все публикации пользователя Kitsum

  1. Kitsum

    Мониторинг триггеров в GUI под Windows

    Пройдите по указанному адресу с помощью браузера и убедитесь, что скрипт Вам ответил, и предоставленные им данные визуально соответствуют формату json. Отсутствуют ошибки в ходе исполнения php на сервере. Также, ip адрес хоста с которого производится подключение к серверной части должен быть указан в массиве разрешенных адресов.
  2. Kitsum

    Мониторинг триггеров в GUI под Windows

    Доброе время суток @mrmarkalex К сожалению под рукой нет сервера версии 3.4, но я Вам посоветую действовать опираясь на уже имеющееся по умолчанию во всех версиях Zabbix действие - "Report problems to Zabbix administrators". Скопируйте его и просто переопределите действие с оповещения на выполнение внешнего скрипта.
  3. Kitsum

    Метеостанция на ESP8266 от it4it.club

    Осмелюсь предложить взглянуть в сторону микросхемы MAX7219 в связке с сегментными индикаторами 8х8. С простым выводом данных проблем быть не должно. Возможно будут сложности с бегущей строкой из-за нагруженности контроллера другими задачами, но над этим стоит подумать, может я зря нагнетаю. А вообще можно взять вторую ESP8266 и сделать из неё чисто информер. Данные брать напрямую с метеостанции через API или через MQTT протокол. Ссылка на модули в Китае
  4. Kitsum

    Метеостанция на ESP8266 от it4it.club

    @Dark FeniX если необходимо добавить что-то свое (без модификаций основного кода), то действуйте точно также как если бы писали все с нуля. Работайте с основным файлом. Подключайте необходимые библиотеки, объявляйте переменные, дорабатывайте содержимое setup и loop, в общем делайте все как обычно опираясь на примеры, идущие в комплекте с используемыми библиотеками. Что касаемо упоминаемого кода, то он не действителен для текущей версии проекта поэтому давайте рассмотрим, как это должно выглядеть на текущий момент. Допустим Вас интересует библиотека https://github.com/ThingPulse/esp8266-oled-ssd1306, будем опираться на её примеры для дисплея ssd1306 подключенного по i2c шине. Все работы будем проводить в основном файле проекта (.ino) Подключаем библиотеку и объявляем переменные #include "SSD1306Wire.h" // Подключаем интересующую нас библиотеку SSD1306Wire display(0x3c, 4, 5); // Объявляем переменную через которую будем работать с дисплеем Сделать это можно в любом месте, например, после подключения уже используемых библиотек Чтобы все выглядело красиво создадим собственную функцию, которая будет выводить информацию на дисплей, пусть это будет температура void displayWeather() { display.clear(); // Очищаем дисплей display.setFont(ArialMT_Plain_10); // Устанавливаем шрифт display.setTextAlignment(TEXT_ALIGN_CENTER); // Указываем выравнивание display.drawString(64, 22, "Temperature " + String(sensors.get("out_temperature"))); // Выводим температуру display.display(); // Производим отрисовку данных } Сделать это можно, например, сразу перед функцией Setup или в любом месте файла если Вы используете актуальную версию Arduino IDE В функции Setup описываем инициализацию дисплея display.init(); // Инициализация дисплея display.flipScreenVertically(); // Переворачивает дисплей верх ногами (если требуется) Сделать это можно прямо в конце этой функции И следом после этого, также в функции Setup, добавляем новую задачу в планировщик задач cron.add(cron::minute, displayWeather, true); Новое задание подразумевает вызов вашей функции displayWeather каждую минуту и имеет отложенный запуск, то есть первый её вызов произойдет также через минуту после запуска контроллера. Отложенный запуск требуется для того, чтобы датчики произвели калибровку (если это требуется), а микроконтроллер успел наполнить медианный фильтр для каждого сенсора. В свою очередь это подразумевает, что данные на дисплее появятся через минуту после подачи питания на микроконтроллер и в последующем будут обновляться каждую минуту. Выглядеть это будет примерно так (все работы произведены в одном файле). И еще хочу добавить, что я просто взял первую попавшуюся библиотеку и основываясь на одном из примеров и описанию методов от разработчика набросал вышеупомянутый список. Проверить полную работоспособность не могу т.к у меня попросту нет данного дисплея. Но суть и принципы реализации должны быть понятны. Таким же образом можно организовывать работу с другой периферией, например, управлять внешним освещением на дачном участке, выводить информацию на дисплей 16x2 (или любой другой), собирать данные с других готовых устройств и т.д и т.п
  5. Kitsum

    Метеостанция на ESP8266 от it4it.club

    Файлы 3D модели для печати будки Стивенсона идут в дополнительном архиве вместе с прошивкой, также в первом посте есть ссылка на эти же файлы но от самого автора модели. Я заказывал печать просто по объявлению, найденному в одной из социальной сети, главным критерием было производство на территории моего города. Цена вопроса 100р за каждую секцию, итого 600р. Думаю, что вам стоит поступить точно также и найти печать в своем регионе. Это также избавляет от рисков повреждения во время транспортировки, как работает почта России объяснять не нужно. Но уж если будут сложности, тогда пишите в приват, договоримся о заказе в моем городе и переправке к Вам. Да, я поспешил и упустил из внимания, что для ключевых элементов хранения логов выделен тип byte, что приводило к переполнениям и в последствии к сбоям в расчетах. И так, необходимо внести еще ряд правок в файле sensors.h В классе device имеется одноименная функция (конструктор) device в описании параметров которого имеется параметр byte log, тип byte необходимо заменить на uint16_t device(knob_t *knob, list_t list, byte address, const char *name, initFn_t init, dataFn_t data, uint16_t log, device *next) { /* код убран для уменьшения размера блока */ } Аналогичную операцию замены типа необходимо провести в классе device у переменной byte logPosition и привести её к следующему виду uint16_t logPosition = 0; В классе sensors проводим аналогичную операцию с приватной переменной byte logSize uint16_t logSize = 144 * 3; В примере я указал три дня, Вы выставляете свое значение. В классе sensors имеется функция json sensors::log(device *sensor) отвечающая за формирование списка в формате json для передачи его в WEB интерфейс, её необходимо привести к следующему виду. json sensors::log(device *sensor) { String log; if (sensor) { if (sensor->log) { for (uint16_t i = sensor->logPosition; i < this->logSize; i++) { log += (log.length() ? "," : "") + this->clear(sensor->log[i]); } for (uint16_t i = 0; i < sensor->logPosition; i++) { log += (log.length() ? "," : "") + this->clear(sensor->log[i]); } if (log.length()) log = "\"" + String(sensor->name) + "\":[" + log + "]"; } } return log; } По сути мы просто в двух циклах for изменили тип переменной i с byte на uint16_t и позволили циклам проходить по всему диапазону данных. В файле index.htm дату формирования первой точки вычисляем по первоначальной формуле new Date().getTime() - obj.timeAdjustment - (144 * 3 - 1) * 10 * 60 * 1000, Все должно получиться, но на всякий случай прикладываю файл sensors.h со всеми правками. Естественно файл устареет со временем, что может повлиять на работоспособность при совместной работе в будущих версиях, если конечно обновления будут востребованы сообществом. sensors.zip
  6. Kitsum

    Метеостанция на ESP8266 от it4it.club

    Возможно я ошибся и не учел сдвиг на 10 минут для каждых суток. Какое расхождение у Вас получилось? Попробуйте вариант со сдвигом на каждые сутки (например, для трех суток). new Date().getTime() - obj.timeAdjustment - (143 * 3) * 10 * 60 * 1000; На данный момент Вы должны иметь контроллер без конфигурационного файла и при перезагрузке он поднимает собственную точку доступа с именем WeatherStation, без пароля. Подключитесь к ней и настройте контроллер по своим потребностям. Страница для доступа к WEB серверу располагается по адресу http://espws.local (если поддерживается mDNS протокол) или http://192.168.4.1/ в противном случае.
  7. Kitsum

    Метеостанция на ESP8266 от it4it.club

    Доброе время суток Хорошая задачка. Полагаю, что Вы используете последнюю версия проекта. Решить задачу можно тремя способами и они потребуют физического доступа к контроллеру. В основном файле проекта, практически в самом начале, имеется описание констант отвечающих за инициализацию Serial монитора. /* Консоль */ #define console Serial // Обязательно закомментируйте эту строку перед финальной загрузкой программы #define consoleSpeed 115200 Если Вы не воспользовались подсказкой из комментария, то пароль засветится в консоли при рестарте контроллера. Еще один вариант, это затереть конфигурационный файл, но сделать это можно только загрузив по новой файлы WEB сервера. Эта операция полностью удаляет текущее содержимое области флешь памяти, выделенную под внутривенную файловую систему и записывает её новый образ. При этом файл конфигурации в образе отсутствует и будет создан самим контроллером в ходе выполнения программы. Данные авторизации будут сброшены по умолчанию - admin\admin Еще один способ подразумевает обновление программы микроконтроллера и игнорирование части конфигурационного файла или его удаление, но тогда обновлять программу придется дважды. Второй раз чтобы откатить изменения и восстановить функционал. Для этого в файле webserver.h найдите функцию bool http::authorized() она отвечает за проверку авторизации пользователя с помощью cookies. Приведите её к следующему виду. bool http::authorized() { return true; } После загрузки программы Вы сможете зайти в панель управления обойдя форму авторизации и изменить пароль. Данный способ хорош если Вам необходимо сохранить ключи доступа к внешним серверам и т.п В Вашем случае другого способа перехватить пароль нет т.к он передается только от пользователя к микроконтроллеру и никогда в обратную сторону. Подбор пароля тоже усложнен т.к лимит попыток входа ограничен и Вы вероятно спровоцируете тревогу поднятую функцией bool http::security() её описание и подробный комментарий также можно посмотреть в файле webserver.h Это первое, что приходит в голову, но если вы найдете другой способ, то дайте знать, буду очень признателен. Теперь о графиках и выхода за приделы суточного интервала. Графики отъедают очень много памяти, да и сам проект про то как получилось у меня, а не как стоит делать, но все же. Вам предстоит внимательно поработать с несколькими файлами: Файл sensors.h в котором описана логика работы с сенсорами. В описании класса sensors имеется приватная переменная содержащая размер массива выделяемого под хранение лога для каждого сенсора в котором эти самые логи активированы. byte logSize = 144; Значение 144 выбрано исходя из интервала между точками на графике, который равен 10-и минутам. Полные сутки содержат 144 значение. Чтобы увеличить количество выделенной памяти, необходимо увеличить это значение. Увеличьте это значение до адекватного и необходимо для Вас значения, главное, чтобы оно было кратно 144. byte logSize = 432; // Вариант для трех дней byte logSize = 144 * 5; // Или иной вариант записи для 5-и дней (по мне такой вариант записи более предпочтителен) Главное не перегнуть палку, всегда следите за памятью. Файл users_auto.h или users_bme280_x2.h или Ваш файл, в котором описаны используемые сенсоры. Вот пример описывающий датчик температуры. sensors.add(T, device::out, 0x76, "out_temperature", out_init, out_temp, true); Последнее значение метода add, то которое true, указывает, что необходимо вести логи. У тех сенсоров, для которых не требуется видение логов, не указывайте это значение вообще или измените его на false. Оставьте только действительно необходимые логи. Файл 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; Вроде бы на этом все, надеюсь не обсчитался в точках. Сохраняем и обновляем программу и файлы. Что касаемо самих файлов WEB сервера и их упаковки: Как все уже правильно заметили, файлы упакованы только для уменьшения их размера, можно использовать их без сжатия. Но при наличии у микроконтроллера сжатого файла и его не сжатой копии, приоритет будет отдан сжатому файлу и именно он будет отдан пользователю при загрузке страницы. Оригинальные файлы сжаты с помощью архиватора 7-Zip. Формат сжатия GZIP, уровень сжатия Ультра (максимально возможный). Исходный код файлов написан в кодировке UTF-8 Сугубо мое мнение: если Вы хотите внести серьезные изменения в код, то стоит воспользоваться специализированным редактором, который сможет предупредить об опечатки или нарушении синтаксиса. Рекламировать ничего не буду, в сети множество редакторов для WEB разработок с поддержкой HTML и JavaScript
  8. Kitsum

    Метеостанция на ESP8266 от it4it.club

    @RusD На мой взгляд BME самый удачный вариант, пока ни разу не испытывал с ними проблем, но если данные по влажности не нужны, то экономически выгодно брать BMP.
  9. Kitsum

    Метеостанция на ESP8266 от it4it.club

    @Maikl9999 доброе время суток. График масштабируется автоматически и после суток работы приделы значений (в данном случае давления) будут скорректированы. Выглядеть это будет следующим образом. Вы можете попробовать задать нижний придел указав значение параметра min для нужной шкалы у объекта yAxis в функции chart (см index.htm). Но помните, что изначально массив с данными графика наполнен нулями и как отреагирует плагин на поднятие нижней границы я, в данный момент, проверить не могу. Попробуйте поэкспериментировать. Вот ссылка на интересующий Вас раздел в документации к API плагина highcharts: https://api.highcharts.com/highcharts/yAxis.min
  10. Kitsum

    Метеостанция на ESP8266 от it4it.club

    @Alex_DIY Используем 2.4.0 в системе мониторинга и сушки подвала гаража. За раз передаем 11 параметров по протоколу MQTT на сервер mqtt.it4it.club и никаких проблем не испытываем. Также параллельно передаем схожее количество параметров на "народный мониторинг" и "ThingSpeak".
  11. Сугубо мое мнение, что выбрана не удачная библиотека, я бы заменил её на эту https://github.com/finitespace/BME280 Среди всяческих плюшек поддерживает смену адреса, таким образом избавляет от кучи проблем.
  12. Kitsum

    Метеостанция на ESP8266 от it4it.club

    @EndWar Сам по себе датчик довольно точный, скорее всего причина кроется во внешних факторах. Вот хорошая статья по поводу точности измерений BME280 http://www.kandrsmith.org/RJS/Misc/Hygrometers/absolutetemperature.html
  13. Kitsum

    Метеостанция на ESP8266 от it4it.club

    @EndWar приветствую, а какие расхождения, линейная ли зависимость?
  14. Версия 1.0.0

    174 скачивания

    Шаблон и список преобразований значений для мониторинга маршрутизаторов и свичей фирмы Cisco (должен подходить для оборудования Allied Telesis). Подробное описание можно посмотреть в следующей теме.
  15. Версия 1.0.0

    148 скачиваний

    Шаблон и список преобразований значений для мониторинга источников бесперебойного питания фирмы APC. Подробное описание можно посмотреть в следующей теме.
  16. Kitsum

    Switch Port Mapping

    Версия 1.0.0

    181 скачивание

    Набросок небольшой программы на PHP для облегчения жизни IT отделу. Позволяет просматривать какие хосты располагаются на портах сетевого оборудования (за основу взято оборудование фирмы Cisco). Для связи используется SNMP протокол. Из информации об узле выводятся: MAC IP DNS имя Производитель оборудования Подробное описание можно посмотреть в следующей теме.
  17. Версия 1.0.0

    594 скачивания

    Демон осуществляет транзит данных с MQTT брокера в СУБД MySQL. Можно переправлять как все сообщения, так и конкретные топики. Подробное описание можно посмотреть в следующей теме.
  18. Версия 1.0.0

    395 скачиваний

    Модуль предназначен для системы мониторинга Zabbix. Работает в качестве отдельного демона и осуществляет транзит сообщений от брокера до хостов в системе мониторинга. Подробное описание модуля можно посмотреть в следующей теме.
  19. Kitsum

    Метеостанция на ESP8266 от it4it.club

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

    Метеостанция на ESP8266 от it4it.club

    @Dark FeniX На данный момент передаются 5 параметров.
  21. Kitsum

    Метеостанция на ESP8266 от it4it.club

    Вам придется задействовать один из портов микроконтроллеров и настроить его на вход. На этот порт нужно подать сигнал с логического выхода электронного преобразователя, идущего в комплекте с "сенсором". Далее просто опрашиваете порт и делаете соответствующие выводы. Также можно снимать показания с АЦП выхода, но у ESP8266 только один АЦП, возможно его стоит оставить для чего-то более нужного. Мое личное мнение, что данный сенсор не подойдет для адекватного детектирования осадков. Хотя бы по тому, что сенсору необходимо просохнуть для явного указания на конец осадков (дождя). В зимнее время года, как мне кажется, сенсор все время будет сигналить о наличии осадков т.к попросту покроется льдом. Возможно я ошибаюсь. Думаю, что Вам стоит более пристально присмотреть к BME280 (температура + влажность + давление). Из показаний температуры и влажности можно вычислить так называемую "точку росы", по простому, это температура при которой влага в воздухе начинает конденсироваться. Если она совпадает с текущей температурой, то как минимум на улице туман или дождь, и уж точно не жаркий солнечный день. Если температуры приблизительно равны (плюс/минус погрешность), то смотрим на давление, если оно снизилось по сравнению с ранее собранными значениями (помним, что мы ведем суточный график) или опустилось ниже определенного уровня (возможно стоит вести учет среднесуточных значений для сенсоров) то считаем, что идет дождь. Возможно это сработает, в любом случае было бы интересно посмотреть на некоторую статистику. Вы пробовали передавать на стоковой прошивке показания на другой сервер? Например на mqtt.it4it.club В данный момент моя домашняя метеостанция использует последнюю опубликованную прошивку в стоковом варианте и передает показания на данный брокер, проблем с передачей нет. Также пробовал передавать показания на домашний брокер и на тестовый удаленный, все в норме. К сожалению, повторить вашу проблему не получается. Возможно причина в чем-то еще... пока сложно сказать.
  22. Друзья, всем доброго времени суток. Хоть нас и немного, но все же хочется иметь представление какой источник питания приемлем для Вас при питании такой системы умного дома, как блок учета показаний импульсных счетчиков расхода воды. Возможно Вы уже используете какой-то вариант или сталкивались с подводными камнями одного из указанных в опросе. Буду премного Вам признателен за участите.
  23. Kitsum

    Метеостанция на ESP8266 от it4it.club

    Категорически всех приветствую. Выкинул стабильную 2.0 версию. Серьезных изменений нет, скорее проведена небольшая работа над ошибками. В очередной раз выражаю огромную благодарность всем, кто участвует в этом. И так, что было изменено: Поправлен порядок отображения сенсоров в web интерфейсе. Введена простая и понятная система нумерации в замен именованного списка. Датчики отображаются в обратном порядке их объявления. Систему можно легко переделать и инвертировать отображение, дайте знать если Вам будет это интересно. Хоть я и не смог воссоздать некоторые единичные проблемы с отправкой данных на внешние сервера (в частности mqtt) но все же были внесены некоторые правки в services.h. В частности, в функции mqttPublish и restAPIsend добавлена передача контроля системным задачам esp в список которых входит обработка сетевых соединений. Объект HTTPClient был перенесен в функцию restAPIsend, это спорный момент, родившийся в ходе борьбы с утечкой памяти в ESP8266 v2.4.1 Запись в суточный журнал показаний сенсоров убрана из холодного старта планировщика задач. Это необходимо, чтобы датчики, использующие само калибровку, могли её произвести и в журнал пошли более адекватные показания. Также из-за этого при построении графика в web интерфейсе используется сдвиг на одну позицию меньше чем размер всего журнала (143 точки место 144) иначе временная шкала графика не будет соответствовать реальности со сдвигом в 10 минут. В файле tools.h был добавлен "Медианный фильтр", он нужен для уменьшения уровня шума в показаниях датчиков. По умолчанию фильтр использует 5 измерений и производит фильтрацию каждый раз при обновлении массива показаний. Сам фильтр объявляется как переменная типа medianFilter_t и работать с ней необходимо также как с любой переменной типа float - если необходимо добавить значение в фильтр, то используется оператор = или +=, а при обращении к переменной (при условии наполнения массива данных) на выходе получаем отфильтрованное значение. По сути medianFilter_t "мимикрирует" под тип float, претворяясь не тем, чем он есть на самом деле, для выполнения своих задач. Конечно этот термин не корректен, но это тестовый фильтр и мне хочется использовать именно это понятие в описании принципов его использования. Таким образом, чтобы задействовать фильтр в уже готовом проекте достаточно просто заменить тип у уже описанной переменной с float на medianFilter_t и это позволит избавиться от переписывания всего кода для реализации наполнения массива данных и последующей фильтрации. Просто работайте с ним как с обычной переменной. Исправлена проблема с обработкой заголовков 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/ смотрите по обстоятельствам). В web интерфейсе в разделе "Настройка / Система" добавлен вывод внутреннего таймера millis в читаемом человеческом виде (дни и часы). Он понадобился мне для выявления багов в ходе построения графиков показаний, возможно он будет полезен и Вам. И теперь самое главное, это проблема с кодировкой при обновлении программы микроконтроллера. Проблема проявляется при загрузке программы через web интерфейс. Я заметил, что проблема (лично у меня) проявляется только если после изменений в описании сенсоров, проект не был сохранен (Ctrl + S) и был произведен экспорт бинарного файла, который и был загружен в дальнейшем. Если перед экспортом сохранять проект, то проблема уходит. Понаблюдайте за этим моментом у себя, возможно это решение данной проблемы. Еще раз напоминаю об утечки памяти в ESP8266 v2.4.1, используйте v2.4.0
  24. Kitsum

    Метеостанция на ESP8266 от it4it.club

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