Mega 2561 и MQTT

Обсуждение статей, технологий домашней автоматизации, программных и аппаратных решений
Ruslan
Сообщения: 2184
Зарегистрирован: 06 янв 2014, 20:44

Re: Mega 2561 и MQTT

Сообщение Ruslan » 22 дек 2018, 19:16

miks69 писал(а):
22 дек 2018, 18:57
Извиняюсь, ответ приходит в виде: {"port": 32,"value": "temp:0.00/hum:00.00"}
Можно ли попросить сделать в нормальном JSON формате: {"port": "32","temp": "0.00", "hum":"00.00"} чтобы удобнее было разбирать?
Прошу прощения, что вклиниваюсь в "отвлеченную" для меня тему, но, как говорится, "не могу молчать".
Чисто технически Андрей может сделать все что угодно и выдавать ответ в любом формате. НО!
Вы представляете себе у какого количества народа все уже настроено и прекрасно "вытаскивается" из текущего формата ответа?
И как они все "обрадуются", когда после очередного обновления прошивки вдруг "вероломно, без объявления войны" система управления отоплением, например, не получит данных...

Это я не в упрек, а просто для единообразного понимания ситуации всеми заинтересованными сторонами.

miks69
Сообщения: 28
Зарегистрирован: 09 ноя 2018, 09:57

Re: Mega 2561 и MQTT

Сообщение miks69 » 22 дек 2018, 19:25

Ruslan писал(а):
22 дек 2018, 19:16
Это я не в упрек, а просто для единообразного понимания ситуации всеми заинтересованными сторонами.
Согласен с вами, однако есть определенные стандарты, или, если хотите, best practice, при реализации поддержки какого-либо протокола.
Протокол MQTT изначально предназначен для интеграции различных систем, которые, как вы можете догадаться, должны придерживаться одинаковых форматов при обмене данными. Поэтому извините, но ваш аргумент "у нас уже все настроено и работает" в данном случае не принимается.
Тот же MajorDoMo, например, автоматически разбирает строку JSON формата на "sub-topic:value", чем в занчительной степени упрощает дальнейшее использование полученных значений.

miks69
Сообщения: 28
Зарегистрирован: 09 ноя 2018, 09:57

Re: Mega 2561 и MQTT

Сообщение miks69 » 22 дек 2018, 19:38

miks69 писал(а):
22 дек 2018, 18:57
Извиняюсь, ответ приходит в виде: {"port": 32,"value": "temp:0.00/hum:00.00"}
Можно ли попросить сделать в нормальном JSON формате: {"port": "32","temp": "0.00", "hum":"00.00"} чтобы удобнее было разбирать?
Уточнение по предлагаемому формату: {"port": 32,"temp": 0.00,"hum": 00.00} - числовые значения без кавычек.

miks69
Сообщения: 28
Зарегистрирован: 09 ноя 2018, 09:57

Re: Mega 2561 и MQTT

Сообщение miks69 » 22 дек 2018, 19:41

Кстати, можно здесь же добавить инфо о настройке порта, например: {"port": 32,"type": "DSen","Sen": "DHT22","temp": 0.00,"hum": 00.00}

martiniman
Сообщения: 528
Зарегистрирован: 09 авг 2016, 15:09
Откуда: Сочи

Re: Mega 2561 и MQTT

Сообщение martiniman » 22 дек 2018, 19:46

Прошу добавить "click":0 или :3 при удержании кнопки в MQTT сообщение, при настройке порта "С", по аналогии с "m" (m всегда приходит)
Если click не приходит в сообщении, то возникает ошибка, тк json парсер его ждет

miks69
Сообщения: 28
Зарегистрирован: 09 ноя 2018, 09:57

Re: Mega 2561 и MQTT

Сообщение miks69 » 22 дек 2018, 19:50

Кстати, почему то для I2C-сенсора формат данных, выдаваемых мегой другой: {"port": 30,"value": {"temp": 0.00, "hum": 00.00}}, что почти соответствует предложенному мной выше.
По крайней мере такой формат уже нормально разбирается. Можно ли попросить автора сделать унифицированный формат выдаваемых данных?

miks69
Сообщения: 28
Зарегистрирован: 09 ноя 2018, 09:57

Re: Mega 2561 и MQTT

Сообщение miks69 » 22 дек 2018, 19:55

Вот так это выглядит в MD:
Capture.PNG
Capture.PNG (7.29 КБ) 2994 просмотра

martiniman
Сообщения: 528
Зарегистрирован: 09 авг 2016, 15:09
Откуда: Сочи

Re: Mega 2561 и MQTT

Сообщение martiniman » 22 дек 2018, 19:58

Вот стандартная разбиралка http://jsonpath.com/

martiniman
Сообщения: 528
Зарегистрирован: 09 авг 2016, 15:09
Откуда: Сочи

Re: Mega 2561 и MQTT

Сообщение martiniman » 23 дек 2018, 12:14

А вот соглашение по именованию топиков: https://homieiot.github.io/
С помощью него возможно делать автообнаружение и автонастройку MQTT устройств.
openHAB 2.4+ и HomeAssistant уже поддерживают.
Нет там никакого JSON, все просто и понятно, у всего свой топик.

Genix
Сообщения: 121
Зарегистрирован: 15 дек 2017, 16:56

Re: Mega 2561 и MQTT

Сообщение Genix » 25 дек 2018, 10:30

+1 за использование homie соглашения

Madjestik58
Сообщения: 58
Зарегистрирован: 26 окт 2019, 16:50

Re: Mega 2561 и MQTT

Сообщение Madjestik58 » 26 окт 2019, 22:07

Как управлять MegaD-2W через MQTT . Топик не формируется по событиям. JSON управления тоже не поддерживается? Или где-то надо что-то настроить?

Andrey_B
Администратор
Сообщения: 5327
Зарегистрирован: 18 мар 2011, 12:06

Re: Mega 2561 и MQTT

Сообщение Andrey_B » 27 окт 2019, 21:21

Как описано здесь контроллер подписывается на топик megad/14/cmd, где "14" - последний байт IP-адреса или идентификатор MegadID.
Команда сценариев стандартная. Синтаксис для MegaD-2W описан в разделе "Особенности работы выхода в режиме DS2413".
Например, "33B:1" включит канал "B" модуля, подключенного к порту P33.
MegaD-2W - это своего рода расширитель. Сообщения по событиям на портах (выходах) расширителя в текущий момент не публикуются, как это делается для "родных" портов контроллера.

Madjestik58
Сообщения: 58
Зарегистрирован: 26 окт 2019, 16:50

Re: Mega 2561 и MQTT

Сообщение Madjestik58 » 28 окт 2019, 01:57

Спасибо. Разобрался, изначально слал в формате JSON отдельно 33А и статус - ничего не работало. Теперь понял. Так же проверил формат "30B:0&addr=4a3638000000" тоже в топиках работает.

Genix
Сообщения: 121
Зарегистрирован: 15 дек 2017, 16:56

Re: Mega 2561 и MQTT

Сообщение Genix » 04 дек 2019, 09:31

Кто нибудь сталкивался с ситуацией, когда мега перестает выполнять команды из <megaid>/cmd топика, хоть в <megaid>/<port> апдейты шлет стабильно? Лечится перезагрузкой megad. Статус MQTT в настройках - connected.
Команды текстовые, вида 23:1 и тд, не JSON

fw: 4.39b5

rvv
Сообщения: 205
Зарегистрирован: 24 дек 2014, 16:32

Re: Mega 2561 и MQTT

Сообщение rvv » 04 дек 2019, 09:57

Было такое, я писал в другой ветке.
Андрей поправил в fw: 4.39b6

leonidl
Сообщения: 3
Зарегистрирован: 08 июн 2017, 17:33

Re: Mega 2561 и MQTT

Сообщение leonidl » 11 дек 2019, 16:15

Коллеги, подскажите пожалуйста, как работать с MegaD в режиме СМС шлюза при подключении к серверу по MQTT? Как получать СМС на сервере и как их отправлять на MegaD через MQTT? Какие топики использовать? Спасибо.

mmike16
Сообщения: 13
Зарегистрирован: 10 дек 2019, 21:22

Re: Mega 2561 и MQTT

Сообщение mmike16 » 18 дек 2019, 14:36

Всем добрый день. Настроил взаимодействие megad и home assistant. В целом все работает, но есть проблема со стабильностью работы megad по протоколу MQTT.

Megad fw 4.39b7
Mosquitto version 1.6.8


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

1. Воспроизводится стабильно
Если через MQTT на megad отправить несколько команд без задержки, например
topic: megad/14/cmd
get:14
get:30
get:31

, то в логе Mosquitto получаю

Код: Выделить всё

2019-12-18T08:55:35: Connection Refused: unknown reason
2019-12-18T08:55:35: Socket error on client megad-14, disconnecting.
как workaround стал отправлять команды по одной с задержкой в 10 секунд, отваливать прекратило.

2. Воспроизводится случайно, за день несколько раз. Иногда при подключении к MQTT megad не подписывается на топик megad/14/cmd

Выглядит в логе Mosquitto это вот так

Код: Выделить всё

1576655290: Received PUBLISH from auto-43A35F1D-EEB4-4CDD-F97B-A0F5ED93AA15 (d0, q0, r0, m0, 'megad/14/cmd', ... (6 bytes))
1576655290: New connection from 10.8.0.5 on port 1883.
1576655290: Client megad-14 already connected, closing old connection.
1576655290: New client connected from 10.8.0.5 as megad-14 (p1, c1, k30).
1576655290: No will message specified.
1576655290: Sending CONNACK to megad-14 (0, 0)
1576655299: Received PUBLISH from auto-43A35F1D-EEB4-4CDD-F97B-A0F5ED93AA15 (d0, q0, r0, m0, 'megad/14/cmd', ... (6 bytes))
1576655310: Received PUBLISH from auto-43A35F1D-EEB4-4CDD-F97B-A0F5ED93AA15 (d0, q0, r0, m0, 'megad/14/cmd', ... (6 bytes))
"Правильное" подключение выглядит вот так:

Код: Выделить всё

1576651710: Received PUBLISH from auto-43A35F1D-EEB4-4CDD-F97B-A0F5ED93AA15 (d0, q0, r0, m0, 'megad/14/cmd', ... (6 bytes))
1576651710: Sending PUBLISH to megad-14 (d0, q0, r0, m0, 'megad/14/cmd', ... (6 bytes))
1576651710: Received PUBLISH from megad-14 (d0, q0, r0, m0, 'megad/14/31', ... (47 bytes))
1576651710: Sending PUBLISH to auto-43A35F1D-EEB4-4CDD-F97B-A0F5ED93AA15 (d0, q0, r0, m0, 'megad/14/31', ... (47 bytes))
1576651710: Socket error on client megad-14, disconnecting.
1576651725: New connection from 10.8.0.5 on port 1883.
1576651725: New client connected from 10.8.0.5 as megad-14 (p1, c1, k30).
1576651725: No will message specified.
1576651725: Sending CONNACK to megad-14 (0, 0)
1576651726: Received SUBSCRIBE from megad-14
1576651726:     megad/14/cmd (QoS 0)
1576651726: Sending SUBACK to megad-14
3. Воспроизводится случайно, каждые несколько часов. MQTT пишет ошибку в лог и отключает megad. В логе выглядит вот так

Код: Выделить всё

2019-12-18T08:56:32: Received PUBCOMP from megad-14 (Mid: 12129, RC:0)
2019-12-18T08:56:32: Received CONNACK on connection megad-14.
2019-12-18T08:56:32: Connection Refused: unknown reason
2019-12-18T08:56:32: Socket error on client megad-14, disconnecting.
2019-12-18T08:56:47: New connection from 10.8.0.5 on port 1883.
2019-12-18T08:56:47: New client connected from 10.8.0.5 as megad-14 (p1, c1, k30).
2019-12-18T08:56:47: No will message specified.
2019-12-18T08:56:47: Sending CONNACK to megad-14 (0, 0)
2019-12-18T08:56:48: Received SUBSCRIBE from megad-14
2019-12-18T08:56:48:    megad/14/cmd (QoS 0)
2019-12-18T08:56:48: Sending SUBACK to megad-14
4. Отправляю несколько раз 10+ команду включить выключить выход и на 10+ повторе megad перестает отвечать. Потом через небольшое время megad переподключается к брокеру и какоето время снова работает. Вот выдержка из лога Mosquitto демонстрирующая эту проблему.

Код: Выделить всё

2019-12-18T09:26:53: Received PINGREQ from megad-14
2019-12-18T09:26:53: Sending PINGRESP to megad-14
2019-12-18T09:27:10: Received PUBLISH from auto-43A35F1D-EEB4-4CDD-F97B-A0F5ED93AA15 (d0, q0, r0, m0, 'megad/14/cmd', ... (6 bytes))
2019-12-18T09:27:10: Sending PUBLISH to megad-14 (d0, q0, r0, m0, 'megad/14/cmd', ... (6 bytes))
2019-12-18T09:27:12: Received PUBLISH from megad-14 (d0, q0, r0, m0, 'megad/14/14', ... (32 bytes))
2019-12-18T09:27:12: Sending PUBLISH to auto-43A35F1D-EEB4-4CDD-F97B-A0F5ED93AA15 (d0, q0, r0, m0, 'megad/14/14', ... (32 bytes))
2019-12-18T09:27:20: Received PUBLISH from auto-43A35F1D-EEB4-4CDD-F97B-A0F5ED93AA15 (d0, q0, r0, m0, 'megad/14/cmd', ... (6 bytes))
2019-12-18T09:27:20: Sending PUBLISH to megad-14 (d0, q0, r0, m0, 'megad/14/cmd', ... (6 bytes))
2019-12-18T09:27:22: Received PUBLISH from megad-14 (d0, q0, r0, m0, 'megad/14/30', ... (62 bytes))
2019-12-18T09:27:22: Sending PUBLISH to auto-43A35F1D-EEB4-4CDD-F97B-A0F5ED93AA15 (d0, q0, r0, m0, 'megad/14/30', ... (62 bytes))
2019-12-18T09:27:26: Received PUBLISH from auto-43A35F1D-EEB4-4CDD-F97B-A0F5ED93AA15 (d0, q0, r0, m0, 'megad/14/cmd', ... (3 bytes))
2019-12-18T09:27:26: Sending PUBLISH to megad-14 (d0, q0, r0, m0, 'megad/14/cmd', ... (3 bytes))
2019-12-18T09:27:27: Received PUBLISH from megad-14 (d0, q0, r0, m0, 'megad/14/7', ... (23 bytes))
2019-12-18T09:27:27: Sending PUBLISH to auto-43A35F1D-EEB4-4CDD-F97B-A0F5ED93AA15 (d0, q0, r0, m0, 'megad/14/7', ... (23 bytes))
2019-12-18T09:27:29: Received PUBLISH from auto-43A35F1D-EEB4-4CDD-F97B-A0F5ED93AA15 (d0, q0, r0, m0, 'megad/14/cmd', ... (3 bytes))
2019-12-18T09:27:29: Sending PUBLISH to megad-14 (d0, q0, r0, m0, 'megad/14/cmd', ... (3 bytes))
2019-12-18T09:27:30: Received PUBLISH from auto-43A35F1D-EEB4-4CDD-F97B-A0F5ED93AA15 (d0, q0, r0, m0, 'megad/14/cmd', ... (6 bytes))
2019-12-18T09:27:30: Sending PUBLISH to megad-14 (d0, q0, r0, m0, 'megad/14/cmd', ... (6 bytes))
2019-12-18T09:27:30: Received PUBLISH from megad-14 (d0, q0, r0, m0, 'megad/14/7', ... (24 bytes))
2019-12-18T09:27:30: Sending PUBLISH to auto-43A35F1D-EEB4-4CDD-F97B-A0F5ED93AA15 (d0, q0, r0, m0, 'megad/14/7', ... (24 bytes))
2019-12-18T09:27:30: Received PUBLISH from auto-43A35F1D-EEB4-4CDD-F97B-A0F5ED93AA15 (d0, q0, r0, m0, 'megad/14/cmd', ... (3 bytes))
2019-12-18T09:27:30: Sending PUBLISH to megad-14 (d0, q0, r0, m0, 'megad/14/cmd', ... (3 bytes))
2019-12-18T09:27:34: Received PUBLISH from auto-43A35F1D-EEB4-4CDD-F97B-A0F5ED93AA15 (d0, q0, r0, m0, 'megad/14/cmd', ... (3 bytes))
2019-12-18T09:27:34: Sending PUBLISH to megad-14 (d0, q0, r0, m0, 'megad/14/cmd', ... (3 bytes))
2019-12-18T09:27:43: Received PUBLISH from auto-43A35F1D-EEB4-4CDD-F97B-A0F5ED93AA15 (d0, q0, r0, m0, 'megad/14/cmd', ... (3 bytes))
2019-12-18T09:27:43: Sending PUBLISH to megad-14 (d0, q0, r0, m0, 'megad/14/cmd', ... (3 bytes))
2019-12-18T09:27:47: Received PUBLISH from auto-43A35F1D-EEB4-4CDD-F97B-A0F5ED93AA15 (d0, q0, r0, m0, 'megad/14/cmd', ... (3 bytes))
2019-12-18T09:27:47: Sending PUBLISH to megad-14 (d0, q0, r0, m0, 'megad/14/cmd', ... (3 bytes))
2019-12-18T09:28:10: Received PUBLISH from auto-43A35F1D-EEB4-4CDD-F97B-A0F5ED93AA15 (d0, q0, r0, m0, 'megad/14/cmd', ... (6 bytes))
2019-12-18T09:28:10: Sending PUBLISH to megad-14 (d0, q0, r0, m0, 'megad/14/cmd', ... (6 bytes))
2019-12-18T09:28:10: Received PUBREL from megad-14 (Mid: 8762)
2019-12-18T09:28:10: Sending PUBCOMP to megad-14 (m8762)
2019-12-18T09:28:20: Received PUBLISH from auto-43A35F1D-EEB4-4CDD-F97B-A0F5ED93AA15 (d0, q0, r0, m0, 'megad/14/cmd', ... (6 bytes))
2019-12-18T09:28:20: Sending PUBLISH to megad-14 (d0, q0, r0, m0, 'megad/14/cmd', ... (6 bytes))
2019-12-18T09:28:20: Socket error on client megad-14, disconnecting.
2019-12-18T09:28:30: Received PUBLISH from auto-43A35F1D-EEB4-4CDD-F97B-A0F5ED93AA15 (d0, q0, r0, m0, 'megad/14/cmd', ... (6 bytes))
2019-12-18T09:28:31: Received PINGREQ from auto-43A35F1D-EEB4-4CDD-F97B-A0F5ED93AA15
2019-12-18T09:28:31: Sending PINGRESP to auto-43A35F1D-EEB4-4CDD-F97B-A0F5ED93AA15
2019-12-18T09:28:35: New connection from 10.8.0.5 on port 1883.
2019-12-18T09:28:35: New client connected from 10.8.0.5 as megad-14 (p1, c1, k30).
2019-12-18T09:28:35: No will message specified.
2019-12-18T09:28:35: Sending CONNACK to megad-14 (0, 0)
2019-12-18T09:28:35: Received SUBSCRIBE from megad-14
2019-12-18T09:28:35:    megad/14/cmd (QoS 0)
2019-12-18T09:28:35: Sending SUBACK to megad-14
2019-12-18T09:28:58: Received PINGREQ from megad-14
2019-12-18T09:28:58: Sending PINGRESP to megad-14
2019-12-18T09:29:10: Received PUBLISH from auto-43A35F1D-EEB4-4CDD-F97B-A0F5ED93AA15 (d0, q0, r0, m0, 'megad/14/cmd', ... (6 bytes))
2019-12-18T09:29:10: Sending PUBLISH to megad-14 (d0, q0, r0, m0, 'megad/14/cmd', ... (6 bytes))
2019-12-18T09:29:10: Received PUBLISH from megad-14 (d0, q0, r0, m0, 'megad/14/14', ... (32 bytes))

mmike16
Сообщения: 13
Зарегистрирован: 10 дек 2019, 21:22

Re: Mega 2561 и MQTT

Сообщение mmike16 » 18 дек 2019, 15:34

Возникло подозрение каким образом возникает проблема 4.

HA у меня 3 раза в минуту опрашивает состояние портов
14,30,31 (т.к. там висят датчики температуры/влажности/давления)

для этого каждую минуту:
на 10-й секунде шлю в megad/14/cmd запрос get:14
на 20-й секунде шлю в megad/14/cmd запрос get:30
на 30-й секунде шлю в megad/14/cmd запрос get:31

и из UI можно управлять состоянием порт 7, можно его включать или выключать
для этого в в megad/14/cmd отправляется запрос 7:0 или 7:1

Вероятно, если два запроса совпадают между собой то в какой то момент, происходит сбой в mqtt на mega и брокер не получает ответ на один их этих запросов.
После этого получается, что port 7 в состоянии 1, а сервер думает что он в состоянии 0

В UI доступна только команда по его включению. При попытке включить порт, отправляется команда 7:1 и megad ничего не отвечает на эту команду т.к. порт уже в состоянии 1

Отсюда вроде две более четкие проблемы:

1. Разобраться как себя ведет megad когда получает несколько сообщений от брокера практически одновременно (допускаю что нужно как то по другому настроить mosquitto, что бы все работало)
2. Нужно изменить поведение megad и сделать его идемпотентным. Если приходит команда изменить состояние порта в режиме out, а порт уже находится в этом состоянии, то нужно отправлять по MQTT сообщение с текущим состоянием выхода.

Вопрос можно ли как то через команду get по MQTT запросить состояние нескольких выходов?

mmike16
Сообщения: 13
Зарегистрирован: 10 дек 2019, 21:22

Re: Mega 2561 и MQTT

Сообщение mmike16 » 18 дек 2019, 15:51

Еще похоже функция srv-loop не работает если сервер подключен по протоколу MQTT.
Включил эту галочку в конфигурации megad в MQTT состояние портов не отправляет, ждал минут 10.

Как по протоколу MQTT обнаружить факт перезагрузки megad? При включении устройство не отправляет никакого сообщения.

mmike16
Сообщения: 13
Зарегистрирован: 10 дек 2019, 21:22

Re: Mega 2561 и MQTT

Сообщение mmike16 » 19 дек 2019, 13:04

Megad fw 4.39b7
Mosquitto version 1.6.8

Сегодня вылезла еще новая проблема, в какой то момент megad просто перестала отвечать по mqtt и больше не пыталась повторно подключиться. Ждал больше часа.

Код: Выделить всё

2019-12-19T10:54:53: Received PINGREQ from megad-14
2019-12-19T10:54:53: Sending PINGRESP to megad-14
2019-12-19T10:55:10: Received PUBLISH from auto-43A35F1D-EEB4-4CDD-F97B-A0F5ED93AA15 (d0, q0, r0, m0, 'megad/14/cmd', ... (6 bytes))
2019-12-19T10:55:10: Sending PUBLISH to mqtt_explorer (d0, q0, r0, m0, 'megad/14/cmd', ... (6 bytes))
2019-12-19T10:55:10: Sending PUBLISH to megad-14 (d0, q0, r0, m0, 'megad/14/cmd', ... (6 bytes))
2019-12-19T10:55:20: Received PUBLISH from auto-43A35F1D-EEB4-4CDD-F97B-A0F5ED93AA15 (d0, q0, r0, m0, 'megad/14/cmd', ... (6 bytes))
2019-12-19T10:55:20: Sending PUBLISH to mqtt_explorer (d0, q0, r0, m0, 'megad/14/cmd', ... (6 bytes))
2019-12-19T10:55:20: Sending PUBLISH to megad-14 (d0, q0, r0, m0, 'megad/14/cmd', ... (6 bytes))
2019-12-19T10:55:30: Received PUBLISH from auto-43A35F1D-EEB4-4CDD-F97B-A0F5ED93AA15 (d0, q0, r0, m0, 'megad/14/cmd', ... (6 bytes))
2019-12-19T10:55:30: Sending PUBLISH to mqtt_explorer (d0, q0, r0, m0, 'megad/14/cmd', ... (6 bytes))
2019-12-19T10:55:30: Sending PUBLISH to megad-14 (d0, q0, r0, m0, 'megad/14/cmd', ... (6 bytes))
2019-12-19T10:55:31: Received PINGREQ from auto-43A35F1D-EEB4-4CDD-F97B-A0F5ED93AA15
2019-12-19T10:55:31: Sending PINGRESP to auto-43A35F1D-EEB4-4CDD-F97B-A0F5ED93AA15
2019-12-19T10:55:35: Received PINGREQ from mqtt_explorer
2019-12-19T10:55:35: Sending PINGRESP to mqtt_explorer
2019-12-19T10:55:38: Client megad-14 has exceeded timeout, disconnecting.
Зашел по HTTP в конфигурацию порта, нажал кнопку save. megad перезагрузилась и подключилась к брокеру

Ответить