ДОМ ХОББИ

Умный дом как хобби

Когда-то в блоге мы рассказывали, как наш руководитель отдела обучения и замечательный программист Евгений создал марсианские часы и заодно выиграл в конкурсе. А потом — как он же сконструировал систему «Умный дом» своими руками. Так вот, сегодня снова поговорим о DIY-электронике и принципиально новой системе контроля за домом, которую Евгений создал с нуля взамен предыдущей.

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

— Евгений, разработчик

Идея «умного дома» не давала покоя инженерам ещё в 50-е: тогда появился первый дом с кнопками, где все бытовые задачи решались нажатием конкретной кнопки. В 1966 году с помощью единой системы уже можно было настраивать климат в помещении и включать/выключать приборы.

Полноценные «умные дома» появились на западе в 70-е с изобретением передачи сигнала по электросети и беспроводного управления на радиочастоте 433 МГц. Но для управления системой нужен был специальный пульт: с его помощью можно было включать и выключать приборы, менять яркость света и информировать о текущем состоянии бытовой техники. Одна беда — работали такие пульты по закрытым протоколам. Но когда появился Интернет и Wi-Fi, в сфере умных домов всё изменилось.

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

Эпопея с Умным домой началась у Евгения давно — ещё 5 лет назад, когда он впервые узнал про Arduino (аппаратно-программную платформу для создания каких угодно устройств). Эта тема так его заинтересовала, что спустя пару месяцев он заказал собственный набор Arduino и начал с ним «ковыряться», изучать возможности и документацию. А уже спустя 4 месяца сделал первое устройство — сенсорную игру на реакцию. Но после этого, по собственному признанию Евгения, его посетил творческий кризис: у него была база для проектирования и даже время, а вот идеи, что сотворить, не было.

В 2022-м он заинтересовался темой умных домов и понял, что на базе Arduino сделать подобную систему для своей квартиры вполне реально. Первая версия умного дома состояла из метеостанции (с датчиками температуры и влажности) и охранной системы (с датчиком открытия/закрытия двери и инфракрасным датчиком движения), и выглядела так:

Следить за температурой и влажностью и контролировать происходящее в помещении — классно, но вскоре стало ясно, что эти устройства не такие уж «умные»: ведь централизованной системы управления всем этим не было. Поэтому-то и зародилась идея сделать новую, усовершенствованную, версию системы, которую по праву можно было бы назвать «умным домом». Её Евгений выпустил в 2022-м.

Новая система была построена на микрокомпьютере, и у неё был клёвый сенсорный экран (интерфейс которого, кстати, нарисовал один из дизайнеров Сибирикс). Она умела разговаривать, распознавать речь и понимать данные с внешних датчиков, которые к ней можно было подключить. С внешними устройствами система общалась по Wi-Fi с помощью JSON (напомним, это текстовый формат обмена данными).

Восстание машин

Естественно, все комплектующие для системы заказывались из Китая, поскольку в России найти что-то подобное за адекватные деньги проблематично. В какой-то момент дисплей, как всё китайское (простите за штамп), начал глючить: стал неадекватно реагировать на нажатия и жить своей жизнью.

Я, честно, до сих пор не знаю, была это программная ошибка, или действительно дисплей вышел из строя. Собственно, в этот момент я пришёл к выводу, что система «Умный дом» вообще не должна иметь центрального дисплея. Вместо этого она должна базироваться на сервере, к которому можно подключиться вообще с чего угодно: с телефона, планшета, компьютера и из любой точки мира.

— Евгений, разработчик

Третья версия системы построена на самописной системе центрального управления. Но зачем, спросите вы, ведь есть же готовые решения?! Ага, есть такие.

Первая — MajorDomo, придуманная разработчиком из Белоруссии. Сама по себе штука прикольная и очень популярная, к ней есть множество плагинов и модулей, к ней даже можно подключить датчики от супер-брендовых производителей. Но есть нюанс — она построена на языке PHP с использованием MySQL (свободной реляционной системы управления базами данных). Евгений пробовал её в деле, но на сервере дважды терялась база данных, потому что MySQL при запуске сервера почему-то не стартовал.

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

— Евгений, разработчик

Второе распространённое готовое решение — система Home Assistant, написанная на Python и отлично работающая на Unix-машинах (оборудовании с переносимой операционкой). Можно просто записать образ программы управления на флешку, вставить её в свою систему — и всё заработает. Да, для Home Assistant есть плагины для быстрой настройки, но с ними непросто. Поэтому чаще конфигурация такой системы делается вручную (приходится писать код): проще укусить себя за локоть. А если уж нужно писать код, так лучше свой собственный.

Всё заново: система «умного дома» своими руками

В новой, написанной ручками, системе есть три узла:

  1. Вещи — осязаемые элементы системы: датчики, сенсоры и вообще всё, что можно взять и потрогать руками.
  2. Сервисы — виртуальные модули, пока их три: видео-камеры, прогноз погоды и данные самой системы.
  3. Центр управления с двумя основными компонентами: MQTT-брокером и сервером на Node.JS.

Сердце системы — микрокомпьютер версии Raspberry PI 3b+. Стоит он 2−3 тысячи рублей, а взамен вы получаете полноценный компьютер размером с пачку сигарет. Единственный нюанс: его файловая система базируется на карте памяти формата MicroSD, а постоянные записи данных быстро выводят её из строя. Из-за этого приходится заботиться о минимизации записываемых данных или подключать HDD-носитель вместо MicroSD. Но принцип в обоих случаях одинаковый: нужно скачать образ Raspbian, установить его на карту памяти и вставить в микрокомпьютер — и вуаля, у вас готов полноценный Linux-компьютер, на котором можно делать всё что угодно. В нашем случае — сервер умного дома.

Второй незаменимый компонент системы — модуль NodeMCU V3, который базируется на микросхеме ESP8266, которую можно программировать в среде Arduino. Напомним, Arduino — это отладочная плата с микроконтроллером, стабилизацией питания, подключением к USB для перепрошивки и выходами для управления чем угодно. Программируется на языке C++.

Arduino всем хорош, но модуль из коробки умеет общаться только с компьютером и только через USB-порт, а для системы умного дома это серьёзный минус. Зато модуль NodeMCU V3, который Евгений использовал для своей системы, имеет «на борту» Wi-Fi — а значит, не нужно заморачиваться с дополнительными периферийными устройствами, и данные легко передавать.

В системе также есть несколько датчиков:

  • BME280
    Один из самых крутых погодных сенсоров, отвечает за данные температуры, влажности и давления. Стоит порядка 200 рублей, а взамен предоставляет пользователю полноценную метеостанцию.
  • PIR-сенсор, или датчик движения
    Работает он хитро: сканирует инфракрасное излучение помещения, и если в два момента времени температура сканированного участка изменилась, значит, какой-то тепловой объект попал в поле зрения датчика. Если вас бесит, что он постоянно реагирует на кошку, можно снизить порог чувствительности устройства.
  • RC522
    Датчик, считывающий электронный ключ. От этой маленькой штучки зависит, например, пройдёте вы дальше пропускного пункта или на вас налетит группа быстрого реагирования 🙂

Чтобы система работала как одно целое, центральный узел и периферийные устройства должны как-то между собой общаться, причём общаться максимально стабильно. Изначально Евгений сделал JSON-обмен: элементы обменивались данными по http-запросу. Способ стабильный, но проблема в том, что так никто не делает. Поэтому в текущей системе за обмен данными отвечает протокол MQTT, заточенный специально под обмен информацией между узлами системы. Его создали в 2022-м и сейчас активно используют на больших серьёзных заводах, где требуется автоматизация производства.

У протокола есть центральная часть — Broker, который отвечает за приём и отправку сообщений всем элементам системы. Элементы же делятся на две группы: Publisher (публикуют данные в Broker) и Subscriber (получают эти данные). Причём, Subscriber может заранее подписаться на какой-то топик (скажем, данные о температуре), которого в системе пока нет. Как только топик появится, данные сразу придут.

Конфигурация системы

Физические модули: метеостанция

В сердце системы — NodeMCU, о котором мы уже говорили выше. К нему подключены три узла:

  1. датчик температуры и влажности BME280;
  2. сенсор CO2 — MH-Z19;
  3. OLED-дисплей, который выводит данные датчиков пользователю.

Данные между устройствами и сервером передаются по интерфейсу I2С или UART — это интерфейсы для общения. В нашем случае, между микроконтроллерами.

НЕ Делайте Биоплато для пруда, пока не посмотрите это видео! Доработка Биоплато в пруду возле дома.

Физические модули: охрана

Изначально модуль планировался без узла Arduino, но контроллер NodeMCU просто не успевал отслеживать все изменения в системе и передавать их на большой тачскрин-дисплей. Также в модуль охраны включены датчик движения и сканер RFID ключа-карты. На Arduino-модуль приходится обработка всех параметров с тачскрина. Фактически контроллер запрашивает у Arduino данные с датчиков и отправляет их на дисплей через интерфейс UART.

Физические модули: GSM

Этот модуль не имеет корпуса из-за пандемии.

Все платы Евгений заказывает на китайском заводе — просто потому что так дешевле. Сотрудничает с ними давно, качество плат устраивает. Но когда он в очередной раз заказал у них плату для охранной системы, с пересылкой в Барнаул начались проблемы: пандемия, границы закрыты, все дела. Деньги вернуть могут только за доставку, а за сами платы нет — ведь они их уже изготовили. Всего 2 $, конечно, но всё равно как-то жалко. Правдами и неправдами выяснилось, что в Новосибирск доставка возможна — и через друзей Евгений получил-таки свои заветные железки. Правда, при стоимости плат в 150 рублей доставка вышла в 1000 🙂

Из-за этого другие платы он заказал на AliExpress, но и там всё пошло не по плану: заказ дважды отменялся, а деньги за него долго висели на холдировании. Собственно, поэтому плату для GSM пришлось делать самостоятельно. А корпуса нет, потому что его ещё напечатать на 3D-принтере надо.

Сервисы внутри системы

Сервисы в нашем случае — виртуальные модули, отвечающие за какие-либо действия. Их нельзя потрогать руками:

ЖК Dixie от Стройсити, метро Научная. Современный доходный дом.

  • Openweather — отвечает за прогноз погоды на текущую дату и на неделю, а также график температур в ближайшие дни.
  • Macroscope — отвечает за видеонаблюдение (в доме, где живет Евгений, Управляющая компания установила 18 камер, и за счёт крутого API ко всем 18 не составило труда подключиться).
  • Сервис в самой системе — позволяет получить текущее состояние всей системы: дата и время, продолжительность непрерывной работы для отслеживания сбоев, состояние батареи питания, а также функционал перезагрузки и выключения сервера.

Центр управления

Примерная структурная схема того, как устроена система:

В сердце системы — сервер на фреймворке Vue.js, который отлично подходит для создания пользовательского интерфейса, с использованием фреймворка Nuxt.js, который позволяет создавать приложения на Vue.js. Дополнительно к фреймворкам используется модуль mongoDB (это документоориентированная система управления базами данных с открытым исходным кодом).

Вещи (физические датчики) публикуют данные в MQTT-брокер, а оттуда они попадают на сервер, где происходит их валидация, обработка, проверка и преобразование. После эти данные попадают в модуль Public, который отвечает за публикацию всех собранных данных для внешних подключений. А уже оттуда данные переходят в Socket IO — библиотеку Java Script, за счёт которой обеспечивается двусторонняя связь между веб-клиентами и серверами в режиме реального времени. На выходе данные получает клиент (например, в браузере). Сервисы работают схожим образом, но передача данных для них обходится без MQTT — информация передаётся сразу через Public и Socket IO «наружу».

Богатая жизнь КЕЙНА: дом, жена, друзья, авто, заработок, хобби

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

Когда задаётся сценарий, нужно выбрать целевую точку: либо отправить команду в узел «вещи», либо в «сервис», либо отправить http-запрос для webhook — функционал для уведомления сторонних сервисов. И конечно, каждой из них можно дать название сценария и прикрепить к ней иконку.

Запуск набора сценариев по конкретному событию происходит за счёт автоматизации. Например, если вы открыли дверь, система должна включить свет. Чтобы задать автоматизацию, сначала указывается событие запуска: дата, параметр или автоматизация. Например, 3-го числа каждого месяца, если идёт дождь, нужно напоминать взять с собой зонт 🙂 Внутри автоматизации можно указывать и другие автоматизации. Например, у вас есть два сценария: для будней и для выходных дней. Так вот, вторая автоматизация проверит, какой сегодня день, и только потом запустится автоматический сценарий выходного или рабочего дня. Такая механика даёт неограниченную вложенность автоматизаций, чтобы создавать максимально сложные сценарии, комбинируя типы событий «и» с «или».

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

Ключевые характеристики системы

  • Софт реализован на Nuxt. js (с использованием Vue. js и MongoDB).
  • Автономная работа сервера — в районе 5 часов (если отключится внешнее питание, система проработает примерно столько за счёт батареи).
  • Запуск приложения происходит через утилиту PM2 process manager (рабочий диспетчер процессов для приложений Node. js) — работает максимально просто: устанавливается в систему, вы пишете команду «старт», и всё работает. Может одновременно запустить столько процессов, сколько есть ядер в системе. Например, если ядра 4, можно запускать параллельно 4 сервера, разделяя между ними трафик на случай, если какой-то из них «упадёт».
  • Подключение происходит по Wi-Fi, причём каждый узел системы способен самостоятельно восстанавливать подключение, если оно отвалится.
  • Каждый элемент системы может работать как отдельное устройство — это было принципиальное условие на старте.
  • Разработка этой версии заняла полгода — Евгений инженерил в свободное время: за час до работы и в обеденный перерыв по будням.

Как происходит обмен данными

Есть два основных канала, которые по факту являются топиками в MQTT:

  1. Канал данных — по нему все элементы системы шлют данные на сервер. Данные делятся на типы: строка, справочник (набор предопределённых данных вроде «вкл» и «выкл» для охранной или метеосистемы), число, да/нет.
  2. Канал управления — по нему сервер отдаёт команду какому-либо устройству. Данные также передаются, делясь на типы: либо кнопка, либо строка. В ответ на команду устройство, сервис или вещь возвращает результат выполнения — статус-код: 1 — всё хорошо; 2 — сейчас выполнить нельзя (скажем, нельзя включить тревогу, если помещение не поставлено на охрану); 3 — всё плохо.

Почему ничего не получилось с Google Assistant

Google Assistant — тот самый сервис, который отвечает за запросы «окей, Гугл. ». Аналог Siri от Apple. И конечно, у него есть своё API и среда для подключения умных устройств в экосистему Google Assistant, чтобы можно было сказать «окей, Гугл, включи охранную систему» или «окей, Гугл, какая погода сегодня?». Запрос пройдёт через сервера Гугла, вернётся к вам на устройство, и оно выдаст результат.

Я подумал «круто!», готовое нативное приложение для телефона на Android и как раз годится для системы «умный дом». Начал подключать. Если кто-то видел документацию сервисов Гугла, те меня поймут: я офигел их читать. Во-первых, на английском. Во-вторых, многобукаф и написано очень мудрёно.

Я подписан на ютуб-канал одного разработчика, которому удалось подключиться к экосистеме Google Assistant. После своих неудачных попыток я решил написать ему — он ответил и даже помог мне с подключением. Но в первый же день я разочаровался: приложение Google Home — сырое, а его русская версия и подавно. Но самое главное — система заточена под управление брендовыми устройствами: например, умной рисоваркой, которой можно управлять через Wi-Fi. Или умной колонкой Google Station, с помощью которой реально можно управлять хоть всем домом, но которая по-русски не понимает. Мои же устройства кастомные, и под них в экосистеме Google Assistant ничего нет. Так что всё было зря.

— Евгений, разработчик

Пробовал Евгений и яндексовскую Алису — она лучше из-за адекватного русского языка, но и её конфигурация ущербная. В итоге он понял, что с готовыми решениями просто не судьба 🙂

Сколько стоило создание системы

Самое дорогое — микрокомпьютер Raspberry PI 3b+ и вообще весь блок центрального управления. Он вышел по стоимости чуть больше 4 тысяч рублей. А общий бюджет проекта составил 9 540 рублей без учёта расходов на пластик для печати корпусов и мелких деталек, которые уже были в арсенале у Евгения.

Планы

Сейчас в планах создание мобильного приложения с красивым интерфейсом, чтобы «умный дом» был всегда в кармане и чтобы вместо SMS приходили push-уведомления. Также Евгений планирует добавить управление светом и входным замком.

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

Среди замков на рынке есть интересное решение — замки Sherlock, управляемые через Wi-Fi со смартфона. Евгений хочет собрать нечто подобное, только чтобы со стороны подъезда вместо электронного дисплея было гнездо для RFID метки. Но самое главное — замок должен сигнализировать о том, что он не закрыт (признайтесь, у вас не раз было такое, что вы проспали всю ночь с открытой дверью, правда?).

Также в планах реализовать функцию «разбудить по сети». Это когда при нажатии специальной кнопки роутер отправляет команду по mac-адресу устройства — например, телевизора, — и велит ему включиться. За счёт этого функционала можно настроить сценарии. Скажем, сценарий «хочу работать»: включить компьютер, выключить телевизор, закрыть шторы, выгнать из комнаты всех домашних 🙂

Но самая крутая штука, которую Евгений хочет воплотить, — это подключение ZigBee-устройств. ZigBee — это стандарт общения между гаджетами или попросту протокол передачи данных. Грубо, — аналог подключения по Wi-Fi. Основное преимущество такой технологии — низкое потребление энергии. Но из-за маломощности и дальность работы тоже меньше, чем у Wi-Fi (хотя в свежих версиях этот недостаток, вроде бы, пофиксили).

Организовать сеть ZigBee можно тремя вариантами конфигураций:

Координатор — устройство, которое собирает и отправляет данные всем остальным устройствам сети. Если сеть длинная (большая квартира, толстые стены), в ход вступают роутеры — они получают сигнал от координатора, усиливают его и транслируют на конечные устройства. Они могут прятаться в обычных бытовых предметах: настольных лампах или увлажнителях. Фишка в том, что вся ZigBee-система выбирает тип подключения сама, исходя из условий в каждом конкретном случае: координатор пытается через роутеры найти все возможные устройства, чтобы создать сеть.

Китайцы быстро поняли, что эта технология быстрая, классная и дешёвая, поэтому выпускают все свои устройства уже с таким функционалом. Но каждый гаджет может функционировать только со своим координатором: то есть, если у вас чайник Xiaomi, то и координатор должен быть этой же фирмы (выглядит он как круглое устройство, которое вставляется в розетку). Но те же самые китайцы быстренько нашли, как обойти это ограничение: сделали USB-свисток, на который через USB-порт компьютера можно скачать специальное ПО, и тогда к нему можно подключить любое устройство любого производителя.

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

Но я понимаю, что мне никогда не переплюнуть Xiaomi, IKEA или Aqara банально по цене: даже если я найду китайцев, которые сделают партию по оптовым ценам с готовыми платами, это всё равно получится дороже, чем устройство от того же Xiaomi. Ну и вдобавок моё устройство не будет таким красивым, как у них.

— Евгений, разработчик

Дом, досуг, хобби

Подписывайтесь на нашу рассылку и будьте в курсе наших самых выгодных акций!

Дом, отдых, хобби

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

Посмотрим — кто знает?

Давным-давно в маленькой китайской деревне жил старик времен Лао Цзе. Мужчина жил со своим единственным сыном в маленькой хижине на окраине деревни. Единственным их достоянием был прекрасный жеребец, которому завидовали все в деревне. Уже было бесчисленное количество предложений купить его, но они всегда получали жесткий отказ. Лошадь была необходима для работы по сбору урожая и принадлежала семье, почти как друг. Однажды жеребец исчез. Пришли соседи и сказали: «Дурак, почему ты не продал лошадь? Теперь его нет, надо собирать урожай, а у вас ничего нет — ни лошади, ни денег на помощника. Какое несчастье!» Старик посмотрел на них и только сказал: «Не повезло — посмотрим, ведь кто знает? Жизнь идет своим чередом, не стоит судить и можно только доверять». Теперь жизнь должна была продолжаться без лошади, а поскольку наступило время сбора урожая, это означало страшные усилия для отца и сына.
Читать далее

Добротный домик для Семьи из трех Человек. Влог #040918

Одна моя история

Идеальное сердце — умная история


Импульсы развития для жизни.

Однажды молодой человек встал посреди города и заявил, что у него самое красивое сердце во всей долине. Собралась большая толпа, и все они восхищались его сердцем, потому что оно было совершенным. В нем не было ни пятнышка, ни изъяна. Да, они все согласились с ним, это действительно было самое красивое сердце, которое они когда-либо видели. Молодой человек был очень горд и еще громче хвастался своим прекрасным сердцем. Вдруг перед толпой появился старик и сказал: «Ну, твое сердце не так прекрасно, как мое». Толпа и молодой человек посмотрели на сердце старика. Оно билось сильно, но было всё в шрамах, на нем были места, где части были удалены и заменены другими. Они не подходили по размеру, и углы были потрепаны… Точнее, в некоторых местах были глубокие борозды, где отсутствовали целые части. Люди смотрели на него и думали: Как он может сказать, что его сердце красивее? Молодой человек посмотрел на сердце старика, увидел его состояние и рассмеялся: «Ты, наверное, шутишь, — сказал он, — сравнивая свое сердце с моим».
Читать далее

Чтобы не жалеть об упущенном,дорожите моментом .

В современном быстро меняющемся обществе мы часто уделяем слишком мало времени важным для нас вещам и людям.
Даже мы редко позволяем себе сознательные фазы отдыха, расслабления и благополучия.
Поэтому: подарите себе ЦВЕТЫ ВРЕМЕНИ!
Цветение времени — это моменты и переживания, которые выделяются из повседневной жизни, замечательно обогащают нашу жизнь и просто приносят пользу — личные моменты расслабления, благополучия, перезарядки батарей и возможности «отключиться».
Они подобны цветам ❁, которые распускаются на ограниченное время и превращают однообразный луг в красочное пиршество для глаз.
В этом контексте я хотела бы процитировать одного клиента, который написал мне следующее:
… Одна мысль о том, что у меня есть свое время, что я придаю ему значение, что я ценю моменты и опыт общения с близкими и важными для меня людьми, приносит мне пользу. Самое замечательное, что чем больше я думаю об этом, тем больше осознаю, что у меня есть цветы времени и что они действительно есть в моей жизни.
Читать далее

Есть дорогие аппараты,которые лечат цветом. Зачем? Когда можно и недорого.

А что, если мы будем относиться к нашим детям и друг другу,как к царской персоне ?

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

Тайный королевский ребенок

Жил-был король. В его городе была большая бедность. Жители города были озлоблены и недовольны, они боялись своего правителя. Однажды король приказал всем жителям собраться на городской площади, чтобы сообщить им нечто важное. Напряженные и встревоженные, люди устремили свои взоры на царя, желая услышать важное сообщение. Король заговорил: «Я тайно произвел на свет царственное дитя среди ваших детей. Обращайтесь с ним хорошо. Если я узнаю, что с моим ребенком происходят плохие вещи, я привлеку виновного к ответственности!». Затем король вернулся в свой замок. Горожане боялись наказания, потому что никто не знал, кто из них ребенок короля. Поэтому люди стали относиться ко всем детям в городе так, как будто каждый из них был царским ребенком. Прошло много лет. Дети стали взрослыми, у них появились свои дети. Теперь уже старый король с удовлетворением наблюдал за развитием своего города.
Читать далее