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

Модератор: Alex

ledmax
Сообщения: 88
Зарегистрирован: Сб окт 24, 2015 9:56 pm
Благодарил (а): 11 раз
Поблагодарили: 8 раз

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

Сообщение ledmax » Пн апр 24, 2017 3:26 pm

На здоровье :)

Это всё красиво, но не очень практично.. Я делал этот график, что бы анализировать показатели( с научной точки зрения) Но вот пользоваться было не очень удобно. Если каждую минуту писать данные в лог, то через сутки он становится довольно большим, долго грузится и не очень удобно смотреть данные.
Нужно создать страницу, где можно выбирать даты, время, переменные, расширение отображения итд. Потом жмёшь кнопку " построить график" и открывается вот эта вся красота..

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

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

Сообщение serghei » Пн апр 24, 2017 3:36 pm

Для начала это уже достижение. Согласен, красиво и видно динамику процесса. Анализировать можно на стороне средствами того же Экселя , но при скачивании почему то не указывается время - только дата и значение.
И если кому то интересно ,ledmax ,разрешаете выложить готовую сборку АМС с Вашим кодом ?
AMS : ESP32 + NRF24 + 1Wire-I2C мост DS2482 + счетчик DS2423 + сеть MySensors + редактирование страниц в браузере + Upload по воздуху + SPIFFS
ledmax
Сообщения: 88
Зарегистрирован: Сб окт 24, 2015 9:56 pm
Благодарил (а): 11 раз
Поблагодарили: 8 раз

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

Сообщение ledmax » Пн апр 24, 2017 4:58 pm

serghei писал(а):Для начала это уже достижение. Согласен, красиво и видно динамику процесса. Анализировать можно на стороне средствами того же Экселя , но при скачивании почему то не указывается время - только дата и значение.
И если кому то интересно ,ledmax ,разрешаете выложить готовую сборку АМС с Вашим кодом ?
Да пожалуйста..))
serghei
Сообщения: 2575
Зарегистрирован: Пт ноя 06, 2015 10:22 am
Откуда: Кишинёв
Благодарил (а): 303 раза
Поблагодарили: 282 раза

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

Сообщение serghei » Пн апр 24, 2017 10:01 pm

Вставил этот код в АМС для ЕСП с SD картой. Заменил обращение к SPIFFS на SD. Обругало на ровном месте
СпойлерПоказать

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

Arduino: 1.6.5 (Windows 7), Плата"WeMos D1 mini, 80 MHz, Serial, 921600, 4M (3M SPIFFS)"

Изменена опция сборки, пересобираем все

Используем библиотеку SPI в папке: C:\Users\User\AppData\Roaming\Arduino15\packages\esp8266\hardware\esp8266\2.0.0\libraries\SPI 

'DataLogInit' was not declared in this scope
То же самое воткнул в скетч МЕГИ. Все отлично компилируется. Пока еще не загружал. Скачал все библиотеки Chart. Занимают не так и много места.
В чем может быть прикол???
AMS : ESP32 + NRF24 + 1Wire-I2C мост DS2482 + счетчик DS2423 + сеть MySensors + редактирование страниц в браузере + Upload по воздуху + SPIFFS
ledmax
Сообщения: 88
Зарегистрирован: Сб окт 24, 2015 9:56 pm
Благодарил (а): 11 раз
Поблагодарили: 8 раз

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

Сообщение ledmax » Пн апр 24, 2017 10:16 pm

serghei писал(а):Вставил этот код в АМС для ЕСП с SD картой. Заменил обращение к SPIFFS на SD. Обругало на ровном месте
СпойлерПоказать

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

Arduino: 1.6.5 (Windows 7), Плата"WeMos D1 mini, 80 MHz, Serial, 921600, 4M (3M SPIFFS)"

Изменена опция сборки, пересобираем все

Используем библиотеку SPI в папке: C:\Users\User\AppData\Roaming\Arduino15\packages\esp8266\hardware\esp8266\2.0.0\libraries\SPI 

'DataLogInit' was not declared in this scope
То же самое воткнул в скетч МЕГИ. Все отлично компилируется. Пока еще не загружал. Скачал все библиотеки Chart. Занимают не так и много места.
В чем может быть прикол???
В DataLogWorks ?)))
скобки стоит после?

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

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

Сообщение serghei » Пн апр 24, 2017 10:23 pm

Да всё абсолютно одинаковое - просто вынул из ЕСП со SPIFFS и вставил с SD. На МЕГЕ все отлично
СпойлерПоказать

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

/*
  Arduino Mega Server for ESP8266
  version 0.15
  2016, Hi-Lab.ru
  
  License: Free, without any warranties
  Home:    http://hi-lab.ru/arduino-mega-server (russian)
           http://hi-lab.ru/english/arduino-mega-server (english)
  Email:   info@hi-lab.ru
  
  IDE: Arduino 1.6.5 r2
*/

// modules
#define SD_FEATURE
#define SD_INFO_FEATURE
//#define SD_FILES_FEATURE//
#define RTC_FEATURE
#define NTP_FEATURE
#define HTTP_FEATURE
//#define FTP_FEATURE
//#define SEND_FEATURE
//#define MAJORDOMO_FEATURE
//#define LAURENT_FEATURE
//#define CONTACTS_FEATURE
//#define PIRS_FEATURE
//#define TEMP_FEATURE
//#define LEDS_FEATURE
//#define KEYS_FEATURE

#define DATALOG_FEATURE

//========================================
//#define ELECTRO_FEATURE
//===========================================

// #define NRF24_FEATURE

// debug
//#define ELECTRO_DEBUG
//#define EVENTS_CONTACTS
//#define EVENTS_PIRS
//#define TEMP_DEBUG
#define SERIAL_PRINT

#include <SPI.h>
#include <ESP8266WiFi.h>
#include <DNSServer.h>
//#include <FS.h>
#include <SD.h>
#include <Time.h>
#include <Wire.h>


 #include <LiquidCrystal_I2C.h>       // Подключаем библиотеку

  LiquidCrystal_I2C lcd(0x27,20,4);    // Назначаем адрес и размер экрана..20,4..или 16,2

char const SELF_NAME[] = "ESP8266 SD 43";
//char const SELF_NAME[] = "ESP8266";
byte SELF_IP[] = {192, 168, 2, 43};

// Authorization
#define AUTH_OFF 0
#define AUTH_ON  1
byte authMode = AUTH_OFF;
// online encode: base64encode.org
String AUTH_HASH = "Authorization: Basic YWRtaW46YW1z"; // admin:ams

// time provider
#define TIME_NONE    0
#define TIME_NETWORK 1
#define TIME_RTC     2
byte timeProvider = TIME_NETWORK;


//=====================================================

#ifdef NRF24_FEATURE
  // commands
  byte const GET_NAME      = 1;
  byte const DTA_NAME      = 2;
  byte const SET_NAME      = 3;
  byte const GET_ADDR      = 4;
  byte const DTA_ADDR      = 5;
  byte const SET_ADDR      = 6;
  byte const GET_FREE_MEM  = 7;
  byte const DTA_FREE_MEM  = 8;
  byte const GET_BATTERY   = 9;
  byte const DTA_BATTERY   = 10;
  byte const GET_SELF_TEMP = 11;
  byte const DTA_SELF_TEMP = 12;
  byte const GET_TEMP_1    = 13;
  byte const DTA_TEMP_1    = 14;
  
   byte const GET_TEMP_2    = 17;     //      или 2 температуры или температура и вода
   byte const DTA_TEMP_2    = 18;     //
  
  // byte const GET_TEMP_3    = 17;     //
  // byte const DTA_TEMP_3    = 18;     //
  
  byte const GET_VOL_1     = 19;     //      запрос объема
  byte const DTA_VOL_1     = 20;     //      объем воды от YFS201

  
 byte const GET_VOL_2      = 21;// добавляем переменные для счетчика 2 литров-запрос
 byte const DTA_VOL_2      = 22;// Тоже данные
  
  
  byte const GET_HEALTH    = 15;
  byte const DTA_HEALTH    = 16;
  byte const GET_ID        = 100;
  byte const DTA_ID        = 101;
  byte const SET_ID        = 102;
  byte const GEN_ID        = 103;
  byte const BAK_ECHO      = 200;  

  // sender structure
  typedef struct Sender {
    boolean active      = false;
    boolean required    = true;
    boolean success     = false;
    byte type           = 0;
    byte command        = 0;
    byte number         = 0;
    byte tryouts        = 0;
    int errors          = 0;
    String result       = "";
    unsigned long timer = millis();
  } sender;

  sender sendEcho,
         sendGetName, sendGetId, sendGetAddress,
         sendGetFreeMem, sendGetBattery, sendGetSelfTemp,
         sendGetHealth, sendGetVol1,sendGetVol2,
         sendGetTemp1,

          sendGetTemp2; 
         // sendGetTemp3;
 // net stat
 int sendPackets        = 0;
 int sendRetrys         = 0;
 int sendErrors         = 0;
 int receivePackets     = 0;
 int successPackets     = 0;
 int sendPacketsStat    = 0;
 int sendRetrysStat     = 0;
 int sendErrorsStat     = 0;
 int receivePacketsStat = 0;
 int successPacketsStat = 0;
    
// nRF24 controller
  String nrf1Name;
  String nrf1Id;
  byte   nrf1Addr;
  byte   nrf1Battery;
  byte   nrf1Health;
  int    nrf1FreeMem;
  float  nrf1SelfTemp;

  float  nrf1Temp1;
  float  nrf1Temp2;
  // float  nrf1Temp3;
  
  unsigned int nrf1Vol1;  
 //float  nrf1Temp1;
  unsigned int nrf1Vol2; 


#endif // NRF24_FEATURE

// hardware structure


typedef struct Hardware {
  byte platform  = 0;
  byte ethernet  = 0;
  byte sdType    = 0;
  byte sdFs      = 0;
  int  sdVolume  = 0;
  byte nrf24L01  = 0;
  byte nooMt1132 = 0;
  byte nooMr1132 = 0;
  byte rtc       = 0;

  byte tlog       = 0;
} hardware;

hardware hard;

//===================================================

// modules
#define MODUL_DISABLE       0
#define MODUL_ENABLE        1
#define MODUL_NOT_COMPILLED 2
byte modulRtc      = MODUL_NOT_COMPILLED;
byte modulNtp      = MODUL_NOT_COMPILLED;
byte modulSend     = MODUL_NOT_COMPILLED;
byte modulMajor    = MODUL_NOT_COMPILLED;
byte modulLaurent  = MODUL_NOT_COMPILLED;
byte modulPirs     = MODUL_NOT_COMPILLED;
byte modulContacts = MODUL_NOT_COMPILLED;
byte modulTemp     = MODUL_NOT_COMPILLED;
byte modulLeds     = MODUL_NOT_COMPILLED; 
byte modulKeys     = MODUL_NOT_COMPILLED;
byte modulFtp      = MODUL_NOT_COMPILLED;

byte modulEthernet = MODUL_NOT_COMPILLED;
byte modulSd       = MODUL_NOT_COMPILLED;
byte modulServer   = MODUL_NOT_COMPILLED;
byte modulPing     = MODUL_NOT_COMPILLED;
byte modulUpload   = MODUL_NOT_COMPILLED;
byte modulElectro  = MODUL_NOT_COMPILLED;
byte modulNoo      = MODUL_NOT_COMPILLED;
byte modulMr1132   = MODUL_NOT_COMPILLED;
byte modulNrf24    = MODUL_NOT_COMPILLED;

byte modulTlog     = MODUL_NOT_COMPILLED;
/*
// electro
boolean buttonElectro = 0;

// oscill
boolean oscill = false;

// cyclos
unsigned long cyclos = 0;

//==================================================================
// timers

//==================================================
unsigned long timeSec; // time in seconds
//=======================================================
*/
boolean cycle1s  = false;
boolean cycle4s  = false;
boolean cycle20s = false;
boolean cycle30s = false;
boolean cycle1m  = false;
boolean cycle3m  = false;
boolean cycle5m  = false;
//============================================================
//int startSendTime = 10;
//========================================================
// strings
char buf[200];

// for sample Ajax
boolean LED_state[4] = {0};

#ifdef LEDS_FEATURE
  // LED modes
  #define LED_EMPTY 0
  #define LED_PIR 1
  byte modeLed = LED_EMPTY;
#endif



/* setup
------------------------------------- */

void setup() {
  Serial.begin(115200);
  Serial.print(F("\nAMS for "));
  Serial.print(SELF_NAME);
  Serial.println(" started...");
  hardwareInit();
  timersInit();
  wifiInit();
  //spiffsInit();///////////

   sdCardInit();
  #ifdef SD_INFO_FEATURE
    sdInfoInit();
  #endif
  #ifdef SD_FILES_FEATURE
    sdFilesInit();
  #endif
  
  randomInit();
  eepromInit();

  
   
  ntpInit();
  rtcInit();
  #ifdef HTTP_FEATURE
    httpInit();
  #endif
  #ifdef FTP_FEATURE
    ftpInit();
  #endif
  serverInit();
  #ifdef MAJORDOMO_FEATURE
    majordomoInit();
  #endif
  #ifdef LAURENT_FEATURE
    laurentInit();
  #endif
  #ifdef TEMP_FEATURE
    tempInit();
  #endif




//============================================
  #ifdef ELECTRO_FEATURE
   electroInit();
  #endif
//==============================================
  
  #ifdef CONTACTS_FEATURE
    contactsInit();
  #endif
  #ifdef PIRS_FEATURE
    pirsInit();
  #endif
  #ifdef LEDS_FEATURE
    ledsInit();
  #endif
  #ifdef KEYS_FEATURE
    keysInit();
  #endif

    //================================================

  
#ifdef NRF24_FEATURE
    nrf24Init();
  #endif

  #ifdef DATALOG_FEATURE
    DataLogInit();
  #endif


  //================================================
  Serial.print(F("GLOBAL Init DONE ("));
  Serial.print(millis() / 1000);
  Serial.println(F("s)\n"));
  Serial.println(F("AMS WORK"));
  timeStamp(); printFreeMem("");


  
  
     //  lcd.begin();                       // В зависимости от библиотеки
      
    lcd.init();                        // Инициализация lcd             
  lcd.backlight();                       // Включаем подсветку
                                         // Курсор находится в начале 1 строки
  lcd.print("NODE_MCU_SD  AMC_015");       // Выводим любой текст
  
  lcd.setCursor(0, 1);
  lcd.print("TEMP 1 =");                 //Выводится один раз при старте 

  
  lcd.setCursor(17, 1);
  lcd.print("C*");                      //Выводится один раз при старте 
  
  
  lcd.setCursor(0, 2);
  lcd.print("BOILER =");                 //Выводится один раз при старте 


  lcd.setCursor(17, 2);
  lcd.print("LIT");                      //Выводится один раз при старте 


  
  lcd.setCursor(0, 3);
  lcd.print("WASH   =");                 //Выводится один раз при старте 


  lcd.setCursor(17, 3);
  lcd.print("LIT");                      //Выводится один раз при старте 


} // setup

/* setup
------------------------------------- */

void loop() {
  timersWorks();
  rtcWorks();
  //clockWork();
  
  #ifdef HTTP_FEATURE
    httpWork();
  #endif
  #ifdef FTP_FEATURE
    ftpWork();
  #endif
  
  serverWorks();
  
  #ifdef TEMP_FEATURE
    if (cycle30s) {tempWorks();}
  #endif

//===================================================================

  #ifdef DATALOG_FEATURE
    DataLogWorks();
  #endif

  
    #ifdef ELECTRO_FEATURE
      if (modulElectro == 1) {
       if (cycle20s || (timeSec < startSendTime)) {
          electroWorks();
          freqWorks();
        }
        // network oscilloscope
        if (cycle1s && oscill) {
          freqWorks();
        }
      }
    #endif
   

 //==========================================================
  #ifdef CONTACTS_FEATURE
    contactsWorks();
  #endif
  #ifdef PIRS_FEATURE
    pirsWorks();
  #endif
  #ifdef KEYS_FEATURE
    keysWorks();
  #endif
  #ifdef LAURENT_FEATURE
    if (cycle5m) {
      sprintf(buf, "$KE");
      sendLaurentRequest();
    }
  #endif
//=============================================
   #ifdef MAJORDOMO_FEATURE
      majordomoMegaLive();
    #endif

//==============================================
  
  //======================================
   #ifdef NRF24_FEATURE
      nrf24Works();

     if (timer1(1000, 9000)) {
     
        carousel();
      }
    #endif

    //========================================    ????????
 /* 
 lcd.setCursor(10, 1);//  устанавливаем начальную позицию вывода значения
    lcd.print(nrf1Temp1);//  Выводим любое значение,конкретно тут температуру сенсора
    
    
    lcd.setCursor(10, 2);//  устанавливаем начальную позицию вывода значения
    lcd.print(nrf1Vol1);//  Выводим любое значение,конкретно тут объем воды


     
    lcd.setCursor(10, 3);//  устанавливаем начальную позицию вывода значения
    lcd.print(nrf1Vol2);//  Выводим любое значение,конкретно тут объем воды
   */
  if (cycle20s) {
    //
  }

  if (cycle1m) {
    timeStamp(); printFreeMem("");
  }

  // end loop works
  cyclosInSecWork();
  cyclosDelayWork();
  eraseCyclos();
/*
  lcd.setCursor(10, 2);//  устанавливаем начальную позицию вывода значения
    lcd.print(nrf1Temp1);//  Выводим любое значение,конкретно тут температуру сенсора
    
    
    lcd.setCursor(10, 3);//  устанавливаем начальную позицию вывода значения
    lcd.print(nrf1Vol1);//  Выводим любое значение,конкретно тут объем воды

 */   
} // loop
Ажакс еще не правил
Полный код без карточки
Вложения
ams_esp8266_sd_vol_work_2_vol.rar
(40.67 КБ) 175 скачиваний
Последний раз редактировалось serghei Пн апр 24, 2017 10:34 pm, всего редактировалось 1 раз.
AMS : ESP32 + NRF24 + 1Wire-I2C мост DS2482 + счетчик DS2423 + сеть MySensors + редактирование страниц в браузере + Upload по воздуху + SPIFFS
ledmax
Сообщения: 88
Зарегистрирован: Сб окт 24, 2015 9:56 pm
Благодарил (а): 11 раз
Поблагодарили: 8 раз

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

Сообщение ledmax » Пн апр 24, 2017 10:32 pm

serghei писал(а):Да всё абсолютно одинаковое - просто вынул из ЕСП со SPIFFS и вставил с SD. На МЕГЕ все отлично
СпойлерПоказать

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

/*
  [/quote]

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

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

Сообщение serghei » Пн апр 24, 2017 10:41 pm

На МЕГЕ компилируется
Вложения
AMS_MEGA_WeMos_016.rar
(44.96 КБ) 166 скачиваний
AMS : ESP32 + NRF24 + 1Wire-I2C мост DS2482 + счетчик DS2423 + сеть MySensors + редактирование страниц в браузере + Upload по воздуху + SPIFFS
serghei
Сообщения: 2575
Зарегистрирован: Пт ноя 06, 2015 10:22 am
Откуда: Кишинёв
Благодарил (а): 303 раза
Поблагодарили: 282 раза

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

Сообщение serghei » Вт апр 25, 2017 10:35 pm

Закинул код на Мегу 016. Заменил SPIFFS.remove("/gotdata.css"); на SD.remove("/gotdata.css"); и везде по коду. Файл создался , но данные не записываются и соответственно не отображаются. Что то не то сделал ((.
Только сейчас догнало - это если записывать показания даже раз в 5 минут , это 1000 записей за двое - трое суток. Так и карту убить не долго. А все таки отловил два глюка - один раз даллас выкинул - 127С и DHT выдал 400 процентов. Абалденная штука! И главное история сохранена на компе. Вот только как её стереть не останавливая сервер ?.......
AMS : ESP32 + NRF24 + 1Wire-I2C мост DS2482 + счетчик DS2423 + сеть MySensors + редактирование страниц в браузере + Upload по воздуху + SPIFFS
eGorka
Сообщения: 182
Зарегистрирован: Чт ноя 24, 2016 10:47 am
Благодарил (а): 5 раз
Поблагодарили: 25 раз

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

Сообщение eGorka » Вт апр 25, 2017 10:58 pm

serghei писал(а):Вот только как её стереть не останавливая сервер ?.......
Вставить в скетч

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

void DataLogClear() {
File logfile = SPIFFS.open("/gotdata.css", "w");
logfile.close();
}
и вызывать кнопкой из браузера
За это сообщение автора eGorka поблагодарил:
serghei (Вт апр 25, 2017 11:01 pm)
Рейтинг: 1.16%
Ответить