Если посмотреть статьи на хабре, то многие строители умных домов начинают либо с мониторинга температуры дома, либо с управления освещением. Поскольку управлять светом мне ещё затруднительно (не придумал пока что красивого способа влезть в проводку съемной квартиры) то решил заморочиться хотя бы с температурой. Итак. Месяц назад был приобретен 1-wire датчик температуры ds18b20. Он все лежал и лежал, руки до него никак не доходили, но в последнее время нашлось немного времени и на него. В качестве рулящего мозга был выбран Cubieboard (было б ещё из чего выбирать ) На него был установлен Linaro, и были предприняты попытки пошевелить GPIO. Все технические подробности можно по-читать тут. Потом я решил с эмулировать протокол 1-wire, но из-за прерываний ОС жестко сбивались тайминги и происходила рассинхронизация потока. Отключать прерывания ОС было не вариант по известным причинам, поэтому пошел гуглить в сторону более "ядерных" решений. Как оказалось, ядро sunxi поддерживает 1-wire, вот только его нужно пересобрать. Попарившись я пересобрал его, подключил датчик, и о чудо, плата увидела его и даже показала температуру с него! (технически подробности можно почитать тут). Ну а после был запилен PHP скрипт, который висит в памяти и раз в минуту собирает информацию с датчика и отправляет на сайт. На сайте под все это уже давно было подготовлено, оставалось только принять данные. И вуаля: Обведенный красным и есть наш датчик. Остальные это фейковые данные, которые наделал для тестирования скрипта, но потом оставил, что б план не пустовал А вот показания после открытия двери балкона: Т.е. все работает, все четко. Пока что датчик висит на таких не хитрых соплях: Но после получения получки возьму ещё парочку (они заразы дорогие, почти по 300 руб каждый стоит), телефонной витой пары, и начну прокладывать сеть по всей квартире.
Теперь данные с датчика не только отображаются в реальном времени, но и ведется некоторая статистика. Вот пример за сегодня: Кстати, сегодня мне пришла в голову идея, как можно сделать управление светом при этом не влезая в проводку и прочие конструкции комнаты, при этом решение будет мобильным и эстетично выглядеть. Но пока что пускай это будет тайной
Я так и не понял главного Ты снимаешь показания Т и ведешь статистику. Или управляешь распределением тепла в умной съемной квартире?
Пока что просто снимаю показания. Управлять теплом я смогу только с электрообогревателей и кондиционера.
На днях начал переделывать сетевое общение сайта и остальных устройств. Работало раньше следующим образом: скрипт, написанный на PHP раз в минуту открывал соединение с сайтом используя некоторое подобие API. Сначала он ломился по REST адресу /api/checkauth, тем самым проверяя авторизован он или нет. После чего он ломился по адресу /api/update_sensor_value и передавал данные по температуре. Так же поступала и мобила в момент получения новых смс. У подхода были свои минусы. И самым главным был тот, что со временем сайт начинал тормозить. Я так и не понял, чей косяк был; мой, или rails, или какого-то гема. Но факт оставался фактом. В итоге было решено перевести полностью общение на протокол Websocket. Плюсы его очевидны: одно постоянное соединение, можно передавать данные в обе стороны, как текстовые так и бинарные, и что не мало важно, ведомые устройства могли мгновенно получать любые сообщения и моментально на них реагировать. В системе запросов была бы задержка, равная интервалу между опросами новых сообщений. Был написан websocket сервер и websocket клиент. Оба они написаны на PHP. Сервер крутится на виртуалке где-то в дойчляндии, клиент на Cubietruck у меня дома. Телефон пока что работает по старому протоколу, но это не надолго: приложение уже вовсю переписывается. В качестве библиотеки для приложения я выбрал вот эту: https://github.com/tavendo/AutobahnAndroid Плюсы её в том... да черт, не знаю, какие у неё плюсы. Просто она выглядит лучше других, да и документирована получше Ну и в общем авторизовалось приложение на сервере нормально: Вообще писать клиент-серверные приложения на PHP это то ещё извращение. Ситуацию кое-как спасает libevent, который позволяет реализовать что-то в духе асинхронности, но однопоточность меня совсем убивает. В итоге архитектура сервера выглядит ужасно. В будущем планирую переписать на Node.JS или C++, ну а пока что итак сойдет. Сервер ещё не настолько сложный, так что можно и потерпеть, что почти все находится в одном классе.
Lan Root, а как ты добился того, чтобы приложение на андровиде работало в фоне? Я вроде сделал, то, что нужно, но в фон запихнуть не могу, стоит свернуть и оно прекращает работу Замучился уже искать решение, пишут какую-то непонятную чушь))