Гибернация компьютера в Home Assistant

Гибернация компьютера в Home Assistant

Гибернация компьютера в Home Assistant

Поскольку я часто использую гибернацией, я решил сделать гибернацию своего ПК через Home Assistant.

Если с выключением компьютера через RPC Shutdown всё понятно, то с переходом в режим гибернации возник вопрос, так как RPC Shutdown не может отправить ПК в этот режим.

Я начал искать варианты и наткнулся на программу под названием Airytec Switch Off. Эта программа позволяет автоматически или удаленно выключать компьютер с любого компьютера или мобильного телефона. Что для меня важно, так это то, что она имеет веб-интерфейс с ссылками на команды, из которых я и получил URL которые я использовал в Home Assistant.

Теперь я расскажу, как я реализовал это у себя. Для начала, нужно скачать и установить саму программу. После установки и запуска, в трее появится иконка. Чтобы получить доступ к настройкам программы, нужно кликнуть правой клавишей мыши по иконке и выбрать пункт Options.

Выбираем пункт Options

Далее переходим во вкладку Remote и ставим галочку Enable web interface. После кликаем по View web interface.

Включаем web интерфейс

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

Web интерфейс Airytec Switch Off.

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

http://localhost:700/?action=System.Hibernate

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

http://192.168.30.68:700/?action=System.Hibernate

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

В Home Assistant необходимо создать команды Shell. Я сделал это сразу для всех вариантов.

shell_command:
  shutdown_mypc: "curl -k http://192.168.30.68:700/?action=System.Shutdown"
  restart_mypc: "curl -k http://192.168.30.68:700/?action=System.Restart"
  sleep_mypc: "curl -k http://192.168.30.68:700/?action=System.Sleep"
  hibernate_mypc: "curl -k http://192.168.30.68:700/?action=System.Hibernate"

Для включения или гибернации своего ПК я использую переключатель. Вот пример моего переключателя:

switch:
  - platform: wake_on_lan
    name: "Мой ПК"
    mac: XX:XX:XX:XX:XX:XX
    turn_off:
      service: shell_command.hibernate_mypc
      

На этом все. Надеюсь, моя статья кому-то поможет.

Не работает метод map() с методом paginate() в Laravel Eloquent.

Не работает метод map() с методом paginate() в Laravel Eloquent.

Не работает метод map() с методом paginate() в Laravel Eloquent.

Столкнулся с проблемой, не работает метод map() с методом paginate() в Laravel Eloquent. Метод map() создает новую коллекцию. Соответственно при попытке использовать его с методом paginate() ничего не получится. Используя map() мы получим коллекцию без пагинации.

$users = User::paginate($request->per_page ?? 10)->map(function ($user) {
            $user->confirm_email = $user->email_verified_at ? true : false;
            $user->role_name = $user->roles()->first() ? $user->roles()->first()->name : null;
            return $user;
        });

Для того, чтобы изменить значения в полученной коллекции, нужно использовать метод through().

 $users = User::paginate($request->per_page ?? 10)->through(function ($user) {
            $user->confirm_email = $user->email_verified_at ? true : false;
            $user->role_name = $user->roles()->first() ? $user->roles()->first()->name : null;
            return $user;
        });

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


Скрипты для кофеварки Redmond(RedSolution) SkyCoffee M1509S/M1519S в Home Assistant

Скрипты для кофеварки Redmond(RedSolution) SkyCoffee M1509S/M1519S в Home Assistant

Скрипты для кофеварки Redmond(RedSolution) SkyCoffee M1509S/M1519S в Home Assistant

Просили показать как у меня реализована дозирование кофе в кофеварке Redmond M1509S/M1519S. В двух словах:

В роли шлюза использую ESP32 с прошивкой https://github.com/alutov/ESP32-R4sGate-for-Redmond.

Устройства прилетают в Home Assistant через MQTT.

Кофеварка в MQTT

Скрипты:

01_coffee:
  alias: Кофеварка - Одна чашка кофе
  sequence:
    - service: switch.turn_off
      data:
        entity_id: switch.r4s01_coffee_strength
    - delay: 0:00:02
    - service: switch.turn_on
      data:
        entity_id: switch.r4s01_coffee_switch
    - delay: 0:02:00
    - service: switch.turn_off
      data:
        entity_id: switch.r4s01_coffee_switch
    - delay: 0:0:10
    - service: media_player.play_media
      entity_id: media_player.yandex_station_m00scgg00cx7cg
      data:
        media_content_id: Ваш кофе готов
        media_content_type: text

02_coffee:
  alias: Кофеварка - Две чашки кофе
  sequence:
    - service: switch.turn_off
      data:
        entity_id: switch.r4s01_coffee_strength
    - delay: 0:00:02
    - service: switch.turn_on
      data:
        entity_id: switch.r4s01_coffee_switch
    - delay: 0:04:00
    - service: switch.turn_off
      data:
        entity_id: switch.r4s01_coffee_switch
    - delay: 0:0:10
    - service: media_player.play_media
      entity_id: media_player.yandex_station_m00scgg00cx7cg
      data:
        media_content_id: Ваш кофе готов
        media_content_type: text
03_coffee:
  alias: Кофеварка - Три чашки кофе
  sequence:
    - service: switch.turn_off
      data:
        entity_id: switch.r4s01_coffee_strength
    - delay: 0:00:02
    - service: switch.turn_on
      data:
        entity_id: switch.r4s01_coffee_switch
    - delay: 0:06:00
    - service: switch.turn_off
      data:
        entity_id: switch.r4s01_coffee_switch
    - delay: 0:0:10
    - service: media_player.play_media
      entity_id: media_player.yandex_station_m00scgg00cx7cg
      data:
        media_content_id: Ваш кофе готов
        media_content_type: text

01_coffee_strength:
  alias: Кофеварка - Одна чашка крепкого кофе
  sequence:
    - service: switch.turn_on
      data:
        entity_id: switch.r4s01_coffee_strength
    - delay: 0:00:02
    - service: switch.turn_on
      data:
        entity_id: switch.r4s01_coffee_switch
    - delay: 0:02:30
    - service: switch.turn_off
      data:
        entity_id: switch.r4s01_coffee_switch
    - delay: 0:00:02
    - service: switch.turn_off
      data:
        entity_id: switch.r4s01_coffee_strength
    - delay: 0:0:10
    - service: media_player.play_media
      entity_id: media_player.yandex_station_m00scgg00cx7cg
      data:
        media_content_id: Ваш кофе готов
        media_content_type: text

02_coffee_strength:
  alias: Кофеварка - Две чашки крепкого кофе
  sequence:
    - service: switch.turn_on
      data:
        entity_id: switch.r4s01_coffee_strength
    - delay: 0:00:02
    - service: switch.turn_on
      data:
        entity_id: switch.r4s01_coffee_switch
    - delay: 0:05:00
    - service: switch.turn_off
      data:
        entity_id: switch.r4s01_coffee_switch
    - delay: 0:00:02
    - service: switch.turn_off
      data:
        entity_id: switch.r4s01_coffee_strength
    - delay: 0:0:10
    - service: media_player.play_media
      entity_id: media_player.yandex_station_m00scgg00cx7cg
      data:
        media_content_id: Ваш кофе готов
        media_content_type: text

03_coffee_strength:
  alias: Кофеварка - Три чашки крепкого кофе
  sequence:
    - service: switch.turn_on
      data:
        entity_id: switch.r4s01_coffee_strength
    - delay: 0:00:02
    - service: switch.turn_on
      data:
        entity_id: switch.r4s01_coffee_switch
    - delay: 0:07:30
    - service: switch.turn_off
      data:
        entity_id: switch.r4s01_coffee_switch
    - delay: 0:00:02
    - service: switch.turn_off
      data:
        entity_id: switch.r4s01_coffee_strength
    - delay: 0:0:10
    - service: media_player.play_media
      entity_id: media_player.yandex_station_m00scgg00cx7cg
      data:
        media_content_id: Ваш кофе готов
        media_content_type: text

00_coffee_stop:
  alias: Кофеварка - Стоп
  sequence:
    - service: script.turn_off
      target:
        entity_id:
          - script.01_coffee_strength
          - script.02_coffee_strength
          - script.03_coffee_strength
          - script.01_coffee
          - script.02_coffee
          - script.03_coffee
    - delay: 0:00:01
    - service: switch.turn_off
      target:
        entity_id: switch.r4s01_coffee_switch
    - delay: 0:00:01
    - service: switch.turn_off
      target:
        entity_id: switch.r4s01_coffee_strength



Активирую скрипты через команды колонке. Использую компонент https://github.com/dext0r/ha-yandex-station-intents.

Intents:

yandex_station_intents:
  intents:
    Сделай кофе: Заказ принят, делаю чашечку кофе #1
    Сделай чашку кофе: Заказ принят, делаю чашечку кофе #2
    Сделай две чашки кофе: Заказ принят, делаю две чашки кофе #3
    Сделай три чашки кофе: Заказ принят, делаю три чашки кофе #4
    Сделай чашку крепкого кофе: Заказ принят, делаю чашечку крепкого кофе #5
    Сделай две чашки крепкого кофе: Заказ принят, делаю две чашки крепкого кофе #6
    Сделай три чашки крепкого кофе: Заказ принят, делаю три чашки крепкого кофе #7
    Сделай крепкий кофе: Заказ принят, делаю чашечку крепкого кофе #8
    Отмени кофе: Отменяю заказ #9

Автоматизации:

- alias: Кофеварка - Одна чашка кофе
  trigger:
    platform: event
    event_type: yandex_intent
    event_data:
      text: Сделай кофе
  action:
    - service: script.01_coffee

- alias: Кофеварка - Одна чашка кофе2
  trigger:
    platform: event
    event_type: yandex_intent
    event_data:
      text: Сделай чашку кофе
  action:
    - service: script.01_coffee

- alias: Кофеварка - Две чашки кофе
  trigger:
    platform: event
    event_type: yandex_intent
    event_data:
      text: Сделай две чашки кофе
  action:
    - service: script.02_coffee

- alias: Кофеварка - Три чашки кофе
  trigger:
    platform: event
    event_type: yandex_intent
    event_data:
      text: Сделай три чашки кофе
  action:
    - service: script.03_coffee

- alias: Кофеварка - Одна чашка крепкого кофе
  trigger:
    platform: event
    event_type: yandex_intent
    event_data:
      text: Сделай крепкий кофе
  action:
    - service: script.01_coffee_strength

- alias: Кофеварка - Одна чашка крепкого кофе2
  trigger:
    platform: event
    event_type: yandex_intent
    event_data:
      text: Сделай чашку крепкого кофе
  action:
    - service: script.01_coffee_strength

- alias: Кофеварка - Две чашки крепкого кофе
  trigger:
    platform: event
    event_type: yandex_intent
    event_data:
      text: Сделай две чашки крепкого кофе
  action:
    - service: script.02_coffee_strength

- alias: Кофеварка - Три чашки крепкого кофе
  trigger:
    platform: event
    event_type: yandex_intent
    event_data:
      text: Сделай три чашки крепкого кофе
  action:
    - service: script.03_coffee_strength

- alias: Кофеварка - Стоп
  trigger:
    platform: event
    event_type: yandex_intent
    event_data:
      text: Отмени кофе
  action:
    - service: script.00_coffee_stop
Перестал обновляться проводник в Windows

Перестал обновляться проводник в Windows

Перестал обновляться проводник в Windows

Столкнулся с проблемой, что перестал обновляться проводник в Windows. Для любого действия, будь-то удаление или создание папки/файла, приходилось вручную обновлять проводник. При скачивании файла браузер подвисал на некоторое время. Также при запуске подвисали на некоторое время Яндекс.Диск и Яндекс.Заметки.

Перепробовал кучу разных способов решения данной проблемы начиная от восстановления системных файлов Sfc /scannow и заканчивая сканированием антивирусом своей системы. Долгое время не мог решить данную проблему, но решение оказалось очень простым.

Виновник моей проблемы из за которой перестал обновляться проводник Windows
Виновник моей проблемы

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

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

DuckDNS.org в Keenetic

DuckDNS.org в Keenetic

DuckDNS.org в Keenetic

Так сложилось, что появилась необходимость использовать именно DuckDNS в роутере Keenetic, хоть у него есть свой собственный. В данной статье я расскажу как настроить DuckDNS в Keenetic на примере Keenetic 4G.

Keenetic 4G
Keenetic 4G

Первым делом нужно установить пакет DDNS. Для этого идем в Управление -> Параметры системы -> Изменить набор компонентов.

Изменить набор компонентов
Выбираем Изменить набор компонентов

Устанавливаем Клиент динамической службы DNS (DDNS).

После перезагрузки роутера идем в Сетевые правила -> Доменное имя -> DDNS.


В поле Сервис выбираем Другой.
Адрес сервиса указываем https://www.duckdns.org/update?domains=mydomen&token=mysecrettoken не забыв указать свой домен и токен.
Обратите внимание! URL необходимо указывать без параметра &ip=.
Доменное имя, Имя пользователя, Пароль оставляем пустыми.
Ставим галочку Определять мой IP-адрес автоматически.

Вкладка DDNS
Вкладка DDNS

Сохраняем настройки и переходим в Системный монитор -> Статус. В Интернет выбираем Подробнее о соединение. В Статус DDNS мы должны увидеть updated successfully.

Статус DDNS
Статус DDNS

На этом настройка DuckDNS в Keenetic завершена.

Прошивка камеры IPC8232SWC-WE от Ростелеком на оригинальную прошивку

Прошивка камеры IPC8232SWC-WE от Ростелеком на оригинальную прошивку

Прошивка камеры IPC8232SWC-WE от Ростелеком на оригинальную прошивку

Внимание! Автор не несет ответственность за ваши неудачи, и не призывает к действию! Все что вы делаете — вы делаете на свой страх и риск!

Данный способ прошивки подсмотрен на 4pda, дополнен и немного изменен для лучшего понимания.

Немного о камере

Данная камера была приобретена на Avito за копейки. Хотелось избавиться от камер Xiaomi и приложения MiHome. Оригинальная прошивка поддерживает протокол Onvif и RTSP, что собственно мне и было нужно для добавления камер в видеорегистратор и Home Assistant. Так же у камеры на ножке есть магнит, который позволяет крепить камеру на металлических поверхностях, либо на металлическом пятаке, который идет в комплекте и прикручивается на пару саморезов. Еще один из плюсов — наличие Ethernet разъема на камере.

Наличие Ethernet разъема
Наличие Ethernet разъема

Прошивка камеры

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

Поддеваем с краю черную часть камеры
Поддеваем с краю черную часть камеры

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

Отключаем микрофон и подсветку
Отключаем микрофон и подсветку

После этого ищем UART рядом с Ethernet разъемом. Нас интересуют только контакты Tx Rx и Gnd.

UART
UART

К UART можно под паяться или же использовать иголки как сделал я. Так же нужно воткнуть LAN кабель.

Подключаем UART и LAN кабель
Подключаем UART и LAN кабель

Теперь качаем TFTP сервер, архив с прошивкой и Pytty.

Распаковываем файлы прошивки в рядом с TFTP сервером.

Файлы прошивки рядом с TFTP сервером
Файлы прошивки рядом с TFTP сервером

Редактируем файл manuinfo.txt под себя

DEVICE_SERIAL_NUMBER: серийный номер вашей камеры (12 знаков)
MAC_ADDRESS: мак-адрес сетевого интерфейса в формате 0123-4567-89AB
ACTIVE_CODE: регистрационный код для облака EZ (25 знаков). Предлагаю использовать следующий формат: 0SSSSSSSSSSSSMMMMMMMMMMMM (S — серийный номер, M — мак адрес)
REGION_CODE: код региона IN — голосовые сообщения на английском, NONE — голосовые сообщения на китайском, FF — без голосовых сообщений

Запускаем TFTP, открываем Pytty выбираем наш COM порт и скорость 115200.

Настройки Pytty
Настройки Pytty

Подаем питание на камеру и жмем в Pytty Ctrl + Enter либо Ctrl + B чтобы остановить загрузку.

Останавливаем загрузку
Останавливаем загрузку

После того, как остановили загрузку нужно указать IP адрес камеры и IP адрес TFTP сервера.

ipaddr — адрес камеры, serverip — адрес tftp сервера.

setenv ipaddr 192.168.0.99
setenv serverip 192.168.0.111
Указываем IP адреса камеры и TFTP сервера
Указываем IP адреса камеры и TFTP сервера

Далее очищаем флеш-память камеры, загружаем новый загрузчик и перезагружаем камеру.

mw.b 0x42000000 0xff 0x1000000;tftp 0x42000000 u-boot.bin
nand erase 0 0x8000000;nand write 0x42000000 0 0x100000
reset

В TFTP сервере должны увидеть скачивание файла загрузчика.

Скачивание загрузчика
Скачивание загрузчика

После перезагрузки камеры снова выставляем IP адреса камеры и сервера.

setenv ipaddr 192.168.0.99
setenv serverip 192.168.0.111

Обновляем прошивку, загружаем конфигурацию, выставляем свой MAC-адрес и перезагружаемся.

update all
manuinfo manuinfo.txt
config ethaddr 01:23:45:67:89:AB (mac-адрес вашей камеры)
reset
Загрузка прошивки
Загрузка прошивки

После перезагрузки если все правильно сделали можно перейти в web-интерфейс камеры.

Страница авторизации
Страница авторизации

По умолчанию данные для входа admin/123456.

Web-интерфейс камеры
Web-интерфейс камеры

Итог

Прошивка камеры на этом закончена. Теперь камеру можно добавить в регистратор через протокол Onvif или RTSP.

RTSP основного потока rtsp://admin:123456@ipaddress:554/media/video1
RTSP второго потока rtsp://admin:123456@ipaddress:554/media/video2

Настройка Xdebug + OpenServer + PhpStorm

Настройка Xdebug + OpenServer + PhpStorm

Настройка Xdebug + OpenServer + PhpStorm

В данной статье я подробно и наглядно расскажу как настроить и использовать связку Xdebug + OpenServer + PhpStorm.

Первым делом нужно включить расширение Xdebug в конфигурации PHP. Для этого нужно в OpenServer идем в Дополнительно > Конфигурация > PHP_8.1. Версия PHP у вас может отличаться.

Конфигурация PHP
Конфигурация PHP

В файле конфигурации нужно найти и раскомментировать строку:

zend_extension = xdebug

После нужно найти секцию [xdebug] и раскомментировать строки:

xdebug.mode                     = develop,debug
xdebug.client_host              = "localhost"
xdebug.client_port              = 9003

После сохраняем файл и перезапускаем OpenServer.

Перезапускаем сервер
Перезапускаем сервер

Теперь переходим к настройке PhpStorm. Комбинацией Ctrl + Alt + S или через File > Settings открываем настройки. Слева выбираем PHP > Debug. В открывшихся настройках снимаем галочки с Force break at first line when no path mapping specified и Force break at first line when a script is outside the project. Порты должны быть 9000 и 9003.

Далее в открытом проекте в правом верхнем углу выбираем Current File > Edit Configurations.

Current File > Edit Configurations
Current File > Edit Configurations

В открывшемся окне нажимаем + и выбираем PHP Remote Debug.

Добавляем конфигурацию для отладки
Добавляем конфигурацию для отладки

В этом окне нужно выбрать напротив поля Server.

Выбираем многоточие напротив поля Server
Выбираем многоточие напротив поля Server

В очередном открывшемся окне тыкаем + и в полях Name и Host указываем имя нашего хоста и жмем OK.

Добавляем хост для отладки
Добавляем хост для отладки

В предыдущем окне в поле Name для удобства указываем имя нашего хоста. В поле Server выбираем наш созданный хост, а в IDE key пишем PHPSTORM. Жмет OK.

Настройка отладки PHP
Настройка отладки PHP

Переходим к настройке браузера. Нужно установить расширение Xdebug helper из магазина расширений Google Chrome.

Xdebug helper в магазине Google Chrome
Xdebug helper в магазине Google Chrome

После того, как установили Xdebug helper кликаем по нему правой клавишей и выбираем Параметры.

Переходим в параметры Xdebug helper
Переходим в параметры Xdebug helper

В открывшихся настройках нас интересует параметр IDE key. Выбираем PhpStorm, т.к. его же мы указали при настройке ранее.

Параметры Xdebug helper
Параметры Xdebug helper

Теперь на странице хоста кликаем по иконке Xdebug helper и выбираем Debug. В моем случае хост будет plastpoliefir.lan. Жук должен загореться зеленым цветом.

В PhpStorm в правом верхнем углу также кликаем по жуку.

Теперь в проекте можно поставить точку остановки и сделать запрос в браузере.

Точка остановки в PhpStorm
Точка остановки в PhpStorm

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

Приложение остановилось там, где мы и хотели.
Приложение остановилось там, где мы и хотели.

Так же можно посмотреть содержимое массивов и объектов.

Содержимое объекта в PhpStorm.
Содержимое объекта в PhpStorm.

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

Панель отладки
Панель отладки

На этом настройка связки Xdebug + OpenServer + PhpStorm закончена. Надеюсь данная вам статья была полезна.

Пагинация массива в Laravel

Пагинация массива в Laravel

Пагинация массива в Laravel

Пагинация массива в Laravel достаточно делается легко при помощи класса LengthAwarePaginator.

// Импортируем класс
use Illuminate\Pagination\LengthAwarePaginator as Paginator;

// Получаем текущую страницу
$currentPage = Paginator::resolveCurrentPage();
// Создаем коллекцию
$collection = collect($categories);
// Задаем кол-во элементов на страницу
$perPage = 15;
// Выбираем элементы для текущей страницы
$currentPageItems = $collection->slice(($currentPage - 1) * $perPage, $perPage);

// Создаем экземпляр класса Paginator
$items = new Paginator($currentPageItems, count($collection), $perPage);
// Указываем URI для генерации ссылок пагинации
$items->setPath($request->url());

// Возвращаем представление
return view('pagination', compact('items'));

В представлении для вывода пагинации используем как и в обычной пагинации $items->links().

<!doctype html>
<html lang="ru">
<head>
    <meta charset="UTF-8">
    <meta name="viewport"
          content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Пагинация массива</title>
</head>
<body>
@foreach($items as $item)
    {{ $item['name'] }} <br>
@endforeach

{{ $items->links() }}

</body>
</html>
Активация PhpStorm, WebStorm, IntelliJ IDEA и другие продукты JetBrains версии 2022.2.X, 2022.3 и 2023.1

Активация PhpStorm, WebStorm, IntelliJ IDEA и другие продукты JetBrains версии 2022.2.X, 2022.3 и 2023.1

Активация PhpStorm, WebStorm, IntelliJ IDEA и другие продукты JetBrains версии 2022.2

В данной статье я расскажу как активировать продукты JetBrains версии 2022.2.X и 2022.3 такие как PhpStorm, WebStorm, IntelliJ IDEA, RubyMine, PyCharm и другие, а также плагины такие как например Laravel Idea.

В комментариях подсказали, что для активации все-таки необходим JDK. Качаем с офф. сайта.

UPD 13.05.23. Проверил работоспособность 2023.1.1 на Windows. Все работает, можно обновляться.

Для начала скачиваем архив ниже.

UPD 16.09.2023. Обновил архив. У кого не активирует попробуйте скачать с архив с 3.jetbra.in.

Распаковываем например в корень диска C:

Распакованные файлы
Распакованные файлы

Далее переходим в папку scripts и выполняем скрипт.

install-current-user.vbs — для текущего пользователя Windows.
install-all-users.vbs — для всех пользователей Windows.
install.sh — для Linux и Mac

В Windows должны увидеть такой результат:

Выполняем скрипт
Выполняем скрипт
Скрипт завершил выполнение
Скрипт завершил выполнение

В Linux результат должен быть таким:

Результат выполнения скрипта в linux
Результат выполнения скрипта в linux

Обязательно требуется перезагрузка после выполнения скрипта в linux!


Далее в файл phpstorm64.exe.vmoptions необходимо добавить строку

-javaagent:C:\jetbra\ja-netfilter.jar=jetbrains

Обратите внимание! Название файла vmoptions отличается в зависимости от IDE. В WebStorm файл будет называться webstorm64.exe.vmoptions, а в PyCharm pycharm64.exe.vmoptions соответственно.

Переходим на сайт 3.jetbra.in и выбираем любой доступный хост. Я выбрал первый ipfs.io.

Попадаем в список с продуктами JetBrains и ищем нужный нам продукт. У меня это PhpStorm.

Список продуктов JetBrains
Список продуктов JetBrains

Жмем Copy to clipboard

Копируем ключ
Копируем ключ

Запускаем IDE, в моем случае это PhpStorm и идем в Help -> Register. Выбираем Activation Code и вставляем скопированный ранее код.

Активация PhpStrorm
Активация PhpStrorm

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

Активированная IDE

С таким же успехом можно активировать и плагины для ваших IDE которые есть в списке на 3.jetbra.in. Например я активировал Laravel Idea.

Активированная Laravel Idea
Активированная Laravel Idea

Проверил активацию PyCharm 2022.3 в Ubuntu 22.04. Результат на скриншоте ниже.

Активированный PyCharm 2022.3 в Linux
Активированный PyCharm 2022.3 в Linux

Надеюсь данная статья вам была полезна. Возникшие вопросы задавайте в комментариях.

UPD 11.01.2022 Друг проверил на MacOS версию 2022.3.1. Достаточно только выполнения скрипта. Все отлично активировалось.

Активация на MacOS

Удалось активировать?

Просмотреть результаты

Загрузка ... Загрузка ...

На какой ОС активируете?

Загрузка ... Загрузка ...
Обход блокировки сайтов Linux

Обход блокировки сайтов Linux

Обход блокировки сайтов на Linux

В данной статье я расскажу как настроить обход блокировки сайтов в Linux на примере Ubuntu 22.04. Для обхода блокировки будет использоваться утилита zapret. Как настроить обход для Windows я рассказал в этой статье.

zapret v.48
Автономное, без задействования сторонних серверов, средство противодействия DPI. Может помочь обойти блокировки или замедление сайтов http(s), сигнатурный анализ tcp и udp протоколов, например с целью блокировки VPN.

Первым делом необходимо установить пакеты git и curl если они у вас не установлены.

apt install git curl

Далее делаем клон репозитория bol-van/zapret

git clone https://github.com/bol-van/zapret.git

Переходим в каталог zapret и устанавливаем бинарники

cd zapret/
./install_bin.sh 

В ответ должны увидеть такой ответ:

x86_64 is OK
installing binaries ...
linking : ../binaries/x86_64/ip2net => /home/adm1/zapret/ip2net
linking : ../binaries/x86_64/mdig => /home/adm1/zapret/mdig
linking : ../binaries/x86_64/nfqws => /home/adm1/zapret/nfq
linking : ../binaries/x86_64/tpws => /home/adm1/zapret/tpws

Теперь нам нужно определить какой способ обхода блокировки нам подходит. Для этого пишем:

./blockcheck.sh | tee /tmp/blockcheck.txt

Далее нам будут заданы несколько вопросов:

specify domain(s) to test. multiple domains are space separated.
domain(s) (default: rutracker.org) :

Домен(ы) для тестирования методов обхода блокировки. Я указал rutracker.org и nnmclub.to

ip protocol version(s) — 4, 6 or 46 for both (default: 4) :
Версия протокола IP. У меня 4.

check http (default : Y) (Y/N) ?
Проверять ли доступность сайта по протоколу HTTP. Говорим да.

check https tls 1.2 (default : Y) (Y/N) ?
Проверять ли доступность сайта по протоколу HTTPS с TLS v1.2. Тоже да.

check https tls 1.3 (default : N) (Y/N) ?
Тоже самое, что и предыдущее только для TLS версии 1.3. Я оставил по умолчанию, т. е. нет.

do not verify server certificate (default : N) (Y/N) ?
Проверять ли SSL сертификат? Тоже оставляем по умолчанию, нет.

how many times to repeat each test (default: 1)
Сколько раз нужно повторять тест. Я оставил по умолчанию.

do all tests despite of result ? (default : N) (Y/N) ?
Делать все тесты несмотря на результат. По умолчанию.

После этого пойдет тестирование. После завершения тестирования смотрим файл /tmp/blockcheck.txt и ищем в нем !!!!! AVAILABLE !!!!!. Это и будет наш обход блокировки сайтов в linux. Их может быть несколько. У меня на Ростелеком это:

- checking tpws --hostcase
!!!!! AVAILABLE !!!!!
- checking tpws --hostspell=hoSt
!!!!! AVAILABLE !!!!!
- checking tpws --split-http-req=method
!!!!! AVAILABLE !!!!!
- checking tpws --split-http-req=method --hostcase
!!!!! AVAILABLE !!!!!
- checking tpws --split-http-req=host
!!!!! AVAILABLE !!!!!
- checking tpws --split-http-req=host --hostcase
!!!!! AVAILABLE !!!!!
- checking tpws --hostdot
!!!!! AVAILABLE !!!!!
- checking tpws --hosttab
!!!!! AVAILABLE !!!!!
- checking tpws --hostnospace
!!!!! AVAILABLE !!!!!
- checking tpws --methodspace
!!!!! AVAILABLE !!!!!
- checking tpws --methodeol
!!!!! AVAILABLE !!!!!
- checking tpws --unixeol
!!!!! AVAILABLE !!!!!
- checking tpws --hostpad=1024
!!!!! AVAILABLE !!!!!
- checking tpws --hostpad=2048
!!!!! AVAILABLE !!!!!
- checking tpws --hostpad=4096
!!!!! AVAILABLE !!!!!
- checking tpws --hostpad=8192
!!!!! AVAILABLE !!!!!
- checking tpws --hostpad=16384
!!!!! AVAILABLE !!!!!

Запускаем скрипт install_easy.sh

./install_easy.sh

Далее нам также будут заданы несколько вопростов:

easy install is supported only from default location : /opt/zapret
currently its run from /home/adm1/zapret
do you want the installer to copy it for you (default : N) (Y/N) ?

Отвечаем да.

select firewall type :
1 : iptables
2 : nftables
your choice (default : iptables) :

Какой фаервол используется. У меня iptables.

enable ipv6 support (default : N) (Y/N) ?
Использование протокола IPv6. Оставляем по умолчанию, нет.

select MODE :
1 : tpws
2 : tpws-socks
3 : nfqws
4 : filter
5 : custom
your choice (default : tpws) :

Режим обхода блокировки. Опираемся на результаты проверки. У меня это tpws.

TPWS_OPT=»—hostspell=HOST —split-http-req=method —split-pos=3″
do you want to edit the options (default : N) (Y/N) ?

Хотим ли мы изменить параметры для режима. Также опираемся на результаты проверки. Я поменял на —hostspell=hoSt.

LAN interface :
1 : NONE
2 : enp0s3
3 : lo
your choice (default : NONE) :

Так как мы настраиваем на клиенте, то выбираем вариант NONE.

WAN filtering works only for local outgoing traffic !
WAN interface :
1 : ANY
2 : enp0s3
3 : lo
your choice (default : ANY) :

На каком WAN интерфейсе будет работать фильтрация. Можно оставить по умолчанию.

enable http support (default : Y) (Y/N) ?

Поддержка http. Да.

enable https support (default : Y) (Y/N) ?
Поддержка https. Да.

select filtering :
1 : none
2 : ipset
3 : hostlist
your choice (default : none) :

Оставляем по умолчанию.

Перезапускаем демона:

service zapret restart

И проверяем доступность сайта. Если сайт не открывается или сломались другие сайты, то пробуйте другие параметры.

Заблокированный сайт открылся
Заблокированный сайт открылся

На этом все, спасибо за внимание! 🙂