Відповісти

Введіть повідомлення і натисніть Надіслати
Параметри

Назад

Огляд теми (нові повідомленні вгорі)

Araqel
2021-04-27 15:25:53

Ну и к десерту:
https://github.com/kbickar/IoT/tree/master/WaterReader

Araqel
2021-04-27 15:21:09

Представляю диссертацию на тему считывания данных со счетчика. Был применен 8-и битный МК с революционным алгоритмом распознавания, что позволило справлятся с задачей на весьма ограниченном "железе".
https://forum.arduino.ua/img/members/3144/Digitisation_of_Conventional_Water_Meters_using_Automated_Number.zip

executer
2021-04-19 17:47:30

у меня есть кнопочка "перейти в старый интерфейс" и там все как было так и осталось. Основное, на чем можно долго застрять - это забыть увеличить номер версии при коммите редакции скрипта - исполняться будет старый скрипт со старой версией.

NickVectra
2021-04-18 23:12:34
akapulko пише:

Li-po аккумулятор обеспечит часы автономной работы, длительные отключения случаются достаточно редко (хотя  это ситуативно). Ну а остановиться в середине между цифрами может любой разряд и это тоже приведет к сбою.

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

Если проследить за работой  счетчика, то плавно "переключается" только младший разряд, хотя сбои бываю и в других разрядах.
Вот пример некорректного распознавания:
   дата         время       м3*100   минут  разница, м3
04.03.2021 04:00:01    2818796    1         2
04.03.2021 04:02:01    2818899    1         103
04.03.2021 04:03:01    2818801    1         -98
04.03.2021 04:04:01    2818803    1          2

т.к. у меня распознается вся шкала, то происходит само "коррекция".

Действительно можно построить систему и на том методе, что Вы предлагаете и запоминать значение во внутренней памяти, передавая его по необходимости.

akapulko
2021-04-18 22:15:01
NickVectra пише:
akapulko пише:

Объясните мне тугому пожалуйста, зачем распознавать все цифры, если можно ввести начальное значение и отслеживать изменение младшего разряда?

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

Кроме того отслеживание только одного значения, последнего разряда, который постоянно меняется может приводить к сбоям в распознавании. Например остановиться в середине между цифрами


Li-po аккумулятор обеспечит часы автономной работы, длительные отключения случаются достаточно редко (хотя  это ситуативно). Ну а остановиться в середине между цифрами может любой разряд и это тоже приведет к сбою.

Araqel
2021-04-18 21:28:52
akapulko пише:

Объясните мне тугому пожалуйста, зачем распознавать все цифры, если можно ввести начальное значение и отслеживать изменение младшего разряда?

Похожим на такой принцып работают современные автономные электронные регистраторы на счетчиках, но не на "зрении". При автономном питание "зрение" весьма затрато в плане энергопотребления. Как правило, они построены на микроконтроллерах и модулях связи, с мизерным потреблением в спящем режиме и пробуждаются с началом каждой прокрутки "младшего" разряда. Почему разряд в кавычках? Чаще всего они используют индукционный датчик и отслеживают не цифровой разряд, а "вертушку" с самым малым числом передачи от движителя на потоке (газ, вода и т.д.). индукционные датчики многофазны, чтобы засечь обратную противоправную прокрутку назад, умеют передавать сигнал тревоги при демонтировании со счетчика, абсолютно герметичны, могут обновлять свою прошивку "через воздух" и т.д.
Сам через немогу разбирал недавно такое устройство для счетчика воды. Так качественно было залито все затвердевшей смолой, что промучился прилично. Разбирал специально для разбора предоставленный образец из Англии. Сам прибор был, по моему, швейцарский.

NickVectra
2021-04-18 21:18:15
akapulko пише:

Объясните мне тугому пожалуйста, зачем распознавать все цифры, если можно ввести начальное значение и отслеживать изменение младшего разряда?

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

Кроме того отслеживание только одного значения, последнего разряда, который постоянно меняется может приводить к сбоям в распознавании. Например остановиться в середине между цифрами

akapulko
2021-04-18 20:47:33

Объясните мне тугому пожалуйста, зачем распознавать все цифры, если можно ввести начальное значение и отслеживать изменение младшего разряда?

Araqel
2021-04-18 17:10:24
NickVectra пише:
Araqel пише:

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

Интерфейс изменился, но я давно не работал с этим.

Только что попробовал создать новый проект (пустой).
Вверху выбрал Начать развертывание
Веб-приложение
В разделе У кого есть доступ - доступно:
- Только у меня
- Любой пользователь с аккаунтом Google
- Все

"Все" у меня не доступно. Странно.

NickVectra
2021-04-18 00:21:43
Araqel пише:

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

Интерфейс изменился, но я давно не работал с этим.

Только что попробовал создать новый проект (пустой).
Вверху выбрал Начать развертывание
Веб-приложение
В разделе У кого есть доступ - доступно:
- Только у меня
- Любой пользователь с аккаунтом Google
- Все

Araqel
2021-04-18 00:07:01
NickVectra пише:
Araqel пише:

Вот я вижу, у вас код тоже обходится анонимным входом на Гугл (char *GScriptId = "****************"; //ID что есть адрес скрипта, но оно не предполагает, что Вы авторизованы этим при входе). Это по данным 20-го года. А как обстоит дело в наши дни?

Я не уверен, что это ответ на Ваш вопрос, но в этом видео на 0:57 выбирается доступ без авторизации
https://www.youtube.com/watch?v=f46VBqWwUuI

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

Araqel
2021-04-17 23:53:31

Это очень легко проверить. Зайдите на свой https://script.google.com/ и нажмите на Deploy. В взлетающем меню есть только "Вы" и "авторизированный пользователь Гугл". Иными словами микроконтроллр должен авторизоваться на Гугле, чтобы прописать что либо на сервере, хоть послать фото, хоть какие то строчки в ГуглШит.

NickVectra
2021-04-17 23:42:27
Araqel пише:

Вот я вижу, у вас код тоже обходится анонимным входом на Гугл (char *GScriptId = "****************"; //ID что есть адрес скрипта, но оно не предполагает, что Вы авторизованы этим при входе). Это по данным 20-го года. А как обстоит дело в наши дни?

Я не уверен, что это ответ на Ваш вопрос, но в этом видео на 0:57 выбирается доступ без авторизации
https://www.youtube.com/watch?v=f46VBqWwUuI

Araqel
2021-04-17 23:32:21
NickVectra пише:
executer пише:

По GoogleSheets можете подсмотреть у меня в предыдущем проекте https://github.com/executer-uno/ESP32_DustTracker - запись пары сотни символов раз в 30 секунд - работает отлично на ESP32. Лимит - миллион ячеек на книгу, кажется. Делал по мануалам от автора библиотеки  https://github.com/electronicsguy/ESP8266/tree/master/HTTPSRedirect, ну только запись в книгу использовал, без календаря и вычитки параметров.

Спасибо за ссылку на Ваш предыдущий проект, но как в описании Вы написали
"HTTPS Redirect библиотека Таблицы Google использовал этот протокол для загрузки данных. Самая сложная библиотека как по мне)"

Немного упростил код из других примеров и сделал запись в таблицу значений м3 при изменении. Эти же значения сохраняются в кольцевом буфере.

//запись данных счетчика в таблицу
//https://github.com/mrmdudek/ESP32-send-data-to-google-sheet
//https://github.com/ExploreLab/IoT_ggSpreadSheet 
//https://voltiq.ru/post-data-to-google-sheets-with-esp8266/ - скрипт за основу брал этот
//https://developers.google.com/apps-script/reference/spreadsheet/sheet


#include <WiFiClientSecure.h>
WiFiClientSecure client;
char *server_sheet = "script.google.com";  // Server URL
char *GScriptId = "****************"; //ID 
const int httpsPort = 443;

//---------------------------------------------------- GG_ScriptSheet
void GG_ScriptSheet(float m3_sheet, float minutes_sheet){
  String Data = String("&m3=")+(int)m3_sheet+String("&minutes=") + (int)minutes_sheet; 
  String url32 = String("/macros/s/") + GScriptId + "/exec?"+Data;
  Serial.print("Client.Connecting...");
//  Serial.println(url32);
  if (client.connect(server_sheet, httpsPort)) {
    client.println("GET " + String(url32) + " HTTP/1.1"); //HTTP/1.0 OK sent LINEnotify and GoogleSheet
    client.println("Host: " + String(server_sheet));
    client.println("User-Agent: ESP32_counter");
    client.println("Connection: closernrn");
//    Serial.println("Response...OK !!!");  
  }
  else Serial.println("Connection failed!");  
/*  
  while (client.connected()) 
  {
      String line = client.readStringUntil('n');
      if (line == "r") 
      {
//        Serial.println("headers received");
        break;
      }
    }
    // if there are incoming bytes available
    // from the server, read them and print them:
    while (client.available()) 
    {
      char c = client.read();
//      Serial.write(c);
  }
*/
  client.stop();
}
//---------------------------------------------------- GG_ScriptSheet

Поставил на прогон - работает.
Таблица состоит из двух листов на первом - последнее время записи, число строк и последнее значение счетчика.
На вторую страницу записываются сами данные виде ID | DataTime | m3*100 | minutes
За трое суток, при неработающем отоплении, у меня в кольцевом буфере сохранилось около 150 значений. Потребление при использовании горячей воды (как правило не более 0,01 м3/мин).

Вот я вижу, у вас код тоже обходится анонимным входом на Гугл (char *GScriptId = "****************"; //ID что есть адрес скрипта, но оно не предполагает, что Вы авторизованы этим при входе). Это по данным 20-го года. А как обстоит дело в наши дни?

Araqel
2021-04-17 23:18:16
Araqel пише:
executer пише:

Благодарю.
Меня смущало большое количество SPI хостов на ESP32, почему-то решил что для экрана отдельный хост используется, а как указать какой именно бибилиотеке - не понятно, короче перемудрил).

По GoogleSheets можете подсмотреть у меня в предыдущем проекте https://github.com/executer-uno/ESP32_DustTracker - запись пары сотни символов раз в 30 секунд - работает отлично на ESP32. Лимит - миллион ячеек на книгу, кажется. Делал по мануалам от автора библиотеки  https://github.com/electronicsguy/ESP8266/tree/master/HTTPSRedirect, ну только запись в книгу использовал, без календаря и вычитки параметров.

Оказывается, у Вас большой опыт в интерактивных с Гуглом делах. Вот попытался осуществить https://github.com/gsampallo/esp32cam-gdrive такой проект. Но код в данный репозиторий быль помещен давно и видимо с тех пор в политике Гугл многое изменилось. Ананимно взаимодейстовать с WEB api уже не получается, что пытается делать микроконтроллер, а нужно как мимниму вступать на сервер как зарегистрированный пользователь Гугла, если не как хозяин данного Гугл диска. Я даже открыл новый issue, но надежд мало, что хозяин репо что то ответит, который не заглядывал туда 14 месяцев. По вашему мнению какие строки туда должны заноситься, чтобы вход на сервер не был анонимным?

Я этот код подправил под GSM связь. Вот лог недавольства контроллера надо мною:
20:50:36.000 -> Connecting to APN: internet.beeline.am OK
20:50:40.490 -> Waiting for network...
20:50:40.490 -> GPRS status: connected
20:50:40.490 -> Local IP:10.111.107.23
20:50:46.510 -> Connected to GPRS
20:50:46.784 -> Connect to script.google.com
20:50:49.947 -> Connection successful
20:50:50.832 -> Send a captured image to Google Drive.
20:50:52.940 -> (SSLClient)(SSL_ERROR)(m_update_engine): Error writing to m_client
20:50:52.940 -> (SSLClient)(SSL_ERROR)(m_update_engine): 0
20:50:52.940 -> (SSLClient)(SSL_ERROR)(connected): Not connected because write error is set
20:50:52.974 -> (SSLClient)(SSL_ERROR)(m_print_ssl_error): SSL_CLIENT_WRITE_FAIL
20:50:52.974 -> (SSLClient)(SSL_WARN)(m_run_until): Terminating with write error:
20:50:52.974 -> (SSLClient)(SSL_WARN)(m_run_until): 4
20:50:52.974 -> (SSLClient)(SSL_ERROR)(write): Failed while waiting for the engine to enter BR_SSL_SENDAPP
20:50:52.974 -> (SSLClient)(SSL_ERROR)(write): Cannot operate if the write error is not reset:
20:50:52.974 -> (SSLClient)(SSL_ERROR)(m_print_ssl_error): SSL_CLIENT_WRITE_FAIL
20:50:53.009 -> (SSLClient)(SSL_ERROR)(write): Cannot operate if the write error is not reset:
20:50:53.009 -> (SSLClient)(SSL_ERROR)(m_print_ssl_error): SSL_CLIENT_WRITE_FAIL
20:50:53.009 -> (SSLClient)(SSL_ERROR)(write): Cannot operate if the write error is not reset:

Підвал форуму