Первые шаги к умному дому

Тема в разделе "lan143", создана пользователем lan143, 23 фев 2015.

  1. lan143

    lan143 Погроммист Команда форума

    Если посмотреть статьи на хабре, то многие строители умных домов начинают либо с мониторинга температуры дома, либо с управления освещением. Поскольку управлять светом мне ещё затруднительно (не придумал пока что красивого способа влезть в проводку съемной квартиры) то решил заморочиться хотя бы с температурой. Итак.
    Месяц назад был приобретен 1-wire датчик температуры ds18b20. Он все лежал и лежал, руки до него никак не доходили, но в последнее время нашлось немного времени и на него. В качестве рулящего мозга был выбран Cubieboard (было б ещё из чего выбирать :)) На него был установлен Linaro, и были предприняты попытки пошевелить GPIO. Все технические подробности можно по-читать тут.
    Потом я решил с эмулировать протокол 1-wire, но из-за прерываний ОС жестко сбивались тайминги и происходила рассинхронизация потока. Отключать прерывания ОС было не вариант по известным причинам, поэтому пошел гуглить в сторону более "ядерных" решений. Как оказалось, ядро sunxi поддерживает 1-wire, вот только его нужно пересобрать. Попарившись я пересобрал его, подключил датчик, и о чудо, плата увидела его и даже показала температуру с него! (технически подробности можно почитать тут).
    Ну а после был запилен PHP скрипт, который висит в памяти и раз в минуту собирает информацию с датчика и отправляет на сайт. На сайте под все это уже давно было подготовлено, оставалось только принять данные. И вуаля:
    Скриншот 2015-02-23 19.22.22.png
    Обведенный красным и есть наш датчик. Остальные это фейковые данные, которые наделал для тестирования скрипта, но потом оставил, что б план не пустовал :)
    А вот показания после открытия двери балкона:
    Скриншот 2015-02-23 19.25.02.png
    Т.е. все работает, все четко. Пока что датчик висит на таких не хитрых соплях:
    OcyFfG7uBkY.jpg
    Но после получения получки возьму ещё парочку (они заразы дорогие, почти по 300 руб каждый стоит), телефонной витой пары, и начну прокладывать сеть по всей квартире.
     
    WWW и Noiro нравится это.
  2. lan143

    lan143 Погроммист Команда форума

    Теперь данные с датчика не только отображаются в реальном времени, но и ведется некоторая статистика. Вот пример за сегодня:
    chart.jpeg
    Кстати, сегодня мне пришла в голову идея, как можно сделать управление светом при этом не влезая в проводку и прочие конструкции комнаты, при этом решение будет мобильным и эстетично выглядеть. Но пока что пускай это будет тайной :)
     
  3. Nux

    Nux Активный

    Я так и не понял главного
    Ты снимаешь показания Т и ведешь статистику.
    Или управляешь распределением тепла в умной съемной квартире?
     
  4. lan143

    lan143 Погроммист Команда форума

    Пока что просто снимаю показания. Управлять теплом я смогу только с электрообогревателей и кондиционера.
     
  5. lan143

    lan143 Погроммист Команда форума

    На днях начал переделывать сетевое общение сайта и остальных устройств. Работало раньше следующим образом: скрипт, написанный на PHP раз в минуту открывал соединение с сайтом используя некоторое подобие API. Сначала он ломился по REST адресу /api/checkauth, тем самым проверяя авторизован он или нет. После чего он ломился по адресу /api/update_sensor_value и передавал данные по температуре. Так же поступала и мобила в момент получения новых смс. У подхода были свои минусы. И самым главным был тот, что со временем сайт начинал тормозить. Я так и не понял, чей косяк был; мой, или rails, или какого-то гема. Но факт оставался фактом.
    В итоге было решено перевести полностью общение на протокол Websocket. Плюсы его очевидны: одно постоянное соединение, можно передавать данные в обе стороны, как текстовые так и бинарные, и что не мало важно, ведомые устройства могли мгновенно получать любые сообщения и моментально на них реагировать. В системе запросов была бы задержка, равная интервалу между опросами новых сообщений.
    Был написан websocket сервер и websocket клиент. Оба они написаны на PHP. Сервер крутится на виртуалке где-то в дойчляндии, клиент на Cubietruck у меня дома.
    Скриншот 2015-03-30 00.13.13.png

    Телефон пока что работает по старому протоколу, но это не надолго: приложение уже вовсю переписывается. В качестве библиотеки для приложения я выбрал вот эту: https://github.com/tavendo/AutobahnAndroid
    Плюсы её в том... да черт, не знаю, какие у неё плюсы. Просто она выглядит лучше других, да и документирована получше :)
    Ну и в общем авторизовалось приложение на сервере нормально:
    index (2).png

    Вообще писать клиент-серверные приложения на PHP это то ещё извращение. Ситуацию кое-как спасает libevent, который позволяет реализовать что-то в духе асинхронности, но однопоточность меня совсем убивает. В итоге архитектура сервера выглядит ужасно. В будущем планирую переписать на Node.JS или C++, ну а пока что итак сойдет. Сервер ещё не настолько сложный, так что можно и потерпеть, что почти все находится в одном классе.
     
  6. Lozok

    Lozok Активный

    Lan Root, а как ты добился того, чтобы приложение на андровиде работало в фоне? Я вроде сделал, то, что нужно, но в фон запихнуть не могу, стоит свернуть и оно прекращает работу :D Замучился уже искать решение, пишут какую-то непонятную чушь))
     
  7. Lozok

    Lozok Активный

    Всё, приложение готово, осталось только за 1600 добавить его в плей-маркет:D
     
  8. lan143

    lan143 Погроммист Команда форума

    Threads