Security vs Cloud blog | Cloud

Security vs Cloud blog

Здесь найдете заметки по безопасности, облакам и предпринимательству

MCS 300 - безопасность в IoT и управление теплым полом

Как некто написал "не многие знают что буква S в аббревиатуре IoT означает Secure".
Воочию столкнулся с безопасностью в выпускаемых на рынок решениях IoT. 
Прикупил домой вот такой девайс для управления теплым полом по WiFi на кухне и балконе.


После установки я столкнулся с особенностями сурового российского IoT. 
Для начала выяснилось, что оные девайсы работают где-то день, и затем отваливаются от приложения. При этом Ping спокойно продолжает работать. Грешил на роутер, поменял настройки, поменял порты, наконец поменял роутер, но сказочный девайс всеравно требовал перезагрузки перед уходом из квартиры :) Хотя если выставить расписание, оно продолжало работать и после потери связи с ним.

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

Здесь возникла идея, как обеспечить приемлемый уровень безопасности для небезопасных IoT устройств.
Технически чтобы обеспечить защиту устройства можно сделать некоторый облачный шлюз, с фиксированным IP, для которого разрешить общение с устройством, а уже на самом шлюзе можно докрутить собственный механизм авторизации и реализовать протокол работы с устройством, "разобрав" родное приложение и протокол.
Другой вариант - запустить шлюз в локальной сети для управления устройством и уже с него обеспечить защищенный протокол работы с устройством. Чувствуется один из вариантов и придется реализовать.

Но на безопасности история не закончилась.
Через месяц работы внезапно обновилась прошивка устройств и они перестали отваливаться от сети. Я искренне поверил что разработчики пофиксили утечки, сделали какие-то очистки добы оно начало нормально работать, но оказалось они нашли универсальный способ. Руководствуясь принципом "Семь бед, один ресет" устройство перезапускалось каждый час, переподключалось к сети и спокойно работало дальше. И самое смешное, что такое решение действительно всех устроило тк постоянно устройство не нужно, а работоспособность в итоге была обеспечена. :)

Wine IoT - сценарии использования

Мало ли в мире алкогольных напитков, кроме пива, производство и потребление которых можно автоматизировать?
Действительно не мало.
Одна из интереснейших, с технологической точки зрения, вещей - производственный процесс вина.
Здесь и производство высококачественного сырья (винограда) с идеальными показателями зрелости, кислотности и сахаров, отслеживание болезней лозы и ответная реакция на эти болячки. 
Для этого в сельском хозяйстве потихоньку стали применяться современные технологии. Для получения инфомрции о зрелости винограда используют геораспределнные метеостанции, дроны сканируют посадки ИК-камерами для вычисления индекса NDVI (нормализованный относительный индекс растительности), строя вот такие вот карты:
Image result for NDVI индекс
Где все зеленое - листва нормально отражает свет и значит тут достаточно и влаги и культура еще не созревает. А где красное - либо проблемы либо пора собирать урожай.

Еще одним интересным решением стал Connected Vineyard от Cisco Systems:
Здесь они создали "argo-dashboard" с основными показателями необходимого потребления воды лозой винограда. Момент достаточно тонкий, так как при избытке воды получаются крупные и водянистые ягоды, из которых не получится сделать хорошее вино. При недостатке влаги, мы получаем малый объем урожая, и несбаллансированное созревание винограда. Так что калибровка такой системы должна заметно снизить риски для небольшиз виноградорских и винодельческих хозяйств.






IoT из существующих компонент - управление конвекторами через китайскую сигнализацию

Имеются у меня в наличии китайская GSM-сигнализация для дачи и конвекторы Thermor, на которых построено все отопление.  


Конвекторы обладают одной уникальной особенностью - у них весьма простой и незамороченный интерфейс и протокол для управления, который так и тянется к облаку :)
Но когда в предыдущий раз конвекторы управлялись по WiFi, с дачей возникали проблемы, Так как при разрыве соединения она оставалась в том режиме работы, который был задан последним, в итоге было решено перевести это все на SMS.

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

Если разобрать конвектор, то в нем обнаруживается свободная клема "N". Окалазось что именно к ней подключается управляющая таймкарта, и протокол выглядит следующим образом:
- нет напряжения: комфорт
- под напряжением -110В: антизамерзание.
Всего же режима четыре - 220 - выключено, +110, энокомичный режим (-6 градусов от комфорта)
Итого чтобы получить -110В достаточно поставить 1 диод.
Таким образом схема включения получилась крайне простой :)


Beer IoT - часть 4. определение плотности сусла


Ключевая задача IoT - научиться снимать те или иные показатели системы. С прямыми измерениями температуры, влажности и пр. проблем нет. Самая интересная проблема возникает при необходимости снять показатели c каких-то параметров, для которых нет существующих датчиков, подходящих по условиям эксплуатации или просто определяющих нужные нам показатели.
И здесь возникает самая интересная задача - придумать как с помощью косвенных измерений получить нужное нам значение.
Один из таких параметров - плотность сусла
Существует несколько традиционных способов измерения плотности сусла:
- С помощью ареометра

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

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

Есть альтренативный варинат.
- с помощью рефрактометра
Image result for ареометр пиво

Принцип действия рефрактометра основан на приломлении света в зависимости от оптической плотности среды. Прибор калибруется на дистилированную воду (плотность 0) и при добавлении на площадку слоя сусла, мы по отклонению можем понять его плотность.
Нам этот принцип показался более заманчивым для бесконтактного измерения плотности и мы стали пробовать собрать следующую схему. 
Приделать к сусловарочному баку вертикальную смотровую стеклянную трубку из нижней части бака к верхней. Обеспечить циркуляцию сусла по ней.
При этом просвечивать ее узконаправленным лучем и по отклонению луча определять плотность сусла.
При ручной работе этот принцип работать начал и технически его можно было бы использовать.
Для определения отклонения луча можно использовать ПЗС-матрицу.


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

На некоторое время мы отложили эксперименты но внезапно наткнулись на еще одну замечательную идею - можно использовать закон архимеда не только по прямому измерению уровня. Можно ведь измерять разность между плавучастями двух связанных поплавков! Следовательно измерять угол отклонения между этими поправками без прямого контакта с суслом. Более того, в такое устройство можно поместить ESP8266 и получить WiFi-измеритель плотности, плавающий в кипящем котле! :)

Beer IoT - часть 3. Процесс варики сусла и управление помпами.

Продолжим автоматизацию процесса приготовления Пива.
Для начала мы разоьрались с процессом затирания в (первой и 2 части) и теперь можем управлять этим процессов в баке-заторнике.
что еще интересно автоматизировать в нашем процессе? Во-первых это перекачивание и фильтрация сусла из заторника во варочник. Во-вторых это кипячение самого сусла до нужной нам плотности (здесь история с автоматизацией весьма интересна).
Мы делаем схему HERMs и тут надо перекачать сусло и MLT (заторник) в KTL(варочник):

Тут нам потребуются управление клапанами, а также насосами. Управлять мы будем через все те же блоки реле. Сейчас едут 2 блока по 8 элементов и нам его хватит. Налнем с насосов. Мы взяли TE091-SZ - Они не дорогие и могут использоваться в пищевой промышленности. Также  у них есть большой плюс - их довольно легко мыть, просто открутив колбу.



Итак, управление насосами довольно простое. Чтобы проверить их работу нужно запитать их через 12 вольт через реле ну и запустить тестовый проект по их управлению:
PumpManage.zip (74,3KB) (C# пример для проверки насосов)

Самое интересное здесь, это логика их работы. Нам нужно отключать насосы вовремя. В принципе они нормально работают "на сухую", поэтому мы можем просто рассчитать время их включения в зависимости от производительности, А можем использовать дополнительный датчик: 


Это простая труба с турбинкой. Соответственно пока идет поток получаем наведенный ей ЭДС и мы можем на PIN'е мониторить уровень. как только уровень LOW - жидкость кончилась. Это сделаем следующий раз.
Теперь про плотность.
После того, как мы все перекачали в варочник, крайне важно, чтобы мы прокипятили все наше дело и выпарили необходимое количество воды, дабы достичь запланированной плотности сусла. Для измерения плотности сусла используют либо аэрометр либо спектрометр. Есть только одна проблема - автоматизированные спектрометры или аэрометры стоят как половина нашей домашней пивоварни, поэтому надо искать решение.
В качестве варианта, мы можем сделать следующее - реализовать собственный аэрометр во внешней смотровой трубке котла, в котором он будет плавать. Нам нужно знать текущий уровень жидкости и текущую глубину погружения аэрометра. Зная эти параметры, мы сможем выстроить его работу. Осталось найти датчики. Этим займемся в следующей части :) А пока приступим к сборке трехкотловой HERMs-пивоварни.

SymmetricKey support is not available right now - JWT токены в ASP.NET vNext (beta 8)

Вот мучаешься два дня, чувствуешь себя дураком, а оказывается "SymmetricKey support is not available right now. Closing issue dup of #58".
Собственно о чем пост - в ASP.NET vNext DNX 5 (beta 8) есть JWT-токены. Но, Оказывается, использовать их с симметричной криптографией просто так не получится - по умолчанию нет поддержки SymmetricKey в SignatureProvider. 
Чтобы разрулить эту проблему, пр придется написать свой провайдер. Возмем основу AssymetricSignatureProvider и допишем поддердку MAC для SymmetricSignatureProvider. Что получилось  - в аттаче :)

SymmetricSignatureProvider_DNX5_beta8.zip (5,5KB)