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

Умный дом для чайника

=AK=

New member
А я в упор не вижу никакой разницы между вот этими двумя платами по качеству изготовления. Однако можно отметить, что рядом с основным чипом на малинке нет ни одного развязывающего конденсатора. Довольно странно, что она вообще работает с таким дизайном. Сейчас даже самые дубовые китайцы таких ляпов уже не делают.

NodeMcu-Lua-CP2102-1.jpg hardware-rpi2.jpg
 
Последнее редактирование:

jia

New member
А я в упор не вижу никакой разницы между вот этими двумя платами по качеству изготовления. Однако можно отметить, что рядом с основным чипом на малинке нет ни одного развязывающего конденсатора. Довольно странно, что она вообще работает с таким дизайном. Сейчас даже самые дубовые китайцы таких ляпов уже не делают.

Посмотреть вложение 2255 Посмотреть вложение 2256
Ок, уговорили
Изобретайте велосипед, пишите свои алгоритмы группового кругового опроса еспшек друг друга.
Удачно покодить в тот момент, когда для этого нужно добавить всего пару строчек кода на главную железку
 

=AK=

New member
Изобретайте велосипед
Это тут причем? Вы несли галиматью о материях, в которых ни шиша не смыслите. На что получили обоснованные возражения. Эмоции можете оставить при себе, они никому не интересны.
 

Alexey N

Member
Ок, уговорили
Изобретайте велосипед, пишите свои алгоритмы группового кругового опроса еспшек друг друга.
Удачно покодить в тот момент, когда для этого нужно добавить всего пару строчек кода на главную железку
Я точно также могу пожелать Вам удачи в загромождении умного дома ненужными железками, усложняя систему, когда вместо этого надо всего немного покодить. На самом деле это просто разные концепции. Ни одна из не лучше и не правильнее другой. Каждый выбирает то, что ему больше нравится или проще для понимания.
 

jia

New member
Это тут причем? Вы несли галиматью о материях, в которых ни шиша не смыслите. На что получили обоснованные возражения. Эмоции можете оставить при себе, они никому не интересны.
Какие эмоции?
Вот так вот с лету, алгоритм самодиагностики десятка есп и круговой проверки с нотификацией?
Как все должно происходить?
В то время, как в системах домашней автоматизации, в протоколы которых умеет espeasy, это анализ ОДНОГО параметра
 
Последнее редактирование:

jia

New member
Я точно также могу пожелать Вам удачи в загромождении умного дома ненужными железками, усложняя систему, когда вместо этого надо всего немного покодить. На самом деле это просто разные концепции. Ни одна из не лучше и не правильнее другой. Каждый выбирает то, что ему больше нравится или проще для понимания.
Давайте вернемся к тому же первому вашему посту
Там вы ходите Маджордомо, но скорее как визуализаторщика и юзать под это ПК
Тот же маджордомо, установленный на малину/орандж за 12долларов, будет это все делать автономно от вашего пк... все что вам нужно - зайти с мобла/компа и понаблюдать за результатами.
С другой стороны маджордомо не умеет в протокол общения с easyesp, если играться с потешными системами, то сразу с теми, что умеют в esp
EasyProtocols - ESP8266
 

pvvx

Активный участник сообщества
Как все должно происходить?
Берете router с WiFi, который по отзывам менее всех глючит, ставите туда OpenWRT... а не какие-то тяпляпки на малинах....
Малины и прочие конструкторы собираете и несете в кружок детского творчества. Там им самое место и используют по назначению... :)
 

jia

New member
Берете router с WiFi, который по отзывам менее всех глючит, ставите туда OpenWRT... а не какие-то тяпляпки на малинах....
Малины и прочие конструкторы собираете и несете в кружок детского творчества. Там им самое место и используют по назначению... :)
Жесть какая
И что тот роутер сможет в контексте разговора?

ЗЫ. В каком месте малина конструктор? Всего-то сама плата и дебиан, чему там глючить?
 

pvvx

Активный участник сообщества
Жесть какая
И что тот роутер сможет в контексте разговора?
А что сможет малина или ещё какая платка(?), к которой надо ещё всякого понавтыкать, найти корпус, проверить на надежность работы, пожарные всякие дела (как горит) и т.д. и т.п.
ЗЫ. В каком месте малина конструктор? Всего-то сама плата и дебиан, чему там глючить?
Сама плата малины не работает. Надо ещё много чего к ней прикрутить...
У меня вот есть практически все версии малин и не в одном экз. - ищу детский кружок, куда их сдать...
Ваша малина с дебиан работает от UPS (ИБП) ?
Если нет, то просьба рассказать как работает процедура загрузки дебиан с SD карты у которой утеряна разметка из-за выключения питания не вовремя.
Могу сразу оговорить – вопросов ещё будет много и дешевых решеный их в случае использования “малины с дебиан” не будет. После их решения, стоимость такой системы “на малине с дебиан” будет составлять не менее нескольких десятков тысяч рублей. :) Иначе это детская поделка для написания вечернего блога и не сможет конкурировать с простейшим решением на уже имеющейся аппаратной части во множестве роутеров, куда устанавливается OpenWRT. Возможно есть ещё более надежные, подходящие и более дешевые решения для “главнокомандующего умным домом”, но не “малины с дебиан” на SDкарте или USB-брелке, куда даже нельзя сливать логи или строить базы данных... об остальном пока умолчу. Подожду вашего решения на первый вопрос с бедами у SD... :);)
 
Последнее редактирование:

jia

New member
А что сможет малина или ещё какая платка(?), к которой надо ещё всякого понавтыкать, найти корпус, проверить на надежность работы, пожарные всякие дела (как горит) и т.д. и т.п.
Ну в идеале и еспшке корпус нужен, например та же электрическая коробка или еще что пластмассовое
Хотя у меня есть для малины корпус - это заранее построенная микро "серверная"

Сама плата малины не работает. Надо ещё много чего к ней прикрутить...
А пацаны то и не знают!
В данный момент у меня под fhem трудится малина+БП от мобильного на 2А+флешка на 2 гига... все

У меня вот есть практически все версии малин и не в одном экз. - ищу детский кружок, куда их сдать...
Ваша малина с дебиан работает от UPS (ИБП) ?
Если нет, то просьба рассказать как работает процедура загрузки дебиан с SD карты у которой утеряна разметка из-за выключения питания не вовремя.
Да никак, включается и дальше работает... файловая система журналируемая
Рядом полтора года трудится сервак с умирающей матерью... вис и выключался без холта он раз 200 - жив
К тому же есть rsync, который делает фулл бекап каждую ночь

Могу сразу оговорить – вопросов ещё будет много и дешевых решеный их в случае использования “малины с дебиан” не будет. После их решения, стоимость такой системы “на малине с дебиан” будет составлять не менее нескольких десятков тысяч рублей. :) Иначе это детская поделка для написания вечернего блога и не сможет конкурировать с простейшим решением на уже имеющейся аппаратной части во множестве роутеров, куда устанавливается OpenWRT.
Вот у меня вся эта кухня начала управлять отоплением (включать выключать котел) и коллектором водного теплого пола... полом управляет библиотека на основе ШИМ

Возможно есть ещё более надежные, подходящие и более дешевые решения для “главнокомандующего умным домом”, но не “малины с дебиан” на SDкарте или USB-брелке, куда даже нельзя сливать логи или строить базы данных... об остальном пока умолчу. Подожду вашего решения на первый вопрос с бедами у SD... :);)
Для базы данных и масштабных логов fhem - у меня raid5 на основе флешек, там отказоустойчивость космическая... для особой надежности онлайн - всегда можно подключить по сети iscsi жесткий диск

ЗЫ. Но таки немного расстроило в начале то, что нельзя воткнуть в малину 4 флешки, сделать из них рейд 5 и посадить всю систему на него - не откомпилированно ядро для поддержки загрузки с raid
ЗЫ.ЗЫ. Но таки в будущем, как куплю ТВкоробочку на i5, старый пень N3540 пойдет на автоматизацию

ЗЫ.ЗЫ.ЗЫ.
Вам не кажется, что с какими-то комплексами в сторону малины (или незнание линуксов-юниксов?) вы отошли от темы, где автор хочет логироваться на флешку... Почему вы думаете, что флешка на малине умрет, а на еспшке - нет?
 
Последнее редактирование:

Alexey N

Member
вы отошли от темы, где автор хочет логироваться на флешку..
Тут не совсем верное утверждение. Поскольку я только осваиваю ЕСП, то какого-то окончательного и бесповоротного решения у меня нет. За что и был неоднократно здесь обвинен в дилетантстве, с чем покорно соглашаюсь. И лог на флешку это был только один из предполагаемых вариантов. На данный момент я хочу освоить работу с внутренные файловой системой ЕСП и, если ее возможностей будет достаточно, то на ней и остановиться.
Я ничего не имею против Вашей организации умного дома. Более того, если Вы читали первые посты, то я хотел делать, что-то похожее, только в качестве центрального модуля использовать Ардуино Мега. Но поскольку я все равно хочу использовать настольный ПК в качестве основного места хранения базы данных и визуализатора, то хочу пока попробовать обойтись без модулей-посредников.
 

Alexey N

Member
Вот потребовалась помощь. Не знаю насколько это относится именно к ЕСП, но спрошу.
Разбираюсь со скетчем AdvancedWebServer из примеров. Все меня устраивает, текущие данные выводятся как положено. В дальнейшем я их поменяю на свои данные температуры, влажности и давления. То есть страничка с минимумом информации, на которую можно зайти, готова. Захотелось мне чуть приукрасить эту страничку. Вставить меленькие значки, обозначающие температуру и другие показатели. Самым простым способом я посчитал вставку изображения прямо в генерируемый ХТМЛ-код в виде или рисования в канвасе или в виде закодированного в base64 изображения. Но столкнулся с тем, что скетч не компилируется. Компиляция виснет с ошибкой "at java.util.regex.Pattern$GroupTail.match(Pattern.java:4717)" Как я понимаю, функция snprintf не может обработать передаваемую ей строку. Есть ли какие-то ограничения snprintf на длину строки или символы? Вот пример ХТМЛ-кода с канвасом. В простом ХТМЛ редакторе он замечательно рисуется и отображается. А с snprintf не хочет дружить.

HTML:
   snprintf ( temp, 400,
"
<html>\
  <head>\
  <meta http-equiv=refresh content='5'/>\
  <title>ESP8266 Demo</title>\
  <style>\
  body { background-color: #cccccc; font-family: Arial, Helvetica, Sans-Serif; Color: #000088; }\
  </style>\
  </head>\
  <body>\
  <h1>Hello from ESP8266!</h1>\
  <p>Uptime: %02d:%02d:%02d</p>\
  <canvas id=example>Обновите браузер</canvas>\
  <script>\
  var example = document.getElementById('example'),\
  ctx = example.getContext('2d');\
  example.width  = 64;\
  example.height = 64;\
  ctx.beginPath();\
  ctx.arc(32, 10, 6, 0,Math.PI, true);\
  ctx.moveTo(26,10);\
  ctx.lineTo(26,50);\
  ctx.moveTo(38,10);\
  ctx.lineTo(38,50);\
  ctx.lineWidth = 4;\
  ctx.moveTo(15,40);\
  ctx.lineTo(15,60);\
  ctx.lineTo(48,60);\
  ctx.lineTo(48,40);\
  ctx.stroke();\
  </script>\
  </body>\
</html>\
",
     hr, min % 60, sec % 60
   );
 
Последнее редактирование:

=AK=

New member
Вы как-то грубо со строками обращаетесь. Символ \ в строке обозначает, что следующий за ним символ будет специальной командой, например, \n - означает, что в строку надо вставить код 10, и т.п. А у вас что получается? После \ у вас идет то ли пробел, то ли возврат каретки, в любом случае внятно это интерпретировать невозможно, вот вам и выдают ошибку.

Да и вобще, нафиг вам такие вам непременно надо такие длинные строки именно в sprintf запендюрить? По частям нельзя строку отослать, что ли?
 

Alexey N

Member
В примере AdvancedWebServer, который я взял за основу, каждая строка заканчивается этим символом. Я, видимо ошибочно, подумал, что это особенность ардуиновского исполнения Сишной функции. Вот и тоже впендюрил в конец каждой строки слэш.
Про передачу именно длинных строк нет никаких предпочтений. Просто в примере было сделано именно так, и я просто попробовал чуть изменить уже готовый пример. Короткими строками было бы отсылать даже удобней и код был бы читабельней и проще в редактировании. Не могли бы Вы дать ссылку на пример такого кода? В стандартных примерах я такого не видел, а в интернете пока не нашел.
 
Последнее редактирование:

=AK=

New member
В примере AdvancedWebServer, который я взял за основу, каждая строка заканчивается этим символом.
Нет, это я лопухнулся, символ \ в конце строки означает конкатенацию строк. Значит, просто строка у вас слишком длинная получилась. Посылайте строку по частям.
 

Alexey N

Member
Не могли бы Вы дать ссылку на пример такого кода? В стандартных примерах я такого не видел, а в интернете пока не нашел.
Вроде нашел, то что надо. Ссылка на источник My first web server! - Everything ESP8266. И на всякий случай скопирую код сюда. Пока нет возможности попробовать его скомпилировать. На выходных, думаю, найду время.

Код:
/*  Simple Web Server for ESP8266-12E
*  NattyFido 2015
*  www.nattyfido.co.uk  (shameless plug!)
*/

#include <ESP8266WiFi.h>

const char* ssid = "YOUR-SSID";                //  SSID of LAN/WLAN
const char* password = "YOUR-PASSWORD";        //  password
const int port = 80;                           //  port to serve pages through

const int led0 = 13;
const int led1 = 12;
const int led2 = 14;

int v1 = 0;
int v2 = 0;

WiFiServer server(port);

void setup() {
  Serial.begin(115200);                        //  start serial for debug
  delay(10);
  pinMode(led0, OUTPUT);                       //  all outputs for LEDs
  pinMode(led1, OUTPUT);
  pinMode(led2, OUTPUT);
  digitalWrite(led0, 0);                       //  all LEDs off to start
  digitalWrite(led1, 0);
  digitalWrite(led2, 0);
  Serial.println();
  Serial.println();
  Serial.print("Connecting to ");
  Serial.println(ssid);
  WiFi.begin(ssid, password);                    //  connect to WiFi network
  while (WiFi.status() != WL_CONNECTED) {        //  wait until connected
    delay(500);
    Serial.print(".");
  }
  Serial.println("");
  Serial.println("WiFi connected");
  server.begin();                                // Start the server
  Serial.println("Server started");
  Serial.println(WiFi.localIP());                // Print the servers IP address
}

void loop() {
  WiFiClient client = server.available();        // Check if a client has connected
  if (!client) {
    return;
  }
  Serial.println("New client");                  // Wait until the client sends some data
  while (!client.available()) {
    delay(1);
  }
  String req = client.readStringUntil('\r');     // Read the first line of the request
  Serial.println(req);
  client.flush();
  if (req.indexOf("/led1/0") != -1)              //  if req = /led1/0
    v1 = 0;                                      //  set flag to turn LED1 off
  else if (req.indexOf("/led1/1") != -1)         //  if req = /led1/1
    v1 = 1;                                      //  set flag to turn LED1 on
  else if (req.indexOf("/led2/0") != -1)         //  if req = /led2/0
    v2 = 0;                                      //  set flag to turn LED2 off
  else if (req.indexOf("/led2/1") != -1)         //  if req = /led2/1
    v2 = 1;                                      //  set flag to turn LED2 on
  else {
    Serial.println("Invalid request");           //  URL not recognised
    String r = HTMLHeader();                     //  display home page
    r += HTMLPage();
    r += HTMLFooter();
    client.print(r);                              //  send page to clients browser
    client.stop();                                //  disconnect client
    return;
  }
  digitalWrite(led1, v1);                         //  set LED1 according to v1
  digitalWrite(led2, v2);                         //  set LED2 according to v2
  client.flush();
  String s = HTMLHeader();                        //  display page
  s += HTMLPage();
  s += HTMLFooter();
  digitalWrite(led0, 1);                          //  page is being sent
  client.print(s);                                //  send the response to the client
  client.stop();                                  //  disconnect client
  digitalWrite(led0, 0);                          //  finished sending page
  delay(1);
  Serial.println("Client disonnected");
  Serial.println("");
}

String HTMLHeader() {                             //  standard HTML header
  String h = "HTTP/1.1 200 OK\r\n";
  h += "Content-Type: text/html\r\n\r\n";
  h += "<!DOCTYPE HTML>\n";
  h += "<html>\n";
  h += "<body>\n";
  return h;
}
String HTMLFooter() {                            //  standard HTML footer
  String f = "<table width=\"100%\" bgcolor=\"black\" cellpadding=\"12\" border=\"0\">\n";
  f += "<tr><td><p style = \"color: white; background: black;font-size: 0.8em;";
  f += "font-weight: bold; text-align: center; margin: 0px 10px 0px 10px;\">\n";
  f += "<a href = \"http://www.nattyfido.co.uk\">Dean Fowler</a> &copy; 2015</p></td></tr>";
  f += "</table>";
  f += "</body>\n";
  f += "</html>\n";
  return f;
}

String HTMLPage() {                        //   main HTML for page, edit to suit your application
  String p = "<h1>Simple Webserver</h1>\n";
  p += "<p>Running on a <b>ESP8266-12E</b></p>\n";
  p += "<p>Code written in <b>Arduino IDE</b> by <i>NattyFido</i></p>\n";
  //  display links depending on current state of LEDs 1 & 2
  p += (v1) ? "<p><a href = \"/led1/0\">Turn LED 1 off</a></p>\n" : "<p><a href = \"/led1/1\">Turn LED 1 on</a></p>\n";
  p += (v2) ? "<p><a href = \"/led2/0\">Turn LED 2 off</a></p>\n" : "<p><a href = \"/led2/1\">Turn LED 2 on</a></p>\n";
  return p;
}
Запустил. Прекрасно работает. При подробном изучении заинтересовался строкой:
p += (v1) ? "<p><a href = \"/led1/0\">Turn LED 1 off</a></p>\n" : "<p><a href = \"/led1/1\">Turn LED 1 on</a></p>\n";

как я понимаю, в зависимости от того какое значение (0 или 1) принимает переменная "v1" к строке добавляется либо первый по порядку (нулевой по компьютерному) вариант, либо второй. Как это называется и где можно подробнее прочитать про это?
 
Последнее редактирование:

pvvx

Активный участник сообщества
Вам не кажется, что с какими-то комплексами в сторону малины (или незнание линуксов-юниксов?) вы отошли от темы, где автор хочет логироваться на флешку... Почему вы думаете, что флешка на малине умрет, а на еспшке - нет?
Флешки или SD карты использовать без аппаратного дополнения в виде супервайзера питания с допитыванием их на время "парковки" при выключении общего питания невозможно. Такова их аппаратно-программная структура - при любой записи они переписывают общую разметку всей памяти и если во время этого дела сбой - больше нет этой флашки и требуется низкоуровневый формат программой от производителя контроллера...
А т.к. структура такая дикая (писалась и разрабатывалась какимими-то школьниками), что при записи одного байта надо переписывать все глобальные таблицы, то любая база данных за пару дней убивает их. Если даже как-то решено с резервированием этих таблиц, то аппаратная часть позволяет записывать минимум один блок. А это при записи одного бита требует стирание и перезапись от 64 килобайтного блока. На современных больших - от 128 килобайтного... :)
В связи с этим, все ваши разговоры о ПО на неработающей (не подходящей) аппаратной базе ни к чему. В роутерах стоит обычная Flash и там при вк./откл питания предел потерь составляет последний записанный сектор и ПО для этого приспособлено.
Для базы данных и масштабных логов fhem - у меня raid5 на основе флешек, там отказоустойчивость космическая... для особой надежности онлайн - всегда можно подключить по сети iscsi жесткий диск
Ну вот - стоимость уже переваливает за комплекс с SSD или Скази винч.
Комическая у вас устойчивость - видно, что данный конфиг использовался один вечер, в целях проверки общей работоспособности, а не в режиме 24 часа 365 дней в году... :)
 
Последнее редактирование:

nikolz

Well-known member
Флешки или SD карты использовать без аппаратного дополнения в виде супервайзера питания с допитыванием их на время "парковки" при выключении общего питания невозможно. Такова их аппаратно-программная структура - при любой записи они переписывают общую разметку всей памяти и если во время этого дела сбой - больше нет этой флашки и требуется низкоуровневый формат программой от производителя контроллера...
А т.к. структура такая дикая (писалась и разрабатывалась какимими-то школьниками), что при записи одного байта надо переписывать все глобальные таблицы, то любая база данных за пару дней убивает их. Если даже как-то решено с резервированием этих таблиц, то аппаратная часть позволяет записывать минимум один блок. А это при записи одного бита требует стирание и перезапись от 64 килобайтного блока. На современных больших - от 128 килобайтного... :)
В связи с этим, все ваши разговоры о ПО на неработающей (не подходящей) аппаратной базе ни к чему. В роутерах стоит обычная Flash и там при вк./откл питания предел потерь составляет последний записанный сектор и ПО для этого приспособлено.
Ну вот - стоимость уже переваливает за комплекс с SSD или Скази винч.
Комическая у вас устойчивость - видно, что данный конфиг использовался один вечер, в целях проверки общей работоспособности, а не в режиме 24 часа 365 дней в году... :)
Присоединяюсь.
Вопрос -какая цель логгирования?
Если целью является накопление истории, то для этого достаточно сохранение даннтых в RAM модуля и передачи накопленной информации на существующие серийно устройства (ком смартфон).
----------------------------
Интересно наблюдать беседу.
С одной стороны - поверхностное понимание задачи и шапкозакидательские решения.
С другой - безуспешные попытки знатоков объяснить прозу жизни.
 
Сверху Снизу