Плагин MegaD



  • Две проблемы пр работе с плагином MegaD:

    1. В каналах не хватает описания устройства. По идентификатору тяжело определить что это за конкретное устройство. А шагать по ним по всем - долго.
    MegaD_в каналах не хватает описания устройства.png
    2. При копировании канала из существующего невозможно выбрать новое устройство. Точнее можно если принудительно выделить то что есть и удалить - тогда список устройств появляется.
    MegaD_в каналах при копировании канала нельзя выбрать новое устройство.png



  • Добрый день,

    @Alex_Jet:

    Две проблемы пр работе с плагином MegaD:

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

    Спасибо за предложение, мы постараемся учесть Ваше пожелание в новых версиях.

    @Alex_Jet:

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

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

    @Alex_Jet:

    MegaD_в каналах при копировании канала нельзя выбрать новое устройство.png

    По скриншоту видно что у Вас уже присутствует канал (9) с устройством "LAMP1_03" и при добавлении нового канала с устройством "LAMP1_03" происходит ошибка, которая сообщает о данной проблеме.



  • @dev:

    По скриншоту видно что у Вас уже присутствует канал (9) с устройством "LAMP1_03" и при добавлении нового канала с устройством "LAMP1_03" происходит ошибка, которая сообщает о данной проблеме.

    Да, я это понимаю - я копировал новый канал из девятого, но как Вы видите - в выпадающем списке было только то же самое устройство! Других выбрать не было возможности. Получилось сохранить новый канал только тогда когда догадался просто удалить (выделить и удалить клавишей delete) это устройство. После удаления устройства появляется выпадающий список со всеми доступными устройствами.

    Подобный баг был ранее с "-".



  • Добрался до "аналоговых" каналов в MegaD. Точнее каналов, к которым подключаются датчики по I2C - HTU21D, BME280 и прочие.

    Как должна выглядеть "Формула расчета входного значения"??? если мне требуется

    1. Провести 5 измерений через 1 минуту каждое.

    2. Отсортировать значения, откинуть самое меньшее и большее.

    3. Сделать среднее арифметическое из 3-х оставшихся.

    @dev:

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

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



  • Пока, к сожалению, запуск функции для обработки полученного значения (функционал, который был в Berry), не реализован 😞

    Добавим в ближайших версиях



  • По формуле понятно.

    А как прописать Request-ы? Так у меня есть в Berry:
    MegaD_как прописать Request.png



  • Делается примерно также как в Berry в разделе Расширения

    Входящие от MegaD.png



  • Во вкладке Обработка есть инверсия значений , но она что то не работает, Может корявые руки 😄



  • Добрый день ВСЕМ!

    скажите пжл кто нибудь к меге подкидывал расширители портов типа MCP23017 с привязкой к интре?

    если реализовывали поделитесь конфигами пжл



  • К MegaD подключаю CP-Z2L (EM-Marine). При поднесении ключа она отправляет на сервер: /mod_megad.php?pt=35&ib=521f73001200

    В каналах я завел канал 35 и привязал к нему датчик универсальный бинарный. Сформировал соответствующий request:
    35_Sensor.png
    35_Channel.png
    35_Request.png
    Но в отладчике вижу то что есть ниже. А переключения датчика универсального бинарного нет!

    04.10 21:57:02.317 megad5: 192.168.11.25 => localhost:11025 HTTP GET /mod_megad.php?pt=35&ib=521f73001200
    04.10 21:57:02.318 IH: get []
    04.10 21:57:02.318 IH: set {}
    04.10 21:57:02.318 megad5: 192.168.11.25 <= localhost:11025
    
    


  • TOGGLE для бинарных датчиков не определен 😞



  • @intrapro:

    TOGGLE для бинарных датчиков не определен 😞

    Какие есть варианты? Мне бы хотелось иметь возможность активировать/деактивировать виртуальный индикатор взятия в том числе с помощью iButton



  • @Alex_Jet:

    @intrapro:

    TOGGLE для бинарных датчиков не определен 😞

    Какие есть варианты? Мне бы хотелось иметь возможность активировать/деактивировать виртуальный индикатор взятия в том числе с помощью iButton

    Как вариант можно управлять датчиком через сценарий, подписавшись на актуатор, такой хак 😉



  • @dev:

    @Alex_Jet:

    @intrapro:

    TOGGLE для бинарных датчиков не определен 😞

    Какие есть варианты? Мне бы хотелось иметь возможность активировать/деактивировать виртуальный индикатор взятия в том числе с помощью iButton

    Как вариант можно управлять датчиком через сценарий, подписавшись на актуатор, такой хак 😉

    Можно еще проще - привязать бинарный актуатор, а интерактивные операции для него отключить



  • @intrapro:

    Можно еще проще - привязать бинарный актуатор, а интерактивные операции для него отключить

    Да, это идея, спасибо!

    Еще есть проблема с отображением значений датчиков, подключенных к MegaD по I2C, но не выбранных в контроллере в качестве default (если они выбраны по умолчанию, то по команде cmd=all будет результат вида - temp:128.85/hum:118.98) - то есть данные с датчиков запрашиваем принудительно и в ответе контроллер посылает только числовое значение:

    09.10 09:51:26.629 megad5: 
    09.10 09:51:26.630 megad5: localhost => 192.168.11.25 HTTP GET /sec/?pt=30&scl=34&i2c_dev=htu21d&i2c_par=1
    09.10 09:51:26.688 megad5: localhost <= 192.168.11.25  response: statusCode=200 contentType = text/html
    09.10 09:51:26.689 megad5:  body: 26.02
    09.10 09:51:26.689 IH: get []
    09.10 09:51:26.689 IH: set {}
    09.10 09:51:26.830 megad5: 
    09.10 09:51:26.831 megad5: localhost => 192.168.11.25 HTTP GET /sec/?pt=30&scl=34&i2c_dev=htu21d
    09.10 09:51:26.858 megad5: localhost <= 192.168.11.25  response: statusCode=200 contentType = text/html
    09.10 09:51:26.859 megad5:  body: 40.13
    09.10 09:51:26.860 IH: get []
    09.10 09:51:26.860 IH: set {}
    
    

    Если бы датчик был выбран в контроллере по умолчанию, то ответ был бы не только числовым (в примере для DS18B20):

    09.10 09:59:06.772 megad5: 
    09.10 09:59:06.773 megad5: localhost => 192.168.11.25 HTTP GET /sec/?pt=29&cmd=get
    09.10 09:59:06.782 megad5: localhost <= 192.168.11.25  response: statusCode=200 contentType = text/html
    09.10 09:59:06.782 megad5:  body: temp:25.25
    09.10 09:59:06.783 IH: get [{"id":"29","value":"25.25"}]
    09.10 09:59:06.783 IH: set {"ST_HEATING4_02":{"aval":"25.25"}}
    
    

    Еще один момент - после старта плагина (или если MegaD перезагрузился - дал на сервер команду st), необходимо не только считать все каналы командой cmd=all, но и считать сразу все доп каналы (особенно касается I2C каналов). Сейчас при считывании состояния всех каналов, некоторые из них по сути "undefined" (в ответе присутствует ";;;") и только через интервал опроса получаем с них данные. Кроме этого, не понятно почему каналы с состоянием "undefined" принимают нулевые значения, например, канал 35:

    09.10 09:54:06.435 megad5: MegaD plugin has started.
    09.10 09:54:06.451 megad5: Listen server start
    09.10 09:54:06.458 megad5: Listening localhost:11025
    09.10 09:54:06.662 megad5: 
    09.10 09:54:06.662 megad5: localhost => 192.168.11.25 HTTP GET /sec/?cmd=all
    09.10 09:54:06.837 megad5: localhost <= 192.168.11.25  response: statusCode=200 contentType = text/html
    09.10 09:54:06.845 megad5:  body: OFF/0;OFF/0;OFF/0;OFF/0;OFF/0;ON/1;ON/1;OFF;OFF;OFF;OFF;OFF;OFF;OFF;temp:24.93;OFF/0;OFF/0;OFF/0;OFF/0;ON/1;temp:0.00;temp:0.00;OFF;OFF;OFF;OFF;OFF;OFF;OFF;temp:25.31;;;temp:128.85/hum:118.98;temp:128.85/hum:118.98;OFF;;OFF;OFF
    09.10 09:54:06.848 IH: get [{"id":"5","value":"1"},{"id":"6","value":"1"},{"id":"7","value":"0"},{"id":"8","value":"0"},{"id":"9","value":"0"},{"id":"10","value":"0"},{"id":"11","value":"0"},{"id":"12","value":"0"},{"id":"14","value":"24.93"},{"id":"18","value":"0"},{"id":"19","value":"1"},{"id":"20","value":"0"},{"id":"21","value":"0"},{"id":"22","value":"0"},{"id":"23","value":"0"},{"id":"24","value":"0"},{"id":"25","value":"0"},{"id":"26","value":"0"},{"id":"27","value":"0"},{"id":"28","value":"0"},{"id":"29","value":"25.31"},{"id":"35","value":"0"},{"id":"32_1","value":"128.85"},{"id":"32_2","value":"118.98"},{"id":"33_1","value":"128.85"},{"id":"33_2","value":"118.98"}]
    09.10 09:54:06.849 IH: set {"SGERKON4_02":{"dval":0},"SMOTION4_02":{"dval":0},"LAMP0_01":{"dval":"0"},"LAMP1_07":{"dval":"0"},"VENT1":{"dval":"0"},"VENT2":{"dval":"0"},"ACTOR_HEATING4_01":{"dval":"0"},"ACTOR_HEATING4_02":{"dval":"0"},"ST_HEATING4_01":{"aval":"24.93"},"SENSOR1_01":{"dval":"0"},"SFIRE1_04":{"dval":0},"STEMP_PVU1":{"aval":"0"},"STEMP_PVU2":{"aval":"0"},"VENT_PVU1":{"dval":"0"},"VENT_PVU2":{"dval":"0"},"VENT_PVU3":{"dval":"0"},"VALVE_AIR1":{"dval":"0"},"VALVE_AIR3":{"dval":"0"},"VALVE_AIR4":{"dval":"0"},"VALVE_AIR5":{"dval":"0"},"ST_HEATING4_02":{"aval":"25.31"},"SSECURITY_SYS_01":{"dval":"0"},"STEMP1_02":{"aval":"128.85"},"SHUMIDITY1_02":{"aval":"118.98"},"STEMP_PVU3":{"aval":"128.85"},"SHUMIDITY_PVU1":{"aval":"118.98"}}
    09.10 09:59:06.573 megad5: 
    09.10 09:59:06.574 megad5: localhost => 192.168.11.25 HTTP GET /sec/?pt=14&cmd=get
    09.10 09:59:06.581 megad5: localhost <= 192.168.11.25  response: statusCode=200 contentType = text/html
    09.10 09:59:06.582 megad5:  body: temp:24.87
    09.10 09:59:06.583 IH: get [{"id":"14","value":"24.87"}]
    09.10 09:59:06.583 IH: set {"ST_HEATING4_01":{"aval":"24.87"}}
    09.10 09:59:06.772 megad5: 
    09.10 09:59:06.773 megad5: localhost => 192.168.11.25 HTTP GET /sec/?pt=29&cmd=get
    09.10 09:59:06.782 megad5: localhost <= 192.168.11.25  response: statusCode=200 contentType = text/html
    09.10 09:59:06.782 megad5:  body: temp:25.25
    09.10 09:59:06.783 IH: get [{"id":"29","value":"25.25"}]
    09.10 09:59:06.783 IH: set {"ST_HEATING4_02":{"aval":"25.25"}}
    09.10 09:59:06.973 megad5: 
    09.10 09:59:06.974 megad5: localhost => 192.168.11.25 HTTP GET /sec/?pt=30&scl=34&i2c_dev=htu21d&i2c_par=1
    09.10 09:59:07.033 megad5: localhost <= 192.168.11.25  response: statusCode=200 contentType = text/html
    09.10 09:59:07.033 megad5:  body: 26.00
    09.10 09:59:07.034 IH: get []
    09.10 09:59:07.034 IH: set {}
    09.10 09:59:07.174 megad5: 
    09.10 09:59:07.175 megad5: localhost => 192.168.11.25 HTTP GET /sec/?pt=30&scl=34&i2c_dev=htu21d
    09.10 09:59:07.203 megad5: localhost <= 192.168.11.25  response: statusCode=200 contentType = text/html
    09.10 09:59:07.204 megad5:  body: 40.21
    09.10 09:59:07.204 IH: get []
    09.10 09:59:07.204 IH: set {}
    
    

    В качестве пояснения что такое "датчик на шине I2C выбран по умолчанию". В текущем примере выбран по умолчанию дисплей OLED с контроллером SSD1306 - чтобы при загрузке MegaD проходила инициализация дисплея. При этом на эту шину можно еще 100500 датчиков подключить с разными адресами, запрашивая данные "нативной" командой.
    I2C_SSD1306_by_default.png



  • @intrapro:

    Пока, к сожалению, запуск функции для обработки полученного значения (функционал, который был в Berry), не реализован 😞

    Добавим в ближайших версиях

    Когда можно ожидать этот функционал? Без него мне нет смысла переходить на Cherry. При этом 70% настроек сервера уже сделал.



  • @Alex_Jet:

    Когда можно ожидать этот функционал?

    Предположительно до конца месяца.



  • @intrapro:

    Можно еще проще - привязать бинарный актуатор, а интерактивные операции для него отключить

    Загвоздка в том, что для DI нельзя выбрать актюатор… А если сделать DO, то может, наверно, как-нибудь не адекватно обрабатываться состояние? Вечером попробую проверить.

    @intrahouse:

    Предположительно до конца месяца.

    Это очень хорошо. И неточности в работе плагина надо устранить (см.выше).

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

    В дополнение прикладываю лог отладчика для анализа и исправления неточностей работы плагина MegaD:

    12.10 12:36:15.112 megad5: 192.168.11.25 => localhost:11025 HTTP GET /mod_megad.php?st=1
    12.10 12:36:15.112 megad5: 192.168.11.25 <= localhost:11025 
    12.10 12:36:15.125 megad5: 192.168.11.25 => localhost:11025 HTTP GET /mod_megad.php?pt=5&cnt=1
    12.10 12:36:15.126 IH: get [{"id":"5","value":"1"}]
    12.10 12:36:15.127 IH: set {"SGERKON4_02":{"dval":0}}
    12.10 12:36:15.127 megad5: 192.168.11.25 <= localhost:11025 
    12.10 12:36:15.140 megad5: 192.168.11.25 => localhost:11025 HTTP GET /mod_megad.php?pt=6&cnt=1
    12.10 12:36:15.140 IH: get [{"id":"6","value":"1"}]
    12.10 12:36:15.141 IH: set {"SMOTION4_02":{"dval":0}}
    12.10 12:36:15.141 megad5: 192.168.11.25 <= localhost:11025 
    12.10 12:36:15.154 megad5: 192.168.11.25 => localhost:11025 HTTP GET /mod_megad.php?pt=19&cnt=1
    12.10 12:36:15.155 IH: get [{"id":"19","value":"1"}]
    12.10 12:36:15.155 IH: set {"SFIRE1_04":{"dval":0}}
    12.10 12:36:15.156 megad5: 192.168.11.25 <= localhost:11025 
    12.10 12:36:15.170 megad5: 
    12.10 12:36:15.170 megad5: localhost => 192.168.11.25 HTTP GET /sec/?cmd=all
    12.10 12:36:15.339 megad5: localhost <= 192.168.11.25  response: statusCode=200 contentType = text/html
    12.10 12:36:15.340 megad5:  body: OFF/0;OFF/0;OFF/0;OFF/0;OFF/0;ON/1;ON/1;OFF;OFF;OFF;OFF;OFF;OFF;OFF;temp:25.81;OFF/0;OFF/0;OFF/0;OFF/0;ON/1;temp:26.93;temp:26.75;OFF;OFF;OFF;OFF;OFF;OFF;OFF;temp:26.00;;;temp:128.85/hum:118.98;temp:128.85/hum:118.98;OFF;;OFF;OFF
    12.10 12:36:15.342 IH: get [{"id":"5","value":"1"},{"id":"6","value":"1"},{"id":"7","value":"0"},{"id":"8","value":"0"},{"id":"9","value":"0"},{"id":"10","value":"0"},{"id":"11","value":"0"},{"id":"12","value":"0"},{"id":"14","value":"25.81"},{"id":"18","value":"0"},{"id":"19","value":"1"},{"id":"20","value":"26.93"},{"id":"21","value":"26.75"},{"id":"22","value":"0"},{"id":"23","value":"0"},{"id":"24","value":"0"},{"id":"25","value":"0"},{"id":"26","value":"0"},{"id":"27","value":"0"},{"id":"28","value":"0"},{"id":"29","value":"26"},{"id":"35","value":"0"},{"id":"32_1","value":"128.85"},{"id":"32_2","value":"118.98"},{"id":"33_1","value":"128.85"},{"id":"33_2","value":"118.98"}]
    12.10 12:36:15.343 IH: set {"SGERKON4_02":{"dval":0},"SMOTION4_02":{"dval":0},"LAMP0_01":{"dval":"0"},"LAMP1_07":{"dval":"0"},"VENT1":{"dval":"0"},"VENT2":{"dval":"0"},"ACTOR_HEATING4_01":{"dval":"0"},"ACTOR_HEATING4_02":{"dval":"0"},"ST_HEATING4_01":{"aval":"25.81"},"SENSOR1_01":{"dval":"0"},"SFIRE1_04":{"dval":0},"STEMP_PVU1":{"aval":"26.93"},"STEMP_PVU2":{"aval":"26.75"},"VENT_PVU1":{"dval":"0"},"VENT_PVU2":{"dval":"0"},"VENT_PVU3":{"dval":"0"},"VALVE_AIR1":{"dval":"0"},"VALVE_AIR3":{"dval":"0"},"VALVE_AIR4":{"dval":"0"},"VALVE_AIR5":{"dval":"0"},"ST_HEATING4_02":{"aval":"26"},"ACTOR_SECURITY_SYS01":{"dval":"0"},"STEMP1_02":{"aval":"128.85"},"SHUMIDITY1_02":{"aval":"118.98"},"STEMP_PVU3":{"aval":"128.85"},"SHUMIDITY_PVU1":{"aval":"118.98"}}
    12.10 12:36:16.082 megad5: 192.168.11.25 => localhost:11025 HTTP GET /mod_megad.php?pt=6&m=2&cnt=1
    12.10 12:36:16.083 IH: get [{"id":"6","value":"1"}]
    12.10 12:36:16.083 IH: set {"SMOTION4_02":{"dval":0}}
    12.10 12:36:16.084 megad5: 192.168.11.25 <= localhost:11025 
    12.10 12:36:16.094 megad5: 192.168.11.25 => localhost:11025 HTTP GET /mod_megad.php?pt=5&m=2&cnt=1
    12.10 12:36:16.095 IH: get [{"id":"5","value":"1"}]
    12.10 12:36:16.095 IH: set {"SGERKON4_02":{"dval":0}}
    12.10 12:36:16.096 megad5: 192.168.11.25 <= localhost:11025 
    12.10 12:36:16.107 megad5: 192.168.11.25 => localhost:11025 HTTP GET /mod_megad.php?pt=19&m=2&cnt=1
    12.10 12:36:16.108 IH: get [{"id":"19","value":"1"}]
    12.10 12:36:16.109 IH: set {"SFIRE1_04":{"dval":0}}
    12.10 12:36:16.109 megad5: 192.168.11.25 <= localhost:11025 
    12.10 12:41:15.251 megad5: 
    12.10 12:41:15.252 megad5: localhost => 192.168.11.25 HTTP GET /sec/?pt=14&cmd=get
    12.10 12:41:15.260 megad5: localhost <= 192.168.11.25  response: statusCode=200 contentType = text/html
    12.10 12:41:15.260 megad5:  body: temp:25.93
    12.10 12:41:15.261 IH: get [{"id":"14","value":"25.93"}]
    12.10 12:41:15.261 IH: set {"ST_HEATING4_01":{"aval":"25.93"}}
    12.10 12:41:15.452 megad5: 
    12.10 12:41:15.453 megad5: localhost => 192.168.11.25 HTTP GET /sec/?pt=20&cmd=get
    12.10 12:41:15.463 megad5: localhost <= 192.168.11.25  response: statusCode=200 contentType = text/html
    12.10 12:41:15.464 megad5:  body: temp:27.00
    12.10 12:41:15.464 IH: get [{"id":"20","value":"27"}]
    12.10 12:41:15.465 IH: set {"STEMP_PVU1":{"aval":"27"}}
    12.10 12:41:15.654 megad5: 
    12.10 12:41:15.654 megad5: localhost => 192.168.11.25 HTTP GET /sec/?pt=21&cmd=get
    12.10 12:41:15.663 megad5: localhost <= 192.168.11.25  response: statusCode=200 contentType = text/html
    12.10 12:41:15.663 megad5:  body: temp:26.75
    12.10 12:41:15.664 IH: get [{"id":"21","value":"26.75"}]
    12.10 12:41:15.664 IH: set {"STEMP_PVU2":{"aval":"26.75"}}
    12.10 12:41:15.854 megad5: 
    12.10 12:41:15.855 megad5: localhost => 192.168.11.25 HTTP GET /sec/?pt=29&cmd=get
    12.10 12:41:15.863 megad5: localhost <= 192.168.11.25  response: statusCode=200 contentType = text/html
    12.10 12:41:15.864 megad5:  body: temp:26.06
    12.10 12:41:15.864 IH: get [{"id":"29","value":"26.06"}]
    12.10 12:41:15.865 IH: set {"ST_HEATING4_02":{"aval":"26.06"}}
    12.10 12:41:16.056 megad5: 
    12.10 12:41:16.056 megad5: localhost => 192.168.11.25 HTTP GET /sec/?pt=30&scl=34&i2c_dev=htu21d&i2c_par=1
    12.10 12:41:16.116 megad5: localhost <= 192.168.11.25  response: statusCode=200 contentType = text/html
    12.10 12:41:16.116 megad5:  body: 26.93
    12.10 12:41:16.117 IH: get []
    12.10 12:41:16.117 IH: set {}
    12.10 12:41:16.257 megad5: 
    12.10 12:41:16.258 megad5: localhost => 192.168.11.25 HTTP GET /sec/?pt=30&scl=34&i2c_dev=htu21d
    12.10 12:41:16.287 megad5: localhost <= 192.168.11.25  response: statusCode=200 contentType = text/html
    12.10 12:41:16.287 megad5:  body: 35.66
    12.10 12:41:16.288 IH: get []
    12.10 12:41:16.288 IH: set {}
    
    

    Для информации - после перезагрузки MegaD выдает серверу сообщение st=1, а потом самостоятельно фигачит "трапы" по каждому входу, которые находятся не в "дефолтном" (OFF) состоянии.



  • Еще момент по видимому устройству плагина. Оно по умолчанию имеет 3 состояния - NOT ACTIVATED, STOP, RUN.

    Хотелось бы чтобы когда плагин принудительно остановлен было состояние - STOP.

    Когда КОНТРОЛЛЕР не отвечает (недоступен в сети), но плагин работает, то устройство было в состоянии - NOT ACTIVATED.

    Ну и когда все работает в штатном режиме, то - RUN.

    Сейчас если контроллер недоступен и плагин используется в проекте, то его устройство мигает STOP/RUN с периодичностью перезапуска плагина…в Berry оно было в состоянии STOP пока контроллер был недоступен.

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



  • Есть проблемка со скриптом управления температурой и megaD. Попробую описать. Если запускаем одновременно сервер и роутер, а роутер подвис. Температура сервере установлена 30. Т.к. датчика нет то сервер видит последнюю то есть например 28 и сервер дает команду, но устройства нет в сети. Батареи включается на интерфейсе. Перезагрузил роутер. Батарея включена на интересе дома. А по факту выход не активен. И так пока температура не подниматься выше 30 и снова упадёт. Как с этим бороться? Я так понимаю должна быть индикация аварии если устройства нет в сети.


Авторизуйтесь, чтобы ответить