...

пятница, 7 марта 2014 г.

iToilet. Офисный туалет свободен





Привет, Хабр!

Меня зовут Serg Krivoblotsky и я алкоголик iOS-разработчик. Я работаю в киевской компании Alterplay, которая специализируется на iOS разработке и дизайне для нашей платформы. «Люби то, что делаешь и делай то, что любишь», говорят у нас. Делаем. Любим.

Идея ежемесячных хакатонов прижилась в нашем коллективе на отлично. Раз в месяц, на выходных, собирается команда для развлечения в виде написания кода, изучения новых технологий, просто генерации идей, или поедания пиццы. Задачи бывали разные: от виртуального planning poker'а, до распознавания цены на чеке и конвертации в нац. валюту. Главная цель всего этого — не зарелизить готовый продукт, а скорее написать рабочий прототип, a.k.a MVP, как хотите.

Об одной из идей и ее реализации, я бы хотел рассказать подробнее.


Каждый кто находится в co-working'е, или небольшом офисе сталкивался с таком алгоритмом своих действий:



  1. Подходишь к туалету

  2. Упс, занято

  3. Идешь на рабочее место.

  4. Ждешь до тех пор, пока не освободится.




Есть проблема — должно быть решение. Было бы удобно, если находясь на рабочем месте я уже знал, занят ли туалет в данный момент, стоит ли мне туда идти.




Что нам понадобится для этого:



  • Датчик света. (Свет включен == туалет занят)

  • Устройство, способное считывать его показания.

  • Немного кода на PHP и Objective C.


Было куплено:



  1. PCduino


  2. Самый обыкновенный аналоговый датчик освещенности


  3. Множество проводов и несколько резисторов


Ход работы:

Кода писать много не буду, потому что он понятен как hello world. В конце статьи будут ссылки на Github.



  1. Подключаем датчик к pcduino:



    Датчик вернет значения в диапазоне 0..4096.

    Импирическим путем было определено, что наша лампочка в туалете в включенном состоянии выдает:

    >3400 — темнота

    <3400 — свет

  2. Поднимаем apache. (предвариетельно туда ubuntu поставили).

  3. Пишем код на php, для считывания показаний (вконце статьи ссылки на GitHub):

    $this->port = (isset($_GET["port"]) && is_numeric($_GET["port"])) ? $_GET["port"]:2;
    $this->data = exec("cat /proc/adc".$this->port);


  4. Пишем API для мобильных, и не только, клиентов:

    $this->answer(array(
    'light_value' => (int)$this->data,
    'light_status' => (bool)$l_status,
    'light_change' => (int)$l_change,
    'sensor_status' => true
    ));


  5. Опрашиваем по таймеру устройство любым удобным для вас способом:

    OSX:

    NSURL *toiletURL = [NSURL URLWithString:kToiletURLString];
    NSError *requestError = nil;
    NSData *responseData = [NSData dataWithContentsOfURL:toiletURL options:NSDataReadingUncached error:&requestError];




    iOS:

    NSURL *url = [NSURL URLWithString:urlString];
    NSURLRequest *request = [NSURLRequest requestWithURL:url];
    //Send NSURLSession dataTask
    [self sendRequest:request withCompletion:completion];




  6. Постим notification:

    [self.notificationController deliverNotificationWithTitle:kBusyNotificationText andText:notificationText];





… В общем-то это и все что нужно. Позже мы добавили несколько плюшек в виде таймера и возможности отключить всплывающие нотификейшны.

Результат работы:

OSX:


iOS


Исходники хакатона:

OSX:

http://ift.tt/1f61rFN


iOS

http://ift.tt/1f61rFR


PHP:

http://ift.tt/1f61rFT


Krivoblotsky


This entry passed through the Full-Text RSS service — if this is your content and you're reading it on someone else's site, please read the FAQ at http://ift.tt/jcXqJW.


Комментариев нет:

Отправить комментарий