2011-06-28 два проекта от лаба
Tuesday, June 28th, 2011Преборвайки някаква част от мързела си, ето малко проекти, свършени в initlab:
1) Отваряне на врата
Има един технически проблем с влизането в лаба – долу на входа вратата няма дръжка от външната страна, на панела със звънците има 10 дупки, а апартаментите са 11 (по ред причини собственикът на апартамента не си е платил едно време, а лабът е под наем). Преди това начинът да се влезе беше да се звънне на някой, който е в лаба, той да иде и да натисне копчето, което отваря врата (т.е. кабели си има от долу до горе, просто няма начин за известяване).
Проблемите бяха два – трябваше да се звъни на някой на телефона и да бъде разкарван да отваря. Да мацнем още един звънец долу по някакъв хардуерен начин щеше да е крив естетически, за това мислите тръгнаха в посока да го направим пак с позвъняване. Най-лесният начин (който го каза Велин) беше да се намери една предплатена карта и стар gsm, който да има лампичка, която известява за позвъняване, и с нея да се задейства реле, което да “натиска” копчето за отваряне. Нямахме такъв телефон и не беше толкова интересно, за това решението в момента е следното:
Едни добри хора взимат телефония от spnet, и там са ми заделили един телефонен номер, +35924624356, който влиза на един asterisk. Към него е закачен asterisk, който работи на cassie.ludost.net (която се намира в initlab), която поема директно обажданията към тоя номер, затваря веднага, и пуска локално една програмка, която прави в общи линии следното:
sfd=open("/dev/ttyS1",O_RDWR | O_NOCTTY | O_NONBLOCK);
tcgetattr(sfd, &t);
t.c_lflag &= ~(ICANON | ECHO | ECHOE | ISIG);
t.c_cflag |= CLOCAL | CREAD;
tcsetattr(sfd, TCSANOW, &t);
ioctl(sfd,TIOCMGET,&flags);
flags= flags | TIOCM_RTS;
ioctl(sfd,TIOCMSET,&flags);
ioctl(sfd,TIOCMGET,&flags);
sleep(6);
close(sfd);
(или накратко, вдига RTS флага на втория сериен порт за 6 секунди и после го затваря)
На тоя сериен порт е закачена една проста схемичка на хората от НеоМонтана (която ми даде Мишо от Elwix), която като види, че и е вдигнат сигнал на тоя pin, закъсява едно реле, което от своя страна е вързано към бутона за отваряне на вратата. Самата схема се храни по 12 волта директно от сървърчето (и май е завързана за него със свинска опашка, не си спомням).
(и да, понеже ще ми го напомнят в коментарите, първоначалната идея беше да го правя с usb-to-serial, щото не бях сигурен, че машинката има изобщо (нямаше изведени), но го опуках, понеже обърках + и – на входа на захранването на платката)
2) Кой е в лаба
Това по принцип трябваше да го пише Стефан, ама го домързя. Идеята беше да може да се види кой в момента е в лаба, за да може (например) да му се обади да му отвори вратата (или просто да се види с него), като идеята е opt-in – който иска си казва кой му е mac адреса, и го дописваме в една база.
Адресите се вадят от локалния (гаден) router, един airport extreme, по snmp, със следната магическа команда:
snmpwalk -v 2c -c XXXXXXXX A.B.C.D iso.3.6.1.2.1.4.22.1.2|cut -d ' ' -f 4-|sed 's/ //g'|sort|uniq
от които данни един скрипт проверява дали в дадена директория има файлче, което се казва като mac адреса и ако да, го показва. Резултатът може да се види на http://vk.initlab.ludost.net/people.php, а от днес има и графика на броя чути адреси в лаба.
(целият source го има тук с малко данни, ама в него няма нищо особено интересно)