Автоматика LuckyBox

  • В этой теме 1,030 ответов, 95 участников, последнее обновление 5 лет сделано JON.
Просмотр 15 сообщений - с 226 по 240 (из 1,031 всего)
  • Автор
    Сообщения
  • #21014
    Sergey_r
    Участник
    • Ответов: 2934
    @serjrv

    Современные библиотеки для графиков позволяет довольно навороченные вещи

    Можно вывести любые графики, какие надо? Хорошая гугловская библиотека https://google-developers.appspot.com/chart/interactive/docs/gallery самое главное маленький размер.

    Во первых график должен быть на самой страничке – дистилляция, ректификация и т.д., а там в зависимости от алгоритма. Как минимум при дистилляции – куб и выход пар, при ректификации куб, буфер, царга, выход пар, выход вода деф, я бы еще давление в пропорции на этот же график вывел. Но это мне так удобно, у других могут и другие запросы быть. Тут опрос “населения” нужен.

    #21015
    Sergey_r
    Участник
    • Ответов: 2934
    @serjrv

    Может сбой из-за buzzer’a. Или из-за логики затирания, брезенхема, или еще из-за чего.

    При первом запуске без датчиков у меня тоже wdt срабатывал пока я в самом “скетче” (демо) ssid и pass реальные не прописал. Хотя при этом модуль к сетке не приципился но AP поднял и после записи в настройках и сохранении в EEPROM все ок. Завтра, если успею, попробую этот глючек отловить. Может свою двухгодичной давности инициализацию найду, тогда скину. Я делал так: сканировал wifi на наличие сетей и если моя была, тогда цепляемся к роутеру, если нет, поднимаем AP.

    #21016
    Счастливчик
    Хранитель
    • Ответов: 2655
    @wpadm

    Я делал так: сканировал wifi на наличие сетей и если моя была, тогда цепляемся к роутеру, если нет, поднимаем AP.

    Так этот скетч так же делает. Берет ssid, пароль из файла и ищет свою сеть.

    А если глюк отловите, будет просто волшебно! Спасибо.

    Хорошо живет на свете Винни-Пух...

    #21017
    Sivolday
    Участник
    • Ответов: 17
    @sivolday

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

    В своё время делал вывод графиков на plotly . Графики надо переносить на соответствующие страницы иначе они будут сбрасываться. По хорошему надо сделать одну страницу, а вкладки подгружать через AJAX во <frame>. В этом случае фоном может крутиться скрипт, постоянно принимая данные с датчиков. При такой реализации можно безболезненно осуществлять навигацию по сайту.

    Также эта библиотека позволяет выгружать графики в различных форматах (есть ограничение на количество точек), полноценно поддерживается pan/zoom. Во вложении пример моей реализации.

    Вложения:
    Вы должны войти для просмотра вложений.
    #21022
    Сергей
    Участник
    • Ответов: 67
    @ruflash

    Я готов заняться графиками, считаю это главной ценностью автоматизации

    Прекрасно, давайте. 

    По хорошему надо сделать одну страницу, а вкладки подгружать через AJAX во

    Это была первая моя мысль, только не во фрейм, а в саму вкладку и делать «историю» браузера что бы не грузить каждый раз при переключении вкладок. А репозиторий нужен, да.

    #21023
    Алексей
    Участник
    • Ответов: 18
    @zhila

    В общем вчера под вечер затупил, мониторинг порта не открыл)) В общем перезагруз идет от датчика давления, у меня bmp180, монитор пишет

    Jan 1 1970

    Start 3-SSDP
    Start 2-WebServer
    Start 11-Reflux
    Start 12-Distillation
    Start 13-Brewing
    Start 14-Heater
    Start 15-BMP
    Ooops, no BMP085 detected … Check your wiring or I2C ADDR!Start 16-Buzzer

     

    wdt reset
    load 0x4010f000, len 1384, room 16
    tail 8
    chksum 0x2d
    csum 0x2d
    v614f7c32
    ~ld

     

    И по новой

    #21025
    Сергей
    Участник
    • Ответов: 67
    @ruflash

    Это была первая моя мысль, только не во фрейм, а в саму вкладку и делать «историю» браузера что бы не грузить каждый раз при переключении вкладок. А репозиторий нужен, да.

    Глупо конечно цитировать самого себя (( , бегло просмотрел html, скрол появляется от ифреймов, и мало того все страницы соответственно грузятся в ифреймы со своими скриптами бутстрапом и jquery,  http://joxi.ru/V2VaM3wTxypbzm и у каждого на «bodyonload» запускается функция process() и по тайм ауту каждую секунду пытается отправить данные на сервер.

    Буду все переписывать. Возник соответственно ряд вопросов.
    Нужно ли запускать функции каждой вкладки при открытии? (ректификация, дистилляция…) или нужно иметь «главную» страницу на которой всегда? или нет? висят показания датчиков, графиков. А при открытии требуемой вкладки  есть настройки каждого процесса и кнопка старт, стоп, пауза и возможно на главной «запускается» отображение текущего процесса с графиками, датчиками…
    Нужно ли делать настройки каждого процесса (нужно думаю) — имеем на ректификацию 4 датчика температуры, на дистиляцию 2, на затор 1 мешалка и насос и все это отправлять в ардуину, а она в зависимости от того какие настройки (флаг процесса) ей пришли то и будет отдавать, может мне не нужна ректификация и 4-х термометров у меня не подключено, зато есть насос и мешалка ))).

    Давайте обсудим, ох интересно, уже руки чешутся )))

    #21026
    ers
    Участник
    • Ответов: 30
    @ersivv

    перезагрузка по watch dog’у.

    Некоторые исключения может помочь понять EspExceptionDecoder.

    Может сбой из-за buzzer’a

    По схеме он висит на GPIO16, а он достаточно специфичный.

    Ну не должен чип так себя вести, должны же быть какие-то методы защиты, если адрес, к которому обращаются не отвечает. Но увы…

    Все в руках программиста 🙂

     

    По датчикам температуры тоже подчеркну, что нужно повесить на один пин, не зря же протокол называется 1-wire. Тем самым высвободится парочка хороших пинов.

     

    #21031
    Sivolday
    Участник
    • Ответов: 17
    @sivolday

    Глупо конечно цитировать самого себя (( , бегло просмотрел html, скрол появляется от ифреймов, и мало того все страницы соответственно грузятся в ифреймы со своими скриптами бутстрапом и jquery,  http://joxi.ru/V2VaM3wTxypbzm и у каждого на «bodyonload» запускается функция process() и по тайм ауту каждую секунду пытается отправить данные на сервер.

    Судя по всему это наследие кодогенерации Layoutit.com, конечно так не надо.

    Можно при загрузке сайта подгружать html всех страниц в JS, и по необходимости (для “перехода” на другую вкладку) подменять содержимое соответствующего div-а . Будет только одна медленная загрузка при старте.

    А при открытии требуемой вкладки есть настройки каждого процесса и кнопка старт, стоп, пауза и возможно на главной «запускается» отображение текущего процесса с графиками, датчиками…

    Я тоже думаю, процессы должны запускаться вручную и одновременно может быть активным только один (он физически может быть только один). В loop() реализовать соответствующую логику.

    void loop() {

    HTTP.handleClient();

    // dallRead(flagDallRead*1000);

    distillationLoop();

    if(condition.refluxLoopActiveIs)                // по уму завести enum и через switch

    {

    refluxLoop();

    }

    brewingLoop();

    heaterLoop();

    delay(1);

    }

    Нужно ли делать настройки каждого процесса (нужно думаю)

    Согласен.

    Под эти нужды завести систему DTO классов. Это важно при распределённой разработке. Инкапсуляция прекрасна ещё и при работе в нормальной IDE тогда доступны IntelliSense – проще работать с чужим кодом.

    #21036
    Сергей
    Участник
    • Ответов: 67
    @ruflash

    Можно при загрузке сайта подгружать html всех страниц в JS, и по необходимости (для “перехода” на другую вкладку)

    Если мыслить логически, то и подгружать ничего не надо, сколько там «кода»? 5 строк в таблице (инпуты со значениями) то можно сделать одну страницу, не большой там контент.

    Под эти нужды завести систему DTO классов.

    Пока не могу всецело себе это представить.

    Как я это видел: сделать по типу плагина jqury  с методами (например)  или функциями.
    sendData, getData — отправка/получение данных,
    brewingFun, refluxFun… — процессы, выполняют отображение отправку данных, через вышестоящие методы,
    drawGraph — рисование графиков присылаемых процессами

    Как-то так вижу, наверное опыт подобных реализаций сказывается ))
    $.fn.luckyBox(“brewing”,{“meshIn”:”Жигулевское”,”meshOut”:”Paulaner”});

    т.е. по факту имеем 1 html, несколько js библиотек, css библиотек, js свой, css свой такой одностраничник получается.

    #21037
    Sergey_r
    Участник
    • Ответов: 2934
    @serjrv

    Я делал так: сканировал wifi на наличие сетей и если моя была, тогда цепляемся к роутеру, если нет, поднимаем AP.

    Так этот скетч так же делает. Берет ssid, пароль из файла и ищет свою сеть. А если глюк отловите, будет просто волшебно! Спасибо.

    Вобщем проблема с wdt оказалась очень тривиальной. Вы не учли одну особенность работы шины Wire. Дело в том, что шина конфигурируется на работу в режиме OpenDrain, т.е. сам контроллер ногу в плюс не тянет, а делает это внешний резистор. Соответственно если в определенные моменты на линии ноль, проц думает что датчик есть, и соответственно запускает режим ожидания, там и висит. Подключите на все 4 вывода резисторы (к примеру 4к7) прям на модуле, должно помочь. Сам проверить не могу, т.к. сейчас под рукой NodeMCU V.09, а там не выведены выводы 9 – 14 лапы модуля, соответственно некуда подключить 1-й и 2-й датчики температуры…

    p.s. Сам проверил просто, назначил все на одну лапу и ее подтянул в “+”.

    #21040
    Sergey_r
    Участник
    • Ответов: 2934
    @serjrv

    Обещал инициализацию wifi свою глянуть, вот:

    void wifi_init(){
    WiFi.disconnect(true);
    WiFi.mode(WIFI_AP_STA);

    n_network = WiFi.scanNetworks(); // ищем доступные сети
    ssid_en = 0;
    Serial.print(n_network);
    Serial.println(” networks found:”);
    for (int i = 0; i < n_network; ++i){
    Serial.print(i + 1);
    Serial.print(” -> “);
    Serial.print(WiFi.SSID(i));
    Serial.print(” (“);
    Serial.print(WiFi.RSSI(i));
    Serial.print(“) “);
    Serial.print(“Encryption: “);

    switch (WiFi.encryptionType(i)){
    case ENC_TYPE_WEP:
    Serial.println(“WEP”);
    break;
    case ENC_TYPE_TKIP:
    Serial.println(“WPA”);
    break;
    case ENC_TYPE_CCMP:
    Serial.println(“WPA2”);
    break;
    case ENC_TYPE_NONE:
    Serial.println(“None”);
    break;
    case ENC_TYPE_AUTO:
    Serial.println(“Auto”);
    break;
    }
    if (WiFi.SSID(i) == String(ssid)) ssid_en = 1; // наша сеть присутствует
    }

    Serial.printf(“Connecting to %s\n”, ssid);
    if (ssid_en == 1) WiFi.begin(ssid, password);
    tmp_while = 0;
    ap_mode = 0;
    if (ssid_en != 0){
    while (WiFi.status() != WL_CONNECTED){
    delay(500);
    Serial.print(“.”);
    if (tmp_while < 40) tmp_while++;
    else{
    WiFi.mode(WIFI_AP); // сеть нас не пустила, пароль не тот, переходим в AP
    ap_mode = 1;
    Serial.println(“Not’Connected!”);
    break;
    }
    }
    }

    ………

    }

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

    p.s. Забыл уточнить, вызов функции WiFi.disconnect(true); обязательна при реконнекте. У модуля есть один геморрой в SDK: при превышении допустимых подключений по wifi его сетка виснет, но модуль при этом работает как будто все ок, такая вот беда…

    #21045
    Счастливчик
    Хранитель
    • Ответов: 2655
    @wpadm

    Коллеги, прежде всего – огромное, преогромное спасибо! Ваша помощь просто неоценима!

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

    Затем аврально ныряю в git и он появится в течении недели.

    Заранее прошу запомнить свои предложения для последующей работы в совместном репозитории, т.к. я сам некоторые ваши предложения могу лишь понять, но не всегда воспроизвести)) Как минимум в разумнле время.

    И еще раз спасибо за ваш интерес и помощь.

    Хорошо живет на свете Винни-Пух...

    #21056
    Алексей
    Участник
    • Ответов: 18
    @zhila

    Не знаю что сделал, но заработала без перезагрузок)))

    В идеале конечно бы фон полегче, на телефоне на так смотрибельно получается, особенно режим Ректификация.

    Осталось дождаться остального железа.

    Все датчики подтянул на 5v, ds через 4,7 кОм.

    На макетке удобнее делать, в идеале при доработке системы плату бы напечатать компактно, и вообще красота)))

    Вложения:
    Вы должны войти для просмотра вложений.
    #21061
    Sergey_r
    Участник
    • Ответов: 2934
    @serjrv

    Не знаю что сделал, но заработала без перезагрузок))) В идеале конечно бы фон полегче, на телефоне на так смотрибельно получается, особенно режим Ректификация. Осталось дождаться остального железа. Все датчики подтянул на 5v, ds через 4,7 кОм. На макетке удобнее делать, в идеале при доработке системы плату бы напечатать компактно, и вообще красота)))

    НЕТ!!! Резистор не правильно подключил, переделай с +5v на +3.3v , пока процу не поплохело. Ниже картинка для пояснения процесса… А так DS18B20 и от 3-х волт прекрасно работает.

    Вложения:
    Вы должны войти для просмотра вложений.
Просмотр 15 сообщений - с 226 по 240 (из 1,031 всего)
  • Тема «Автоматика LuckyBox» закрыта для новых ответов.