Разработка автоматизированной системы для управления температурным режимом

Понятие управления температурным режимом технологии "Умный дом". Основные структурные элементы автоматизированной системы, разработка макета, достоинства утилиты. Расчет экономической эффективности проекта. Установка управления температурным режимом.

Рубрика Коммуникации, связь, цифровые приборы и радиоэлектроника
Вид дипломная работа
Язык русский
Дата добавления 18.10.2021
Размер файла 5,9 M

Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже

Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.

Размещено на http://www.allbest.ru/

Содержание

Введение

1. Теоретические основы по созданию автоматизированной системы для управления температурным режимом

1.1 Понятие управления температурным режимом технологии «Умный дом»

1.2 Средства разработки

2. Разработка автоматизированной системы для управления температурным режимом

2.1 Характеристика деятельности организации

2.2 Разработка макета автоматизированной системы

2.3 Структурные элементы автоматизированной системы

3. Расчет затрат на разработку автоматизированной системы

3.1 Выявление основных затрат

3.2 Расчет стоимости автоматизированной системы

Заключение

Список использованных источников

Введение

В обиход современного человека плотно вошли технологии удаленного управления. Эти технологии помогаю не только экономить время, но и позволяют не зависеть от местонахождения. Буквально 15-20 лет назад на вопрос, что такое мобильное приложение, владелец сотового телефона не нашел бы ответа. Возможности устройств ограничивались функциями звонков, отправки СМС и простейшими играми. Впрочем, незатейливую игру на сотовом телефоне можно было уже тогда называть приложением. Сегодня мобильное приложение - это специально разработанное под функциональные возможности гаджетов программное обеспечение.

Назначение программного обеспечения может быть самым разнообразным: сервисы, магазины, развлечения, онлайн-помощники и другое. Эти приложения скачиваются и устанавливаются самим пользователем через мобильные маркетплейсы. Самые крупные площадки _ AppStore, Google Play. Технически все приложения создаются под конкретную платформу мобильного гаджета. Наиболее популярные операционные системы _ iOS, Android, Windows Phone. В целом, мобильные приложения бывают двух видов. Одни упрощают внутренние процессы. Другие используются для достижения целей маркетинга, для роста продаж или повышения узнаваемости бренда, то есть являются ориентированными вовне. Мобильное приложение - инструмент, который помогает увеличить конкурентоспособность компании.

Прежде чем приступить к разработке, необходимо определиться с задачами, которые должна решать будущая программа. Она должна быть полезной конкретным пользователям. Также следует выяснить, на какой платформе будет работать сервис, какой бюджет выделяется на создание. Разработать софт можно самостоятельно с помощью специализированных сайтов-конструкторов или путем привлечения профессиональных специалистов, которые занимаются написанием ПО. Второй вариант является более затратным, однако дает возможность получить высококачественные, функциональные программные продукты.

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

Управление умным домом через смартфон может поражать воображение. Разработчики систем управления предлагают множество решений, которые основываются на различных стандартах, но имеют проблемы несовместимыми друг с другом и в большинстве случаев вызывают сложности при установке и монтаже. Практическое применение умной техники показывает свою непонятливость: ведь она упорно следует установленным правилам и с большим трудом воспринимает любые исключения из них.

Целью выпускной квалификационной работы является разработка автоматизированной системы управления температурным режимом на базе мобильной операционной системы Android. В соответствии с поставленной целью в работе определены следующие задачи:

1. Проанализировать предметную область в сети Интернет.

2. Разработать макет автоматизированной системы.

3. Реализовать разработку автоматизированной системы.

4. Рассчитать экономическую эффективность проекта.

Предметом исследования является среда разработки Android Studio на языке программирования Java.

Объектом исследования является мобильное приложение для управления температурным режимом технологии «Умный дом» для загородного дома, находящегося по адресу Завьяловский район, д. Русский Вожой, ул. Васильковая, 3.

1. Теоретические основы по созданию автоматизированной системы для управления температурным режимом

1.1 Понятие управления температурным режимом технологии «Умный дом»

Под термином «Умный дом» подразумевают систему, обеспечивающую взаимодействие бытовой электроники, освещения и климатического оборудования, которая призвана повысить уровень энергосбережения, безопасности и комфорта жилища.

В классическом понимании _ это автономный комплекс управления всеми системами здания без участия человека на основе заданных условий. В более широком смысле умным домом считают любые системы, позволяющие управлять техникой удалённо и настраивать автоматические сценарии, привязанные к тем или иным событиям.

Эффективное использование энергоресурсов достигается за счёт работы освещения, климатического оборудования и другой техники только в присутствии человека. За безопасность отвечают различные сенсоры, фиксирующие протечки воды, запахи дыма и газа, а также способные обнаружить вторжение в дом и сообщить об этом владельцу. Комфорт обеспечивается возможностью управления со смартфона и работой автоматических сценариев.

Умный дом умеет многое:

переводить квартиру в энергосберегающий режим, когда никого нет дома;

задавать сценарии освещения, включать и выключать свет автоматически;

перекрывать воду в случае протечки;

контролировать влажность и температуру;

заботиться о питомцах: подливать воду и насыпать корм, регулировать освещение в аквариуме, выпускать животное на улицу;

показывать, что происходит в квартире;

помогать в воспитании детей: ограничивать доступ к телевизору или интернету, отслеживать время прихода домой;

предупреждать о пожаре;

отключать питание электроприборов;

убирать, варить кофе и решать за вас прочие бытовые вопросы [11].

Пример расположения системы «Умный дом» показан на рисунке 1.

Рисунок 1 _ Расположение системы «Умный дом».

Функции системы подбирают, исходя из потребностей жильцов. Например, если важно, чтобы температура в квартире была не выше 23°C, устанавливают датчик температуры и влажности воздуха. Если температура повышается, система включает кондиционер. Падает _ передает сигнал обогревателю.

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

Стоит подумать о включении отопительной установки в систему умного дома. Точный контроль температуры и качества воздуха в помещении означает, помимо комфорта, значительную экономию энергии. Многие люди, рассматривающие возможность установки интеллектуальных систем отопления, обеспокоены тем, что такие установки могут быть дорогими. Неправильно, потому что инвестиции в умный дом могут принести много сбережений [12].

Пример установки системы управления температурным режимом показан на рисунке 2.

Рисунок 2 _ Установка управления температурным режимом.

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

Комбинация терморегуляторов с интегрированной системой управления значительно повышает комфорт проживания. Первым преимуществом является возможность выбора нужного значения температуры на панели управления с точностью не менее 1C. Используя системы управления в интеллектуальном доме, можно на постоянной основе оптимизировать температуру и влажность в отдельных помещениях, чтобы максимально снизить затраты на использование дома. Использование регуляторов в каждой комнате позволяет установить любое другое значение. И без необходимости перемещаться с места, используя один контроллер, которым может быть планшет или смартфон. А это значит, что работой системы отопления или кондиционирования можно управлять на любом расстоянии. Например, если по какой-то причине потребуется дольше оставаться в другой части дома _ тогда, не отвлекаясь от текущих занятий, можно быстро изменить настройки для конкретной комнаты. Благодаря датчикам, расположенным по всему дому, можно видеть температуру на экране контроллера [14].

Каждое помещение в доме нуждается в своем режиме отопления. И поддерживать этот режим «умный дом» будет без участия владельца. Лучше всего проектировать управление еще на этапе установки инженерных коммуникаций, но в некоторых случаях возможно интегрировать имеющиеся приборы, установив датчики.

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

Такие же пороги предусмотрены и для охлаждения. В жаркие летние дни температура будет поддерживаться кондиционированием и вентиляцией.

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

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

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

Комфортный микроклимат - это не только приятная температура воздуха. На состояние человека влияет атмосферная влажность и процентное содержание кислорода и углекислого газа. Контроль за этими параметрами также может осуществляться в автоматическом режиме.

Автоматика будет своевременно включать ионизаторы, увлажнители и воздухоочистители, а также открывать фрамуги для проветривания. Современные интеллектуальные системы учитывают и внешние факторы, такие как влажность и температура воздуха вне помещения, наличие осадков, направление ветра и проч.

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

Управление климатом «Умный дом» обеспечивает:

улучшение здоровья (комфортная температура, свежий воздух, имеющий оптимальную влажность и насыщенный кислородом, _ являются важнейшими факторами для полноценного отдыха, для снижения риска развития аллергий и респираторных заболеваний);

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

экономию времени и усилий владельца (система отслеживает любые изменения с помощью точных датчиков и регулирует работу приборов без участия владельца);

экономию энергоресурсов и продление срока эксплуатации климатического оборудования [13].

1.2 Средства разработки

Мобильное приложение для управления температурным режимом было разработано с помощью программы Android Studio на языке программирования Java. Ниже более подробно описаны программа и язык, их главные превосходства и описание.

1. Android Studio - программа, являющаяся средой разработки приложений для мобильной платформы Android. Прямой конкурент самой популярной утилиты для создания софта под Android - Eclipse.

Android Studio превосходит конкурента по многим параметрам, к которым можно отнести:

гибкость среды разработки;

больший набор функций;

процесс разработки, который подстраивается под разработчика.

Во время создания приложений и утилит для операционной системы Android, пользователь программного обеспечения может наблюдать за изменениями в проекте, в режиме реального времени [15].

Android предоставляет разностороннюю платформу приложений, на основе которой можно создавать инновационные приложения и игры для мобильных устройств в среде языка Java.

Основные концепции, касающиеся платформы приложений Android:

приложения имеют несколько точек входа;

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

Интерфейс программы показан на рисунке 3.

Рисунок 3 _ Интерфейс программы Android Studio.

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

Отличительная особенность эмулятора - просмотр приблизительных показателей производительности при запуске приложения на самых популярных устройствах.[2, с.41]

Среда разработки для приложений Android Studio последней версии стала по настоящему удобной даже для начинающих разработчиков. В программе реализованы все современные средства для упаковки кода, его маркировки. Востребованная многими создателями ПО функция Drag-n-Drop, облегчающая перенос компонентов в среду разработки непосредственно.

Локализация приложений становится существенно проще с функцией SDK, которая также входит в перечень достоинств Android Studio.

Связь с целевой аудиторией приложения после его релиза поможет реализовать инструмент от компании Google - Google Cloud Messaging.

Достоинства утилиты:

среда разработки поддерживает работу с несколькими языками программирования, к которым относятся самые популярные - C/C++, Java

редактор кода, с которым удобно работать;

позволяет разрабатывать приложения не только для смартфонов/планшетов, а и для портативных ПК, приставок для телевизоров Android TV, устройств Android Wear, новомодных мобильных устройств с необычным соотношением сторон экрана;

тестирование корректности работы новых игр, утилит, их производительности на той или иной системе, происходит непосредственно в эмуляторе; умный дом автоматизированный температурный

рефакторинг уже готового кода;

достаточно большая библиотека с готовыми шаблонами и компонентами для разработки ПО;

разработка приложения для Android N - самой последней версии операционной системы;

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

большой набор средств инструментов для тестирования каждого элемента приложения, игры;

для неопытных/начинающих разработчиков специально создано руководство по использованию Android Studio, размещенное на официальном сайте утилиты [3, с.15].

Несмотря на наличие встроенного Android-эмулятора в самой среде разработки, с тестированием новоразработанного приложения могут возникнуть трудности. Так, для его запуска необходима достаточно внушительная по производительности аппаратная основа ПК, на котором планируется тестирование.

Еще один недостаток _ это невозможность написать серверные проекты на языке Java для ПК, Android устройств.

Пример разработки показан на рисунке 4.

Рисунок 4 _ Пример разработки.

2. IDE _ это место, в котором разработчик проводит большую часть своего времени: Android Studio выступает в качестве редактора для выбранного языка программирования (он поддерживает Java, C++, а также Kotlin, который с недавних пор тоже стал официальным языком Android), компилятора, который может создавать APK файлы и файловой системы для организации вашего проекта. Кроме этого он включает в себя редактор XML и расширенный редактор макетов. Android Studio предлагает целый набор дополнительных инструментов, некоторые из которых мы рассмотрим в данной статье. К счастью, большинство из них теперь можно скачать единым пакетом. По сути, этот пакет идет в комплекте с Android SDK, но все равно придется отдельно загрузить и установить Java JDK. И было бы неплохо, если бы прочли инструкцию для новичков по использованию Android Studio.

Разработка при помощи Java и Android SDK имеет несколько крутую кривую обучаемости, но с точки зрения интеграции, поддержки и возможностей Android Studio нет равных [4, с.41].

Инструмент AVD Manager идет в комплекте с Android Studio. Аббревиатура AVD расшифровывается как Android Virtual Device, поэтому, по сути, это эмулятор для запуска приложений Android на вашем компьютере. Это очень полезный инструмент, который позволяет тестировать свои приложения, без необходимости устанавливать их на физические устройства. Что еще более важно, AVD Manager позволяет создавать множество эмуляторов с различными размерами экрана, спецификациями и версиями Android. Можно увидеть, как будет выглядеть ваше творение на любом устройстве, и тем самым обеспечите поддержку среди самых популярных гаджетов. Производительность инструмента постоянно улучшается, особенно с режимом fast virt, который запускает на вашем компьютере версию Android от Intel и устраняет необходимость эмуляции уровня instruction [17].

3. Android Debug Bridge. ADB -- это инструмент командной строки, с помощью которого можно копировать файлы на устройство и обратно, устанавливать и удалять приложения, выполнять резервное копирование и восстановление на всех устройствах на базе Android, в том числе и на виртуальном. Он идет в комплекте с Android Studio и, по большей части, не придется его использовать. Но в редких случаях все же придется им воспользоваться. Для этого перейдите в папку, где находится файл adb.exe и откройте командную строку (Shift + RMB>Открыть окно команд) [18].

4. Язык программирования Java. Несомненно, это один из лучших языков, доступных серьезным программистам. Потенциально Java имеет все предпосылки, чтобы стать великим языком программирования, однако, вероятно, сейчас уже слишком поздно. Когда появляется новый язык программирования, немедленно возникает неприятная проблема его совместимости с программным обеспечением, созданным ранее. Более того, даже если изменения в эти программы можно внести без вмешательства в их текст, создателям языка, который так горячо приветствовался публикой, как, например, язык Java, сложно прямо сказать: «Да, возможно мы ошиблись при разработке версии X, но версия Y будет лучше». В итоге, ожидая появления дальнейших улучшений, мы должны констатировать, что структура языка Java в ближайшем будущем существенно не изменится [6, с.33].

Пример написания кода представлен на рисунке 5.

Рисунок 5 _ Пример кода на Java.

Преимущества языка Java.

1. Одно из основных преимуществ языка Java -- независимость от платформы, на которой выполняются программы: один и тот же код можно запускать под управлением операционных систем Windows, Solaris, Linux, Machintosh и др. Это действительно необходимо, когда программы загружаются через Интернет для последующего выполнения под управлением разных операционных систем.

2. Другое преимущество заключается в том, что синтаксис языка Java похож на синтаксис языка C++, и программистам, знающим языки С и C++, его изучение не составляет труда. Правда, для программистов, владеющих языком Visual Basic, этот синтаксис, возможно, будет непривычен [8, с.50].

Кроме того, Java _ полностью объектно-ориентированный язык, даже в большей степени, чем C++. Все сущности в языке Java являются объектами, за исключением немногих основных типов (primitive types), например чисел. (Поскольку с помощью объектно-ориентированного программирования легко разрабатывать сложные проекты, оно заменило собой более древнее структурное программирование. Если не знакомы с объектно-ориентированным программированием, главы 3-6 предоставят все необходимые сведения о нем.)

Однако разработать еще один, слегка улучшенный, диалект языка C++ недостаточно. Принципиально важно, что разрабатывать программы, не содержащие ошибок, на языке Java легче, чем на языке C++. Разработчики языка Java долго размышляли о том, отчего программы, написанные на языке C++, так подвержены ошибкам. Они снабдили язык Java средствами, позволяющими исключить саму возможность создавать программы, в которых были бы скрыты наиболее распространенные ошибки. Для этого в языке Java сделано следующее.

Исключена возможность явного выделения и освобождения памяти. Память в языке Java освобождается автоматически с помощью механизма сборки мусора. Программист гарантирован от ошибок, связанных с неправильным использованием памяти [9, с.15].

Введены истинные массивы и запрещена арифметика указателей. Теперь программисты в принципе не могут стереть данные из памяти вследствие неправильного использования указателей.

Исключена возможность перепутать оператор присваивания с оператором сравнения на равенство.

Теперь нельзя даже скомпилировать выражение if(ntries = 3) . . . (программисты на языке Visual Basic могут вообще не заметить здесь никакой проблемы, поскольку эта ошибка _ источник большинства недоразумений в языках С и C++) [7, с.11].

Исключено множественное наследование. Оно заменено новым понятием _ интерфейсом, позаимствованным из языка Objective С.

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

Характерные особенности языка Java:

простой;

интерпретируемый;

распределенный;

надежный;

безопасный;

машинонезависимый;

объектно-ориентированный;

высокопроизводительный;

многопоточный;

динамичный;

не зависящий от архитектуры компьютера [19].

Перечислим некоторые ситуации, возникновение которых предотвращает система безопасности языка Java.

1. Переполнение стека выполняемой программы, к которому приводил печально известный «червь», распространявшийся в Интернет.

2. Повреждение участков памяти, находящихся за пределами пространства, выделенного процессу.

3. Считывание и запись локальных файлов при использовании безопасного загрузчика классов, например Web-браузера, который запрещает такой доступ к файлам.

Все эти меры безопасности вполне уместны и обычно работают безупречно, однако осмотрительность никогда не повредит. Хотя обнаруженные к данному моменту ошибки были далеко не тривиальными, и все детали их поиска часто хранятся в секрете, следует признать, что доказать безопасность языка Java, вероятно, псе же невозможно [10, с.44].

Со временем в язык были добавлены новые средства защиты. Начиная с версии 1.1, в языке Java появилось понятие классов с цифровой подписью. Пользуясь классом с цифровой подписью, можно быть уверенным в его авторе. Если ему доверяем, то можно предоставить этому классу все привилегии, доступные на вашей машине.

Альтернативный механизм доставки кода, предложенный компанией Microsoft, опирается на технологию ActiveX и для безопасности использует только цифровые подписи. Очевидно, что этого недостаточно_любой пользователь программного обеспечения фирмы Microsoft может подтвердить, что программы широко известных производителей часто завершаются аварийно.

2. Разработка автоматизированной системы для управления температурным режимом

2.1 Характеристика деятельности организации

Q-Digital предоставляет сервис по разработке, поддержке проектов в сфере IT. Компания может, как создать, так и просто помочь с написанием программных продуктов.

Главный офис Q-Digital находиться по адресу: город Ижевск, улица Кирова, дом 112.

Основатель компании Столбов Александр Сергеевич.

Организация предоставляет следующие услуги:

разработка сайтов;

CRM решения для бизнеса;

разработка мобильных приложений;

разработка скриптов любой сложности;

кроссплатформенные приложения;

интеграция с различными API;

продвижение сайтов;

контекстная реклама;

социальный маркетинг;

разработка высоконагруженных социальных проектов;

интеграция с существующими социальными сетями.

разработка интернет магазина;

интеграцией Yandex.Market и другими системами;

интеграция с Ebay и другими интернет магазинами;

дизайн сайтов;

дизайн мобильных приложений.

Работа может производиться как с русскими клиентами, так и с иностранными.

2.2 Разработка макета автоматизированной системы

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

В основе создания приложения лежит разработка пользовательского интерфейса, для взаимодействия пользователей с системой. Для создания макета использовался сервис «Paint».

Первым делом был разработан макет главной страницы, на котором были отображены основные компоненты как, название приложения, температура на улице и кнопка добавления комнаты, как показано на рисунке 6. После был создан макет страницы добавления комнаты и желаемой температуры в ней, как показано на рисунке 7. И в последнюю очередь был создан макет соединяющий данные, температуры на улице и в комнате вместе, так же с кнопкой добавления еще одной комнаты, как показано на рисунке 8. Так как макет является лишь схемой, задающий первоначальный путь создания приложения, поэтому в процессе разработке системы, интерфейс может преобразиться и разительно отличаться от данного макета.

Рисунок 6 - Макет главной страницы.

Рисунок 7 _ Макет страницы добавления комнаты.

Рисунок 8 _ Макет страницы общих данных.

2.3 Структурные элементы автоматизированной системы

Файл EntityContract.java содержит внутри себя базу данных, которая называется sqlite. В этом файле описано, какие таблицы есть в базе данных и с какими полями, а так же команды создания и удаления таблиц. Эти описания потом используются в коде, где делаются запросы в БД. В таблице 1 представлена база данных.

Таблица 1 _ База данных.

package com.example.smarthometemperature;

import android.provider.BaseColumns;

public final class EntityContract {

private EntityContract() {}

public static class Sensor implements BaseColumns {

public static final String TABLE_NAME = "sensor";

public static final String COLUMN_NAME_CURRENT_TEMPERATURE = "current_temperature";

public static final String COLUMN_NAME_ADDRESS = "address";

public static final String COLUMN_NAME_ROOM_ID = "room_id";

public static final String CREATE_TABLE = String.format(

"CREATE TABLE IF NOT EXISTS %s (%s INTEGER PRIMARY KEY, %s INTEGER DEFAULT 0, %s TEXT NOT NULL, %s INTEGER NOT NULL)",

TABLE_NAME,

_ID,

COLUMN_NAME_CURRENT_TEMPERATURE,

COLUMN_NAME_ADDRESS,

COLUMN_NAME_ROOM_ID);

public static final String DROP_TABLE = "DROP TABLE IF EXISTS " + TABLE_NAME;

}

public static class Device implements BaseColumns {

public static final String TABLE_NAME = "device";

public static final String COLUMN_NAME_NAME = "name";

public static final String COLUMN_NAME_STATUS = "status";

public static final String COLUMN_NAME_ADDRESS = "address";

public static final String COLUMN_NAME_ROOM_ID = "room_id";

public static final String CREATE_TABLE = String.format(

"CREATE TABLE IF NOT EXISTS %s (%s INTEGER PRIMARY KEY, %s TEXT NOT NULL, %s TEXT NOT NULL, %s TEXT NOT NULL, %s INTEGER NOT NULL)",

TABLE_NAME,

_ID,

COLUMN_NAME_NAME,

COLUMN_NAME_STATUS,

COLUMN_NAME_ADDRESS,

COLUMN_NAME_ROOM_ID);

public static final String DROP_TABLE = "DROP TABLE IF EXISTS " + TABLE_NAME;

public static class Room implements BaseColumns {

public static final String TABLE_NAME = "room";

public static final String COLUMN_NAME_NAME = "name";

public static final String COLUMN_NAME_DESIRED_TEMPERATURE = "desired_temperature";

// public static final String COLUMN_NAME_GROUP_ID = "group_id";

public static final String CREATE_TABLE = String.format(

"CREATE TABLE IF NOT EXISTS %s (%s INTEGER PRIMARY KEY, %s TEXT NOT NULL,

%s INTEGER DEFAULT NULL)", TABLE_NAME,

_ID,

COLUMN_NAME_NAME,

COLUMN_NAME_DESIRED_TEMPERATURE);

public static final String DROP_TABLE = "DROP TABLE IF EXISTS " + TABLE_NAME;

}

public static class RoomGroup implements BaseColumns {

public static final String TABLE_NAME = "room_group";

public static final String COLUMN_NAME_NAME = "name";

public static final String CREATE_TABLE = String.format(

"CREATE TABLE IF NOT EXISTS %s (%s INTEGER PRIMARY KEY, %s TEXT NOT NULL)",

TABLE_NAME,

_ID,

COLUMN_NAME_NAME);

public static final String DROP_TABLE = "DROP TABLE IF EXISTS " + TABLE_NAME;

}

public static class OutDoors implements BaseColumns {

public static final String TABLE_NAME = "out_doors";

public static final String CREATE_TABLE = String.format(

"CREATE TABLE IF NOT EXISTS %s (%s INTEGER PRIMARY KEY)",

TABLE_NAME,

_ID);

public static final String DROP_TABLE = "DROP TABLE IF EXISTS " + TABLE_NAME;

}

}

Файл EntityDbHelper.java содержит код для работы с базой данных. В нём описано в каком файле хранится БД и что делать при создании БД. Если БД еще не создана, то при использовании она сама ее создает и создает таблицы с нужной структурой, которая описана в EntiteContract. В таблице 2 представлен код работы с базой данных.

Таблица 2 _ Код работы с базой данных.

package com.example.smarthometemperature;

import android.content.Context;

import android.database.sqlite.SQLiteDatabase;

import android.database.sqlite.SQLiteOpenHelper;

public class EntityDbHelper extends SQLiteOpenHelper {

public static final int DATABASE_VERSION = 1;

public static final String DATABASE_NAME = "smart_home_temperature.db";

public EntityDbHelper(Context context) {

super(context, DATABASE_NAME, null, DATABASE_VERSION);

}

public void onCreate(SQLiteDatabase db) {

db.execSQL(EntityContract.Sensor.CREATE_TABLE);

db.execSQL(EntityContract.Device.CREATE_TABLE);

db.execSQL(EntityContract.Room.CREATE_TABLE);

db.execSQL(EntityContract.OutDoors.CREATE_TABLE);

}

public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {}

}

}

Файл MainActivity.java (activity_main.xml) с этого файла начинается программа. Код в этом файле отвечает за отображение списка комнат с их текущей температурой и желаемой температурой. В этом же файле лежит код, который запускает периодическую задачу, в которой проверяет все комнаты, у каждой комнаты проверяет датчики и устройства, высчитывает температуру комнаты по датчикам (арифметическое среднее), и если у комнаты есть желаемая температура, то сверяет текущую температуру с ней и включает/выключает устройства. В таблице 3 представлен код отображения главной страницы.

Таблица 3 - Отображение главной страницы.

package com.example.smarthometemperature;

import androidx.annotation.Nullable;

import androidx.appcompat.app.AppCompatActivity;

import androidx.recyclerview.widget.DividerItemDecoration;

import androidx.recyclerview.widget.LinearLayoutManager;

import androidx.recyclerview.widget.RecyclerView;

import android.content.ContentValues;

import android.content.Intent;

import android.database.Cursor;

import android.database.sqlite.SQLiteDatabase;

import android.os.Bundle;

import android.util.Log;

import android.view.View;

import com.google.android.material.floatingactionbutton.FloatingActionButton;

import java.util.ArrayList;

import java.util.List;

import java.util.Random;

import java.util.Timer;

import java.util.TimerTask;

public class MainActivity extends AppCompatActivity implements View.OnClickListener, RoomListAdapter.OnRoomClickListener {

private RecyclerView roomList;

private LinearLayoutManager roomLayout;

private RoomListAdapter roomListAdapter;

private Timer updateUiTimer;

private Timer gloabalTemperatureTimer;

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_main);

FloatingActionButton addRoomBtn = findViewById(R.id.create_room_btn);

addRoomBtn.setOnClickListener(this);

createRoomList();

updateRooms();

runUpdateUiTask();

runGlobalTemperatureTask();

}

@Override

public void onClick(View v) {

switch (v.getId()) {

case R.id.create_room_btn:

createRoom();

break;

default:

break;

}

}

public void createRoom() {

updateUiTimer.cancel();

Intent intent = new Intent(this, EditRoomActivity.class);

startActivityForResult(intent, 0);

}

@Override

protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {

super.onActivityResult(requestCode, resultCode, data);

gloabalTemperatureTimer.cancel();

finish();

startActivity(getIntent());

}

public void createRoomList() {

roomLayout = new LinearLayoutManager(this);

roomList = findViewById(R.id.room_list);

roomList.setLayoutManager(roomLayout);

roomListAdapter = new RoomListAdapter(this);

roomList.setAdapter(roomListAdapter);

DividerItemDecoration divider = new DividerItemDecoration(roomList.getContext(), roomLayout.getOrientation());

roomList.addItemDecoration(divider);

}

@Override

ФайлRoomListAdapter.java (room_item_layout.xml)-тут лежит вспомогательный код, который занимается отображением отдельной комнаты в списке, и прикрепляет к каждой обработчик нажатия на комнату. При нажатии на комнату будет переход на DetailRoomActivity. В таблице 4 представлен код отображения комнаты.

Таблица 4 _ Отображение комнаты.

package com.example.smarthometemperature;

import android.content.ContentValues;

import android.content.Intent;

import android.view.LayoutInflater;

import android.view.View;

import android.view.ViewGroup;

import android.widget.TextView;

import androidx.recyclerview.widget.RecyclerView;

import java.util.ArrayList;

import java.util.List;

import java.util.TimerTask;

public class RoomListAdapter extends RecyclerView.Adapter<RoomListAdapter.RoomHolder> {

private List<ContentValues> data = new ArrayList<>();

private OnRoomClickListener onRoomClickListener;

public RoomListAdapter(OnRoomClickListener onRoomClickListener) {

this.onRoomClickListener = onRoomClickListener;

class RoomHolder

extends RecyclerView.ViewHolder {

private TextView roomName;

private TextView currentTemperature;

private TextView desiredTemperature;

private ContentValues data;

public RoomHolder(View v) {

super(v);

roomName = v.findViewById(R.id.item_room_name);

currentTemperature = v.findViewById(R.id.item_current_temperature);

desiredTemperature = v.findViewById(R.id.item_desired_temperature);

}

public void bind(ContentValues roomData) {

data = roomData;

roomName.setText(roomData.getAsString("name"));

if (roomData.getAsBoolean("desired_temperature_is_null"))

desiredTemperature.setText("--");

}

} else {

desiredTemperature.setText(roomData.getAsString("desired_temperature"));

}

currentTemperature.setText(roomData.getAsString("current_temperature"));

}

}

@Override

public RoomListAdapter.RoomHolder onCreateViewHolder(ViewGroup parent, int viewType) {

View v = LayoutInflater.from(parent.getContext())

.inflate(R.layout.room_item_layout, parent, false);

RoomHolder room = new RoomHolder(v);

return room;

}

@Override

public void onBindViewHolder(RoomHolder holder, final int pos) {

holder.bind(data.get(pos));

holder.itemView.setOnClickListener(new View.OnClickListener() {

@Override

public void onClick(View v) {

onRoomClickListener.onRoomClick(data.get(pos));

}

});

}

@Override

public int getItemCount() {

return data.size();

}

public void setData(List<ContentValues> rooms) {

data.addAll(rooms);

notifyDataSetChanged();

}

public void clearData() {

data.clear();

notifyDataSetChanged();

}

interface OnRoomClickListener {

void onRoomClick(ContentValues roomData);

Файл DetailRoomActivity.java (activity_detail_room.xml)-тут лежит код, который отвечает за отображение информации по конкретной комнате: температура, текущая температура, все датчики, все устройства, кнопки управления (изменить комнату, удалить комнату, добавить датчики/устройства). При переходе сюда запускается код, который периодически обновляет интерфейс, чтобы отобразить изменения, которые произошли. В таблице 5 представлен код отображения температуры.

Таблица 5 _ Отображение температуры.

package com.example.smarthometemperature;

ort android.content.ContentValues;

import android.content.Intent;

import android.view.LayoutInflater;

import android.view.View;

import android.view.ViewGroup;

import android.widget.TextView;

import androidx.recyclerview.widget.RecyclerView;

import java.util.ArrayList;

import java.util.List;

import java.util.TimerTask;

public class RoomListAdapter extends RecyclerView.Adapter<RoomListAdapter.RoomHolder> {

private List<ContentValues> data = new ArrayList<>();

private OnRoomClickListener onRoomClickListener;

public RoomListAdapter(OnRoomClickListener onRoomClickListener) {

this.onRoomClickListener = onRoomClickListener;

}

class RoomHolder extends RecyclerView.ViewHolder {

private TextView roomName;

private TextView currentTemperature;

private TextView desiredTemperature;

private ContentValues data;

public RoomHolder(View v) {

super(v);

roomName = v.findViewById(R.id.item_room_name);

currentTemperature = v.findViewById(R.id.item_current_temperature);

desiredTemperature = v.findViewById(R.id.item_desired_temperature);

}

public void bind(ContentValues roomData) {

data = roomData;

roomName.setText(roomData.getAsString("name"));

if (roomData.getAsBoolean("desired_temperature_is_null")) {

desiredTemperature.setText("--");

} else {

desiredTemperature.setText(roomData.getAsString("desired_temperature"));

}

currentTemperature.setText(roomData.getAsString("current_temperature"));

}

}

@Override

public RoomListAdapter.RoomHolder onCreateViewHolder(ViewGroup parent, int viewType) {

View v = LayoutInflater.from(parent.getContext())

.inflate(R.layout.room_item_layout, parent, false);

RoomHolder room = new RoomHolder(v);

return room;

}

@Override

public void onBindViewHolder(RoomHolder holder, final int pos)

holder.bind(data.get(pos));

holder.itemView.setOnClickListener(new View.OnClickListener() {

@Override

public void onClick(View v) {

onRoomClickListener.onRoomClick(data.get(pos));

}

});

}

@Override

public int getItemCount() {

return data.size();

}

public void setData(List<ContentValues> rooms) {

data.addAll(rooms);

notifyDataSetChanged();

}

public void clearData() {

data.clear();

notifyDataSetChanged();

}

interface OnRoomClickListener {

void onRoomClick(ContentValues roomData);

}

}

private RecyclerView deviceListView;

private DeviceListAdapter deviceListAdapter;

private Timer updateUiTimer;

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_detail_room);

Intent intent = getIntent();

roomId = intent.getIntExtra("id", 0);

setData();

createSensorList();

updateSensors();

createDeviceList();

updateDevices();

ImageButton deleteBtn = this.findViewById(R.id.delete_room_btn);

deleteBtn.setOnClickListener(this);

ImageButton editBtn = this.findViewById(R.id.edit_room_btn);

editBtn.setOnClickListener(this);

Button addSensorBtn = this.findViewById(R.id.add_sensor_btn);

addSensorBtn.setOnClickListener(this);

Button addDeviceBtn = this.findViewById(R.id.add_device_btn);

addDeviceBtn.setOnClickListener(this);

runUpdateUiTask();

}

public void setData() {

EntityDbHelper dbHelper = new EntityDbHelper(this);

SQLiteDatabase db = dbHelper.getReadableDatabase();

String[] projection = {

EntityContract.Room._ID,

EntityContract.Room.COLUMN_NAME_NAME,

EntityContract.Room.COLUMN_NAME_DESIRED_TEMPERATURE

};

Cursor cursor = db.query(

EntityContract.Room.TABLE_NAME,

projection,

String.format("_id = %d", roomId),

null,

null,

null,

EntityContract.Room._ID

);

Файл SensorListAdapter.java (sensor_item_layout.xml)- вспомогательный код для отображения датчика температуры в списке. В таблице 6 представлен код отображения датчиков.

Таблица 6 _ Отображение датчиков.

public class SensorListAdapter extends RecyclerView.Adapter<SensorListAdapter.SensorHolder> {

private List<ContentValues> data = new ArrayList<>();

private OnSensorClickButtonListener onSensorClickButtonListener;

public SensorListAdapter(OnSensorClickButtonListener onSensorClickButtonListener) {

this.onSensorClickButtonListener = onSensorClickButtonListener;

}

class SensorHolder extends RecyclerView.ViewHolder {

public TextView temperature;

public TextView address;

public ContentValues data;

public ImageButton editButton;

public ImageButton deleteButton;

public SensorHolder(View v) {

super(v);

temperature = v.findViewById(R.id.sensor_temperature);

address = v.findViewById(R.id.sensor_address);

editButton = v.findViewById(R.id.edit_sensor_btn);

deleteButton = v.findViewById(R.id.delete_sensor_btn);

}

public void bind(ContentValues sensorData) {

data = sensorData;

temperature.setText(sensorData.getAsString("temperature"));

address.setText(sensorData.getAsString("address"));

}

}

@Override

public SensorListAdapter.SensorHolder onCreateViewHolder(ViewGroup parent, int viewType) {

View v = LayoutInflater.from(parent.getContext())

.inflate(R.layout.sensor_item_layout, parent, false);

SensorListAdapter.SensorHolder sensor = new SensorListAdapter.SensorHolder(v);

return sensor;

}

@Override

public void onBindViewHolder(final SensorListAdapter.SensorHolder holder, final int pos) {

holder.bind(data.get(pos));

// final ContentValues holder_data = data.get(pos);

holder.editButton.setOnClickListener(new View.OnClickListener() {

@Override

public void onClick(View v) {

onSensorClickButtonListener.onSensorEditClick(holder.data)

});

holder.deleteButton.setOnClickListener(new View.OnClickListener() {

@Override

public void onClick(View v) {

onSensorClickButtonListener.onSensorDeleteClick(holder.data);

}

});

}

@Override

public int getItemCount() {

return data.size();

}

public void setData(List<ContentValues> sensors) {

data.addAll(sensors);

notifyDataSetChanged();

}

public void clearData() {

data.clear();

notifyDataSetChanged();

}

interface OnSensorClickButtonListener {

void onSensorEditClick(ContentValues sensorData);

void onSensorDeleteClick(ContentValues sensorData);

}

}

Файл DeviceListAdapter.java (device_item_layout.xml)- вспомогательный код для отображения устройства в списке. В таблице 7 представлен код отображения устройства.

Таблица 7 _ Отображение устройства.

package com.example.smarthometemperature;

import android.content.ContentValues;

import android.graphics.Color;

import android.view.LayoutInflater;

import android.view.View;

import android.view.ViewGroup;

import android.widget.ImageButton;

import android.widget.TextView;

import androidx.recyclerview.widget.RecyclerView;

import java.util.ArrayList;

import java.util.List;

public class DeviceListAdapter extends RecyclerView.Adapter<DeviceListAdapter.DeviceHolder> {

private List<ContentValues> data = new ArrayList<>();

private DeviceListAdapter.OnDeviceClickButtonListener onDeviceClickButtonListener;

public DeviceListAdapter(DeviceListAdapter.OnDeviceClickButtonListener onDeviceClickButtonListener) {

this.onDeviceClickButtonListener = onDeviceClickButtonListener;

}

class DeviceHolder extends RecyclerView.ViewHolder {

public TextView name;

public TextView address;

public TextView status;

public ContentValues data;

public ImageButton editButton;

public ImageButton deleteButton;

public DeviceHolder(View v) {

super(v);

name = v.findViewById(R.id.device_name);

status = v.findViewById(R.id.device_status);

address = v.findViewById(R.id.device_address);

editButton = v.findViewById(R.id.edit_device_btn);

deleteButton = v.findViewById(R.id.delete_device_btn);

}

public void bind(ContentValues deviceData) {

data = deviceData;

name.setText(deviceData.getAsString("name"));

address.setText(deviceData.getAsString("address"));

String statusString = deviceData.getAsString("status");

if (statusString.equals("-")) {

status.setTextColor(Color.BLUE);

status.setText("?");

} else if (statusString.equals("+")) {

status.setTextColor(Color.RED);

status.setText("\uD83D\uDD25");

} else {

status.setTextColor(Color.GRAY);

status.setText("Бездействие");

}

}

}

@Override

public DeviceListAdapter.DeviceHolder onCreateViewHolder(ViewGroup parent, int viewType) {

View v = LayoutInflater.from(parent.getContext())

.inflate(R.layout.device_item_layout, parent, false);

DeviceListAdapter.DeviceHolder device = new DeviceListAdapter.DeviceHolder(v);

return device;

}

@Override

public void onBindViewHolder(final DeviceListAdapter.DeviceHolder holder, final int pos) {

holder.bind(data.get(pos));

// final ContentValues holder_data = data.get(pos);

holder.editButton.setOnClickListener(new View.OnClickListener() {

@Override

public void onClick(View v) {

onDeviceClickButtonListener.onDeviceEditClick(holder.data);

}

});

holder.deleteButton.setOnClickListener(new View.OnClickListener() {

@Override

public void onClick(View v) {

onDeviceClickButtonListener.onDeviceDeleteClick(holder.data);

}

});

}

@Override

public int getItemCount() {

return data.size();

}

public void setData(List<ContentValues> devices) {

data.addAll(devices);

notifyDataSetChanged();

}

public void clearData() {

data.clear();

notifyDataSetChanged();

}

interface OnDeviceClickButtonListener {

void onDeviceEditClick(ContentValues deviceData);

void onDeviceDeleteClick(ContentValues deviceData);

}

}

Файл EditRoomActivity.java (activity_edit_room.xml)- код для создания/изменения комнаты. Изменяется имя и желаемая температура. В таблице 8 представлен код для создания или изменения комнаты.

Таблица 8 _ Создание или изменение комнаты.

package com.example.smarthometemperature;

import androidx.appcompat.app.AppCompatActivity;

import android.content.ContentValues;

import android.content.Intent;

import android.database.Cursor;

import android.database.sqlite.SQLiteDatabase;

import android.os.Bundle;

import android.view.View;

import android.widget.Button;

import android.widget.EditText;

import android.widget.TextView;

import com.google.android.material.textfield.TextInputEditText;

public class EditRoomActivity extends AppCompatActivity implements View.OnClickListener {

private TextInputEditText editRoomName;

private EditText editDesiredTemperature;

private int roomId = 0;

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_edit_room);

Button returnBtn = findViewById(R.id.return_room_list_btn);

returnBtn.setOnClickListener(this);

returnBtn = findViewById(R.id.save_room_btn);

returnBtn.setOnClickListener(this);

editRoomName = findViewById(R.id.edit_room_name);

editesiredTemperature = findViewById(R.id.room_desired_temperature);

setData();

}

public void setData() {

EntityDbHelper dbHelper = new EntityDbHelper(this);

SQLiteDatabase db = dbHelper.getReadableDatabase();

Intent intent = getIntent();

roomId = intent.getIntExtra("id", 0);

if (roomId == 0) {

return;

}

String[] projection = {

EntityContract.Room._ID,

EntityContract.Room.COLUMN_NAME_NAME,

EntityContract.Room.COLUMN_NAME_DESIRED_TEMPERATURE

};

Cursor cursor = db.query(

EntityContract.Room.TABLE_NAME,

projection,

String.format("_id = %d", roomId),

null,

null,

null,

EntityContract.Room._ID

);

while(cursor.moveToNext()) {

String name = cursor.getString(cursor.getColumnIndex(EntityContract.Room.COLUMN_NAME_NAME));

boolean desiredTemperatureIsNull = cursor.isNull(cursor.getColumnIndexOrThrow(EntityContract.Room.COLUMN_NAME_DESIRED_TEMPERATURE));

int desiredTemperature = cursor.getInt(cursor.getColumnIndexOrThrow(EntityContract.Room.COLUMN_NAME_DESIRED_TEMPERATURE));

editRoomName.setText(name);

if (desiredTemperatureIsNull) {

editDesiredTemperature.setText("");

} else {

editDesiredTemperature.setText(String.format("%d", desiredTemperature));

}

}

}

@Override

public void onClick(View v) {

switch (v.getId()) {

case R.id.save_room_btn:

saveRoom();

break;

case R.id.return_room_list_btn:

finish();

break;

default:

break;

}

}

public void saveRoom() {

EntityDbHelper dbHelper = new EntityDbHelper(this);

SQLiteDatabase db = dbHelper.getWritableDatabase();

ContentValues values = new ContentValues();

String roomName = editRoomName.getText().toString().trim();

if (roomName.isEmpty()) {

editRoomName.setError("Введите имя комнаты");

return;

}

values.put(EntityContract.Room.COLUMN_NAME_NAME, roomName);

String temperature = editDesiredTemperature.getText().toString();

if (temperature.matches("")) {

values.putNull(EntityContract.Room.COLUMN_NAME_DESIRED_TEMPERATURE);

} else {

values.put(EntityContract.Room.COLUMN_NAME_DESIRED_TEMPERATURE, temperature);

}

if (roomId == 0) {

db.insert(EntityContract.Room.TABLE_NAME, null, values);

} else {

db.update(EntityContract.Room.TABLE_NAME, values, String.format("_id = %d", roomId), null);

}

finish();

}

}

Файл EditDeviceActivity.java (activity_edit_device.xml)-код создания/изменения устройства. В таблице 9 представлен код создания или изменения устройства.

Таблица 9 _ Создание или изменение устройства.

public class EditDeviceActivity extends AppCompatActivity implements View.OnClickListener {

private TextInputEditText editDeviceName;

private TextInputEditText editDeviceAddress;

private int deviceId = 0;

private int roomId = 0;

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_edit_device);

Button returnBtn = findViewById(R.id.return_from_device_btn);

returnBtn.setOnClickListener(this);

returnBtn = findViewById(R.id.save_device_btn);

returnBtn.setOnClickListener(this);

editDeviceName = findViewById(R.id.edit_device_name);

editDeviceAddress = findViewById(R.id.edit_device_address);

Intent intent = getIntent();

roomId = intent.getIntExtra("room_id", 0);

deviceId = intent.getIntExtra("id", 0);

setData();

}

public void setData() {

EntityDbHelper dbHelper = new EntityDbHelper(this);

SQLiteDatabase db = dbHelper.getReadableDatabase();

if (deviceId == 0) {

return;

}

String[] projection = {

EntityContract.Device._ID,

EntityContract.Device.COLUMN_NAME_NAME,

EntityContract.Device.COLUMN_NAME_ADDRESS

};

Cursor cursor = db.query(

EntityContract.Device.TABLE_NAME,

projection,

String.format("_id = %d", deviceId),

null,

null,

null,

EntityContract.Device._ID

);

while(cursor.moveToNext()) {

while(cursor.moveToNext()) {

String name = cursor.getString(cursor.getColumnIndex(EntityContract.Device.COLUMN_NAME_NAME));

String address = cursor.getString(cursor.getColumnIndexOrThrow(EntityContract.Device.COLUMN_NAME_ADDRESS));

editDeviceName.setText(name);

...

Подобные документы

  • Обзор системы управления микроклиматом FC-403-65. Разработка структурной схемы системы управления температурным режимом теплицы. Выбор датчиков и исполнительных механизмов, принципиальная схема их подключения. Разработка инструкций по эксплуатации.

    дипломная работа [1,8 M], добавлен 10.04.2017

  • Назначение и структура автоматизированной системы, её программное обеспечение и алгоритм функционирования. Анализ систем отопления, вентиляции и кондиционирования как объекта управления. Этапы разработки математической модели теплового режима помещений.

    курсовая работа [533,8 K], добавлен 10.11.2014

  • Разработка микропроцессорной системы управления микроклиматом в теплице. Требования пользователя в автоматизированной системе, алгоритм ее функционирования. Мониторинг и индикация температуры и влажности в соответствии с выбранным режимом работы.

    курсовая работа [455,4 K], добавлен 21.12.2015

  • Разработка общей структуры промышленной сети программируемых контроллеров в рамках автоматизированной системы расчета технологии измерения размеров образца металла с использованием компьютерных сетей связи. Проведение технического контроля аппарата.

    дипломная работа [96,3 K], добавлен 06.03.2010

  • Общая характеристика электроэрозионного оборудования. Описание существующего проволочного станка AC Classic V2. Разработка структурной схемы автоматизированной системы управления. Техническая реализация проекта системы управления и диагностики параметров.

    дипломная работа [7,1 M], добавлен 05.04.2012

  • Разработка проекта внедрения SAP CRM. Анализ организации, анализ процессов, подлежащих автоматизации. Решение SAP Best Practices в организации управления клиентами и продажами. Функции системы, основные вопросы предпосылки к внедрению ее на предприятии.

    курсовая работа [2,0 M], добавлен 12.05.2014

  • Сварочный автомат в среде аргона, его исполнительные устройства, датчики. Циклограмма работы оборудования. Перечень возможных неисправностей, действие системы управления при их возникновении. Построение функциональной электрической схемы блока управления.

    курсовая работа [745,9 K], добавлен 25.05.2014

  • Структура трехуровневой распределенной автоматизированной системы управления технологическим процессом. Подключение полевых устройств через станцию распределенной периферии. Формирование сигналов в аналоговых модулях. Основные коммуникационные протоколы.

    презентация [375,4 K], добавлен 10.02.2014

  • Общие сведения об основных технических средствах связи гарнизона пожарной охраны. Выбор технических средств системы оперативной связи гарнизона пожарной охраны. Внедрение автоматизированной системы связи и оперативного управления пожарной охраной.

    курсовая работа [447,0 K], добавлен 09.05.2012

  • Технологический процесс подготовки нефти на дожимной насосной станции, методы его автоматизации. Выбор проектной конфигурации контроллера, разработка и описание алгоритмов управления технологическим процессом. Расчет системы автоматического регулирования.

    дипломная работа [737,7 K], добавлен 23.09.2012

  • Использование систем интеллектуальной автоматизации. Основные параметры системы "Умный дом" - энергосбережение, освещение, система климат-контроля, контроль проникновения в жилище, контроль протечки воды. Общая схема управления системой "Умный дом".

    реферат [110,1 K], добавлен 13.09.2013

  • Разработка структурной схемы и расчет основных характеристик системы оперативной связи гарнизона пожарной охраны. Выбор и обоснование технических средств. Назначение и основные функции. Состав основных подсистем центра. Расчет приведенных затрат.

    курсовая работа [3,6 M], добавлен 26.12.2014

  • Понятие системы "Умный дом" и принципа ее действия. Комплексный подход к проектированию и особенности электро-, водо- и газоснабжения, освещения, отопления, вентиляции и кондиционирования, канализации. Система общего управления "умный дом" на базе ПК.

    курсовая работа [1,3 M], добавлен 05.05.2013

  • Разработка и описание аппаратной части автоматизированной сигнализации по GSM каналу при рассмотрении возможных вариантов её реализации. Принципы и основные элементы системы. Разработка платы центрального блока устройства и технической документации.

    дипломная работа [1,2 M], добавлен 14.12.2010

  • Назначение и характеристики составных элементов объекта. Способы устранения недостатков системы "Умный дом". Определение элементов и связей между ними. Разработка структурной и иерархической схемы устройства. Работа подсистемы безопасности и управления.

    курсовая работа [184,8 K], добавлен 23.08.2016

  • Разработка электрической схемы системы управления пуском и торможением двигателя. Обеспечение надежности электрооборудования на этапе проектирования автоматизированной системы управления. Повышение надежности АСУ и рабочей машины в целом. Реле времени.

    курсовая работа [256,5 K], добавлен 18.04.2015

  • Синтез структуры и определение параметров управляющего устройства: обоснование свойств управляемого объекта, построение систем с переменной структурой. Синтез СПС со скользящим режимом; анализ релейной системы. Дискретизация непрерывной модели СПС.

    курсовая работа [1,4 M], добавлен 07.03.2011

  • Классификация (типы) бортовых систем автотранспортного средства. Система автоматического управления трансмиссией автомобиля. БИУС – вид автоматизированной системы управления, предназначенной для автоматизации рабочих процессов управления и диагностики.

    дипломная работа [1,5 M], добавлен 26.07.2017

  • Работа системы инфракрасного дистанционного управления. Параметры и характеристики 6-ти канального регулятора громкости. Выбор технологии разработки печатной платы. Расчет расходов на стадии производства устройства управления акустической системой 5.1.

    дипломная работа [3,6 M], добавлен 01.02.2013

  • Выбор рационального способа кодирования сообщений. Структурные схемы технических средств автоматизированной системы управления тяговыми подстанциями и передачи информации в системе телемеханики. Наибольшая возможная удаленность пункта приема сообщений.

    курсовая работа [2,4 M], добавлен 19.02.2011

Работы в архивах красиво оформлены согласно требованиям ВУЗов и содержат рисунки, диаграммы, формулы и т.д.
PPT, PPTX и PDF-файлы представлены только в архивах.
Рекомендуем скачать работу.