Используем Twitter по назначению

Однажды мне было очень скучно. Настолько, что я решил достать все детали своего «конструктора» и собрать что-нибудь.



В закромах нашлось следующее: Arduino совместимая плата, роутер tp-link mr3020, модуль GPS, гироскоп\акселерометр, и куча всякой прочей ерунды.

Забегая вперед, чтобы не огорчать некоторых читателей, скажу, что модуль GPS и гироскоп не пригодились
.
Причем тут twitter. Мое отношение к сабжу балансирует на грани безразличия и негатива. Ну что можно такого интересного рассказать используя всего 140 символов без картинок и видео? Непонятная игрушка для тех, кто живет в социальных сетях и постит о том что он съел на завтрак. Это мое личное мнение, если оно не совпадает с вашим, я могу это понять. Поэтому прошу уважаемых читателей не холиварить на эту тему, хотя бы в комментариях к этой статье.
Все эти мысли меня натолкнули на идею для незаменимого девайса, который будет твитить при каждом посещении мной туалета! Ну чтобы все были в курсе. И не просто о посещении, а более подробно: что именно я там делал. Приступим.

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



Поигравшись с мультиметром, я выяснил, что при изменении освещенности в нем возникает разность потенциалов. При максимальной освещенности «напряжометр» показал примерно 0,330 вольт. Цепляем его к «ардуине». Определять положение двери (открыта\закрыта) я решил просто замыканием контактов. Это кстати оказалось самым сложным, потому что подходящей кнопки у меня не нашлось.



Вот программка для «ардуины»:

#include <SoftwareSerial.h>  // подключаем модуль

SoftwareSerial mySerial(2, 3); // RX, TX пины для передачи по rs323

int cnt = 0;  // Счетчик секунд

void setup() {  
  mySerial.begin(115200);  // инициализируем порт
  mySerial.println("Halo world");  
}

void loop() {
  int lightValue = analogRead(A0);  // считываем значения с датчика света
  int doorValue = analogRead(A1);  // считываем положение двери
  boolean light = false;
  boolean door = false;
  
  if(lightValue > 60) light = true;  // если значение больше 60 - значит свет включен. Порог определен экспериментально
  if(doorValue > 500) door = true; // при разомкнутой сети значение должно быть 0, при замкнутой 1023. 
                                   //Но там всякие помехи, дрожание контактов... Так надежней

  if(light && door) cnt++; // если я внутри - считаем секунды
  else {
    if(cnt>0) {  // если только вышел
      mySerial.print("<"); 
      mySerial.print(cnt);  // шлем в порт секунды пребывания
      mySerial.println(">");
    }
    cnt = 0;  // обнуляем счетчик
  }
  delay(1000); 
}


Второе что нам понадобится — это роутер. Я взял tp-link mr3020. На него надо установить OpenWRT, настроить подключение к интеренту и установить php. Как это делается тут описано много раз, в том числе и мной. Поэтому не будем на этом задерживаться. Только важные моменты: вот мы слушаем порт и получаем нужные нам данные

<?php

//Отделяем дочерний процесс от основного
$child_pid = pcntl_fork();
if ($child_pid) {
    exit();
}
posix_setsid();

// Тут функция постинга в твитер
include("post.php");

$filename = "/dev/ttyATH0";  // serial-порт роутера
$handle = fopen($filename, "r"); // открываем
while (!feof($handle)) {
  $sym = fread($handle, 1); // читаем по одному байту за цикл
  if($sym=='>') { 
    $f=false; 
    echo "<<$cnt>>\n";	 
    flush();
    act($cnt);
    $cnt=''; 
  }
  elseif($sym=='<') $f=true;
  elseif($f) $cnt .= $sym;
}
fclose($handle);

function act($time) {
       if($time<40) {echo "dunno\n";}
	if(40<=$time && $time<150) { postMyPost("i was pee");}
       if(150<=$time && $time<300) { postMyPost("i was poo");}
       if(300<=$time && $time<900) { postMyPost("i take shower");}
}
?>



Постим с помощью этой библиотеки:

Третий важный момент — это возможность постить в твитер программно. Для этого нужно авторизоваться, зайти на dev.twitter.com, навести курсор вверху справа на свой светлый лик, выбрать My Applications. Делее Create New Application, отвечаем на все вопросы. Потом в Settings обязательно указать Access: Read and Write. Затем в Details нажимаем Create my access token и запоминаем поля Consumer key, Consumer secret, Access token и Access token secret, они нам еще понадобятся. Качаем библиотеку для PHP: github.com/abraham/twitteroauth/archive/master.zip
В config.php подставляем запомненные ранее данные:

define('CONSUMER_KEY', 'xxxxxxxxxxxxxxxxxxxxxxxxxx');
define('CONSUMER_SECRET', 'yyyyyyyyyyyyyyyyyyyyyyyyyy');
define('OAUTH_TOKEN', 'qwertyqwertyqwertyqwertyqwertyqwerty');
define('OAUTH_SECRET', 'sashagreysashagreysashagreysashagrey');
define('OAUTH_CALLBACK', 'http://example.com/twitteroauth/callback.php');


Ну и сам скрипт для отправки (post.php):

<?PHP
require_once('lib/twitteroauth/twitteroauth.php');
require_once('lib/config.php');
function postMyPost($status) {
    	$connection = new TwitterOAuth(CONSUMER_KEY, CONSUMER_SECRET,OAUTH_TOKEN,OAUTH_SECRET);
    	$connection->format = 'xml';
	$connection->post('statuses/update', array('status'=>$status));
}
?>


Процесс отладки:



Изделие в сборе:



Подключение:



Использование:
подключаемся к роутеру по SSH, запускаем скрипт:
root@OpenWrt:~# php-cgi /www/twitter/run.php
X-Powered-By: PHP/5.4.11
Content-type: text/html

root@OpenWrt:~#

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

Чтобы остановить скрипт, нужно посмотреть ID процесса и сделать ему kill:
root@OpenWrt:~# ps | grep run.php
 1665 root     10436 S    php-cgi /www/twitter/run.php
 1670 root      1492 S    grep run.php
root@OpenWrt:~# kill 1665


Результат работы можно посмотреть тут: twitter.com/kruz_ivan

Что в планах:
1) Прикрутить камеру, чтобы можно было еще и видеть фото самого процесса.
2) Сейчас активно развиваются технологии передачи запахов. С появлением первый серийных устройств, я обязательно задействую их в своем проекте.
3) Создание подобных устройств, интегрированных с соцсетями, которые будут твитить когда вы, например, открываете холодильник, или инстаграмить фото каждый раз, когда вы садитесь принимать пищу.
Метки:
Поделиться публикацией
Комментарии 51
  • +5
    Вот и настал этот день…
    А вот с запахами да, очень хорошая идея)
    • 0
      недаром оно рядом с унитазом…
    • +11
      Вашу бы энергию в позитивно-не туалетное русло направить)
      • 0
        Бесполезная штука, но ради прикола можно и себе такое сделать :D
        • +1
          Простите, но вы просто не увидели всех перспектив данного устройства (которое использвоать в качестве прикола было бы кощунством).
        • +1
          Вы сделали мой день, это прекрасно :D
          • +11
            А вы на кикстартере этоту идею опубликуйте…
            Предсказываю миллионы заказов.
            • +2
              Зачем делать с контактами такое, если есть герконы?
              • +1
                Все делалось из того, что нашлось под рукой. Ничего специально не искал и не покупал.
              • +20
                А у вас есть девушка? Есть одна идея для ночных твитов…
                • +7
                  Да, и почините вывод русских символов в твитах. Понадобится буква «ч».
                  • +1
                    «Человек», «Чемодан», «Чудак », может — «Чучело» — какое слово с использованием «ч» вы имеете ввиду?
                    • 0
                      Девушка, ночные твиты, ч… ;)
                  • 0
                    И инстаграммов…
                  • +15
                    Не хватает #хештегов.
                    Теперь ваш личный врач может подписаться на ваш твиттер и узнать всё ли впорядке с вашим желудком.
                    • 0
                      Хехе. особенно от умного унитаза с анализатором отходов жизнедеятельности.
                      А ветеринару еще можно отчет о животны отсылать
                    • –1
                      Неплохо. Но было бы в разы интересней, если бы в схеме участвовал на один микропоцессор меньше.
                      • –2
                        Фигню вот сказали. Интереснее было бы, если бы там был Raspberry Pi, собранные в кластер и задействованы облачные вычисления. А на один микропроцессор меньше — забивать гвозди камнями.
                        • 0
                          а надо забивать обязательно микроскопами и следить за этом в облаке? =)

                          но вообще, адруинка с WiFi это реально и интересно; мини-контроллер для двух датчиков, подключаемый по серийному порту к роутеру — чуть менее интересно, хотя тоже было бы неплохо.
                          • +2
                            Ничего вы не смыслите в современных тенденциях ))
                            Отбросив сарказм скажу, что по моему мнению круто было бы, если бы там стоял простенький контроллер из серии MSP430, на нём был поднят TCP/IP стек (для подключения к сети можно использовать что-то вроде ENC28J60), и кроме этого ничего не было бы. Вот тогда мы все подчерпнули бы много чего интересного из статьи.
                          • +2
                            Вам не кажется чудесным созвучие Pi и pee? :)
                            • +1
                              Pi произносится как " paɪ", так что не очень созвучно.
                        • 0
                          Есть ощущение, что технология определения характера действий по времени пребывания в помещении не очень надежна и может давать сбои. Плюс некоторые любят совмещать целый ряд процессов в одном посещении. Есть куда развиваться!
                          • 0
                            Определенно не хватает датчик на кнопку смыва. А желательно установит на бачок экологичную двойную кнопку смыва: когда можно вылить немного воды или смыть бурным потоком все накопившееся. Тогда проблема определения упростится.
                            • 0
                              Надежнее поставить датчик веса на сиденье унитаза.
                              • 0
                                Точно, по датчику веса во первых определять в чей твитер писать (т.е. сделать это по настоящему семейным увлечением), а во вторых учитывать достигнутый результат в граммах.
                                И по поводу экологичной кнопки, предлагаю повесить на нее ряд функций, такие как «количество потребленной воды в зависимости от достигнутых результатов.
                                Еще можно датчик влажности установить на сиденье.
                                • 0
                                  Жена мне уже сказала, что ничего не знает, но система должна ее распознавать и ничего никуда не постить.
                                • +1
                                  Датчик веса позволит твиттить вес до и после…
                                  • 0
                                    А вот это интересно!
                              • +16
                                Я конечно понимаю, что грамотный английский тут не есть цель, то уж «I was pee» это как-то совсем… -_-
                                • +4
                                  Всяко случается ^_^
                                  • +1
                                    Вообще порадовало 'Halo world', 'i was pee' и пр. не читается нормально, а 'Halo' это всеизвестная видеоигра.
                                    • +1
                                      В первой версии было hell low world.
                                  • –1
                                    Не зря говорят, что хорошая идея приходит сразу в несколько голов. Кстати отличный показатель что идея не такая уж бредовая. Думаю даже продать можно при желании.
                                    Огромное количество твитов типо «я проснулась», «я поела» и т.д. натолкнули на похожую мысль. Только я думал ограничиться проморликом. Для того чтобы потролить таких «твитерян» мне бы было достаточно.
                                    Прототип должен был прикрепляеться к телу владельца, где можно анализировать пульс и уже по пульсу определять чем именно занимается владелец. Я думаю много физиологических процессов можно определить по пульсу, ну или например пульс + температура.
                                    • +14
                                      Раньше твиттер засоряли, теперь заси… т.
                                      • 0
                                        Да, есть такое. Хорошо что не постят фото, как они успешно «наложили кучу» а то это было бы реально жесть…
                                      • +1
                                        >i was pee
                                      • 0
                                        А чекины на всяких фоскверах будут?
                                        • +19
                                          Не хочу вмешиваться, но судя по твитеру, вы как-то редко писаете. сходите к доктору на всякий случай, мало ли чего…
                                          • +5
                                            А «take a shower» посчитали?
                                            • +5
                                              Еще реже ходит по большому. Ни разу за два дня. Это не очень хорошо.
                                            • +1
                                              Хороший выбран секрет для туалетного твитера :)
                                              • +5
                                                «Поела» — пишет Зоя в твиттер,
                                                «Покакал» — пишет Николай.
                                                Ты зарегистрируйся и тоже
                                                Узнаешь много интересных новостей.
                                                • +2
                                                  Возникла мысль, что пользу от сего устройства можно повсить, если добавить датчик на дверь холодильника. И тогда можно ловить редисок, уничтожающих всякие вкусные ништяки по ночам, да контролировать себя на предмет переедания :)
                                                  • 0
                                                    Не поКушайтесь на святое.
                                                  • 0
                                                    Причем тут twitter. Мое отношение к сабжу балансирует на грани безразличия и негатива. Ну что можно такого интересного рассказать используя всего 140 символов без картинок и видео? Непонятная игрушка для тех, кто живет в социальных сетях и постит о том что он съел на завтрак.

                                                    Не холивара ради. Причем тут Arduino? Мое отношение к сабжу балансирует на грани безразличия и негатива. Ну чему такому интересному можно научиться, работая с платформой, которая представляет из себя контроллер с обрезанными функциями? Wiring и общение с роутером по уарт? Непонятная игрушка для тех, кто живет в своем мирке и делает вещи из готовых кусков, не вникая в суть.

                                                    Для самообразования полезнее было бы купить wifi-модуль или ethernet, и научиться общаться с сайтом не через пару прослоек — роутер, linux, php…

                                                    PS: добавьте в инфо твиттера ссылку на топик.
                                                    • 0
                                                      Ещё рацпредложения: постить в Твиттер показания водомеров и кормить электронику от элемента Пельтье между горячей и холодной трубами. То есть аккумулятор заряжать от элемента Пельтье, а разряжать при включении wifi.
                                                      • 0
                                                        Но это уже для тех извращенцев, которые хотят использовать Твиттер не по назначению.
                                                      • 0
                                                        Осталось автоматизировать посты в остальные соцсети:
                                                        image
                                                        • 0
                                                          судя по твиттам, Вы принимаете душ, чаще чем писаете :)

                                                          Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.