Jump to content
iT4iT.CLUB

All Activity

This stream auto-updates     

  1. Earlier
  2. Доброго времени суток! нужна помощь чайнику в переводе формата отправки данных с GET на POST JSON данной метеостанции
  3. Я сделал это :)).. Выяснил что в $arp до сих пор хранилось string:mac Надо было лишь перезапустить апач. service httpd restart
  4. Удалил из системы IP-MIB, чтобы обращался всегда к SNMPv2-SMI. Полученный вывод - то что нам нужно в HEX-string. Но заходя на наш "сайт" все IP - unknown. Я сделал скрипт что бы смотреть вывод прям в centos (причем проверял вывод на каждой этапе): <?php $atPhysAddress = '.1.3.6.1.2.1.4.35.1.4'; //$atPhysAddress = '.1.3.6.1.2.1.3.1.1.2'; snmp_read_mib('/usr/share/snmp/mibs/SNMPv2-SMI.txt'); $session = new SNMP(SNMP::VERSION_2C, 'ВАШ IP', 'public' ); $session->valueretrieval = SNMP_VALUE_LIBRARY; $session->oid_output_format = SNMP_OID_OUTPUT_NUMERIC; $session->oid_increasing_check = false; if(($atPhysAddress = $session->walk($atPhysAddress)) != false) { foreach($atPhysAddress as $id => $val) $arp[trim(str_replace('Hex-STRING: ', '', $val))] = implode('.', array_slice(explode('.', $id), -4)); $session->close(); unset($session); print_r( $arp ); $mac = '9C 93 4E 14 10 5B'; //mac для проверки вывода $ip = $arp[$mac]; print_r( $ip ); //$session->close(); } $sysDescr = '.1.3.6.1.2.1.1.1'; # описание [system] $dot1dTpFdbAddress = '.1.3.6.1.2.1.17.4.3.1.1'; # список MAC адресов [FDB] $dot1dTpFdbPort = '.1.3.6.1.2.1.17.4.3.1.2'; # список расположения MAC по портам [FDB] $dot1dBasePortIfIndex = '.1.3.6.1.2.1.17.1.4.1.2'; # идентификатор порта [Base] $ifName = '.1.3.6.1.2.1.31.1.1.1.1'; # имя порта [system] $session = new SNMP(SNMP::VERSION_2C, 'Ваш айпи', 'public@101' ); $session->valueretrieval = SNMP_VALUE_LIBRARY; $session->oid_output_format = SNMP_OID_OUTPUT_NUMERIC; $session->oid_increasing_check = false; if(isset($backupVar)) foreach($backupVar as $var => $val) $$var = $val; unset($backupVar); if(($dot1dTpFdbAddress = $session->walk($dot1dTpFdbAddress, true)) != false) { foreach($dot1dTpFdbAddress as $id => $val) $macTable[$id] = trim(str_replace('Hex-STRING: ', '', $val)); // Запрашиваем таблицу расположения MAC адресов по портам свича if(($dot1dTpFdbPort = $session->walk($dot1dTpFdbPort, true)) != false) { foreach($dot1dTpFdbPort as $id => $val) $portTable[trim(str_replace('INTEGER: ', '', $val))][] = $macTable[$id]; ksort($portTable); // Индексируем порты и узнаем их реальные имена if(($dot1dBasePortIfIndex = $session->walk($dot1dBasePortIfIndex, true)) != false) { foreach($dot1dBasePortIfIndex as $id => $val) $portIndex[trim(str_replace('INTEGER: ', '', $val))] = $id; if(($ifName = $session->walk($ifName, true)) != false) { foreach($ifName as $id => $val) if(isset($portIndex[$id])) $portName[trim(str_replace('STRING: ', '', $val))] = $portIndex[$id]; $portName = array_flip($portName); }}}} print_r( $portTable ); //проверяем вывод print_r( $portName ); // проверяем вывод foreach($portTable as $num => $info) { $i=0; foreach($info as $id => $mac) { //$css = ((($i++)%2!=0)?'1':'2'); $ip = isset($arp[$mac])?$arp[$mac]:'unknown'; //$vendor = explode('(hex)', shell_exec("cat ./oui.txt | grep ".str_replace(' ', '-', substr($mac, 0, 8)))); //$vendor = isset($vendor[1])? trim($vendor[1]) : 'unknown'; //$dns = ($ip != 'unknown')?((($dns = gethostbyaddr($ip)) != $ip)? (($domain != '')?str_replace($domain, '', $dns):''): ''):''; } print_r( $ip ); //проверяем вывод print_r( "\n" ); // переход на новую строку } ?> В итоге мы получаем то что мы хотим. Но я не понимаю почему тогда в HTML все IP Unknown? (если проверку isset($arp[$mac]) не делать, то колонки просто пустые )
  5. Добрый день. Помогите пожалуйста подключиться по mqtt. Брокер clusterfly.ru. Порт в скетче поменял на 9991. На андроиде установлен iot MQTT panel, подписка на на топик: user_xx/espws/light. Но в приложение ничего не приходит. Пробовал с прошивками от WIFI iot- там все приходит. Куда копать, что делать, уже голову сломал
  6. Всех с праздником. Подскажите, как добавить в интерфейс отображение датчика освещенности, или у кого есть первая прошивка, там он был.
  7. Все получилось, как-то само собой, ещё раз прошился и всё заработало.
  8. При "первом" запуске, мы должны увидеть точку доступа - нашу метеостанцию. Она имеет IP 192.168.4.1, маску 255.255.255.0. При попытке к ней подключиться по Wifi, запрашивает логин/пароль (admin/admin) - этот момент у Вас получется? А, еще момент - по UART можно видеть некоторую отладочную информацию - у Вас видно что метеостанция делает при запусках?
  9. Заливал вот это ESP8266_WS_V2.0_iT4IT.CLUB вместе с data. Может ещё что-то надо. Я года полтора назад, уже собирал эту станцию, потом отложил, сейчас залил в ESP8266 без очистки флеш, он меня на веб страницу не пускал, пароль забыл. Прошил с очисткой флеш и всё. но у меня роутер 192.168.0.50, а второй 192.168.1.1. может в этом дело?
  10. Это на страничке устройства есть иконка с человечком и шестеренкой. Пароль логин admin/admin вроде. Потом там, в настройках надо полазить и прописать свой роутер (как пример). Потом устройство перезагружается, точка доступа пропадет, но роутер выдаст IP для устройства. По сути, теперь по IP поподаем снова на устройство. Есть еще вариант попадать по DNS имени.
  11. Привет, можно поподробней про Первый запуск, точку доступа с именем WeatherStation я вижу, дальше Подключитесь к данной сети с любого удобного устройства и перейдите в панель управления (для этого имеется соответствующая иконка) - это как? не получается.
  12. Привет, можно поподробней про Первый запуск, точку доступа с именем WeatherStation я вижу, дальше Подключитесь к данной сети с любого удобного устройства и перейдите в панель управления (для этого имеется соответствующая иконка) - это как? не получается.
  13. Уже не актуально, вопрос решен с обычными таймерами
  14. Добрый день! Кто в курсе, подскажите, пожалуйста, можно ли использовать Планировщик задач из этого проекта (cron.h) с Mega2560. Пробую сделать себе контроллер теплицы, при компиляции ругается: In file included from /var/folders/1j/57_hl_vj3fxdlg7wc55tb8pr0000gn/T/arduino_modified_sketch_575968/tepl_motor4.ino:7:0: sketch/cron.h: At global scope: cron.h:54:49: error: 'cronEvent::cronUserFunction_t' has not been declared void add(unsigned long interval, cronEvent::cronUserFunction_t fn, const char *id); ^ cron.h:55:49: error: 'cronEvent::cronUserFunction_t' has not been declared void add(unsigned long interval, cronEvent::cronUserFunction_t fn, bool coldStart, const char *id); ^ cron.h:91:51: error: 'cronEvent::cronUserFunction_t' has not been declared void cron::add(unsigned long interval, cronEvent::cronUserFunction_t fn, const char *id = 0) { ^ cron.h:97:51: error: 'cronEvent::cronUserFunction_t' has not been declared void cron::add(unsigned long interval, cronEvent::cronUserFunction_t fn, bool coldStart, const char *id = 0) { ^ sketch/cron.h: In member function 'void cron::add(long unsigned int, int, bool, const char*)': cron.h:99:21: error: 'fn' cannot be used as a function if (coldStart) fn(); ^ sketch/cron.h: In member function 'void cron::handleEvents()': cron.h:108:23: error: 'class cronEvent' has no member named 'function' currentEvent->function(); ^ exit status 1 'function' in namespace 'std' does not name a template type на ESP компилируется, но там пинов слишком мало - не выйдет реализовать задуманное Заранее благодарен за помощь
  15. Еще одно наблюдение: Глобальные параметр, комьюнити, удалось переопределить локально для свича, а такой параметр как atPhysAddress не удалось локально переопределить. (Если глобально изменить OID, то все хорошо, если пытаться локально переопределить, то выдает ошибку 'Нет данных о ARP таблице маршрутизатора' ) Также добавлю, что с помощью snmp_read_mib (/.../SNMPv2-SMI.txt) не удалось заставить использовать данный миб Вообще не понимаю, если закомментировать глобальную $atPhysAddress все равно скрипт работает. А вот если переопределить локально этот же параметр (при чем даже если поставить, такой же как глобальный) то не работает
  16. Хм... интересное наблюдение: snmpwalk на разных ОС выдает разные выводы (см. выше) Т.е. на сентОС для некоторых рутеров снмп вывод может быть с ":" для других рутеров без ":" (На убунте же та же железка по тому же oid выдает HEX-string без ":") Не понятно какой вывод смнп будет выводить модуль питона. Зависиот от ОС или нет. О.о. Как выяснилось, используют разные MIB. Что нашел: если из под centos Делать snmpwalk достаточно добавить -m SNMPv2-SMI (указать какой mib использовать при опросе) то вывод получается, который нам нужен , через Hex-STRING. Как добавить в скрипт пока не знаю
  17. Столкнулся с проблемой. Вывод некоторых роутеров таблицы соответствия ip/mac происходит как на картинке А скрипт заточен под:
  18. А как будут работать третий и шестые конфигурации small_shop и 192.168.0.1 на одном уровне вложенности. И на страничке у нас получиться как будто два свича small_shop и 192.168.0.1. А параметр для 0.1 так и не передастся. Тоже самое и в шестом примере: На домашней странице у нас будут три меню: Home1 192.168.0.1 192.168.0.2 Вместо передачи особых параметров для 0,1 и 0,2
  19. ИМХО... результат прям вообще так себе. Видно что вы только ступаете на путь программирования, но уже учите... if (s == "PIN_0") { res = 0; }; if (s == "PIN_1") { res = 1; }; if (s == "PIN_2") { res = 2; }; А знаете ли вы что даже если будет PIN_0, то он все равно будет продолжать перебирать по остальным? В таком контексте было бы правильнее сделать так: if (s == "PIN_0") { res = 0; } else { if (s == "PIN_1") { res = 1; } else { if (s == "PIN_2") { res = 2; }}} Потом где вы вообще видели за закрывающей скобкой точку с запятой? Вы в курсе что это в программировании грубо говоря пустая строка? if (bla) ; В данном случае будет выполнена проверка и по итогу ни чего не сделано. Но и в данном случае такая себе идея гонять строки. Откройте для себя switch ... case Вычленяем все до "_" + проверяем после него на "W" и "A" и после уже в числовую переменную номер пина. pin_val_get(0, true); pin_val_get(1, true); pin_val_get(2, true); pin_val_get(3, true); pin_val_get(4, true); pin_val_get(5, true); pin_val_get(6, true); pin_val_get(7, true); pin_val_get(8, true); pin_val_get(9, true); pin_val_get(10, true); pin_val_get(11, true); Тоже тема знатная... for еще не проходили? if (va < 0) {va = 0; } if (va > 1) {va = 1; } Зачем этот изврат? Вы в курсе что в половине случаев вы просто сделаете лишние тики? if (va <= 0) va = 0 else va = 1; Опять же зачем плодить лишние {}? Да и подобные простые вещи тоже так громоздко не пишут давно va = (va <= 0) ? 0 : 1; Так же можно было и сократить и ваши ифы выше: res = (s == "PIN_0") ? 0 : (s == "PIN_1") ? 1 : (s == "PIN_2") ? 2; Вот по теме ссылка первая в гугле - https://wm-school.ru/js/js_if_else.php Далее по отдаче данных. Кто же отдает кашу? Как там что разбирать? Или отдавайте json, ну или на худой конец xml. И для того и для другого во всех языках есть драйвер по работе. У вас же каждый раз при изменении символа в строке придется городить проверки и прочее. Там еще есть вопрос по переменным... Там тебе и "bool res=" и "int res;" Чего только стоит "String sAct = ""; // действие: GET: или SET:" Вы же заранее знаете что там кроме этого ни чего не будет. "char sAcr[4];" - и уже памяти экономим вагон! Но и это изврат: "bool GetSet;" Да и работать с ним куда проще (в плане тиков на операцию). А это... "const int soundPin = 3;" Серьезно? Вы под номер пина выделяете 16 бит? byte - 8 бит. от 0 до 255 вам будет с головой. Но и это тот еще изврат если это постоянная. "#define soundPin 3" - ВСЕ!!! При компиляции машинного кода эта тройка подставится везде. Вы же define вообще обходите стороной... Блин чувак, ты позиционируешь этот код как обучающий ("пример", "настоятельно рекомендую"). Да тебе еще самому обучаться и обучаться.
  20. Добрый день. Тоже заинтересовался этой темой. Но с применением связки "ESP-12F WeMos D1 WiFi", "Arduino UNO" и внешнего приложения. Рабочее название: «Метеостанция с охранной сигнализацией». Результат, в целом, удовлетворительный (в рамках поставленных целей). Если интересно, то можно посмотреть здесь: https://roamer55.ru/my_projs/arduino_prj/my_ts/005_step/ex_grp_03/ex_03_001.pdf ; https://roamer55.ru/main_programming/arduino/arduino_technosphere_000/arduino_technosphere_000_005/
  1. Load more activity
×
×
  • Create New...