Перейти к публикации
iT4iT.CLUB

Kitsum

Пользователи
  • Публикации

    424
  • Зарегистрирован

  • Посещение

  • Дней в лидерах

    234

Все публикации пользователя Kitsum

  1. @melfis шилд явно в исправном состоянии. В программе от @svchekalin всего лишь добавлены два дополнительных запроса в базу на ведение логов ну и естественно модифицированы запросы под другое имя базы. Все остальное касается непосредственно только самой базы данных - название, имена таблиц, "явки пароли". И т.к у меня и у @svchekalin оригинальный скетч работал, то могу сделать вывод, что Ваша причина где-то на поверхности и очень проста, но пока не была явно замечена. Могу предложить следующий вариант. Все удалите и начните с белого листа Используйте оригинальный скет для микроконтроллера Создайте базу, добавьте таблицу и один случайный ключ Подключитесь к базе и запросите этот ключ с самого сервера или другого компьютера Если проблема повторилась, то скиньте мне в приват бэкап всей базы с MySQL сервера, копию лога ошибок MySQL сервера и копию скетча (копируйте прямо из IDE со всеми изменениями которые вы вносили). Будем разбираться основательно.
  2. @melfis Используете оригинальную программу с указанного выше поста или Вы вносили изменения, если вносили, то какие? Убедитесь в корректности данных учетной записи пользователя базы данной и разрешен ли её доступ с внешних адресов. К сожалению, Вам самостоятельно придется пройти путь настройки MySQL сервера, но уверяю Вас, если все сделаете правильно, то результат Вам понравится. По возможности, постарайтесь проверить доступность базы с другого компьютера. Будьте очень внимательны, и все перепроверяйте!
  3. Kitsum

    Метеостанция на ESP8266 от it4it.club

    И так, пришла монтажная плата для Node MCU v3 о которой говорилось в оригинальном посте. Смотрится очень хорошо, удобно использовать для быстрого монтажа, правда пришлось отмывать от флюса, но это уже мелочи. Плату можно питать от 5 до 24 вольт и это очень удобно. Также мне в руки попало творение Китайской промышленности в виде сборки из трех датчиков. BH1750 - датчик освещенности (используется в оригинальной программе) BMP180 - всеми любимый барометр от BOSCH (используется в оригинальной программе) HTU21D - датчик влажности и температуры Плата с датчиками очень компактная, примерно 21x8 мм (без разъема), что очень привлекательно. На плате нет никаких преобразователей и конвертеров, по этому, питание и логика соответствуют 3.3 вольтам. И сразу хочу отметить, что расцветка проводов не соответствует описанию и придется аккуратно разобрать колодку и перекинуть провода, хотя кто-то может посчитать это лишним. На фото провода перекинуты! Что касаемо библиотек. Для датчика освещенности и барометра ссылки на библиотеки находятся в первом посте. Для датчика влажности можно использовать библиотеку от SparkFun Electronics опубликованную на GitHub В целом мне понравилась эта сборка, работает хорошо, проблем с внедрением в метеостанцию не возникло, но ложка дегтя все же присутствует и это цена! На данный момент стоимость одной платы может в 2-3 раза превышать стоимость всех этих датчиков, купленных отдельно. Причем каждый датчик в отдельности будет находиться на плате со своей обвязкой, что естественно намного удорожает производство, но боги маркетинга делают свое дело. К сожалению провести длительные и полноценные тесты в уличных условиях я не могу т.к сборка куплена моим другом для его метеостанции и мне в руки она попала только для оптимизации программы под его датчики. PS: Надеюсь эта информация будет для Вас полезна, и естественно общая ссылка на Али.
  4. @melfis Если подключено напрямую, то выставите вручную адрес для компьютера, например, 192.168.0.2 маска 255.255.255.0 и адрес для микроконтроллера 192.168.0.3 с аналогичной маской. Проверить связь сможете обычной утилитой ping.
  5. @melfis 127.0.0.1 это петля и используется только для внутренних нужд системы. Вам нужен внешний адрес, присвоенный машине DHCP сервером домашнего маршрутизатора. Подразумевается, что и сервер, и контроллер подключены к маршрутизатору, а не друг к другу. После этого Вам необходимо выполнить SQL запрос, описанный в оригинальном посте, для создание таблицы. По-хорошему, доступ к базе "test" должен осуществляться с использованием отдельной учетной записи имеющий права чтения и записи только в приделах этой базы данных. Но для теста Вы можете использовать учетную запись администратора, но только для теста. Потом обязательно позаботьтесь о безопасности. После того, как все это будет сделано, в логах покажется ID ключа, и Вы сможете добавить мастер ключ в базу.
  6. @melfis Конечно, без связи с сервером базы данных работать ничего не будет.
  7. @melfis Если считать, что при сборке не допущены ошибки и учитывая, что первоначальный скетч работает, то я посоветовал бы обратить внимание на качество монтажа Ethernet модуля. За братьями Китайцами уже замечались косяки ранее. Отрабатывает ли открытие с кнопки?
  8. Kitsum

    Метеостанция на ESP8266 от it4it.club

    Друзья, хорошая новость, хотя слово "хорошая" тут под вопросом, но в любом случае, новость положительная. Ранее оговаривалось, что ESP8266 держит не более 5 одновременных TCP соединений. Да, это действительно так и при превышения этого придела контроллер перестанет отвечать по сети. Активные сторожевые таймеры не смогут привести его в сознание и поэтому мы используем дополнительный сторожевой таймер на прерываниях. После более детального выяснения ситуации и глубокого копания наткнулся на интересный вопрос на GitHub и, что самое главное, ответ на него https://github.com/esp8266/Arduino/issues/3185 В итоге мы можем сделать вывод, что имеющееся ограничение явно обусловлено возможностями микроконтроллера. Ведь это не полноценная сетевая единица в обыденной для нас информационной среде, а маленький муравей, который и так прекрасно справляется с возложенными на него задачами. В итоге если правильно распределять нагрузку и соблюдать порядок очереди соединений мы можем организовывать очень серьезные проекты. PS: спасибо одной из социальных групп, администраторы которой были уверены, что возложенные нами обязанности на ESP8266 ему не по силам, а выявленная проблема является последствием моей криворукости. Ребята, именно Вы заставили усомниться и побудили еще раз разобраться в ситуации и подтвердить, что наше решение верное, спасибо! extern "C" { #include "espconn.h" } espconn_tcp_set_max_con(8);
  9. Kitsum

    Метеостанция на ESP8266 от it4it.club

    @EndWar По совету друга думал написать на хабре, но так и не решился т.к ничего нового я не придумал. Возможно в будущем, если этот или другие проекты будут интересны людям.
  10. Kitsum

    Метеостанция на ESP8266 от it4it.club

    @EndWar Обращайтесь, буду всегда рад помочь. Возможно у Вас появятся идеи для модернизации.
  11. Kitsum

    Метеостанция на ESP8266 от it4it.club

    @EndWar На мой взгляд, вполне достаточно. Но всегда можно воспользоваться другим датчиком, благо обновить прошивку можно через Web интерфейс без разбора метеостанции.
  12. Всем доброе время суток. Сегодня пойдет речь об одном из вариантов сбора информации о лицензиях операционных системах Windows и некоторого сопутствующего программного обеспечения. Для сбора будет использована утилита ProduKey, это далеко не идеальный вариант, но вполне приемлемый, если нет иных средств мониторинга, и требуется что-то быстро слепить на коленке без траты денег. И так, имеется группа компьютеров находящихся в домене, подсеть 10.10.10.0/24, ProduKey запускается от учетной записи администратора домена или администратора той ветки, к которой принадлежит подсеть. Программой можно пользоваться как в графическом интерфейсе, так и в консольном режиме. Последний вариант, лично для меня, более предпочтителен. ВАЖНО: нам требуется программа только на Английском языке т.к имена ключей использующихся в отчетах должны соответствовать именам ключей в PHP скрипте далее. В корне с программой создаем .bat файл со следующим содержимым produkey.exe /iprange 10.10.10.2 10.10.10.254 /sjson 10.10.10.0.json /WindowsKeys 1 /OfficeKeys 1 /SQLKeys 1 /IEKeys 0 /ExchangeKeys 1 /ExtractEdition 0 Используемые параметры /iprange - указывает диапазон адресов для сканирования /sjson - файл отчета необходимо сохранить в формате json /WindowsKeys 1 - собирать ключи операционных систем /OfficeKeys 1 - собирать ключи Office /SQLKeys 1 - собирать ключи SQL сервера /IEKeys 0 - НЕ собирать ключи IE /ExchangeKeys 1 - собирать ключи Exchange /ExtractEdition 0 - НЕ собирать расширенную информацию об операционной системе Это один из вариантов запуска, большее количество параметров описано на сайте разработчика. После того, как утилита закончит свою работу, она сохранит отчет в формате json в указанный нами файл. Можно использовать и другие форматы отчетов, но явного представления о количестве и качестве мы не получим. Программа только собирает данные, все остальные манипуляции с ними ложатся на плечи рядовых администраторов. Но не беда, на помощь нам приходит, уже затертый до дыр, Apache + PHP. Все файлы отчета помещаем на машину, где установлены эти ребята, и обязательно за пределами Web сервера. Сам PHP скрипт будет выглядеть следующим образом. <?PHP if(false) { ini_set('error_reporting', E_ALL); ini_set('display_errors', 1); ini_set('display_startup_errors', 1); } $myKeys = array( 'XXXXX-XXXXX-XXXXX-XXXXX-XXXXX' => 'Управляющая компания', 'YYYYY-YYYYY-YYYYY-YYYYY-YYYYY' => 'Завод №1', 'ZZZZZ-ZZZZZ-ZZZZZ-ZZZZZ-ZZZZZ' => 'Складская зона', ); $info = array(); /* Тут указываем путь и шаблон поиска файлов отчетов (Here we specify the path and template for finding report files) glob("../../../info/log_*.json") glob("/var/log/*.json"; glob("*.json"); */ foreach(glob("*.json") as $file) { $json = str_replace(array("\r\n", "\n"), '', file_get_contents($file)); $json = json_decode(iconv('cp1251', 'utf-8', $json), true); if(is_array($json)) { foreach($json as $id => $obj) { if(preg_match_all('/(.+) \((.+)\)/m', $obj['Computer Name'], $host)) { $ip =& $host[2][0]; $name =& $host[1][0]; $net = explode('.', $ip); array_splice($net, 3); array_push($net, '0'); if($ip == $name) $name = '<u>'.$name.'</u>'; $net = implode('.', $net); $info[$obj['Product Name']][$obj['Product Key']][$net][] = $ip.' ('.$name.')'; } } } } echo '<html lang="ru-RU" dir="ltr">'; echo '<head>'; echo '<style type="text/css">body {cursor: default;} i b:hover {color: forestgreen; text-decoration: underline;} #host:hover {color: forestgreen;}</style>'; echo '<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.2.1/jquery.min.js"></script>'; echo '</head>'; echo '<body>'; echo '<pre>'; $uSoft = 0; $uKey = 0; $uNet = 0; foreach($info as $software => $keys) { $uSoft++; echo "<b style='font-size: large; cursor: pointer;' onclick=\"if($('div#s".$uSoft."').is(':visible')) $('div#s".$uSoft."').hide(400); else $('div#s".$uSoft."').show(400);\">".$software."</b> <i style='font-size: normal;'>(licenses: ".count($keys).")</i>\n"; echo "<div id='s".$uSoft."' hidden>"; asort($keys); foreach($keys as $key => $subnet) { $uKey++; if(!$key) $key = 'UNKOWN'; echo "\t<i><b style='cursor: pointer; color: forestgreen;' onclick=\"if($('div#k".$uKey."').is(':visible')) $('div#k".$uKey."').hide(400); else $('div#k".$uKey."').show(400);\">".$key."</b> (hosts: ".(count($subnet, COUNT_RECURSIVE) - count($subnet)).")</i> <b style='color: red;'>".(isset($myKeys[$key])? $myKeys[$key] : '')."</b>\n"; echo "<div id='k".$uKey."' hidden>"; foreach($subnet as $net => $host) { $uNet++; echo "\t\t<i><b style='cursor: pointer;' onclick=\"if($('div#n".$uKey.$uNet."').is(':visible')) $('div#n".$uKey.$uNet."').hide(400); else $('div#n".$uKey.$uNet."').show(400);\">".$net."</b> (hosts: ".count($host).")</i>\n"; echo "<div id='n".$uKey.$uNet."' hidden style='padding-bottom: 10px;'>"; foreach($host as $name) echo "\t\t\t<span id='host'><i>".$name."</i></span>\n"; echo "</div>"; } echo "</div>"; } echo "</div>\n"; } echo '</pre>'; echo '</body>'; echo '</html>'; ?> Просто и сердито. На выходе мы получаем каталогизированный список программного обеспечения, используемых ключей и списка хостов на которых были найдены эти ключи с сортировкой по сетям. Также в скрипте можно указать список ключей и дать им имена. $myKeys = array( 'XXXXX-XXXXX-XXXXX-XXXXX-XXXXX' => 'Управляющая компания', 'YYYYY-YYYYY-YYYYY-YYYYY-YYYYY' => 'Завод №1', 'ZZZZZ-ZZZZZ-ZZZZZ-ZZZZZ-ZZZZZ' => 'Складская зона', ); Удобно если требуется явно указать на какие подразделения или объекты приобреталась та или иная лицензия. Все совпадения будут выделены красной подписью. Выводы Из плюсов, это явная простота и стоимость данного решения. Начальную статистику можно получить уже через пару часов после поднятия вопроса о необходимости иметь результат еще вчера. Наглядность представления. Можно добавить расчет стоимости поддержания данного софта в "деревянных" или сразу в "бакинских", ну и естественно принять соответствующие меры, какие, решать уже Вам. Из минусов, это не 100% результативность т.к статистика будет получена только по тем машинам, которые были онлайн на момент сканирования. Отсутствие системы кэширования для накопления данных при периодических опросах сети. Хотя последнее можно исправить средствами PHP, но пока такая задача не ставилась.
  13. Никогда не задумывался о формате часов т.к в моем случае все архивы хранятся на машине под управлением Linux. Думаю, что формат времени жестко зашит в iOS. Осмелюсь предложить сохранять архивы без указания метки времени в их названиях, а ориентироваться на данные от самого устройства о последнем созданном архиве, а также по дате создания файла на сервере под управлением Windows. Router(config-archive)#path tftp://10.10.10.10/OBJ-NAME/$H Router#sh arch The next archive file will be named tftp://10.10.10.10/test/router-2 Archive # Name 0 1 tftp://10.10.10.10/test/router-1 <- Most Recent 2 3
  14. Kitsum

    Метеостанция на ESP8266 от it4it.club

    Безопасность автоматизированных систем домашнего производства, на данный момент, далека от идеала. Если с центральным узлом (сервером) все довольно хорошо т.к. обычно используется система под управлением полноценной операционной системой, то с периферией (микроконтроллеры) все обстоит не так весело. Сложность понимания и организации систем шифрования поднимают планку входного уровня, и львиная доля энтузиастов попросту не тратит на это свое время. Хотя есть варианты организации относительно безопасной связи на уровне микроконтроллеров, например, AES шифрование. ESP вообще из коробки поддерживает SSL, что весьма радует. Как по мне, так конечный пользователь должен держать связь только с сервером, а доступ к периферии нужен только во время пусконаладочных работ или при диагностике неисправностей, хотя последний пункт под вопросом. Каналы связи также необходимо развязывать и не использовать домашнюю беспроводную сеть, да и проводную тоже, для связи повседневной вычислительной техники (телефоны, компьютеры) и роя микроконтроллеров. Отдельная экосистема за NAT-ом в домашней сети со строгим доступом только к центральному серверу через проброшенные порты или, на худой конец, DMZ. Хотя это меня уже понесло в философию со своими понятиями добра и зла. По поводу энкодера. Действительно интересный вариант, но имеет минус в виде цены. По возможности закажу себе его.
  15. Доброе время суток. Более года назад мне потребовалось выдергивать карты сетей из web интерфейса zabbix, но эта потребность была не долгой, и вскоре все было забыто. И вот недавно, разбирая закрома, наткнулся на реализацию этой идеи. Зачем это нужно? Большинству людей, пользующихся системами мониторинга, достаточно того интерфейса, который предоставляет разработчик. А разработчик обычно останавливается на реализации web интерфейса. Можно забыть про всякие виджеты, push уведомления или иные способы оповещения "из коробки". Это сильно угнетает т.к у меня нет возможности постоянно смотреть на дашборд в ожидании каких либо событий. Да и вообще я могу быть погруженным в другие людские заботы или, что еще боле серьезное, отсутствовать на рабочем месте. Чтобы как-то исправить две последние ситуации были реализованы следующие дополнения Push уведомления: Android, iOS, Windows - очень удобно получать информацию о проблемных узлах прямо на телефон. Порой решения проблемы приходят в голову быстрее, чем кто-либо еще о ней узнает. Мониторинг триггеров в GUI под Windows - пока что сырая, но вполне работоспособная система позволяющая получать всплывающие уведомления, сопровождающиеся звуковым оповещениям и интерфейсом для быстрого доступа к узлу. Теперь захотелось пойти немного дальше и позволить удаленным приложениям забирать актуальные карты сетей по их идентификатору в zabbix интерфейсе. А также в планах вывести общую карту сети на большой монитор для всех коллег. И делать это, хотелось бы, не светя учетными данными пользователей zabbix и не нагружая сам сервер. В общем, эта мелочь будет описана в данной теме. И так, что нам понадобится. Т.к наличие zabbix подразумевает наличие web сервера и PHP, то вы даже не догадаетесь, на чем мы все будем писать? или догадаетесь? ... эээ блин! Первым делом нам необходимо дополнить арсенал PHP модулем CURL. В данный момент у меня все это хозяйство крутиться на Ubuntu 16.04 с PHP-7.1 и добавить модуль можно следующим способом. sudo apt-get update sudo apt-get install php7.1-curl sudo /etc/init.d/apache2 reload Создаем на нашем web сервере, в произвольном месте, файл graphics.php со следующим содержимым <?PHP if(false) { ini_set('error_reporting', E_ALL); ini_set('display_errors', 1); ini_set('display_startup_errors', 1); } $settings = array( 'request' => '', 'name' => 'guestlogin', 'password' => 'guestpassword', 'autologin' => '', 'enter' => 'Sign in' ); function putImage($data = false) { header('Content-Type: image/png'); header('Content-Transfer-Encoding: binary'); if($data) echo $data; } if(isset($_GET['sysmapid']) and preg_match('/^[0-9]{1,2}$/', $_GET['sysmapid'])) { $imageUrl = 'http://localhost/zabbix/'; $imageTmp = base64_encode(microtime(null)); $imagePng = '/tmp/zabbixTrigger_map'.$_GET['sysmapid']; $cookie = '/tmp/zabbixTrigger_cookie'; if(file_exists($imagePng)) { if(time() - filemtime($imagePng) < 30) { putImage(); exit(file_get_contents($imagePng)); } unlink($imagePng); } $ch = curl_init(); curl_setopt($ch, CURLOPT_POST, 1); curl_setopt($ch, CURLOPT_POSTFIELDS, $settings); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1); curl_setopt($ch, CURLOPT_COOKIEJAR, $cookie); curl_setopt($ch, CURLOPT_COOKIEFILE, $cookie); $post = (file_exists($cookie)) ? 'map.php?sysmapid='.$_GET['sysmapid'] : 'index.php'; curl_setopt($ch, CURLOPT_URL, $imageUrl.$post); $data = curl_exec($ch); if(curl_getinfo($ch, CURLINFO_CONTENT_TYPE) != 'image/png') { curl_setopt($ch, CURLOPT_URL, $imageUrl.'map.php?sysmapid='.$_GET['sysmapid']); $data = curl_exec($ch); file_put_contents($imageTmp, $data, LOCK_EX); $finfo = finfo_open(FILEINFO_MIME_TYPE); if(finfo_file($finfo, $imageTmp) == 'image/png') { file_put_contents($imagePng, $data, LOCK_EX); putImage($data); } else echo 'error'; unlink($imageTmp); } else { file_put_contents($imagePng, $data, LOCK_EX); putImage($data); } curl_close($ch); } ?> Что здесь происходит. Скрипт пытается авторизоваться на zabbix сервере. Советую, для этих целей, использовать гостевую учетную запись. И минуя прочий html шлак, забирает картинку по её идентификатору. Как узнать идентификатор нужной нам карты сети? Для этого откройте карту в дашборд zabbix, и в строке запроса, вы увидите её порядковый номер. Нас интересует переменная sysmapid, именно её мы будем использовать для передачи идентификатора для graphics.php Теперь о том, как передать данные для авторизации гостевой учетной записи. $settings = array( 'request' => '', 'name' => 'guestlogin', 'password' => 'guestpassword', 'autologin' => '', 'enter' => 'Sign in' ); Данный массив представляет собой список всех форм участвующих в авторизации пользователя. И пусть Вас не пугает их количество, на самом деле их ровно столько, сколько в самом интерфейсе zabbix. Вам необходимо исправить только поля с именем пользователя и пароля. Жизненно необходимо указать http путь до zabbix сервера, это делается в переменной $imageUrl = 'http://localhost/zabbix/'; Также имеются переменные, описывающие, где будут храниться временные файлы изображений и cookie на нашем сервере $imagePng = '/tmp/zabbixTrigger_map'.$_GET['sysmapid']; $cookie = '/tmp/zabbixTrigger_cookie'; Скрипт кэширует изображения во временном каталоге и отдает его, если не прошло более 30 секунд с момента его создания. Также во временном каталоге будет храниться файл cookie необходимый для работы curl. ВАЖНО: не переносите эти файлы в рабочий каталог web сервера! Таким образом, мы забираем у zabbix карты сетей без передачи какой либо конфиденциальной информации. Можно дополнить скрипт и отдавать только определенные карты и только конкретным хостам. В общем, есть почва для размышлений.
  16. @Small_d Позволю себе предположить, что загрузчик Вашего микроконтроллера не поддерживает работу со сторожевым таймером. Уж очень похожи симптомы. В самом начале описания функции Setup имеются строки активирующие сторожевой таймер Arduino. // Настраиваем сторожевой таймер wdt_disable(); delay(8000); wdt_enable(WDTO_8S); При старте, контроллер ждет 8 секунд и после инициализирует сторожевой таймер на сброс при отсутствии контрольного сигнала в течении 8 секунд. За обновление счетчика отвечает функция, вызываемая при каждом вызове loop // Сбрасываем сторожевой таймер микроконтроллера wdt_reset(); Итого, если у Вас не поддерживается работа с Watchdog, то каждые 16 секунд будет происходить перезагрузка контроллера. Чтобы отключить сторожевой таймер, и все, что с ним связано, закомментируйте строчки, указанные выше. Хочу сразу Вас предостеречь. Никогда не заливайте программу с активированным сторожевым таймером в микроконтроллер на базе Arduino без задержки перед функцией инициализации таймера. Если конечно вы не уверены на 100%, что загрузчик поддерживает его работу. В противном случае, это чревато последствиями. На таком ответственном месте контроллер нельзя оставлять без сторожа, в случае необходимости, он приведет в чувства контроллер, а иначе можно остаться перед запертой дверью. Теперь, что касаемо ключа. Мы используем адрес ключа, состоящий из 4 байт, некоторые ключи отдают и 7 байт, но мы используем только 4. В итоге ключ представляет из себя строку, полученную в ходе конкатенации всех четырех байт ключа. Если все подключено правильно, то все поднесенные к сканеру ключи будут отображаться в Serial мониторе. Эту информацию Вы можете взять за основу для создания мастер ключа. Волею судьбы получилось так, что интерфейс для работы с добавлением, удалением или редактированием ключей остался не реализованным и лег на плечи конечного исполнителя. Можно это исправить, но нужен серьезный стимул, способный оторвать от текущих дел.
  17. Kitsum

    Метеостанция на ESP8266 от it4it.club

    Приветствую @academyit Почитал по поводу использования эффекта Доплера в метеостанции. Да действительно, этот вариант очень привлекателен, но в тоже время немного сложнее в реализации как физически, так и программно. Возможно, в будущем попробую сделать для себя что-то подобное. По поводу тепличного хозяйства. Мое субъективное мнение, что показания с уличных и тепличных датчиков должны собирать разные устройства, а управление исполнительными механизмами проводить как на основании всего скопа данных, так и опираясь только на внутренние показания. Таким образом, достигается концепция умного дома при сохранении автономности отдельных систем.
  18. @Small_d Приветствую, автор дополнения немного поспешил и допустил ошибку в программе микроконтроллера. Был не указан порядковый номер адреса ключа. Должно быть так. // Читаем ключ for(byte i=0; i<4; i++) key += mfrc522.uid.uidByte[i]; Все изменения от @svchekalin не проверял. Будем разбираться по мере необходимости. Что касаемо кодировок, попробуйте изменить php файл таким образом, чтобы html разметка была похожа не что-то подобное. <html lang="ru-RU" dir="ltr"> <head> <title>Заголовок</title> <meta charset="utf-8"> </head> <body> Тут само тело или PHP сценарий </body> </html>
  19. Kitsum

    Метеостанция на ESP8266 от it4it.club

    @academyit Я уже задумывался об автономной работе, но нужно иметь довольно большой запас емкости аккумулятора. По крайней мере если хочется оставить контроллер с полноценным web сервером и его плюшками. Если это не требуется, то можно уводить контроллер в сон и передавать показания раз в 15-30 минут. Можно передавать дамп данных, например, в виде JSON строки содержащей массив, заполненный за тот-же период времени пока контроллер не выходил в эфир. От литий-ионных аккумуляторов придется отказаться т.к использование их в уличных условиях, особенно зимой, при не удовлетворительном заряде со стороны солнечной батареи, а это вполне возможно, приведет к гибели аккумулятора и потери устройства. В принципе это не особо критично если устройство стоит дома, но кардинально все меняет если устройство работает автономно в поле, условно говоря. Как мне кажется, достойной заменой может послужить Литий-железо-фосфатный аккумулятор (LiFePO4, LFP), он отлично работает при отрицательной температуре (естественно в пределах разумного), имеет не плохие показатели в основных характеристиках и как бы является следующим витком эволюции. Но все это пока только в теории, в руках я их еще не держал. По поводу измерения осадков. По началу я хотел собирать весь комплекс, то есть измерение осадков, скорости и направления ветра, но потом спустился на землю. У меня не частный дом, и установить конструкция в независимом от окружающих построек места у меня нет, а, следовательно, и точность этих показаний будет +/- трамвайная остановка. Я отчетливо вижу по текущим графикам, как стена дома дает температурные шумы, если так можно выразиться, на датчики и показания уплывают. Но если всем этим пренебречь, то стоит взглянуть, как реализовываются, проверенные временем, конструкции метеостанций. Лазерный дальномер, точнее принцип его работы, может пригодиться для определения уровня облачности, но не для уровня осадков. Вот как получают данные по осадкам. Геометрия емкостей и их расположение относительно друг друга не дают возможности заполнять их водой одновременно. Их объем нам известен заранее, а, следовательно, при заполнении одной из емкости, происходит изменение масс относительно оси и емкость опустошается, а мы по прерыванию фиксируем это получаем количество осадков. Естественно нужно учитывать множество факторов, например, время между прерываниями, площадь воронки над сенсором с которой мы и собираем осадки ну и т.п Датчик направления ветра и анемометр, как мне кажется, нужно делать без физической связи с электроникой. Например, для направления ветра использовать электронный компас и магнит закрепленный на оси хвостовика. А вот для анемометра подойдет оптопара из обычного принтера с шаблоном на котором находится темная полоса с мелкими просветами для сенсора. Ну или как альтернатива оптический сенсор ролика обычной компьютерной мышки с самой осью ролика. В общем для метеостанции есть еще куда копать и о чем писать. Но самое главное, это контроллер, который нам позволяет реализовывать все эти игрушки.
  20. Kitsum

    Метеостанция на ESP8266 от it4it.club

    @academyit Да действительно, можно организовать и так, тут кому как нравится. Меня интересовала только уличная информация, да и цель была разместить всю конструкцию, вместе с контроллером, за пределами жилой зоны. Но не могу не согласиться, Ваш вариант более полезен! Возможно сделаю так в будущем, длинны кабелей хватит вполне.
  21. Kitsum

    pn532

    @vladmed Я энтузиаст в мире микроконтроллеров и имею не большой опыт, но стараюсь разбираться в тех или иных моментах по мере наличия свободного времени. Не стандартное использование i2C исключено т.к по сути это общепризнанный стандарт и неадекватное поведение приведет к нарушению работы всех устройств на шине, а их может быть большое количество. Как мне кажется, чтобы познать всю суть ситуации, необходимо тщательно изучить техническую документацию на сам чип PN532 и тогда все станет на свои места. Проблема была только в подключении. А вот для чего нужен сам пин прерывания IRQ По сути, таким образом, PN532 сообщает, что имеются данные для основного контроллера. И количество общего трафика на шине, уменьшается.
  22. Kitsum

    pn532

    @vladmed Рад, что у Вас все получилось. Модуль может работать по 3 интерфейсам, это SPI, i2C и HSU (высокоскоростной UART). Вот последний как раз и подключается всего по 4 проводам.
  23. Kitsum

    pn532

    Адрес на i2C шине действительно должен быть 0x48. Вот выписка из технической спецификации. А вот SPI работает только с 3.3v логическим уровнем, без конвертера не получится подключиться. Попробуйте подтянуть SCL и SDA пины к +5v питания через резисторы 4.7k. Обычно на платах они уже распаяны, но доверять никому нельзя, а тем более Китайскому массовому производству. Также, на всякий случай, можете перейти на пины A4 (SDA) и A5 (SCL). Конечно, можно еще попробовать поменять адреса в самих библиотеках, но это не правильно, и скорее всего не даст эффекта, но проверить стоит. В библиотеке от elechouse в файле PN532_I2C.cpp, а в библиотеке от Adafruit в файле Adafruit_PN532.h ищите строку #define PN532_I2C_ADDRESS (0x48 >> 1)
  24. Kitsum

    Arduino в автомобиле

    @Zuk Климат через управление стеклоподъемники, это сурово. Так регулировать температуру не получится однозначно. А вот изменять положения стекла в зависимости от скорости автомобиля не сложно, но потребует внесения кардинальных изменений в конструкцию всей системы подъема стекла. Например, установив шаговый мотор и измерив, количество шагов между крайними положениями стекла. Далее снимать показания скорости и линейно изменять уровень открытия окон. Но опять же вопрос в том, какая температура за бортом, это тоже надо учитывать при регулировки, а эти данные будут плавать и довольно сильно. Обязательно нужно помнить о системе безопасности, как реализовано в заводских доводчиках стекол многих автомобилей. Если стекло встречается с препятствием, рука или не дай Бог шея, оно автоматически отступает чтобы не причинить вред. В обычных моторах это можно поймать через отслеживание повышения потребляемого тока, а вот как в шаговых, пока под вопросом. Ну, или использовать штатные моторы, но тогда нужно придумать систему отслеживающую положение стекол. Как по мне, так добиться оптимальной температуры в салоне с помощью такой системы не получится т.к температура окружающей среды автомобиля постоянна разная. Машина может двигаться в один момент времени на открытом солнце и через мгновение оказаться в тени или в тоннеле. Также важно контролировать уровень влажности т.к она может кардинально поменять ощущения человека при одной и той же температуре. И нужно понимать, что, скорее всего это будет похоже на постоянные подергивания стекол в момент попытки поддержать нужную температуру. Уверен, что это будет очень раздражать, да и результат будет на тройку с натяжкой. Все это можно контролировать в закрытых системах, будь то автомобиль, или какое либо помещение, через изменение направлений движения воздуха, его температуры и скорости работы вентилятора. Ну и опять же помним про влажность. Как по мне, так проще на контроллере реализовать климат контроль, если уже имеется кондиционер в автомобиле. Ну, или на худой конец, если имеется запас энтузиазма, с начало поставить кондиционер, а потом разработать климат контроль для него.
  25. @SergejMElnikov Значит при появлении основного ключа, кроме открытия входной двери и включения света, происходит разблокирование склада и появляется питание на оборудовании. Все остальные ключи могут только открыть дверь и включить свет. Остается под вопросом, в какой момент необходимо закрыть склад, и когда выключать свет. Точнее будет вопрос, при каких обстоятельствах или действиях необходимо все выключить и заблокировать? Человек ведь выходит по кнопке, значит, ему нужно произвести некие манипуляции уже с ключом снаружи. И еще один момент. Допустим, обладатель основного ключа уходит и хочет заблокировать склад и снять питания с оборудования, при этом в помещении остаются люди, а значит, свет для них тоже потухнет. Для уверенного понимания, что человек хочет закрыть дверь ключом и все выключить потребуется реализация на двери концевого выключателя или инфракрасного сенсора. И тогда связывать события идентификации карты и факт открытия двери. Возможно, я заблуждаюсь, но мне кажется, что стоит разделить все это на несколько отдельных систем. Пусть замок входной двери работает отдельно. Принцип работы стандартный - знаем ключ, пускаем, через 5 секунд блокируем дверь. Если освещение в помещении при этом было выключено, то включаем его. И т.к люди выходят по кнопке, да и вообще учет количества людей в помещении не ведется (это отдельная тема), то установить дополнительную не фиксирующуюся клавишу для подачи сигнала микроконтроллеру, что люди помещение покидают и контроллер сразу или через какое-то время выключает свет. Естественно, что после выхода по кнопке дверь будет автоматически заблокирована через 5 секунд, как и в случае с входом. Или возложить обязанности дополнительной клавиши на событие длительного удержание кнопки открытия двери. Склад имеет свой отдельный замок, но работает он в другом режиме - у него отсутствует автоматическая блокировка двери. Поднесли ключ, замок открылся, поднесли еще раз, закрылся. Если дверь на склад открыта, то на оборудование в помещении подается напряжение. Закрыли склад, оборудование обесточивается. Хотя питания оборудования можно связать со светом, а не складом. Можно уйти, просто закрыв склад. Если люди остались, то они могут продолжить чем-то заниматься. Можно связать событие выключения света с замком склада. И таким образом не только выключать свет и оборудование, но и запирать дверь на складе.
×
×
  • Создать...