Умный Будильник На .Net

Недавно я начал интересоваться идеей Умного Дома.

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

Уметь устанавливать время включения/выключения света или описывать любой сценарий управления электроприборами.

Я обратил внимание на систему Ноолит .

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

В своей серии он имеет разные силовые агрегаты и разные типы панелей управления.

В комплект продуктов Noolite входит адаптер PC118.

Умный будильник на .
</p><p>
NET

Он позволяет управлять силовыми агрегатами серии через USB. Noolite предоставляет подробную и доступную документацию к устройству.

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



Что ты хотел сделать?

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

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

Исходный код приложения доступен по адресу Google-код .

В данной статье описана часть системы, отвечающая за взаимодействие с USB-адаптером.

А именно идентифицирует устройство, отправляет команды, а также приводит пример кода, реализующий сценарий «мягкого запуска».

Большую часть времени я занимаюсь разработкой на .

NET, поэтому примеры кода будут на C#.



Принципы работы с USB на .

NET

USB-устройства сегодня очень распространены.

К сожалению, в .

NET нет встроенного USB-компонента.

Работать с USB можно с помощью класса FileStream. Существуют сторонние библиотеки (в том числе с открытым исходным кодом), которые предоставляют удобные оболочки над FileStream. Мы пользовались библиотекой HidLibrary .

Адаптер PC118 подключается через USB и может использоваться в качестве HID-устройство .

Чтобы идентифицировать устройство и получить к нему доступ, необходимо указать два его идентификатора — Vendor ID (VID) и Product ID (PID).

Эти значения можно найти из документация к устройству.

Класс HidDevices из библиотеки HidLibrary имеет статический метод Enumerate. Этот метод возвращает список найденных HID-устройств с возможностью фильтрации списка по PID и VID. Выбираем нужное устройство (я взял первое из отфильтрованного списка) и устанавливаем с ним соединение, вызывая метод OpenDevice.

  
  
  
   

var device = HidDevices.Enumerate(VENDOR_ID, PRODUCT_ID).

FirstOrDefault(); if (device != null) { device.OpenDevice(); }

Устройство готово к использованию.

Теперь мы можем отправлять ему команды.



Работа с адаптером

Команда устройства представляет собой массив байтов.



var data = new byte[] { .

};

Их значения должны быть установлены в соответствии с параметрами отправляемой команды: тип команды (например, включение/выключение/установка уровня яркости), канал (адаптер РС118 может отправлять команды на 8 каналов, пронумерованных от 0 до 7) , значение уровня яркости (если выбрана команда настройки яркости).

Подробно это описано в документации.

Наше приложение использует несколько команд: — включить нагрузку (Вкл.

) — отключить нагрузку (Выкл.

) — переключатель состояния нагрузки (Switch) — установка яркости (SetLevel).

Чтобы отправить команду устройству, нужно вызвать метод WriteFeatureData и передать ему сгенерированный массив:

device.WriteFeatureData(data);

В документации есть примечание: «В зависимости от используемой библиотеки может потребоваться отправить первый байт со значением 0, прежде чем отправлять 8 байт».

В ходе экспериментов выяснилось, что это именно наш случай.

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

Судя по всему, это особенность библиотеки HidLibrary. Также оказалось, что между отправкой команд необходимо делать паузу в 200 мс, иначе адаптер выполнит только первую команду.

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



Что случилось

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

NET-приложений.

Например, код для плавного включения света может выглядеть так:

using (var adapter = new Pc118Adapter()) {

Теги: #noolite #ноотехника #Умный дом #управление освещением #usb #.

NET #занимаюсь пиаром

Вместе с данным постом часто просматривают:

Автор Статьи


Зарегистрирован: 2019-12-10 15:07:06
Баллов опыта: 0
Всего постов на сайте: 0
Всего комментарий на сайте: 0
Dima Manisha

Dima Manisha

Эксперт Wmlog. Профессиональный веб-мастер, SEO-специалист, дизайнер, маркетолог и интернет-предприниматель.