Меню

Python работа с оборудованием



Python для микроконтроллеров. Учимся программировать одноплатные компьютеры на языке высокого уровня

Содержание статьи

  • С чего все началось?
  • А чем эта плата лучше?
  • И что, только официальная плата?
  • Подготовка к работе
  • Прошивка контроллера
  • Взаимодействие с платой
  • Начинаем разработку
  • Hello world
  • Радужный мир
  • Монитор. Рисование, письмо и каллиграфия
  • Настраиваем Wi-Fi и управляем через сайт
  • Управление моторами
  • Интернет вещей
  • Заключение

С чего все началось?

Все началось с кампании на Kickstarter. Дэмьен Джордж (Damien George), разработчик из Англии, спроектировал микроконтроллерную плату, предназначенную специально для Python. И кампания «выстрелила». Изначально была заявлена сумма в 15 тысяч фунтов стерлингов, но в результате было собрано в шесть с половиной раз больше — 97 803 фунта стерлингов.

А чем эта плата лучше?

Автор проекта приводил целый ряд преимуществ своей платформы в сравнении с Raspberry Pi и Arduino:

Мощность — MP мощнее в сравнении с микроконтроллером Arduino, здесь используются 32-разрядные ARM-процессоры типа STM32F405 (168 МГц Cortex-M4, 1 Мбайт флеш-памяти, 192 Кбайт ОЗУ).

Простота в использовании — язык MicroPython основан на Python, но несколько упрощен, для того чтобы команды по управлению датчиками и моторами можно было писать буквально в несколько строк.

Отсутствие компилятора — чтобы запустить программу на платформе MicroPython, нет необходимости устанавливать на компьютер дополнительное ПО. Плата определяется ПК как обычный USB-накопитель — стоит закинуть на него текстовый файл с кодом и перезагрузить, программа тут же начнет исполняться. Для удобства все-таки можно установить на ПК эмулятор терминала, который дает возможность вписывать элементы кода с компьютера непосредственно на платформу. Если использовать его, тебе даже не придется перезагружать плату для проверки программы, каждая строка будет тут же исполняться микроконтроллером.

Низкая стоимость — в сравнении с Raspberry Pi платформа PyBoard несколько дешевле и, как следствие, доступнее.

  • Открытая платформа — так же как и Arduino, PyBoard — открытая платформа, все схемы будут находиться в открытом доступе, что подразумевает возможность спроектировать и создать подобную плату самому в зависимости от потребностей.
  • И что, только официальная плата?

    Нет. При всех своих достоинствах PyBoard (так называется плата от разработчика MicroPython) — довольно дорогое удовольствие. Но благодаря открытой платформе на многих популярных платах уже можно запустить MicroPython, собранный специально для нее. В данный момент существуют версии:

    Плата ESP8266

    • для BBC micro:bit — британская разработка, позиционируется как официальное учебное пособие для уроков информатики;
    • Circuit Playground Express — разработка известной компании Adafruit. Это плата, включающая в себя светодиоды, датчики, пины и кнопки. По умолчанию программируется с помощью Microsoft MakeCode for Adafruit. Это блочный (похожий на Scratch) редактор «кода»;
    • ESP8266/ESP32 — одна из самых популярных плат для IoT-разработки. Ее можно было программировать на Arduino C и Lua. А сегодня мы попробуем установить на нее MicroPython.

    Плата ESP8266

    Подготовка к работе

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

    Все примеры проверялись и тестировались на следующем оборудовании:

    • плата NodeMCU ESP8266-12E;
    • драйвер моторов L293D;
    • I2C-дисплей 0,96″ 128 × 64;
    • Adafruit NeoPixel Ring 16.

    Прошивка контроллера

    Для прошивки платы нам понадобится Python. Точнее, даже не он сам, а утилита esptool, распространяемая с помощью pip. Если у тебя установлен Python (неважно, какой версии), открой терминал (командную строку) и набери:

    После установки esptool надо сделать две вещи. Первое — скачать с официального сайта версию прошивки для ESP8266. И второе — определить адрес платы при подключении к компьютеру. Самый простой способ — подключиться к компьютеру, открыть Arduino IDE и посмотреть адрес в списке портов.

    Для облегчения восприятия адрес платы в примере будет /dev/ttyUSB0 , а файл прошивки переименован в esp8266.bin и лежит на рабочем столе.

    Открываем терминал (командную строку) и переходим на рабочий стол:

    Форматируем флеш-память платы:

    Если при форматировании возникли ошибки, значит, нужно включить режим прошивки вручную. Зажимаем на плате кнопки reset и flash. Затем отпускаем reset и, не отпуская flash, пытаемся отформатироваться еще раз.

    И загружаем прошивку на плату:

    Взаимодействие с платой

    Все взаимодействие с платой может происходить несколькими способами:

    • через Serial-порт;
    • через web-интерпретатор.

    При подключении через Serial-порт пользователь в своем терминале (в своей командной строке) видит практически обычный интерпретатор Python.

    Подключение через SerialPort

    Подключение через SerialPort

    Для подключения по Serial есть разные программы. Для Windows можно использовать PuTTY или TeraTerm. Для Linux — picocom или minicom. В качестве кросс-платформенного решения можно использовать монитор порта Arduino IDE. Главное — правильно определить порт и указать скорость передачи данных 115200.

    Кроме этого, уже создано и выложено на GitHub несколько программ, облегчающих разработку, например EsPy. Кроме Serial-порта, он включает в себя редактор Python-файлов с подсветкой синтаксиса, а также файловый менеджер, позволяющий скачивать и загружать файлы на ESP.

    EsPy IDE

    EsPy IDE

    Но все перечисленные способы хороши лишь тогда, когда у нас есть возможность напрямую подключиться к устройству с помощью кабеля. Но плата может быть интегрирована в какое-либо устройство, и разбирать его только для того, чтобы обновить программу, как-то неоптимально. Наверное, именно для таких случаев и был создан WebREPL. Это способ взаимодействия с платой через браузер с любого устройства, находящегося в той же локальной сети, если у платы нет статического IP, и с любого компьютера, если такой IP присутствует. Давай настроим WebREPL. Для этого необходимо, подключившись к плате, набрать

    Появится сообщение о статусе автозапуска WebREPL и вопрос, включить или выключить его автозапуск.

    После ввода q появляется сообщение о выставлении пароля доступа:

    Вводим его, а затем подтверждаем. Теперь после перезагрузки мы сможем подключиться к плате по Wi-Fi.

    Так как мы не настроили подключение платы к Wi-Fi-сети, она работает в качестве точки доступа. Имя Wi-Fi-сeти — MicroPython-******, где звездочками я заменил часть MAC-адреса. Подключаемся к ней (пароль — micropythoN ).

    Открываем WebREPL и нажимаем на Connect. После ввода пароля мы попадаем в тот же интерфейс, что и при прямом подключении. Кроме этого, в WebREPL есть интерфейс для загрузки файлов на плату и скачивания файлов на компьютер.

    Среди файлов, загруженных на плату, есть стандартные:

    • boot.py — скрипт, который загружается первым при включении платы. Обычно в него вставляют функции для инициализации модулей, подключения к Wi-Fi и запуска WebREPL;
    • main.py — основной скрипт, который запускается сразу после выполнения boot.py , в него записывается основная программа.

    Начинаем разработку

    Hello world

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

    Итак, что же происходит? Сначала подключаются библиотеки: стандартная Python-библиотека time и специализированная machine. Эта библиотека отвечает за взаимодействие с GPIO. Стандартный встроенный светодиод располагается на втором пине. Подключаем его и указываем, что он работает на выход. Если бы у нас был подключен какой-нибудь датчик, то мы бы указали режим работы IN.

    Следующие две функции отвечают за включение и выключение светодиода на определенный интервал времени. Наверное, интересно, почему я сначала выключаю светодиод, а потом включаю? Мне тоже очень интересно, почему сигнал для данного светодиода инвертирован. Оставим это на совести китайских сборщиков. На самом деле команда pin.off() включает светодиод, а pin.on() — отключает.

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

    Продолжение доступно только участникам

    Вариант 1. Присоединись к сообществу «Xakep.ru», чтобы читать все материалы на сайте

    Членство в сообществе в течение указанного срока откроет тебе доступ ко ВСЕМ материалам «Хакера», позволит скачивать выпуски в PDF, отключит рекламу на сайте и увеличит личную накопительную скидку! Подробнее

    Источник

    Digitrode

    цифровая электроника вычислительная техника встраиваемые системы

    • Вычислительная техника
      • Микроконтроллеры микропроцессоры
      • ПЛИС
      • Мини-ПК
    • Силовая электроника
    • Датчики
    • Интерфейсы
    • Теория
      • Программирование
      • ТАУ и ЦОС
    • Перспективные технологии
      • 3D печать
      • Робототехника
      • Искусственный интеллект
      • Криптовалюты

    Чтение RSS

    Где и как использовать язык программирования Python в электронике

    Python – универсальный язык программирования для инженеров

    Инженеры-электронщики не просто занимаются схемотехникой. Они также сталкиваются с множеством других задач, которые они должны решить. Это программирование прошивок, отладка, тестирование аппаратного и программного обеспечения прототипа, тестирование производственных образцов, работа над контролем качества и, казалось бы, бесконечные объемы сбора, оценки и анализа данных.

    Где и как использовать язык программирования Python в электронике

    Как Python может помочь со всем этим? Python очень хорош в качестве универсального языка программирования. Такие языки, как HDL (языки описания аппаратных средств, например, VHDL, Verilog), выполняют одну специфическую вещь, например синтезируют аппаратные средства. C и C ++ работают бережно и очень хорошо подходят для программирования встраиваемых систем. Но наличие швейцарского ножа в вашем поясе программных инструментов может помочь с задачами общего назначения, которые часто составляют большинство задач, которые выполняют инженеры.

    Обычно это такие задачи, как тестирование, сбор данных или автоматизация, которые составляют большую часть времени инженера. Как правило, проектирование занимает всего около 5-10% времени инженера. Остальные 90% или около того потребляются такими вещами, как исследование, тестирование прототипов, отладка, создание тестовых шаблонов и программ, производственный тест, контроль качества и, конечно же, страшное слово «документация».

    Многие вещи, которые предшествуют разработке (например, исследование компонентов и реализаций, а также разработка системных архитектур), не могут быть автоматизированы. Это те задачи, которые делают нас креативными инженерами. Но после того, как проект реализован (то есть, самое интересное), возникает много рутинной работы, которую все еще нужно решить.

    Вот некоторые из рутинных задач, и как Python может помочь эффективно их решить.

    Обработка файлов для формирования файлов Gerber

    Одним из наиболее часто нуждающихся в автоматизации приложений является обработка файлов. Рабочие процессы различаются в зависимости от программного обеспечения, поставщика, клиента и т. д. В большинстве случаев они включают обработку файлов в каком-либо формате. Поставщик печатных плат требует, например, чтобы вы отправляли свои файлы Gerber с определенными расширениями, чтобы их работники могли анализировать, проверять и подтверждать их соответствие требованиям проекта.

    Читайте также:  Газовое оборудование пищит 3 раза по 3 раза

    Если инструмент PCB CAD (средство автоматизации создания печатных плат) не выводит Gerber-файлы в требуемом формате, нужно менять свои расширения файлов каждый раз, когда отправляются формы печатных плат. Это не огромная задача, но, поскольку инженеры перебирают каждый год множество проектов и ревизий, становится утомительно менять расширения файлов Gerber примерно на 10 разных файлов каждый раз, когда отправляется проект на фабрику.

    Более существенный пример обработки файлов – это когда у вас есть файл в одном формате (например, XML), а клиент требует его в другом (например, CSV). Это обычная ситуация, которая, как правило, будет огромной головной болью. Но используя несколько библиотек и некоторый простой код Python, можно менять форматы текстовых файлов без особых сложностей.

    Автоматизация испытательного оборудования

    Одним из больших преимуществ использования Python для инженеров является управление и автоматизация испытательного оборудования. Все чаще и чаще встречается дешевое испытательное оборудование с выходами USB, которое может собирать данные и хранить их в распространенных форматах, таких как CSV.

    Изначально Python был создан для разбора текста, поэтому с помощью него удивительно полезно просеивать огромные объемы текстовых данных для извлечения полезной информации. Например, у вас есть надежный старый цифровой осциллограф Hantek DSO5202P. Он может выводить сигналы в виде необработанных данных CSV.

    DSO5202P

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

    DSO5202P

    Если вы используете тестовое оборудование, которое поддерживает интерфейс GPIB, вы также можете использовать библиотеки Python, такие как pyVISA, для управления ими. Раньше вам приходилось приобретать установку National Instruments, чтобы делать все это. Теперь вы можете автоматизировать настройку тестового оборудования с помощью компьютера и Python.

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

    Flask – микрофреймворк Python

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

    Flask

    Некоторые испытательные стенды могут быть связаны с пользовательской платой, такой как Arduino или Raspberry Pi, и управляться с компьютера. У некоторых инженеров стандартная производственная тестовая система состоит из чего-то подобного с жгутом проводов, подключенным к Arduino, на котором установлена прошивка протокола Firmata.

    Это позволяет им общаться с платами с помощью Python, используя pyFirmata. Они могут настроить каждый вывод в качестве входа или выхода, проверить состояние каждого вывода, записать все данные, сгенерировать уникальный серийный номер и вывести сообщение. Когда платы находятся на заводе по сборке, инженеру просто нужно научить человека, как запускать тестовый скрипт Python, при этом данные автоматически сохраняются вместе со статистикой для этого производственного цикла.

    SQL: язык управления базами данных

    На самом деле работа с базами данных – удовольствие в Python. Он поставляется с SQLite3, который, как следует из его названия, представляет собой облегченную базу данных, основанную на одном файле.

    SQLite

    Если вы хотите перенести свой код в другие базы данных, особенно серверные, то рекомендуют библиотеку под названием SQLAlchemy. Это позволяет вам взаимодействовать со многими популярными реляционными базами данных, такими как SQLite, PostgreSQL и MySQL, без необходимости изменения кода.

    Вы спросите, как теперь инженер-электронщик будет использовать базу данных?

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

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

    Заключение

    Мы могли бы продолжать и продолжать, и это на самом деле потому, что Python может открыть вам совершенно новые миры в инженерии.

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

    Знание Python может помочь практикующему инженеру в совершенствовании своих навыков – от проектирования схем до участия в полном жизненном цикле продукта.

    Источник

    Python для сетевых инженеров: начало пути

    Наверное, многие сетевые инженеры уже поняли, что администрирование сетевого оборудования только через CLI слишком трудоёмко и непродуктивно. Особенно когда под управлением находятся десятки или сотни устройств, часто настроенных по единому шаблону. Удалить локального пользователя со всех устройств, проверить конфигурации всех маршрутизаторов на соответствие каким-то правилам, посчитать количество включенных портов на всех коммутаторах — вот примеры типовых задач, решать которые без автоматизации нецелесообразно.

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

    Для начала расскажу, почему я выбрал Python.

    Во-первых, это легкий в освоении язык программирования, который позволяет решать очень широкий круг задач.

    Во-вторых, крупные производители сетевого оборудования, такие как Cisco, Juniper, Huawei, внедряют поддержку Python на своем оборудовании. У языка есть будущее в сетевой сфере, и его изучение не будет пустой тратой времени.

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

    Я занимаюсь проектированием и немного внедрением сетевых проектов. В одном из них потребовалось решить сразу две задачи.

    1. Пройтись по нескольким сотням филиальных маршрутизаторов и убедиться, что они настроены единообразно. Например, что для связи с ЦОД используется интерфейс Tunnel1, а не Tunnel0 или Tunnel99. И что эти интерфейсы настроены одинаково, за исключением их IP-адресов, естественно.
    2. Перенастроить все маршрутизаторы, в том числе добавить статический маршрут через IP-адрес местного провайдера. То есть эта команда будет уникальной для каждого маршрутизатора.

    На помощь пришел скрипт на Python. Его разработка и тестирование заняли один день.

    Первое, что нужно сделать, это установить Python и крайне желательно PyCharm CE. Скачиваем и устанавливаем Python 3 (сейчас последняя версия 3.6.2). При установке выбираем «Customize installation» и на этапе «Advanced Options» устанавливаем галку напротив «Add Python to environment variables».

    PyCharm CE — это бесплатная среда разработки с очень удобным отладчиком. Скачиваем и устанавливаем.

    Второй шаг — устанавливаем необходимую библиотеку netmiko. Она нужна для взаимодействия с устройствами по SSH или telnet. Библиотеку устанавливаем из командной строки:

    pip install netmiko

    Третьим шагом будет подготовка исходных данных и скрипта под наши задачи.

    В качестве входных данных будем использовать текстовый файл “ip.txt”. В каждой строчке файла должен быть IP-адрес устройства, к которому мы подключаемся. Через запятую можно указать логин и пароль для конкретного устройства. Если этого не сделать, то будут использоваться те, которые вы введёте при запуске скрипта. Пробелы будут проигнорированы. Если первый символ в строке «#», то она считается комментарием и игнорируется. Вот пример корректного файла:

    Сам скрипт логически состоит из двух частей: основной программы и функции doRouter() . Внутри неё выполняется подключение к маршрутизатору, отправка команд в CLI, получение и анализ ответов. Входными данными для функции являются: IP-адрес маршрутизатора, логин и пароль. При возникновении проблем функция вернёт IP-адрес маршрутизатора, мы его запишем в отдельный файл fail.txt. Если всё прошло хорошо, то будет просто выведено сообщение на экран.

    Почему нужно выносить взаимодействие с маршрутизаторами в отдельную функцию, а не выполнить всё в цикле в основной программе? Главная причина — продолжительность работы скрипта. Подключение поочередно ко всем маршрутизаторам заняло у меня 4 часа. В основном из-за того, что какие-то из них не отвечали и скрипт долго ждал истечения таймаута. Поэтому запускать мы будем параллельно по 10 экземпляров функций. В моём случае это сократило время выполнения скрипта до 10 минут.

    Рассмотрим теперь подробнее основную программу.

    Ради безопасности не будем хранить логин и пароль в скрипте. Поэтому выведим на экран приглашение для их ввода. Причем при вводе пароля он не будет отображаться. Эти глобальные переменные используем в процедуре doRouter . У меня были проблемы с работой getpass в PyCharm под Windows. Скрипт работал корректно, только если выполнять его в режиме Debug, а не Run. В командной строке всё работало без нареканий. Также скрипт тестировался в OS X, там проблем в PyCharm замечено не было.

    Читайте также:  Ооо покровский завод станочного оборудования

    Потом читаем файл с IP-адресами. Конструкция try…except позволит корректно обработать ошибку чтения файла. На выходе получим массив данных для подключения connection_data , содержащий IP-адрес, логин и пароль.

    Далее создаём список процессов и запускаем их. Метод создания процессов я задал как “spawn”, чтобы в Windows и OS X скрипт работал одинаково. Количество созданных процессов будет равно количеству IP-адресов. Но выполняться одновременно будут не более 10. В список routers_with_issues записываем то, что вернут функции doRouter . В нашем случае это IP-адреса маршрутизаторов, с которыми были проблемы.

    Команда process_pool.join() нужна для того, чтобы скрипт дождался завершения выполнения всех экземпляров функций doRouter() и только потом продолжил выполнять основную программу.

    В конце создаем/переписываем текстовый файл, в котором у нас будут IP-адреса ненастроенных маршрутизаторов. Также выводим этот список на экран.

    Теперь разберем процедуру doRouter() . Первое, что нужно сделать, — обработать входные данные. С помощью ReGex проверяем, что функции был передан корректный IP-адрес.

    Далее создаём словарь с необходимыми для подключения данными и подключаемся к маршрутизатору.

    Отправляем команды и анализируем полученный ответ от маршрутизатора. Он будет помещён в переменную cli_response . В этом примере мы проверяем текущие настройки. Результат выводим на экран. Данную часть нужно менять под разные задачи. В этом скрипте проверяем текущую конфигурацию маршрутизатора. Если она корректная, то вносим изменения. Если при проверке обнаружены проблемы, то присваиваем переменной config_ok значение False и не применяем изменения.

    Тут будут полезны следующие операции работы со строками.

    Можно отправлять одну или несколько конфигурационных команд сразу. У меня плохо работала отправка больше 5 команд одновременно, при необходимости можно просто повторить конструкцию несколько раз.

    После подготовки скрипта выполнить его можно из командной строки или из PyCharm CE. Из командной строки запускаем командой:

    Я рекомендую пользоваться PyCharm CE. Там создаём новый проект, файл Python (File → New…) и вставляем в него наш скрипт. В папку со скриптом кладем файл ip.txt и запускаем скрипт (Run → Run)

    Получаем следующий результат:

    Пару слов о том, как отладить скрипт. Легче всего это делать в PyCharm. Отмечаем строчку, на которой хотим остановить выполнение скрипта, и запускаем выполнение в режиме отладки. После того, как скрипт остановится, можно будет посмотреть текущие значения всех переменных. Проверить, что передаются и принимаются корректные данные. Кнопками «Step Into» или «Step Into My Code» можно пошагово продолжить выполнение скрипта.

    Ограничения описанной версии скрипта:

    • тестировался только в Python 3
    • не умеет обрабатывать ситуацию, когда вы в первый раз подключаетесь к маршрутизатору и получаете вопрос вида:

    The authenticity of host ‘11.22.33.44 (11.22.33.44)’ can’t be established.
    RSA key fingerprint is SHA256:C+BHaMBjuMIoEewAbjbQbRGdVkjs&840Ve3z4aJo.
    Are you sure you want to continue connecting (yes/no)?

    Этот скрипт был написан для решения конкретных задач. Однако он универсален и, надеюсь, поможет ещё кому-нибудь в работе. А самое главное — послужит первым шагом в освоении Python.

    При написании скрипта использовались следующие ресурсы:

    Источник

    Python3. Автоматизация конфигурации мультивендорного сетевого оборудования

    Предисловие

    Всем доброго времени суток!

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

    Данная статья это не руководство к действию, не единственное решение и явно не претендует на номинацию скрипт года, но я хочу поделиться этим творением, и может быть кому-нибудь он пригодится.

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

    Задача

    Использовать именно python3. Скрипт должен уметь попадать на коммутаторы из списка, определять что за вендор, давать требуемую команду, логировать.

    Собственно как я к этому пришел

    Столкнулся с небольшой проблемой по изменению конфигурации на большом количестве коммутаторов, сразу оговорюсь системы централизованного администрирования сетевого оборудования у нас есть, куча наработок моих коллег в виде скриптов для облегчение ручного труда тоже имеется, в основном bash, perl.

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

    Погуглив и не найдя должного решения (как бы на форумах этот вопрос поднимался, но там всё не то ), решил приступить к написанию собственного скрипта.

    Имеем следующие коммутаторы:

    • Raisecom
    • Qtech rev. 1.0
    • Qtech rev. 2.0 (отличие в синтаксисе)
    • Eltex
    • D-link
    • Порождение Франкенштейна коммутатор с мордой от Qtech rev 1.0, а железо от Raisecom будем звать его ROS

    Для начала импортируем требуемые библиотеки:

    Первоначально опишем функцию определения вендора, т.к. решил использовать два метода:

    1) предположить — что это за вендор (по приглашению ввода логина) как я заметил у всех он разный: Qtech (login:), Raisecom и ROS (Login:), Eltex(User Name:), D-link(Username).

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

    Вся функция под спойлером. Объявляем глобальные переменные, которые будут видны всему скрипту:

    переменные a,d,f,h,j,k,n хранят ключевые слова, по которым мы в последствии будем определять модель коммутатора.

    После открытия файла ver.txt считываем построчно и проверяем на вхождение по ключевым словам, т.к. функция find() возвращает при отрицательном результате -1 по этой логике мы и будем строить ветвления.

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

    Наполнение данного файла будет описано ниже. После всех манипуляций и определения вендора удаляем файл ver.txt.

    Решил не заморачиваться и в теле задать переменные с логином и паролем, знаю что не секьюрно, я работаю над этим.

    Открываем файл для логов и список коммутаторов

    После используем цикл for, считываем строку с ip-адресом коммутатора

    Проверяем его на доступность

    Если он доступен при помощи библиотеки pexpect, делаем попытку подключения по telnet вот на этой итерации и происходит первая проверка по приглашению, о которой между прочим я писал в начале.

    Переменная vend получит значение от 0 до 3 включительно, а в зависимости от того, какое приглашение входа увидит — будет формироваться дальнейшее ветвление.

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

    После закрытия подключения мы делаем повторное подключение только используя уже библиотеку telnetlib.

    Чтобы избежать вываливание ошибок, а выше мы уже проверили что коммутатор доступен, и исключить прерывание скрипта в процессе работы из-за одного неработающего коммутатора обернем все в блок try except.

    Были неоднократные случаи когда из 100 коммутаторов один на себя не пускал.


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

    Значит ждем его

    После вводим логин

    Ждем двоеточие от password

    И ждем 3 секунды (передышка, а то столько работы проделали)

    После ждем приглашения

    Вот на данном этапе мы переходим ко второму уровню по проверке вендора.

    Т.к. мы предположили, что попали на Qtech, а если Вы внимательно читали, то в нашем зоопарке есть две версии qtech, которые отличаются по синтаксису нам нужно еще провести сверку.

    Следовательно мы даем команду show ver, заносим весь вывод в файл ver.txt
    и вызываем процедуру who_is(), которую я описал выше. Команда show ver универсальна для всех Qtech, Raisecom, Eltex,

    К сожалению, D-link не понимает и ему нужно сказать show swich, но мы же умные и не зря ввели итерацию с предположительным определением вендора.

    Так сразу небольшая ремарка после ввода show swich коммутатор выводит не полную информацию и ждет от пользователя нажатие на любую клавишу для дальнейшего вывода и поэтому мы следом посылаем символ «a» для вывода полной информации.

    Чтобы этим не заниматься, можно выключить clipadding

    Вот на этом этапе и заканчивается проверка вендора и с 99% вероятностью можно предположить, что мы верно определили модель коммутатора и можно приступить к конфигурации.

    Для каждого коммутатора мы имеем отдельный файл с набором команд.

    После того, как функция отработала и вернула переменную ver_status, мы можем продолжать дальнейшую работу с ветвлением, т.к. мы точно знаем какой коммутатор сейчас на линии.
    В первую очередь даем коммутатору команду show ver и записываем вывод в лог(про d-link помним ему даем команду sh sw)

    Обязательно ведем счетчики для выявлений несоответствий.

    Открываем файл с командами

    Обязательно порядок команд в файле должен быть таким, как бы их вводил администратор вручную

    conf
    vlan 2525
    name SPD
    int ethe 1/1
    sw mode access
    sw acc vl 2525
    exit
    exit
    save
    y

    Дальше всё по сценарию — читаем файл до тех пор, пока не закончатся строки и их выполняем

    После выхода из цикла говорим коммутатору exit и читаем весь вывод в файл, и так делаем только с qtech1.0, т.к. порой бывает скрипт залипает в ожидании чего-то и именно с этим коммутатором, чтобы не городить лишнего данное решение показалось мне более изящным.

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

    И начинаем все сначала, считываем следующую строку из файла с коммутаторами, определяем модель, производим конфигурацию.

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

    Данный скрипт многократно перерабатывался и процесс на этом не будет остановлен.
    Всем спасибо за внимание. Конструктивная критика приветствуется.

    Источник

    Начало работы с Python в Windows для создания сценариев и автоматизации

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

    В этой статье рассматривается настройка среды для использования некоторых полезных библиотек в Python, которые могут автоматизировать задачи на разных платформах, таких как поиск в файловой системе, доступ к Интернету, анализ типов файлов и т. д. с помощью подхода, ориентированного на Windows. Для операций, относящихся к Windows, извлеките ctypes, совместимую с C библиотеку функций с кодом на другом языке программирования для Python, winreg, функции, предоставляющие API реестра Windows для Python, и Python/WinRT, включив доступ к API среды выполнения Windows в Python.

    Настройка среды разработки

    При использовании Python для написания скриптов, выполняющих операции файловой системы, рекомендуется установить Python из Microsoft Store. При установке из Microsoft Store используется базовый интерпретатор Python3, но в дополнение к автоматическому обновлению также настраиваются параметры пути для текущего пользователя (без необходимости доступа администратора).

    Если вы используете Python для веб-разработки в Windows, рекомендуем использовать другую установку с помощью подсистемы Windows для Linux. Ознакомьтесь с пошаговыми инструкциями в нашем руководстве: Начало работы с Python для разработки веб-приложений в Windows. Если вы новичок в Python, ознакомьтесь с нашим руководством: Get started using Python on Windows for beginners (Приступая к работе с Python в Windows для начинающих). В некоторых сложных сценариях (например, при необходимости модификации или доступа к установленным файлам Python, создания копий двоичных файлов или непосредственного использования библиотек DLL Python) может потребоваться загрузить определенный выпуск Python непосредственно с сайта python.org или установить альтернативное средство, например Anaconda, Jython, PyPy, WinPython, IronPython и т. д. Мы рекомендуем это только в том случае, если вы более продвинутый программист на Python и у вас есть конкретная причина выбрать альтернативную реализацию.

    Установка Python

    Чтобы установить Python с помощью Microsoft Store, сделайте следующее:

    Перейдите в меню Пуск (значок Windows в нижнем левом углу), введите «Microsoft Store» и щелкните ссылку, чтобы открыть магазин.

    Когда магазин откроется, выберите Поиск в верхнем правом меню и введите «Python». Выберите «Python 3.7» из результатов в разделе приложений. Щелкните Получить.

    После того как Python завершит процесс загрузки и установки, откройте Windows PowerShell, используя меню Пуск (значок Windows в нижнем левом углу). После открытия PowerShell введите Python —version , чтобы убедиться, что Python3 установлен на компьютере.

    Установка Python из Microsoft Store содержит стандартный диспетчер пакетов pip. Pip позволяет устанавливать дополнительные пакеты, которые не входят в стандартную библиотеку Python, и управлять ими. Чтобы убедиться, что у вас есть pip, который можно использовать для установки пакетов и управления ими, введите pip —version .

    Установка Visual Studio Code

    При использовании VS Code в качестве текстового редактора или интегрированной среды разработки (IDE) вам доступны IntelliSense (помощь в завершении кода), анализ кода (помогает избежать ошибок в коде), поддержка отладки (помогает находить ошибки в коде после запуска), фрагменты кода (шаблоны для небольших повторно используемых блоков кода) и модульное тестирование (тестирование интерфейса кода с различными типами входных данных).

    Загрузите VS Code для Windows и следуйте инструкциям по установке: https://code.visualstudio.com.

    Установка расширения Microsoft Python

    Установите расширение Microsoft Python, чтобы воспользоваться преимуществами функций поддержки VS Code. Подробнее.

    Откройте окно расширения VS Code с помощью CTRL+SHIFT+X (или используйте меню, чтобы перейти к Вид > Расширения).

    В поле Поиск расширений в Marketplace введите: Python.

    Найдите расширение Python (ms-python.python) от Microsoft и нажмите зеленую кнопку Установить.

    Откройте встроенный терминал PowerShell в VS Code

    VS Code содержит встроенный терминал, который позволяет открывать командную строку Python с помощью PowerShell, создавая простой рабочий процесс между редактором кода и командной строкой.

    Откройте терминал в VS Code, выберите Просмотр > Терминал или используйте сочетание клавиш Ctrl+` (используя символ обратного апострофа).

    По умолчанию этим терминалом должен быть PowerShell, но если его нужно изменить, используйте Ctrl+Shift+P, чтобы ввести команду. Введите терминал: Выберите Оболочку по умолчанию, и отобразится список параметров терминала, содержащий PowerShell, командную строку, WSL и т. д. Выберите ту, которую хотите использовать, и нажмите Ctrl+Shift+` (с помощью обратного апострофа), чтобы создать новый терминал.

    В окне терминала VS Code откройте Python, введя: python

    Попробуйте использовать интерпретатор Python, введя: print(«Hello World») . Python вернет фразу «Hello World».

    Командная строка Python в VS Code

    Чтобы выйти из Python, введите exit() , quit() или нажмите клавиши CTRL+Z.

    Установка Git (необязательно)

    Если вы планируете совместно работать над кодом Python с другими пользователями или размещать проект на сайте с открытым исходным кодом (например, GitHub), примите во внимание, что VS Code поддерживает управление версиями с помощью Git. Вкладка системы управления версиями в VS Code отслеживает все изменения и содержит общие команды Git (добавление, фиксация, принудительная отправка, извлечение) прямо в пользовательском интерфейсе. Сначала необходимо установить Git для включения панели управления версиями.

    Скачайте и установите Git для Windows с веб-сайта git-scm.

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

    Если вы никогда не использовали Git, обратитесь к руководствам по GitHub. Они помогут вам приступить к работе.

    Пример сценария для вывода структуры каталога файловой системы

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

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

    Откройте PowerShell, используя меню Пуск (нижний левый значок Windows).

    Создайте каталог для проекта: mkdir python-scripts , а затем откройте этот каталог: cd python-scripts .

    Создайте несколько каталогов для использования с нашим примером сценария:

    Создайте несколько файлов в этих каталогах для использования с нашим сценарием:

    Создайте в каталоге Python-Scripts новый файл Python:

    Откройте проект в VS Code, введя: code .

    Откройте окно проводника VS Code, нажав Ctrl+Shift+E (или используйте меню, чтобы перейти к Вид > Обозреватель) и выберите только что созданный файл list-directory-contents.py. Расширение Microsoft Python будет автоматически загружать интерпретатор Python. Загруженный интерпретатор можно увидеть в нижней части окна VS Code.

    Python — интерпретируемый язык, то есть он выступает в качестве виртуальной машины, имитируя физический компьютер. Существуют различные типы интерпретаторов Python, которые можно использовать: Python 2, Python 3, Anaconda, PyPy и т. д. Чтобы выполнить код Python и получить Python IntelliSense, необходимо указать интерпретатор, который следует использовать в VS Code. Если нет конкретной причины для выбора другого интерпретатора, мы рекомендуем придерживаться интерпретатора, который VS Code выбирает по умолчанию (Python 3 в нашем случае). Чтобы изменить интерпретатор Python, выберите интерпретатор, который сейчас отображается в синей панели в нижней части окна VS Code, или откройте палитру команд (Ctrl+Shift+P) и введите команду Python: Select Interpreter (Python: выбор интерпретатора). На экране появится список установленных интерпретаторов Python. Using Python environments in VS Code(Использование сред Python в VS Code).

    Вставьте следующий код в файл list-directory-contents.py, а затем выберите Сохранить:

    Откройте интегрированный терминал VS Code (Ctrl+` с помощью символа обратного апострофа) и введите каталог src, в котором вы только что сохранили сценарий Python:

    Запустите сценарий в PowerShell с помощью:

    Результат должен выглядеть примерно так:

    Используйте Python, чтобы вывести выходные данные каталога файловой системы в собственный текстовый файл, введя следующую команду непосредственно в терминале PowerShell: python3 list-directory-contents.py > food-directory.txt

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

    Если вы не можете установить Python 3 из Microsoft Store, прочтите об этой проблеме, чтобы ознакомиться с примером управления путями для этого примера скрипта.

    Пример сценария для изменения всех файлов в каталоге

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

    В папке src в каталоге python-scripts создайте новый файл Python для своего сценария:

    Откройте файл update-filenames.py, вставьте следующий код в файл и сохраните его:

    os.getmtime возвращает метку времени в тактах, что трудно читать. Сначала его необходимо преобразовать в стандартную строку datetime.

    Протестируйте сценарий update-filenames.py, запустив его: python3 update-filenames.py а затем снова запустите сценарий list-directory-contents.py: python3 list-directory-contents.py

    Вы должны получить следующий результат:

    Используйте Python для вывода новых имен каталогов файловой системы с меткой времени последнего изменения в начале текстового файла, введя эту команду непосредственно в терминале PowerShell: python3 list-directory-contents.py > food-directory-last-modified.txt

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

    Источник