• Система автоматизации с открытым исходным кодом на базе esp8266/esp32 микроконтроллеров и приложения IoT Manager. Наша группа в Telegram

ESP8266 показания давления с BMP180 в архив на месяц

mr_smit

New member
IMG_20200904_175958.jpg

EDB ведёт нумерацию строк с 1. Если после создания таблицы не заполнить ее пустыми значениями, то произвольное значение обновить нельзя. И в какую строку продолжать запись после отключения питания если не сохранять номер последней записи?

Ааа... Кажется понял, вы предлагаете каждый раз просматривать таблицу и искать ноль? Это долго. Проще одну строчку пожертвовать на хранение. К тому же этот вариант не сработает когда таблица заполнится.
 

mr_smit

New member
IMG_20200904_181445.jpg

Прошли сутки, пока всё работает. Вот только как в этом dimple дату и время по оси Х прорядить...
 

nikolz

Well-known member
Ничего не понял. Какой ноль куда записывать вы предлагаете?
Вы написали:
"Номер последнего "сохранения" хранится в 340 строке таблицы. Чтобы после отключения/включения питания знать в какую строку таблицы продолжать запись. "
Вместо того чтобы занимать 340 строку номером, я предложил Вам просто записать ноль в первую свободную строку таблицы.
для записи находите первую строку с нулем пишите туда новую запись и после нее пишите ноль.
 

nikolz

Well-known member
и еще
Зачем Вы год пишите по оси. Вы что собираетесь столетие изображать?
Поставьте год один раз где-нибудь и будет вам счастье.
Дату тоже надо изображать один раз, когда она меняется.
 

l15ar

Member
spiffsimg-манипулирование образами дисков Флэш-файловой системы SPI
Вы когда-нибудь хотели, чтобы вы могли подготовить изображение SPIFFS в автономном режиме и прошить все это вещь на хранение вашего микропроцессора вместо кропотливой загрузки файл за файлом через ваше приложение на микро? С spiffsimg вы можете!

NodeMCU использует файловую систему SPIFFS, которая знает, насколько она велика - то есть когда вы строите файловую систему изображение, оно должно поместиться в флэш-чип, и его нельзя расширить после вспышки. Очень важно придать spiffimgинструменту правильный размер. Вы можете предоставить либо -cвариант, либо оба -U-Sварианта и.
зачем публиковать тарабарщину? (подчеркнуто)

Начинающим проще будет освоить микропитон. Код для этого проекта(на микропитоне) будет работать на этом модуле! Конечно, модуль - неудачный.
Принципе, снять старую флэш на модуле, поставить новую на 4МБ(32Мбит), микропитон и файловая система FAT, для хранения архива.
Забирать архив из файловой системы модуля, по требованию пользователя, простейший веб-сервис. Отрисовку графиков на устройстве пользователя - javascript.
 

mr_smit

New member
и еще
Зачем Вы год пишите по оси. Вы что собираетесь столетие изображать?
При загрузке архивной страницы я передаю дату и время в формате 01.01.2020Т12:00. Чтобы dimple сам расставил точки в хронологическом порядке. Потому что сам архив я читаю с 1 по 339 строку последовательно. Не важно как там перетасована дата. Соответственно dimple отображает координаты каждой точки где по Х откладывается дата. Говорю же не знаю как прорядить чтобы не было нагромождения. И как год убрать.
 

mr_smit

New member
Вот HTML код страницы с архивом. Именно в таком виде ESP отдает его браузеру. Можете его в файл сохранить и открыть браузером.
HTML:
<!DOCTYPE HTML>
<html><head>
<meta content = "text/html; charset=UTF-8" http-equiv = "content-type">
<script src="http://d3js.org/d3.v5.min.js"></script>
<script src="http://dimplejs.org/dist/dimple.v2.3.0.min.js"></script>
</head><body><script type="text/javascript">
var svg = dimple.newSvg("body", "100%", 910);
var data = [
{ "DateTime":"2020-09-03T20:00:00", "pressure":762},
{ "DateTime":"2020-09-03T21:00:00", "pressure":762},
{ "DateTime":"2020-09-03T22:00:00", "pressure":761},
{ "DateTime":"2020-09-03T23:00:00", "pressure":762},
{ "DateTime":"2020-09-04T00:00:00", "pressure":762},
{ "DateTime":"2020-09-04T01:00:00", "pressure":762},
{ "DateTime":"2020-09-04T02:00:00", "pressure":762},
{ "DateTime":"2020-09-04T03:00:00", "pressure":763},
{ "DateTime":"2020-09-04T04:00:00", "pressure":762},
{ "DateTime":"2020-09-04T05:00:00", "pressure":762},
{ "DateTime":"2020-09-04T06:00:00", "pressure":762},
{ "DateTime":"2020-09-04T07:00:00", "pressure":763},
{ "DateTime":"2020-09-04T08:00:00", "pressure":763},
{ "DateTime":"2020-09-04T09:00:00", "pressure":763},
{ "DateTime":"2020-09-04T10:00:00", "pressure":762},
{ "DateTime":"2020-09-04T11:00:00", "pressure":762},
{ "DateTime":"2020-09-04T12:00:00", "pressure":762},
{ "DateTime":"2020-09-04T13:00:00", "pressure":761},
{ "DateTime":"2020-09-04T14:00:00", "pressure":761},
{ "DateTime":"2020-09-04T15:00:00", "pressure":761},
{ "DateTime":"2020-09-04T16:00:00", "pressure":760},
{ "DateTime":"2020-09-04T17:00:00", "pressure":760},
{ "DateTime":"2020-09-04T18:00:00", "pressure":759},
{ "DateTime":"2020-09-04T19:00:00", "pressure":759},
{ "DateTime":"2020-09-04T20:00:00", "pressure":759},
{ "DateTime":"2020-09-04T21:00:00", "pressure":759},
{ "DateTime":"2020-09-04T22:00:00", "pressure":759},
{ "DateTime":"2020-09-04T23:00:00", "pressure":759},
{ "DateTime":"2020-09-05T00:00:00", "pressure":759},
{ "DateTime":"2020-09-05T01:00:00", "pressure":759},
{ "DateTime":"2020-09-05T02:00:00", "pressure":759},
{ "DateTime":"2020-09-05T03:00:00", "pressure":759},
{ "DateTime":"2020-09-05T04:00:00", "pressure":759},
{ "DateTime":"2020-09-05T05:00:00", "pressure":759},
{ "DateTime":"2020-01-01T00:00:00", "pressure":0},
{ "DateTime":"2020-01-01T00:00:00", "pressure":0},
{ "DateTime":"2020-01-01T00:00:00", "pressure":0}
];
var myChart = new dimple.chart(svg, data);
myChart.setBounds(70, 30, "95%", 600);
var x = myChart.addCategoryAxis("x", "DateTime");
var y = myChart.addMeasureAxis("y", "pressure");
x.showGridlines = true;
x.fontSize = "auto";
x.title = "Дата/Время";
y.overrideMin = 700;
y.overrideMax = 800;
y.fontSize = "auto";
y.title = "Давление в мм рт.ст.";
myChart.addSeries(null, dimple.plot.line);
myChart.draw();
</script></body>
Какие настройки форматирования для оси Х надо добавить я не знаю.
 

nikolz

Well-known member
зачем публиковать тарабарщину? (подчеркнуто)

Начинающим проще будет освоить микропитон. Код для этого проекта(на микропитоне) будет работать на этом модуле! Конечно, модуль - неудачный.
Принципе, снять старую флэш на модуле, поставить новую на 4МБ(32Мбит), микропитон и файловая система FAT, для хранения архива.
Забирать архив из файловой системы модуля, по требованию пользователя, простейший веб-сервис. Отрисовку графиков на устройстве пользователя - javascript.
согласен, но это перевод гугла.
----------------
питон сложнее чем луа. Работает раз в 10 медленнее, занимает больше памяти во флеш.
Не понимаю в чем достоинство.
 

nikolz

Well-known member
Вот HTML код страницы с архивом. Именно в таком виде ESP отдает его браузеру. Можете его в файл сохранить и открыть браузером.
HTML:
<!DOCTYPE HTML>
<html><head>
<meta content = "text/html; charset=UTF-8" http-equiv = "content-type">
<script src="http://d3js.org/d3.v5.min.js"></script>
<script src="http://dimplejs.org/dist/dimple.v2.3.0.min.js"></script>
</head><body><script type="text/javascript">
var svg = dimple.newSvg("body", "100%", 910);
var data = [
{ "DateTime":"2020-09-03T20:00:00", "pressure":762},
{ "DateTime":"2020-09-03T21:00:00", "pressure":762},
{ "DateTime":"2020-09-03T22:00:00", "pressure":761},
{ "DateTime":"2020-09-03T23:00:00", "pressure":762},
{ "DateTime":"2020-09-04T00:00:00", "pressure":762},
{ "DateTime":"2020-09-04T01:00:00", "pressure":762},
{ "DateTime":"2020-09-04T02:00:00", "pressure":762},
{ "DateTime":"2020-09-04T03:00:00", "pressure":763},
{ "DateTime":"2020-09-04T04:00:00", "pressure":762},
{ "DateTime":"2020-09-04T05:00:00", "pressure":762},
{ "DateTime":"2020-09-04T06:00:00", "pressure":762},
{ "DateTime":"2020-09-04T07:00:00", "pressure":763},
{ "DateTime":"2020-09-04T08:00:00", "pressure":763},
{ "DateTime":"2020-09-04T09:00:00", "pressure":763},
{ "DateTime":"2020-09-04T10:00:00", "pressure":762},
{ "DateTime":"2020-09-04T11:00:00", "pressure":762},
{ "DateTime":"2020-09-04T12:00:00", "pressure":762},
{ "DateTime":"2020-09-04T13:00:00", "pressure":761},
{ "DateTime":"2020-09-04T14:00:00", "pressure":761},
{ "DateTime":"2020-09-04T15:00:00", "pressure":761},
{ "DateTime":"2020-09-04T16:00:00", "pressure":760},
{ "DateTime":"2020-09-04T17:00:00", "pressure":760},
{ "DateTime":"2020-09-04T18:00:00", "pressure":759},
{ "DateTime":"2020-09-04T19:00:00", "pressure":759},
{ "DateTime":"2020-09-04T20:00:00", "pressure":759},
{ "DateTime":"2020-09-04T21:00:00", "pressure":759},
{ "DateTime":"2020-09-04T22:00:00", "pressure":759},
{ "DateTime":"2020-09-04T23:00:00", "pressure":759},
{ "DateTime":"2020-09-05T00:00:00", "pressure":759},
{ "DateTime":"2020-09-05T01:00:00", "pressure":759},
{ "DateTime":"2020-09-05T02:00:00", "pressure":759},
{ "DateTime":"2020-09-05T03:00:00", "pressure":759},
{ "DateTime":"2020-09-05T04:00:00", "pressure":759},
{ "DateTime":"2020-09-05T05:00:00", "pressure":759},
{ "DateTime":"2020-01-01T00:00:00", "pressure":0},
{ "DateTime":"2020-01-01T00:00:00", "pressure":0},
{ "DateTime":"2020-01-01T00:00:00", "pressure":0}
];
var myChart = new dimple.chart(svg, data);
myChart.setBounds(70, 30, "95%", 600);
var x = myChart.addCategoryAxis("x", "DateTime");
var y = myChart.addMeasureAxis("y", "pressure");
x.showGridlines = true;
x.fontSize = "auto";
x.title = "Дата/Время";
y.overrideMin = 700;
y.overrideMax = 800;
y.fontSize = "auto";
y.title = "Давление в мм рт.ст.";
myChart.addSeries(null, dimple.plot.line);
myChart.draw();
</script></body>
Какие настройки форматирования для оси Х надо добавить я не знаю.
например,
можно в ESP запись в архив делать в числовом формате:
В архиве сохраняем дату,время и значение, как целые числа т е {2020090,200000,762},
а преобразование в текст с названиями значений делаем при передаче архива.
В итоге таблица 340 значений займет в 4 раза меньше места,
т е можно в архиве сохранить примерно 1200 значений.
------------------
При формировании таблицы в формате HTML сравниваем дату текущей строки и дату предыдущей строки таблицы.
Если даты не равны, либо это первая строка, то строка будет иметь вид:
{ "DateTime":"2020-09-03_20:00:00", "pressure":762},
Если даты равны, то строка имеет вид:
"DateTime":"21:00:00", "pressure":762},
можно проверять значения часа, если равны то формировать строку в виде:
"DateTime":"00:00", "pressure":762},
можно проверять значения минут, если равны то формировать строку в виде:
"DateTime":"00", "pressure":762}.
 

CodeNameHawk

Moderator
Команда форума
Какие настройки форматирования для оси Х надо добавить я не знаю.
Ось х надо переделать, смотрите пример
https://github.com/PMSI-AlignAlytics/dimple/blob/master/examples/advanced_time_axis.html

Тогда сможете поменять отображение используя ticks, dateParseFormat.

Посмотрите примеры может что понравится
 

mr_smit

New member
Они там подгружают файл:
JavaScript:
d3.csv("CIMIS_Station_125.csv", type, function (error, data) {
  if (error) throw error;
А у меня массив параметров.
 

CodeNameHawk

Moderator
Команда форума
Последнее редактирование:

mr_smit

New member
Вы его на есп создаете?
Я выдаю данные вместе с HTML кодом страницы.
JavaScript:
String ptr = "<!DOCTYPE HTML>\n";
  ptr += "<html><head>\n";
  ptr += "<meta content = \"text/html; charset=UTF-8\" http-equiv = \"content-type\">\n";
  ptr += "<script src=\"http://d3js.org/d3.v5.min.js\"></script>\n";
  ptr += "<script src=\"http://dimplejs.org/dist/dimple.v2.3.0.min.js\"></script>\n";
  ptr += "</head><body><script type=\"text/javascript\">\n";
  ptr += "var svg = dimple.newSvg(\"body\", \"100%\", 910);\n";
  ptr += "var data = [\n";
 
  for (int z=1; z < 339; z++) {
    
    EDBresult = db.readRec(z, EDB_REC myRec);
        if (EDBresult == EDB_OK)
        {
            //{ "DateTime":"2020-08-22T00:00:00", "pressure":762 },
            ptr += "{ \"DateTime\":\"" + String (myRec.date) + "T" + String (myRec.tim) + "\", \"pressure\":" + String (myRec.Pressure) + "},\n";
        }
  } 

      EDBresult = db.readRec(339, EDB_REC myRec);
        if (EDBresult == EDB_OK)
        {
            ptr += "{ \"DateTime\":\"" + String (myRec.date) + "T" + String (myRec.tim) + "\", \"pressure\":" + String (myRec.Pressure) + "}\n";
        }

 
  ptr += "];\n";
  ptr += "var myChart = new dimple.chart(svg, data); \n";
...
...
...
...
...
 
Сверху Снизу