визуализация данных
Модератор: Alex
-
- Сообщения: 88
- Зарегистрирован: Сб окт 24, 2015 9:56 pm
- Благодарил (а): 11 раз
- Поблагодарили: 8 раз
Re: визуализация данных
На здоровье
Это всё красиво, но не очень практично.. Я делал этот график, что бы анализировать показатели( с научной точки зрения) Но вот пользоваться было не очень удобно. Если каждую минуту писать данные в лог, то через сутки он становится довольно большим, долго грузится и не очень удобно смотреть данные.
Нужно создать страницу, где можно выбирать даты, время, переменные, расширение отображения итд. Потом жмёшь кнопку " построить график" и открывается вот эта вся красота..
Цены бы не было тому человеку, кто это сделает..
Это всё красиво, но не очень практично.. Я делал этот график, что бы анализировать показатели( с научной точки зрения) Но вот пользоваться было не очень удобно. Если каждую минуту писать данные в лог, то через сутки он становится довольно большим, долго грузится и не очень удобно смотреть данные.
Нужно создать страницу, где можно выбирать даты, время, переменные, расширение отображения итд. Потом жмёшь кнопку " построить график" и открывается вот эта вся красота..
Цены бы не было тому человеку, кто это сделает..
-
- Сообщения: 2575
- Зарегистрирован: Пт ноя 06, 2015 10:22 am
- Откуда: Кишинёв
- Благодарил (а): 303 раза
- Поблагодарили: 282 раза
Re: визуализация данных
Для начала это уже достижение. Согласен, красиво и видно динамику процесса. Анализировать можно на стороне средствами того же Экселя , но при скачивании почему то не указывается время - только дата и значение.
И если кому то интересно ,ledmax ,разрешаете выложить готовую сборку АМС с Вашим кодом ?
И если кому то интересно ,ledmax ,разрешаете выложить готовую сборку АМС с Вашим кодом ?
AMS : ESP32 + NRF24 + 1Wire-I2C мост DS2482 + счетчик DS2423 + сеть MySensors + редактирование страниц в браузере + Upload по воздуху + SPIFFS
-
- Сообщения: 88
- Зарегистрирован: Сб окт 24, 2015 9:56 pm
- Благодарил (а): 11 раз
- Поблагодарили: 8 раз
Re: визуализация данных
Да пожалуйста..))serghei писал(а):Для начала это уже достижение. Согласен, красиво и видно динамику процесса. Анализировать можно на стороне средствами того же Экселя , но при скачивании почему то не указывается время - только дата и значение.
И если кому то интересно ,ledmax ,разрешаете выложить готовую сборку АМС с Вашим кодом ?
-
- Сообщения: 2575
- Зарегистрирован: Пт ноя 06, 2015 10:22 am
- Откуда: Кишинёв
- Благодарил (а): 303 раза
- Поблагодарили: 282 раза
Re: визуализация данных
Вставил этот код в АМС для ЕСП с SD картой. Заменил обращение к SPIFFS на SD. Обругало на ровном месте
То же самое воткнул в скетч МЕГИ. Все отлично компилируется. Пока еще не загружал. Скачал все библиотеки Chart. Занимают не так и много места.
В чем может быть прикол???
СпойлерПоказать
Код: Выделить всё
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
В чем может быть прикол???
AMS : ESP32 + NRF24 + 1Wire-I2C мост DS2482 + счетчик DS2423 + сеть MySensors + редактирование страниц в браузере + Upload по воздуху + SPIFFS
-
- Сообщения: 88
- Зарегистрирован: Сб окт 24, 2015 9:56 pm
- Благодарил (а): 11 раз
- Поблагодарили: 8 раз
Re: визуализация данных
В DataLogWorks ?)))serghei писал(а):Вставил этот код в АМС для ЕСП с SD картой. Заменил обращение к SPIFFS на SD. Обругало на ровном местеТо же самое воткнул в скетч МЕГИ. Все отлично компилируется. Пока еще не загружал. Скачал все библиотеки Chart. Занимают не так и много места.СпойлерПоказатьКод: Выделить всё
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
В чем может быть прикол???
скобки стоит после?
покажите код
-
- Сообщения: 2575
- Зарегистрирован: Пт ноя 06, 2015 10:22 am
- Откуда: Кишинёв
- Благодарил (а): 303 раза
- Поблагодарили: 282 раза
Re: визуализация данных
Да всё абсолютно одинаковое - просто вынул из ЕСП со 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
-
- Сообщения: 88
- Зарегистрирован: Сб окт 24, 2015 9:56 pm
- Благодарил (а): 11 раз
- Поблагодарили: 8 раз
Re: визуализация данных
serghei писал(а):Да всё абсолютно одинаковое - просто вынул из ЕСП со SPIFFS и вставил с SD. На МЕГЕ все отличноСпойлерПоказатьКод: Выделить всё
/* [/quote] Не, вкладку где DataLogInit
-
- Сообщения: 2575
- Зарегистрирован: Пт ноя 06, 2015 10:22 am
- Откуда: Кишинёв
- Благодарил (а): 303 раза
- Поблагодарили: 282 раза
Re: визуализация данных
На МЕГЕ компилируется
- Вложения
-
- AMS_MEGA_WeMos_016.rar
- (44.96 КБ) 166 скачиваний
AMS : ESP32 + NRF24 + 1Wire-I2C мост DS2482 + счетчик DS2423 + сеть MySensors + редактирование страниц в браузере + Upload по воздуху + SPIFFS
-
- Сообщения: 2575
- Зарегистрирован: Пт ноя 06, 2015 10:22 am
- Откуда: Кишинёв
- Благодарил (а): 303 раза
- Поблагодарили: 282 раза
Re: визуализация данных
Закинул код на Мегу 016. Заменил SPIFFS.remove("/gotdata.css"); на SD.remove("/gotdata.css"); и везде по коду. Файл создался , но данные не записываются и соответственно не отображаются. Что то не то сделал ((.
Только сейчас догнало - это если записывать показания даже раз в 5 минут , это 1000 записей за двое - трое суток. Так и карту убить не долго. А все таки отловил два глюка - один раз даллас выкинул - 127С и DHT выдал 400 процентов. Абалденная штука! И главное история сохранена на компе. Вот только как её стереть не останавливая сервер ?.......
Только сейчас догнало - это если записывать показания даже раз в 5 минут , это 1000 записей за двое - трое суток. Так и карту убить не долго. А все таки отловил два глюка - один раз даллас выкинул - 127С и DHT выдал 400 процентов. Абалденная штука! И главное история сохранена на компе. Вот только как её стереть не останавливая сервер ?.......
AMS : ESP32 + NRF24 + 1Wire-I2C мост DS2482 + счетчик DS2423 + сеть MySensors + редактирование страниц в браузере + Upload по воздуху + SPIFFS
-
- Сообщения: 182
- Зарегистрирован: Чт ноя 24, 2016 10:47 am
- Благодарил (а): 5 раз
- Поблагодарили: 25 раз
Re: визуализация данных
Вставить в скетчserghei писал(а):Вот только как её стереть не останавливая сервер ?.......
Код: Выделить всё
void DataLogClear() {
File logfile = SPIFFS.open("/gotdata.css", "w");
logfile.close();
}
- Рейтинг: 1.16%