Зоопарк из esp - как всех загнать и стойло ? (посчитать)

Gagarin74
Offline
Зарегистрирован: 24.08.2013

Добрый день. Столкнулся с одной проблемкой и не совсем понятно как это сделать.

Советом или примером помогите если не трудно.

Описание проблемы. По дому "разбросаны"  esp8266 (допустим у всех на борту есть датчики температуры) и они шлют эти данные(очень даже успешно). Но есть еще масса ESP и будет еще больше (которые выполняют свою работу но без внешних признаков- нет на них датчиков - ни чего нет :))

Желательно все это дело мониторить. Можно конечно и ip назначить,можно и ESP промаркировать - не проблема.

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

Алгоритм (или что хотелось бы в итоге получить).

Развернут web сервер (уже). Хотелось бы на нем видеть присудствие или отсудствие тех или иных ESP.

В виде отображение ip адреса esp и любой переменной которая будет в прошивке ESP (допустим ID устройства). Достаточно статической информации. ESP передергнули по питанию - в списке добавилось. Всякие таймеры,обновления списка -пока не надо рассматривать.

В итоге: Подошел к Esp - выкл вкл - на Web морде сервера - прочитал информацию что за зверька ты передергнул. По какому IP адресу она живет :) Я понимаю что это все можно и на роутере посмотреть. Но повторяюсь- не хочу завязыватся с статикой по IP, плюс еще интересна некая информация из переменных с самих ESP.

 

Практика:

интересует построетние динамической таблицы на сервере, ну и соответственно посылка кода с ESP.

Спасибо.

 

 

rkit
Offline
Зарегистрирован: 23.11.2016

В чем вопрос-то? Ты бы мог половину таблицы уже реализовать, пока писал этот роман.

Gagarin74
Offline
Зарегистрирован: 24.08.2013

вопрос в том что я не web программист к сожалению.

И если создается впячетление что я что то хочу мегонавороченное осуществить и прошивки по 5 листов кода - то это ошибочное мнение.

SAB
Offline
Зарегистрирован: 27.12.2016

Обратись к Евгению П он обязательно разрешит тебе реализовать тобой задуманное

rkit
Offline
Зарегистрирован: 23.11.2016

Gagarin74 пишет:

вопрос в том что я не web программист к сожалению.

Ну иди учись, в чем проблема-то.

Logik
Offline
Зарегистрирован: 05.08.2014

Я использую для esp статичные ip. Проблем с этим нет. Все esp сами веб сервера. Есть и один центральный, на orange pi, LAMP, который периодически опрашивает устройства, собирает статистику и выдаёт веб интерфейс сразу ко всему.

В чем смысл строить таблицы и искать устройства по их включению - для меня загадка. А если свет моргнет, бегать ребутить все esp по кругу будете)))))

BOOM
BOOM аватар
Offline
Зарегистрирован: 14.11.2018

Gagarin74 пишет:

вопрос в том что я не web программист к сожалению.

И если создается впячетление что я что то хочу мегонавороченное осуществить и прошивки по 5 листов кода - то это ошибочное мнение.

Вопрос в том, что у тебя там за web-сервер, какую субд используешь, есть ли PHP (какой версии) ну и тд. 

Там на самом деле все в разы проще мк.

sadman41
Offline
Зарегистрирован: 19.10.2016

Ответ на вопрос "как": заставить их отчитываться на веб-сервер после коннекта к вифи и далее по расписанию. Веб-сервер будет формировать список активных и их метрик.

Вот алгоритм не меганавороченный и без пяти страниц писанины.

Gagarin74
Offline
Зарегистрирован: 24.08.2013

sadman41 пишет:
Ответ на вопрос "как": заставить их отчитываться на веб-сервер после коннекта к вифи и далее по расписанию. Веб-сервер будет формировать список активных и их метрик. Вот алгоритм не меганавороченный и без пяти страниц писанины.

 

Большое спасибо.Наверное Вы более точно сформировали моё "ТЗ"

Вся задумка в том что бы на выходе получить динамическую табличку(без всяких SQL),просто активных устройств на данный момент. То есть имея новую ESP включая её в сеть (и "заставляя" её что то делать, допустим рассчитывать время прибытия автобуса на остановку ) - перегрузив её ,ясно понимать что она "живая" и на неё повешана задача $a="расчет времени автобус"

 

BOOM
BOOM аватар
Offline
Зарегистрирован: 14.11.2018

Как по мне глупо не использовать преимущества субд. Но если не хотите - кто я такой навязывать. 

b707
Offline
Зарегистрирован: 26.05.2017

Gagarin74 пишет:

имея новую ESP включая её в сеть (и "заставляя" её что то делать, допустим рассчитывать время прибытия автобуса на остановку ) - перегрузив её ,ясно понимать что она "живая" и на неё повешана задача $a="расчет времени автобус"

Гагарин, так вопрос-то в чем? - словами уже описали, теперь в коде начинайте.

Если вы ждете, что кто-то вам готовую систему на форуме выложит - шансы практически нулевые... сами должны понимать, не первый день на этом форуме :)

BOOM
BOOM аватар
Offline
Зарегистрирован: 14.11.2018

b707 пишет:

Если вы ждете, что кто-то вам готовую систему на форуме выложит - шансы практически нулевые... 


Да там не сложно, я б написал. Только париться с файлами нет желания, с субд проще.

ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016

BOOM пишет:

 с субд проще.

намного проще )))

Gagarin74
Offline
Зарегистрирован: 24.08.2013

Всем спасибо за внимание.

Вопрос решился.

<?php
$file=__DIR__.'/lines.php';
if(!empty($_GET['ip'])){
  $stroka=htmlspecialchars($_GET['stroka']);
  $ip=htmlspecialchars($_GET['ip']);
$pokaz=htmlspecialchars($_GET['pokaz']);
$data=htmlspecialchars($_GET['data']);
  $line=
    "<tr>
        <td>$ip</td>
         <td>$stroka</td>
         <td>$pokaz</td>
         <td>$data</td>
         
    </tr>".PHP_EOL;
  file_put_contents($file,$line,FILE_APPEND|LOCK_EX);
}
$content=file_get_contents($file);
?>

<table border="1">

  <tr>
    <th>IP Адрес устройства            </th>
    <th>Что делает устройство          </th>
<th>Данные с устройства          </th>
<th>Дата и время последнего обращения     </th>
  </tr>
  <?=$content;?>
</table>

Ну и соответственно в прошивки ардуино добавляем поссылку удобного для Вас вида:)

http://192.168.88.16/ar.php?ip=192.168.88.5%2&stroka=Температура&pokaz=26&data=05.02.2022..12:45

таймер отсылки информации -на наше усмотрение. У меня при перезагрузки ардуинки и раз в 24 часа.Именно эта строчка а не данные с датчиков.

можно даже ссылку вставить на хронение залитой прошивки для каждой ардуинки.

В итоге получили динамическую таблицу() без всяких SQL и иных заморочек.Очистка таблицы раз в сутки- да и сам проект делался не для сбора данных с датчиков. А именно для настройки и инсталляции кучу ардуинок в разных местах.

 

ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016

осталось добавить код, что если устройство не отмечается в течении N времени удалять из таблицы, а то девайс давно не в сети а в таблице висит, а лучше вниз таблицы перемещать и отметить красным цветом

PS код не смотрел, но судя по таблице с DHCP у тя какая-то хрень получается

vrd
Offline
Зарегистрирован: 20.01.2022

Logik уже подсказал вам вариант со статик ip. Которые можно пинговать и по ответу выдавать наличие устройства в сети.

А ещё проще - заставить еспэху отсылать свои данные на телегу. Открыли своего бота и там все ваши устройства с уникальными именами.

 

BOOM
BOOM аватар
Offline
Зарегистрирован: 14.11.2018

Это хрень какая то, а не «динамическая таблица». Нужно передавать уникальный id устройства. В таблице смотреть по нему - Если устройство уже «регистрировалось», то просто обновлять время последнего «общения». Если ещё нет - «зарегистрировать». При выводе на печать анализировать время последнего «общения», если оно больше заданного интервала - помечать устройство как «давно небыли связи». Только парсить свой файл для реализации описанного выше заколебёшься. А с субд - это несколько строк кода.

Но опять таки - Если эта хрень устраивает, то и на здоровье.

Logik
Offline
Зарегистрирован: 05.08.2014

BOOM пишет:

. Нужно передавать уникальный id устройства. В таблице смотреть по нему .

Так он уже есть. MAC адрес называется. Сейчас изобретем ТСР поверх ТСР )))

BOOM
BOOM аватар
Offline
Зарегистрирован: 14.11.2018

Logik пишет:

BOOM пишет:

. Нужно передавать уникальный id устройства. В таблице смотреть по нему .

Так он уже есть. MAC адрес называется. 

Не суть - лишь бы уникальный. 

ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016

BOOM пишет:

Logik пишет:

BOOM пишет:

. Нужно передавать уникальный id устройства. В таблице смотреть по нему .

Так он уже есть. MAC адрес называется. 

Не суть - лишь бы уникальный. 

оно всё есть для уникальности:
 

//Ищем IP адрес клиента
$client  = @$_SERVER['HTTP_CLIENT_IP'];
$forward = @$_SERVER['HTTP_X_FORWARDED_FOR'];
$remote  = @$_SERVER['REMOTE_ADDR'];
if(filter_var($client, FILTER_VALIDATE_IP)) $ip = $client;
elseif(filter_var($forward, FILTER_VALIDATE_IP)) $ip = $forward;
else $ip = $remote;

 

sadman41
Offline
Зарегистрирован: 19.10.2016

IP уникален ограниченно. Только в том случае, когда микротик по leases выдаёт.

Gagarin74
Offline
Зарегистрирован: 24.08.2013

Еще раз спасибо всем кто проявил интерес.

Ребят, да есть у меня и raspberry c умным домом (https://mjdm.ru).

и в телеграмм и на почту шлет что угодно и как угодно. И настроек в нем хоть пятой точкой жуй.

и модули в нем встроенные и заточенные под esp и сбор инфы любой с любых веб страниц. Но это настолько "тяжелая" штука для моих нужд,что мне было проще на коленках написать.

И алгоритм то мне нужен был один всего навсего:

1 прошить ESP и быстро посмотреть результат чего она посылает.Можно даже наверное и через компорт :)

НО.... Хотелось убедится что ESP нормально работает там где она установлена и шлет более менее нормальные данные. А дальше можно смело её заводить в умный дом и любоваться хоть через телеграм хоть через blynk - это уже кому как нравится.

При разных инсталляциях - могут применяться от 10 до 100 esp и иногда бывает такой ковардак,лежит у тебя на столе их штук 20 и все чего то мигают и чего то передают. А тут рубанул по питалову её - и сразу можно посмотреть чем она дышит. Без всяких "заведений.прописывания" в систему умный дом, и подключению к компорту.

p.s. на тестовую таблицу что выкладывал выше,особо не обращайте внимание- на то она и тестовая с тестовой информацией:) Тут дело в принципе работы.Мне совершенно не нужна в ней история.Мне в ней нужна была ,реально мгновенная информация поведения устройства.

Ну ещё раз СПАСИБО.Очень много полезной информации!!!!!

 

inspiritus
Offline
Зарегистрирован: 17.12.2012

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

если оно больше таймаута то подкрашивать 

andriano
andriano аватар
Offline
Зарегистрирован: 20.06.2015

Gagarin74 пишет:

Ребят, да есть у меня и raspberry c умным домом (https://mjdm.ru).

...

Но это настолько "тяжелая" штука для моих нужд,что мне было проще на коленках написать.

Это так кажется.

С точки зрения трудозатрат, а, следовательно, и стоимости проекта намного рациональнее применить как раз это "тяжелое" решение.

А если бы для Вас действительно "было проще на коленках написать", Вы бы на форуме эту тему не создавали.

Вам просто советуют, как решить Вашу проблему наиболее простым и дешевым способом.

ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016

sadman41 пишет:
IP уникален ограниченно. Только в том случае, когда микротик по leases выдаёт.

это да, но админа надо чем-то занимать, пусть вносит )))

Gagarin74
Offline
Зарегистрирован: 24.08.2013

andriano пишет:

Gagarin74 пишет:

Ребят, да есть у меня и raspberry c умным домом (https://mjdm.ru).

...

Но это настолько "тяжелая" штука для моих нужд,что мне было проще на коленках написать.

Это так кажется.

С точки зрения трудозатрат, а, следовательно, и стоимости проекта намного рациональнее применить как раз это "тяжелое" решение.

А если бы для Вас действительно "было проще на коленках написать", Вы бы на форуме эту тему не создавали.

Вам просто советуют, как решить Вашу проблему наиболее простым и дешевым способом.

Куда же  проще. Залить прошивку в ESP и посмотреть на веб ресурсе что она передаёт и какой ip хватанула.

Мне не нужно смотреть историю показаний .Мне нужно часто и много убеждатся что с новой ESP всё нормуль-не поленая,сеть видит,информацию шлет. Короче конвеер.

Задача была именно такая.

"А если бы для Вас действительно "было проще на коленках написать", Вы бы на форуме эту тему не создавали." -человек всегда сталкивается с чем то когда то первый раз.Человек существо любопытное- наверное для этого и придумали форумы ,что бы делится,подсказывать,рассказывать,обучать.

И я совершенно не вижу ни чего плохого, что кто то спрашивает об элементарных вещах.Не голубых кровей.

 

ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016

Gagarin74 пишет:

Куда же  проще. Залить прошивку в ESP и посмотреть на веб ресурсе что она передаёт и какой ip хватанула.

самое простое вывести IP в монитор порта

Gagarin74
Offline
Зарегистрирован: 24.08.2013

ua6em пишет:

Gagarin74 пишет:

Куда же  проще. Залить прошивку в ESP и посмотреть на веб ресурсе что она передаёт и какой ip хватанула.

самое простое вывести IP в монитор порта

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

Куда же  проще то, подойти с ESP туда куда надо(в подвал,на крышу,баня,курятник),подать на неё напряжение,и обновить веб страничку на телефоне. и  сделать выводы :)

ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016

Gagarin74 пишет:

ua6em пишет:

Gagarin74 пишет:

Куда же  проще. Залить прошивку в ESP и посмотреть на веб ресурсе что она передаёт и какой ip хватанула.

самое простое вывести IP в монитор порта

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

Куда же  проще то, подойти с ESP туда куда надо(в подвал,на крышу,баня,курятник),подать на неё напряжение,и обновить веб страничку на телефоне. и  сделать выводы :)

тогда надо RSSI передавать

Gagarin74
Offline
Зарегистрирован: 24.08.2013

[/quote]

тогда надо RSSI передавать

[/quote]

Всё что душе угодно  Serial.println(WiFi.RSSI());

 

Logik
Offline
Зарегистрирован: 05.08.2014

Копался седня в протоколах и обнаружил интересную для данной темы возможность ESP. Поддерживает многоадресные UDP пакеты. Это когда одно устройство в локалке передает инфу сразу всем, у кого открыт нужный порт.

Если мы хотим составить список всех наших девайсов в сети, достаточно чтоб

1. все они слушали один порт

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

3. все устройства, получившие запрос должны на него ответить центральному серверу (кстати не обязательно все на один адрес  и/или на адрес с которого их спросили - можно и так, но есть интересные варианты).

4.центральный сервер принимает ответы, составляет список идентифицируя устройства по МАС.

Гуглить по  beginPacketMulticast - отправка и beginMulticast - прием.

Кстати на таком подходе можно построить и сбор данных воще без IP.

sadman41
Offline
Зарегистрирован: 19.10.2016

UDP без IP?

Logik
Offline
Зарегистрирован: 05.08.2014

sadman41 пишет:
UDP без IP?

Адрес multicast, общий для всех, как и номер порта.

sadman41
Offline
Зарегистрирован: 19.10.2016

Что такое "воще без IP"?

Если имеется в виду IP-протокол, то без него не обойтись, т.к. UDP базируется на IP.

А если имеется в виду IP-адрес, то без него тоже не обойтись, т.к. в заголовке пакета IP присутствует поле src ip, которое должно быть заполнено.

Даже пример в документации не обходится без IP-адреса ( https://arduino-esp8266.readthedocs.io/en/latest/esp8266wifi/udp-class.html ) : udp.beginPacketMulticast(addr, port, WiFi.localIP())

Logik
Offline
Зарегистрирован: 05.08.2014

без IP адреса или IP протокола? Уточняй! ))) IP адрес - один, multicast, протокол в глубине стека присутствует конечно.

/// udp.beginPacketMulticast(addr, port, WiFi.localIP())

Выделен - адрес самого устройства, он там всегда так (но это не точно)))) . А первый параметр - multicast адрес. Ну порт тоже понятно.. Интересно что для инициации приема порядок адресов меняется udp_.beginMulticast(WiFi.localIP(), ipMulti, 1900);

 
sadman41
Offline
Зарегистрирован: 19.10.2016

Мне-то нах уточнять? Я не рассказываю про UDP без IP.

Logik
Offline
Зарегистрирован: 05.08.2014

sadman41 пишет:

Мне-то нах уточнять? Я не рассказываю про UDP без IP.

о бля... началось...

sadman41
Offline
Зарегистрирован: 19.10.2016

Если имелось в виду "обойтись без жестко закрепленного за сервером IP-адреса", то так и надо писать - по-человечески. В этом случае , как минимум, два варианта.

Устраивать же multicast-шторм в локалке из ESP-шек - так себе идея.

Logik
Offline
Зарегистрирован: 05.08.2014

нет. ни за одним из устройств в обмене не требуется жесткий адрес. что требуется - см #30

при кривых руках и прямых мозгах шторм и на ровном месте устроить можно. Я тя удивлю похоже, но в твоей локалке такое уже работает без esp и штормов.

sadman41
Offline
Зарегистрирован: 19.10.2016

Ну, короче, я помню, что с тобой спорить бессмысленно - во всех областях спец на всю голову. Поэтому оставляю ТС размышлять самостоятельно.

Logik
Offline
Зарегистрирован: 05.08.2014

да, даффай вали, сказать те явно нечего ;) Чего и заходил то?!