визуализация данных

Модератор: Alex

eGorka
Сообщения: 182
Зарегистрирован: Чт ноя 24, 2016 10:47 am
Благодарил (а): 5 раз
Поблагодарили: 25 раз

Re: визуализация данных

Сообщение eGorka » Вс июл 22, 2018 12:01 pm

serghei писал(а):
Вс июл 22, 2018 10:48 am
А для начала понять , что там стоит RTOS , и программировать надо с учетом этого.

Код: Выделить всё

void setup() {
  Serial.begin(112500);
  Serial.println();
  xTaskCreatePinnedToCore(Task0, "Task0", 1024, NULL, 1, NULL, 0);
  xTaskCreatePinnedToCore(Task1, "Task1", 1024, NULL, 1, NULL, 1);
}

void loop() {
  Serial.println(" loopTask - задача выполняется на core1 каждые 45 секунд");
  vTaskDelay(45000/portTICK_PERIOD_MS);
}

void Task0(void * parameter){
  for(;;){
    Serial.println(" Task0 - задача выполняется на core0 каждые 30 секунд");
    vTaskDelay(30000/portTICK_PERIOD_MS);
  }
  vTaskDelete(NULL);
}

void Task1(void * parameter){
  for(;;){
    Serial.println(" Task1 - задача выполняется на core1 каждую минуту");
    vTaskDelay(60000/portTICK_PERIOD_MS);
  }
  vTaskDelete(NULL);
}
alexsis_76
Сообщения: 791
Зарегистрирован: Пт янв 22, 2016 10:08 am
Благодарил (а): 6 раз
Поблагодарили: 63 раза

Re: визуализация данных

Сообщение alexsis_76 » Вс окт 21, 2018 2:40 am

Добрался таки доделать термостат, serghei у тебя работало?
serghei
Сообщения: 2575
Зарегистрирован: Пт ноя 06, 2015 10:22 am
Откуда: Кишинёв
Благодарил (а): 303 раза
Поблагодарили: 282 раза

Re: визуализация данных

Сообщение serghei » Вс окт 21, 2018 7:58 am

Да, решил. Алгоритм работает четко для 4-х реле.

Код: Выделить всё

#define relePin 04
#define rele1Pin 26
#define rele2Pin 25
#define rele3Pin 32


void testInit(){
  pinMode(relePin, OUTPUT);
  digitalWrite(relePin, LOW);

  pinMode(rele1Pin, OUTPUT);
  digitalWrite(relePin, LOW);

  pinMode(rele2Pin, OUTPUT);
  digitalWrite(relePin, LOW);

  pinMode(rele3Pin, OUTPUT);
  digitalWrite(relePin, LOW);
}
//==============
void testRele(){ // рабочая функция 
  if(!releSt && current_temp[3] > 40.0){
   // if(!releSt && analogRead(35) > 2000.0){
      
  digitalWrite(relePin, HIGH);

  timeStamp();
  Serial.println(" Rele \"ON\"");
  releSt = 1;

    MessText = "Реле 1 включено";
    MessLoger(String (MessText), String(Info));

  }
  if(releSt && current_temp[3] < 35.0){

  //  if(releSt && analogRead(35) < 1500.0){
  digitalWrite(relePin, LOW);
 timeStamp();
  Serial.println(" Rele \"OFF\"");
  releSt = 0;

    MessText = "Реле 1 выключено";
    MessLoger(String (MessText), String(Info));

  }
}
//========================================

void testRele1(){ // рабочая функция 
  if(!rele1St && current_temp[3] > 30.0){
   // if(!releSt && analogRead(35) > 2000.0){
      
  digitalWrite(rele1Pin, HIGH);

  timeStamp();
  Serial.println(" Rele_1 \"ON\"");
  rele1St = 1;

    MessText = "Реле 2 включено";
    MessLoger(String (MessText), String(Info));  
  }
  if(rele1St && current_temp[3] < 28.0){

  //  if(releSt && analogRead(35) < 1500.0){
  digitalWrite(rele1Pin, LOW);
 timeStamp();
  Serial.println(" Rele_1 \"OFF\"");
  rele1St = 0;

    MessText = "Реле 2 выключено";
    MessLoger(String (MessText), String(Info));
      
  }
}

void testRele2(){ // рабочая функция 
  if(!rele2St && current_temp[3] > 25.0){
   // if(!releSt && analogRead(35) > 2000.0){
      
  digitalWrite(rele2Pin, HIGH);

  timeStamp();
  Serial.println(" Rele_2 \"ON\"");
  rele2St = 1;

    MessText = "Реле 3 включено";
    MessLoger(String (MessText), String(Info));   
  }
  if(rele2St && current_temp[3] < 22.0){

  //  if(releSt && analogRead(35) < 1500.0){
  digitalWrite(rele2Pin, LOW);
 timeStamp();
  Serial.println(" Rele_2 \"OFF\"");
  rele2St = 0;

    MessText = "Реле 3 выключено";
    MessLoger(String (MessText), String(Info));  
  }
}

void testRele3(){ // рабочая функция 
  if(!rele3St && current_temp[3] > 20.0){
   // if(!releSt && analogRead(35) > 2000.0){
      
  digitalWrite(rele3Pin, HIGH);

  timeStamp();
  Serial.println(" Rele_3 \"ON\"");
  rele3St = 1;

    MessText = "Реле 4 включено";
    MessLoger(String (MessText), String(Info));  
  }
  if(rele3St && current_temp[3] < 17.0){

  //  if(releSt && analogRead(35) < 1500.0){
  digitalWrite(rele3Pin, LOW);
 timeStamp();
  Serial.println(" Rele_3 \"OFF\"");
  rele3St = 0;

    MessText = "Реле 4 выключено";
    MessLoger(String (MessText), String(Info));    
  }
}
Единственная проблема - это всё замечательно для идеальных условий. То есть сервер запущен и работает. При старте ( 10 секунд) температура появится спустя время , указанное во вкладке температуры. То есть через 5 минут. Это очень не правильно. Хотелось бы последнюю температуру забрать из файла логирования. Возможно ли такое ? То есть при старте системы прочитать фаил SD карты.
С визуализацией то же есть один момент. Состояние реле - 0 и 1. Можно это передать на страницу Graf , но масштаб будет мелкий. Единицу надо привести к среднему значению температуры , то есть к 30 единицам. Тогда и на графике можно нормально увидеть момент включения.

Вот тут опять уперся в любительское решение. Профессионально так делать конечно же нельзя.
СпойлерПоказать
Rele_32.jpg
Rele_32.jpg (187.31 КБ) 4369 просмотров
AMS : ESP32 + NRF24 + 1Wire-I2C мост DS2482 + счетчик DS2423 + сеть MySensors + редактирование страниц в браузере + Upload по воздуху + SPIFFS
alexsis_76
Сообщения: 791
Зарегистрирован: Пт янв 22, 2016 10:08 am
Благодарил (а): 6 раз
Поблагодарили: 63 раза

Re: визуализация данных

Сообщение alexsis_76 » Вс окт 21, 2018 8:09 am

Я имел ввиду тот что включается по времени
alexsis_76
Сообщения: 791
Зарегистрирован: Пт янв 22, 2016 10:08 am
Благодарил (а): 6 раз
Поблагодарили: 63 раза

Re: визуализация данных

Сообщение alexsis_76 » Вс окт 21, 2018 8:15 am

этот
Безымянный.jpg
Безымянный.jpg (326.72 КБ) 4363 просмотра
serghei
Сообщения: 2575
Зарегистрирован: Пт ноя 06, 2015 10:22 am
Откуда: Кишинёв
Благодарил (а): 303 раза
Поблагодарили: 282 раза

Re: визуализация данных

Сообщение serghei » Вс окт 21, 2018 8:20 am

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

Код: Выделить всё

/*
  Modul Algoritm
  part of Arduino Mega Server project
*/

/*  значение по которому ведется регулирование
    в примере это значени будет задаваться вручную с web
*/

// mode режим
  // 0 - ручной
  // 1 - по значению датчика
  // 2 - по времени
  // 3 - not defined and not contXstatus
byte rele1mode = 0;

/*  значения максимальных и минимальых значений для включения  
    и выключения RELE1 
*/

int value_on = 0;
int value_off = 100;
int value_web = 0;

/* время включения по умолчанию /часы, минуты/
 * при необходимости можно добавить секунды 
 */
int r1hour_on = 19; int r1minute_on = 00;
int r1hour_off = 19; int r1minute_off = 15;

void Regul(){

if (rele1state == 0&&rele1mode == 0&&value_web == 1){ 
      rele1state = 1;
      MessText = "Выход D32. Включение с Веб";
           MessLoger(String (MessText), String (Info));
        //   #ifdef SERIAL_PRINT
           Serial.println("Out D32. command ON to Web");
       //    #endif
           } else{};

if (rele1state == 1&&rele1mode == 0&&value_web == 0){ 
        rele1state = 0;
        MessText = "Выход D32. Отключение с Веб";
           MessLoger(String (MessText), String (Info));
        //   #ifdef SERIAL_PRINT
           Serial.println("Out D32. command ON to Web");
       //    #endif
           } else{};
  
if (rele1state == 0&&rele1mode == 2&&r1hour_on == int (hour())&&r1minute_on == int (minute())){
  rele1state = 1;
  MessText = "Выход D32. Включение по времени";
           MessLoger(String (MessText), String (Info));
       //    #ifdef SERIAL_PRINT
           Serial.println("Out D32. command ON to time");
       //    #endif
           } else{};

if (rele1state == 1&&rele1mode == 2&&r1hour_off == int (hour())&&r1minute_off == int (minute())){
  rele1state = 0;
  
  MessText = "Выход D32. Отключение по времени";
           MessLoger(String (MessText), String (Info));
         //  #ifdef SERIAL_PRINT
           Serial.println("Out D32. command OFF to time");
        //   #endif
           }  else {};
С последним else сомнения есть. А вот этой страницы нет. Давай выкладывай !! ( что то тогда делал , но не до конца).
AMS : ESP32 + NRF24 + 1Wire-I2C мост DS2482 + счетчик DS2423 + сеть MySensors + редактирование страниц в браузере + Upload по воздуху + SPIFFS
alexsis_76
Сообщения: 791
Зарегистрирован: Пт янв 22, 2016 10:08 am
Благодарил (а): 6 раз
Поблагодарили: 63 раза

Re: визуализация данных

Сообщение alexsis_76 » Вс окт 21, 2018 8:21 am

именно с этой страницы
т е ты создаешь время и задаешь действие
alexsis_76
Сообщения: 791
Зарегистрирован: Пт янв 22, 2016 10:08 am
Благодарил (а): 6 раз
Поблагодарили: 63 раза

Re: визуализация данных

Сообщение alexsis_76 » Вс окт 21, 2018 8:23 am

охренеть
ты ее не видел?
serghei
Сообщения: 2575
Зарегистрирован: Пт ноя 06, 2015 10:22 am
Откуда: Кишинёв
Благодарил (а): 303 раза
Поблагодарили: 282 раза

Re: визуализация данных

Сообщение serghei » Вс окт 21, 2018 8:29 am

Видел и даже вставил к себе. Но что то там пошло не так. Кажется там была заготовка. Сейчас перебрался на нормальный комп и собираю все исходники во всех компов в один..... Выложи еще раз, пожалуйста.
AMS : ESP32 + NRF24 + 1Wire-I2C мост DS2482 + счетчик DS2423 + сеть MySensors + редактирование страниц в браузере + Upload по воздуху + SPIFFS
alexsis_76
Сообщения: 791
Зарегистрирован: Пт янв 22, 2016 10:08 am
Благодарил (а): 6 раз
Поблагодарили: 63 раза

Re: визуализация данных

Сообщение alexsis_76 » Вс окт 21, 2018 8:32 am

нужно создать таймеры
там вверху и таблица заполнится
на каждый день можно создать по три таймера
Ответить