По вашему запросу ничего не найдено :(
Убедитесь, что запрос написан правильно, или посмотрите другие наши статьи:
img
В многоуровневой и/или модульной системе должен быть какой-то способ связать услуги или объекты на одном уровне с услугами и объектами на другом. Рисунок 1 иллюстрирует проблему. На рисунке 1 Как A, D и E могут определить IP-адрес, который они должны использовать для своих интерфейсов? Как D может обнаружить Media Access Control адрес (MAC), физический адрес или адрес протокола нижнего уровня, который он должен использовать для отправки пакетов на E? Как может client1.example, работающий на D, обнаружить IP-адрес, который он должен использовать для доступа к www.service1.example? Как D и E могут узнать, на какой адрес они должны отправлять трафик, если они не на одном и том же канале или в одном и том же сегменте? Каждая из этих проблем представляет собой отдельную часть interlayer discovery. Хотя эти проблемы могут показаться не связанными друг с другом, на самом деле они представляют собой один и тот же набор проблем с узким набором доступных решений на разных уровнях сети или стеках протоколов. В лекции будет рассмотрен ряд возможных решений этих проблем, включая примеры каждого решения. Основная причина, по которой проблемное пространство interlayer discovery кажется большим набором не связанных между собой проблем, а не одной проблемой, состоит в том, что оно распределено по множеству различных уровней; каждый набор уровней в стеке сетевых протоколов должен иметь возможность обнаруживать, какая услуга или объект на «этом» уровне относится к какой услуге или объекту на каком-либо более низком уровне. Другой способ описать этот набор проблем - это возможность сопоставить идентификатор на одном уровне с идентификатором на другом уровне - сопоставление идентификаторов. Поскольку в наиболее широко применяемых стеках протоколов есть по крайней мере три пары протоколов , необходимо развернуть широкий спектр решений для решения одного и того же набора проблем межуровневого обнаружения в разных местах. Два определения будут полезны для понимания диапазона решений и фактически развернутых протоколов и систем в этой области: Идентификатор - это набор цифр или букв (например, строка), которые однозначно идентифицируют объект. Устройство, реальное или виртуальное, которое с точки зрения сети кажется единым местом назначения, будет называться объектом при рассмотрении общих проблем и решений, а также хостами или услугами при рассмотрении конкретных решений. Есть четыре различных способа решить проблемы обнаружения interlayer discovery и адресации: Использование известных и/или настроенных вручную идентификаторов Хранение информации в базе данных сопоставления, к которой службы могут получить доступ для сопоставления различных типов идентификаторов. Объявление сопоставления между двумя идентификаторами в протоколе Вычисление одного вида идентификатора из другого Эти решения относятся не только к обнаружению, но и к присвоению идентификатора. Когда хост подключается к сети или служба запускается, он должен каким-то образом определить, как он должен идентифицировать себя - например, какой адрес Интернет-протокола версии 6 (IPv6) он должен использовать при подключении к локальной сети. Доступные решения этой проблемы - это те же четыре решения. Хорошо известные и/или настраиваемые вручную идентификаторы Выбор решения часто зависит от объема идентификаторов, количества идентификаторов, которые необходимо назначить, и скорости изменения идентификаторов. Если: Идентификаторы широко используются, особенно в реализациях протоколов, и сеть просто не будет работать без согласования межуровневых сопоставлений и ... Количество сопоставлений между идентификаторами относительно невелико, и ... Идентификаторы, как правило, стабильны - в частности, они никогда не изменяются таким образом, чтобы существующие развернутые реализации были изменены, чтобы сеть могла продолжать функционировать, а затем ... Самым простым решением является ведение какой-либо таблицы сопоставления вручную. Например, протокол управления передачей (TCP) поддерживает ряд транспортных протоколов более высокого уровня. Проблема соотнесения отдельных переносимых протоколов с номерами портов является глобальной проблемой межуровневого обнаружения: каждая реализация TCP, развернутая в реальной сети, должна иметь возможность согласовать, какие службы доступны на определенных номерах портов, чтобы сеть могла «работать». Однако диапазон межуровневых сопоставлений очень невелик, несколько тысяч номеров портов необходимо сопоставить службам, и довольно статичен (новые протоколы или службы добавляются не часто). Таким образом, эту конкретную проблему легко решить с помощью таблицы сопоставления, управляемой вручную. Таблица сопоставления для номеров портов TCP поддерживается Internet Assigned Numbers Authority (IANA) по указанию Engineering Task Force (IETF); Часть этой таблицы показана на рисунке 2. На рисунке 2 службе echo назначен порт 7; эта служба используется для обеспечения функциональности ping. База данных и протокол сопоставления Если число записей в таблице становится достаточно большим, число людей, участвующих в обслуживании таблицы, становится достаточно большим или информация достаточно динамична, чтобы ее нужно было изучать во время сопоставления, а не при развертывании программного обеспечения, имеет смысл создавать и распространять базу данных динамически. Такая система должна включать протоколы синхронизации разделов базы данных для представления согласованного представления внешним запросам, а также протоколы, которые хосты и службы могут использовать для запроса базы данных с одним идентификатором, чтобы обнаружить соответствующий идентификатор из другого уровня сети. Базы данных динамического сопоставления могут принимать входные данные с помощью ручной настройки или автоматизированных процессов (таких как процесс обнаружения, который собирает информацию о состоянии сети и сохраняет полученную информацию в динамической базе данных). Они также могут быть распределенными, что означает, что копии или части базы данных хранятся на нескольких различных хостах или серверах, или централизованными, что означает, что база данных хранится на небольшом количестве хостов или серверов. Система доменных имен (DNS) описывается как пример службы сопоставления идентификаторов, основанной на динамической распределенной базе данных. Протокол динамической конфигурации хоста (DHCP) описан в качестве примера аналогичной системы, используемой в основном для назначения адресов. Сопоставления идентификаторов объявления в протоколе Если объем проблемы сопоставления может быть ограничен, но количество пар идентификаторов велико или может быстро меняться, то создание единого протокола, который позволяет объектам запрашивать информацию сопоставления напрямую от устройства, может быть оптимальным решением. Например, на рисунке 1 D может напрямую спросить E, какой у него локальный MAC-адрес (или физический). Интернет протокол IPv4 Address Resolution Protocol (ARP) является хорошим примером такого рода решений, как и протокол IPv6 Neighbor Discovery (ND). Вычисление одного идентификатора из другого В некоторых случаях можно вычислить адрес или идентификатор на одном уровне из адреса или идентификатора на другом уровне. Немногие системы используют этот метод для сопоставления адресов; большинство систем, использующих этот метод, делают это для того, чтобы назначить адрес. Одним из примеров такого типа систем является Stateless Address Autoconfiguration (SLAAC), протокол IPv6, который хосты могут использовать для определения того, какой IPv6-адрес должен быть назначен интерфейсу. Другим примером использования адреса нижнего уровня для вычисления адреса верхнего уровня является формирование адресов конечных систем в наборе протоколов International Organization for Standardization (ISO), таких как Intermediate System to Intermediate System (IS-IS).
img
Итак, вы полностью укомплектовали и настроили ваш умный дом. И конечно, вам нравится периодически показывать выпендриваться перед друзьям, как круто включать лампы, проигрывать видео и фильмы подсказкой голосовому помощнику, приготовить кофе или регулировать термостат коснувшись приложения на экране смартфона. Поздравляем! Но если вы любитель автоматизации (как и мы), который редко останавливается на достигнутом, то возможно будете разочарованы количеством необходимых программ, которые нужно загрузить, интерфейсов, которые вам придётся усваивать, чтобы управлять гаджетами. Скорее всего, будут отдельные приложения для управления освещением, медиацентром, термостатом и приложение Google Home, который изо всех сил (но безнадежно) старается собрать всё это воедино. Большая вероятность того, что некоторые приложения будут несовместимы с другими и, вероятно, многие из них не будут работать, если они не в одной сети с гаджетом. Представьте если бы мы смогли управлять всем этим из одного интерфейса, на засоряя телефон или компьютер сотнями приложений, через интерфейс, который доступен как на смартфонах, так и на компьютерах, а также с помощью сторонних сценариев вне зависимости от того, находимся ли мы в одной сети с умным домом или нет. Интерфейс, который был бы легким и простым в использовании? А что если мы будем делать это через мессенджер или чат? В конце концов, разве не легче было бы контролировать наш дом, гаджеты и облачные сервисы через тот же интерфейс, который мы используем для отправки фотографий котиков нашим друзьям, и через бот, полностью адаптированный к нашим потребностям? В этой статье я покажу вам, как настроить команды и процедуры в дополнение к существующим сетапам умного дома. В данном руководстве мы используем два основных инструмента: Telegram: существует много мессенджеров и платформ, но до сих пор попытки многих из них (Facebook Messenger, Whatsapp, Hangouts и т.д.) в предоставлении пригодного для разработчиков API, мягко говоря, были тщетны. Ушли те дни, когда все использовали XMPP или IRC в качестве своего мессенджер. Сегодняшний мир мессенджеров очень разнообразен. Кроме того, поскольку в интересах многих крупных игроков создавать изолированные ИТ экосистемы, наиболее часто используемые решения не поставляются с официально поддерживаемыми API/интерфейсами разработчиков. Мало того: некоторые из них активно отговаривает пользователей от использования чего-либо, кроме официального приложения, для взаимодействия с платформой (почитайте, как Whatsapp может забанить вас). В этом чрезвычайно разнообразном мире, состоящем из нескольких несвязанных островов, Telegram представляет собой радостное исключение: их официальный bot API хорошо задокументирован и поддерживается, и для тех, кто знает немного программирования, очень легок в интеграции. Platypush: Platypush поставляется с плагином для Telegram и бэкэндом. Так что давайте начнем и создадим первый бот для автоматизации управления домом! Создание Telegram-бота Начните беседу с Botfather. Наберите /start, а затем /newbot для создания нового бота. Задайте боту ник и имя. Вы получите ссылку, чтобы начать беседу с вашим ботом и уникальный API-ключ. Сохраните его где-нибудь, так как он нам понадобится для конфигурации плагина platypush. Конфигурация бота в platypush 1. Установите platypush с основными расширения и интеграцией с Telegram: pip install 'platypush[http,db,telegram]' apt-get install redis-server [sudo] systemctl start redis [sudo] systemctl enable redis 2. Изучите platypush хотя бы немного, если еще не сделали этого. Определите несколько вещей, которыми вы хотите управлять/автоматизировать - источники света, музыку, датчики, базу данных, роботы - и установите/настройте соответствующие расширения. В этой статье мы рассмотрим, как настроить наш новый бот для управления освещением Philips Hue, воспроизведением музыки и потоковой передачей PiCamera. 3. Добавьте настройки Telegram в файл ~/.config/platypush/config.yaml: chat.telegram: api_token: <your bot token> backend.chat.telegram: enabled: true Бэкэнд-система позволяет получать события (например, новые сообщения, вложения, запросы и т.д.) и создавать на них пользовательские "хуки". Плагин позволяет писать вам чаты, программно отправлять сообщения и вложения, администрировать каналы и т.д. Допустим, мы хотим, чтобы бот реализовал следующие команды: /start Приветствие пользователя /help Показать доступные команды /lights_on Включить свет /lights_off Выключить свет /music_play Включить музыку /music_pause Приостановить музыку /music_next Перейти на следующую песню /music_prev Перейти на предыдущую песню /start_streaming Начать удаленное вещание PiCamera /stop_streaming Остановить удалённое вещание PiCamera Всё что мы должны сделать это создать действие в конфигурационном файле platypush config.yaml. В этом контексте вы должны: Установить и настроить плагины Philips Hue, mopidy и PiCamera: pip install 'platypush[hue,mpd,picamera]' # Hue lights configuration light.hue: # Hue bridge IP address bridge: 192.168.1.10 # Default groups to control groups: - Living Room # MPD/Mopidy configuration music.mpd: host: localhost port: 6600 # PiCamera configuration camera.pi: vflip: False hflip: False Чтобы не засорять файл config.yaml, создайте новый файл с названием ~/.config/platypush/include/bot.yaml: # /start command handler event.hook.OnTelegramStartCmd: if: type: platypush.message.event.chat.telegram.CommandMessageEvent command: start then: - action: chat.telegram.send_message args: chat_id: ${chat_id} text: "Welcome! Type /help to see the available commands" # /help command handler event.hook.OnTelegramHelpCmd: if: type: platypush.message.event.chat.telegram.CommandMessageEvent command: help then: - action: chat.telegram.send_message args: chat_id: ${chat_id} text: "Available commands: - /lights_on - /lights_off - /music_play [resource] - /music_pause - /music_prev - /music_next - /start_streaming - /stop_streaming " # /lights_on command handler event.hook.OnTelegramLightsOnCmd: if: type: platypush.message.event.chat.telegram.CommandMessageEvent command: lights_on then: - action: light.hue.on - action: chat.telegram.send_message args: chat_id: ${chat_id} text: "Lights turned on" # /lights_off command handler event.hook.OnTelegramLightsOffCmd: if: type: platypush.message.event.chat.telegram.CommandMessageEvent command: lights_off then: - action: light.hue.off - action: chat.telegram.send_message args: chat_id: ${chat_id} text: "Lights turned off" # /music_play command handler event.hook.OnTelegramMusicPlayCmd: if: type: platypush.message.event.chat.telegram.CommandMessageEvent command: music_play then: - if ${cmdargs}: - action: music.mpd.play args: resource: cmdargs[0] - else: - action: music.mpd.play - action: chat.telegram.send_message args: chat_id: ${chat_id} text: "Music playing" # /music_pause command handler event.hook.OnTelegramMusicPauseCmd: if: type: platypush.message.event.chat.telegram.CommandMessageEvent command: music_pause then: - action: music.mpd.pause - action: chat.telegram.send_message args: chat_id: ${chat_id} text: "Music paused" # /music_prev command handler event.hook.OnTelegramMusicPrevCmd: if: type: platypush.message.event.chat.telegram.CommandMessageEvent command: music_prev then: - action: music.mpd.previous - action: chat.telegram.send_message args: chat_id: ${chat_id} text: "Playing previous track" # /music_next command handler event.hook.OnTelegramMusicNextCmd: if: type: platypush.message.event.chat.telegram.CommandMessageEvent command: music_next then: - action: music.mpd.next - action: chat.telegram.send_message args: chat_id: ${chat_id} text: "Playing next track" # /start_streaming command handler event.hook.OnTelegramCameraStartStreamingCmd: if: type: platypush.message.event.chat.telegram.CommandMessageEvent command: start_streaming then: - action: camera.pi.start_streaming args: listen_port: 2222 - action: chat.telegram.send_message args: chat_id: ${chat_id} text: "PiCamera streaming started. Check it out with vlc tcp/h264://hostname:2222" # /stop_streaming command handler event.hook.OnTelegramCameraStopStreamingCmd: if: type: platypush.message.event.chat.telegram.CommandMessageEvent command: stop_streaming then: - action: camera.pi.stop_streaming - action: chat.telegram.send_message args: chat_id: ${chat_id} text: "PiCamera streaming stopped" Подключите файл конфигурации бота в config.yaml: include: -include/bot.yaml Запустите platypush: # Manual start platypush # Service start systemctl start platypush.service Создайте беседу в вашим ботом перейдя по ссылке, выданной BotFather и начните говорить ему, что делать: Сейчас бот доступен любому мы этого явно не хотим. Представьте, что кто-то включит на полную громкость System Of A Down- Jet Pilot вам ночью. Так себе пробуждение. Можно настроить бэкэнд Telegram так, чтобы он принимал сообщения только из определенного списка идентификаторов чатов (в Telegram chat_id используется как для частных пользователей, так и для групп). Отправьте сообщение боту и откройте журналы platypush или проверьте его стандартные выходные данные. На экране появятся следующие сообщения: 2020-01-03 19:09:32,701| INFO|platypush|Received event: {"type": "event", "target": "turing", "origin": "turing", "id": "***", "args": {"type": "platypush.message.event.chat.telegram.CommandMessageEvent", "chat_id": your_chat_id, "message": {"text": "/help", ...}, "user": {"user_id": your_user_id, "username": "****", "is_bot": false, "link": "https://t.me/you", "language_code": "en", "first_name": "***", "last_name": "***"}, "command": "help", "cmdargs": []}} Скопируйте chat_id своего пользователя и вставьте в бак-энд файл: backend.chat.telegram: authorized_chat_ids: - your_user_id Теперь бот ответит ошибкой, если вы попытаетесь отправить сообщение от неавторизованного пользователя. Вы также можете пригласить своего бота в групповой чат и позволить вашим друзьям или членам семьи регулировать свет в вашем доме, если вы захотите! Что дальше? В этой статье мы изучили только одну специфическую особенность интеграции Telegram - способность бота реагировать на события в команде, запускать действия и отвечать текстовыми сообщениями. Как видно из списка поддерживаемых событий Telegram, можно сделать больше, например: Создавать обработчики, когда кто-то делится контактной информацией - когда-нибудь думали разрешить боту автоматически хранить новые контакты, отправленные вам вашими друзьями в чате? Создавайте обработчики при совместном использовании документов, видео или изображения - например, автоматически загружайте все файлы мультимедиа, отправленные в чат, на жесткий диск или удаленную папку Dropbox. Выполнять действия с текстовыми сообщениями вместо команд - можно использовать TextNewsEvent, например, если вы предпочитаете вводить "включить свет" вместо "/lights_on." Сделайте снимок на камеру наблюдения и отправьте ее себе командой send_photo. Можно также развернуть несколько ботов, например, для каждого устройства, чтобы можно было запускать действия на конкретном устройстве из связанного чата или вместо этого использовать один бот в качестве точки входа и доставлять сообщения другим устройствам через MQTT, Kafka или HTTP API.
img
Рассказываем про ещё один полезный инструмент на роутерах MikroTik - отправку e-mail сообщений по протоколу SMTP. Данный инструмент может быть использован для отправки на почту периодических бэкапов или же задействован для написания каких-нибудь скриптов. В интерфейсе WinBox, утилита Email расположена в разделе Tools → Email: Из командной строки - /tool e-mail. Первым делом нужно настроить сервер исходящей почты по протоколу SMTP. Доступны следующие параметры настройки: address - IPv4/v6 адрес, SMTP сервера; from - имя или название почтового ящика, который будет показан получателю; password - пароль, который используется для аутентификации на SMTP сервере. В этом случае аутентификации не будет шифроваться. Для включения шифрования можно использовать функцию start-tls; port - порт SMTP сервера, по умолчанию 25; start-tls - может принимать значения no, yes и tls-only - разрешает только TLS шифрования без поддержки SSL; user - имя пользователя, которое будет использоваться для аутентификации на SMTP сервере. Когда сервер будет настроен, можно начинать отправлять письма. Все параметры при отправке писем идут после команды /tool e-mail send: body - тело письма cc - данный параметр позволяет поставить в копию дополнительных получателей; file - позволяет добавлять один или несколько файлов во вложении к письму; from - название или почтовый адрес, который будет показан как отправитель. Если ничего не указано, то будет взят from, который указывался при настройке сервера SMTP; password - пароль, который используется для аутентификации на SMTP сервере. Если ничего не указано, то будет взят password, который указывался при настройке сервера SMTP; port - порт SMTP сервера. Если ничего не указано, то будет взят port, который указывался при настройке сервера; server - адрес SMTP сервера. Если не указано, то используется параметр сервера, указанный при настройке; start-tls - использовать ли TLS шифрование; subject - тема письма; to - адрес получателя, которому предназначено письмо; user - имя пользователя, для аутентификации на сервере. Если не указано, то будет использоваться user из настроек сервера. Теперь давайте применим механизм отправки писем на практике и создадим скрипт, который будет каждый день высылать файл с резервной копией конфигурации нам на почту. Вот как настройка будет выглядеть в командной строке: tool e-mail> set server=192.168.1.34 set port=25 from=”mnmikrotik@mndomain.ru” Теперь добавим новый скрипт, который будет делать бэкап конфигурации роутера: /export file=export /tool e-mail send to="mnadmin@mndomain.ru"subject="$[/system identity get name] export" body="$[/system clock get date] configuration file" file=export.rsc Добавим скрипт на выгрузку конфигурации в планировщик: /system scheduler add on-event="export-send" start-time=00:00:00 interval=24 Готово, теперь каждый день нам на почту mnadmin@mndomain.ru будет приходить свежая выгрузка резервной копии конфигурации нашего роутера. Для того, чтобы настроить отправку писем на почтовый ящик, требующий TLS шифрования (как например Google mail), нужно настроить следующие параметры отправителя: /tool e-mail set address= 192.168.1.34 set port=587 set from=mnaddress@gmail.com set user= mikrotik set password= supersecurepass При отправке письма на такой ящик, необходимо указать параметр start-tls. send to=mnadmin@mndomain.ru subject="HW!" body="Hello World!" start-tls=yes Если Вы предпочитаете настраивать роутер с помощью интерфейса WinBox, то откройте Tools → Email и настройте параметры сервера: Далее заходим в System → Scripts и добавляем новый скрипт на выгрузку конфигурации: Добавляем скрипт в планировщик, чтобы он срабатывал каждый день:
ВЕСЕННИЕ СКИДКИ
40%
50%
60%
До конца акции: 30 дней 24 : 59 : 59