Sterowanie urządzeniami przez WWW - Inteligentny dom

0

Witam,

Chciałbym uzyskać informację na temat możliwości kontrolowania urządzeń sterowanych przez USB z poziomu przeglądarki. Jak można odebrać dane z apache np. wysłane przez formularz i przekazać je do aplikacji zewnętrznej, która w tym przypadku będzie sterować urządzeniem podłączonym do USB.

Poproszę o wszelkie propozycję (również tytuły książek (linki do publikacji) dla webmasterów, programistów w j. polskim) dzięki którym można zrealizować taki projekt, dodam że całość miałaby być uruchomiona w środowisku Linux.

Projekt "inteligentnego domu" robie hobbystycznie, jego celem jest zdobycie jak największej wiedzy na ten temat :-)
Z góry dziękuje za pomoc :-)

0

Obsługa USB to jedno, a komunikacja z przeglądarką to coś innego.

Przeglądarka do apache klasycznie, po stronie serwera jakiś skrypt server-side z wywołaniem powiedzmy programu konsolowego, który do programu obsługi USB wyśle stosowny komunikat (z pewnych przyczyn lepiej gdy są to 2 osobne programy), a ten już robi swoje. Z odczytem robisz w odwrotnym kierunku

Server-side odpala program, który z programu obsługi USB pobiera potrzebne dane i zwraca na wyjście, które skrypt przechwytuje i zwraca przeglądarce.

Potrzebne narzędzia: serwer www z zainstalowanym mechanizmem server-side (PHP, ASP, albo wręcz jakimś CGI), program - najlepiej konsolowy do komunikacji z programem obsługi urządzenia, program obsługi urządzenia.

0
Szczawik napisał(a)

Obsługa USB to jedno, a komunikacja z przeglądarką to coś innego....
A "inteligentny dom" to jeszcze coś zupełnie innego. USB jest fajne ale na biurku.

0

Jesli chodzi o inteligentny dom to cykl artykulow zaczal sie w EP

http://www.ep.com.pl/?strona=archiwum.php&r=2004&m=1

co do USB kontra apache + server side to ja bym nie chcial takiego domu. Raczej zabawa.

0
mgr.Dobrowolski napisał(a)
Szczawik napisał(a)

Obsługa USB to jedno, a komunikacja z przeglądarką to coś innego....
A "inteligentny dom" to jeszcze coś zupełnie innego. USB jest fajne ale na biurku.

A to rzeczywiście jest inna sprawa. Inteligentny dom wymaga urządzeń komunikacyjnych na większą odległość. Można wykorzystać WiFi, Ethernet itp. USB średnio się do tego nadaje.

0
reichel napisał(a)

co do USB kontra apache + server side to ja bym nie chcial takiego domu. Raczej zabawa.

Racja - zabawa, tak jak napisałem na początku to chce się jak najwięcej nauczyć ;]

Co do USB i części elektronicznej to zostawmy to na razie w spokoju ;], bardziej interesują mnie zagadnienia programowe.

Jak przekazać dane z WWW do zewnętrznej aplikacji, nie chodzi mi o odpalenie za każdym razem aplikacji przez PHP, tylko o wysłanie/odebranie danych z innej aplikacji zewnętrznej działającej na tym serwerze.
Myślałem o wykorzystaniu bazy danych którą by aplikacja cały czas monitorowała i odbierała z niej dane, chociaż w tym wypadku chciałbym zrobić to z ominięciem baz.
Ponieważ przymierzam się do nauki programowa w Ruby, czy w tym języku można również zrealizować coś takiego ?

0
  1. Czy aplikacja umozliwia podlaczenie jakiegos pluginu ?

  2. Tak (np WinAMP): no to problem z glowy piszemy plugin (no raczej nie w ruby, ani php)
    i mozemy nim sterowac z ruby/php (oba pozwalaja wywolac api systemow).

  3. Nie - no to glowimy sie jak to mozna zrobic, przechwytujemy mysz, klawiature, rozkrecamy aplikacje ... mozemy to napisac w php/ruby ale .... lepiej w czym innym a sterowac z php/ruby jak w 2

  4. pozostaje interfejs www.

Wniosek:
Kupa roboty, ktora moze sie do niczego nie przydac. Wlasciwie to takie VNC wiec moze od razu lapac pulpit i wysylac go do klienta ?!

0
reichel napisał(a)
  1. Czy aplikacja umozliwia podlaczenie jakiegos pluginu ?

Aplikacja wysyłająca dane przez USB będzie dopiero pisana czyli teoretycznie może obsługiwać wszystko. Ma to być prosty program konsolowy, który po odebraniu danych wysłanych przez WWW wyśle je na port COM lub z niego odbierze i wyśle do WWW( za transmisje przez USB będzie odpowiedzialny układ FT8U232BM, widziany w systemie jako wirtualny COM), a resztą zajmie się mikrokontroler który np włączy/wyłączy urządzenia lub wyśle informację w jakim ono znajduje się stanie.

reichel napisał(a)
  1. Tak (np WinAMP): no to problem z glowy piszemy plugin (no raczej nie w ruby, ani php) i mozemy nim sterowac z ruby/php (oba pozwalaja wywolac api systemow).

Może coś więcej na ten temat ?? ;]

reichel napisał(a)

Wniosek:
Kupa roboty, ktora moze sie do niczego nie przydac.

Może się przydać ;] załóżmy że mamy postawiony serwer WWW z możliwością kontrolowania urządzeń w domu, wystarczy połączyć się z serwerem (np przez LAN, wifi. Bluetooth, internet) i bez instalowania dodatkowych aplikacji można np wyłączyć światło kuchni :d

reichel napisał(a)

Wlasciwie to takie VNC wiec moze od razu lapac pulpit i wysylac go do klienta ?

Na serwerze będzie zainstalowany linux bez trybu graficznego, w sumie najprościej byłoby łaczyć się z aplikacją przez telnet, ale to nie o to w tym projekcie chodzi :-)

0

W takim wypadku lepiej aplikacje napisac w rodzaju CGI, lub stworzyc biblioteke dolaczana do php.

0

Ja bym odrzucił php. Za dużo zabawy z zabezpieczaniem tego czegoś. Ładniejszym rozwiązaniem jest napisanie całości w Javie :) Jako serwera można użyć Tomcata. Następnie wykorzystując któryś z frameworków piszemy interfejs użytkownika w oparciu o web MVC. Wybrał bym springa ponieważ posiada zintegrowany system zabezpieczeń (Acegi). Urządzenia uruchamiał bym w oparciu o kilka prostych interfejsów z poziomu kontrolerów webowych. Za serwerem dostępowym (oj pachnie mi tu proxy) był by serwer działający w oparciu o rmi dla poszczególnych urządzeń.

Rozwiązanie o tyle ładne, że JVM może być uruchomiony nawet na tosterze. W końcu po to został wymyślony :)

//oftop: phpowcy mnie zabiją za ten post

0

Nie zabiją Cię, ale pytanie jest, na ile taki nakład pracy jest w ogóle potrzebny. Z zabezpieczeniem PHP nie ma żadnych problemów, a kod całości skryptu mieściłby się w kilkunastu liniach (nie licząc samego programu do komunikacji).

0

Do php nie mam zaufania. Wszystkie duże ataki ostatnimi czasy były przeprowadzone na aplikacje phpowe lub .netowe. Generalnie zabezpieczenie aplikacji ma tu kluczowe znaczenie. Nie fajnie by było jak by jakiś debil zaczął bawić sie naszym domem.
Nakład pracy związany z wdrożeniem acegi jest praktycznie zerowy. Ogranicza się do wpisania jednego java beana do xmla. Raptem 10 linik kodu + klasyczna klasa do logowania. Resztę załatwia za nas biblioteka.
Można spróbować zabezpieczenia przez hardwarowy klucz na usb. Działa to tak ze na pendrivie mamy zainstalowany program pozwalający na logowanie do systemu. Jednak wtedy traci sens pomysł z zarządzaniem przez www.

0

Ataki na PHP i .NET są powszechne, bo te technologie są powszechne. Co wcale nie czyni ich mniej bezpiecznymi - wszystko zależy od administratora i programisty - jak z resztą w każdym przypadku.

0

a mi wciskanie Javy wszedzie i postrzeganie jej jako lekarstwa na wszystko traci juz z lekka przesada, niedlugo zegarki nareczne beda mialy mikroJVM.. zgadzam sie z tym co pisze szczawik. jesli aplikacja bedzie dobrze napisana - to nie wazne w czym. rownie dobrze mozna to napisac w C++ pod CGI albo Lisp, no, byle nie prolog, bo on to chyba troche powolny, ale moze sie myle. Co da uzycie jakiegos pakietu Javy czego nie moga Ci dac inne mechanizmy? chyba tylko kolejny nazwe kodowa zeby pokazac jaka to nasza aplikacja jest hiperzaawansowana technologicznie oraz gratisowy hit po performace. a pod skora tak na prawde znowu beda banaly na parenascie/paredziesiat linii, oparte na logowaniu sie, sesji, cookiesach, itede. no dobra.. bedziesz mial gratis obsluge ldap'a czy x509, ale przeciez tutaj znowu nic nowego, kolo odkryli, w .php dawno to juz jest. a co sie nauzerasz w opisywaniu aplikacji XML'em to moze po skonczonej pracy psychiatra zarobi..

0

@quetzalcoatl java została pomyślana właśnie do tego typu aplikacji. "Napisz raz uruchom wszędzie". Z innymi technologiami, w szczególności z C/C++ jest problem związany z kompilacją. Wystarczy popatrzyć na zwykłe gry komputerowe. Jakieś 90% rynku gier na komputery to gry na PC+Windows. Głupie przeniesienie pomiędzy systemami operacyjnymi stwarza dużo problemów. Co dopiero z przeniesieniem pomiędzy różnego typu infrastrukturą? To co postawisz jako proxy do zarządzania to nie jest główny problem.
Celem takiego systemu jest zapewnieni spójnej konstrukcji. Java to zapewnia, bo taka jej natura.

0

A ile znasz super wypasionych gier 3D napisanych w Javie? Bo jaj jakoś nie kojarzę...Kojarze za to, ze nawet maniacy Javy z tego forum przyznawali, że Java do tego nie bardzo się nadaje...

0

che che WOJNA :) a jak Szczawik napisał "wszystko zależy od administratora i programisty" i tego bym sie trzymal.

no jescze mozna sprawdzic co pisza w licencjach np w delphi:

13.2 Hazardous Uses.  The Product is not intended for
   use, and you may not use or allow others to use the
   Product, in connection with any application
   requiring fail-safe performance such as the
   operation of nuclear power facilities, air traffic
   control or navigation systems, weapons control
   systems, life support systems, or any other system
   whose failure could lead to injury, death,
   environmental damage or mass destruction.  You agree
   that Borland will have no liability of any nature,
   and you are solely responsible, for any expense,
   loss, injury or damage incurred as a result of such
   use of the Product.
0

Ciagnac maly off-topic: ktoras licencji javy pozwalala na darmowe wykorzystanie z wyjatkiem oprogramowania dla elektrowni atomowych i kontroli lotu, o ile pamietam.

A jesli chodzi o temat, to IMO php + aplikacja na kompie obslugujacym USB wystarczy, jesli to tylko do cwiczen. Jak trzeba bedzie zmienic to wystarczy podmienic interfejs, bo aplikacja rezydentna i tak przeciez np. autoryzacji sprawdzac nie bedzie.

0

@Qyon, gry podałem jako przykład trudnej migracji kodu z jednego systemu na inny.
Sun jakoś olał tą część API która służy do obsługi multimediów dlatego java jest dość toporna w tym temacie. Jednak jeszcze nikt ie próbował na poważnie napisać dobry silnik graficzny w Javie. Nie wiem czemu...

@reichel w starej licencji Javy też był taki zapis. Chyba wszystkie języki mają podobne obostrzenia. Jednak dużo zależy też od systemu operacyjnego na jakim to uruchamiasz.
Java ma dość wredny automatyczny mechanizm Garbage Collectora co powoduje że ciężko pisa coś dla systemów czasu rzeczywistego.

// i gier ! -Q, dosc OT

0

Ja, gdybym mial odpowiednia wiedze z zakresu elektroniki zrobilbym to tak:

  1. Prosty program z serwerem WWW (proste menu, kilka przyciskow na stronie)
  2. User wciska przycisk, serwer przechwytuje adres i robi odpowiednia czynnosc np. (127.0.0.1/swiatlo/wlacz)
  3. Program parsuje adres, wykonuje stosowne czynnosci np. wysylanie danych przez port, lub wlaczania/wylaczania sprzetu pod USB (jezeli uzadzenia sa do niego podlaczone)

Co do inteligentnego domu, rozwiazal bym to inaczej. Owszem, bez interfejsu na WWW i specjalnego serwera http sie nie obejdzie. Zeby moc dostep do wszystkiego w domu zaopatrzyl bym sie w prosty palmtop z odbiornikiem WiFi. Jezeli ktos ma duzy dom - zainwestowac w ekran dotykowy i postawic gdzies w przedpokoju :)

0
Szczawik napisał(a)
mgr.Dobrowolski napisał(a)
Szczawik napisał(a)

Obsługa USB to jedno, a komunikacja z przeglądarką to coś innego....
A "inteligentny dom" to jeszcze coś zupełnie innego. USB jest fajne ale na biurku.

A to rzeczywiście jest inna sprawa. Inteligentny dom wymaga urządzeń komunikacyjnych na większą odległość. Można wykorzystać WiFi, Ethernet itp. USB średnio się do tego nadaje.

USB można by wykorzystać jedynie jako drogę "wyjście" z obudowy komputera. Zaraz obok powinien być mikrokontroler, który dane z USB będzie odbierał, i kierował rozkazy tam, gdzie trzeba, na przykład po magistrali I2C.

0

Kiedyś zrobiłem sobie sterowanie kompem przy użyciu telefonu ;P...
Wyglądało to tak że napisałem małą stronę w WML, którą otwierałem w komórce i po wybraniu tam odpowiedniej podstrony uruchamiał się kod php zapisujący odpowiednie słowo - polecenie w zwykłym pliku txt na serwerze np. "cd-open"
Programuje w Delphi... mój program do obsługi tego wyglądał równie banalnie .. po prostu sprawdzał zawartość tego pliku tekstowego co parę sekund, i jeżeli plik ten nie był pusty to wykonywał to polecenie i czyścił plik (a w zasadzie otwierał inną stronę napisaną w php która to robiła za program ;p ).
Ponieważ to było również tylko dla zabawy.. nie miałem kompletnie żadnych zabezpieczeń a strona znajdowała się na yoyo.pl ;P
W każdym razie komunikacja www-aplikacja była prosta i bezproblemowa ;)

ps. komunikacja telefon-www też bezproblemowa ale niestety trochę droga :/

0
Arthan napisał(a)

Wyglądało to tak że napisałem małą stronę w WML, którą otwierałem w komórce i po wybraniu tam odpowiedniej podstrony uruchamiał się kod php zapisujący odpowiednie słowo - polecenie w zwykłym pliku txt na serwerze np. "cd-open"
Programuje w Delphi... mój program do obsługi tego wyglądał równie banalnie .. po prostu sprawdzał zawartość tego pliku tekstowego co parę sekund, i jeżeli plik ten nie był pusty to wykonywał to polecenie i czyścił plik

Właśnie chodzi mi o ta komunikację pomiędzy stronką WWW a aplikacją i na odwrót , jak można takie coś zrealizować ?? ponieważ dane o stanie urządzenia znajdowałby by się nie w pamięci komputera tylko w pamięci zew podłączonej do mikrokontrolera a do komputera przekazywane by były tylko gdy była by taka potrzeba (np przy odświeżaniu strony). Komputer chciałbym wykorzystać tylko jako jedna z metod sterowania, tak aby urządzeniami można było sterować również gdy jest on wyłączony, np za pomocą pilota :-)

0

Mogę Ci dać kod programu i tej strony www jak chcesz ?

0

Ciekawy temat. Myślę, że problem wymaga doprecyzowania. Jako przykład proponuję coś co może się przydać każdemu: sterowanie za pomocą przeglądarki internetowej obrotnicą kamerki internetowej. Kontakt z obrotnicą drogą radiową. Dzięki temu możemy ustawić kamerkę internetową w dowolnym miejscu domu i pod naszą nieobecność obserwować co się dzieje w domu.

0

@Petroil, zaproponowane przez Ciebie rozwiązanie nie jest nowe. W USA wiele zamożniejszych rodzin montuje takich szpiegów w sypialniach małych dzieci. Jest to całkiem ładny kawałek rynku bezpieczeństwa.
W googlu wystarczy poszukać pod hasłami Nanny Camera i Home Video Security. Będzie trochę firm które w ofercie mają takie rozwiązania.

0

Co do kamer sterowanych przez www: wystarczy zerknac na haslo 'kamery ip'
Podpinamy im zasilanie, ew. kabel sieciowy jesli nie maja wbudowanego wifi i WSZYSTKO.
Kamerki maja wbudowane serwery ftp, www, mozna je obracac, zoomowac, kamerka moze wyslac maila
jesli wykryje ruch. Wszystko w jednym urzadzeniu... jak zwykle mialem pomysl na biznes, ale okazalo sie, ze rynek juz ma to co ja mu moglem dac :P

0
Arthan napisał(a)

Mogę Ci dać kod programu i tej strony www jak chcesz ?

Pewnie że chce :) wyślij na mój @ , chętnie sie z tym zapoznam :)

Koziołek napisał(a)

@Petroil, zaproponowane przez Ciebie rozwiązanie nie jest nowe. W USA wiele zamożniejszych rodzin montuje takich szpiegów w sypialniach małych dzieci. Jest to całkiem ładny kawałek rynku bezpieczeństwa.
W googlu wystarczy poszukać pod hasłami Nanny Camera i Home Video Security. Będzie trochę firm które w ofercie mają takie rozwiązania.

Co do tych kamer to mają serwer www napisany specjalnie do sterowania tym urządzeniem, a mi zależy aby wykorzystać do tego starego poczciwego apache :) ponieważ poza stroną za pomocą której będzie można sterować urządzeniami chce aby komputer pełnił również inne funkcję skoro ma być włączony 24h to niech na darmo prądu nie marnuje :-)

0

Na Formie jest Timer (ja ustawiłem Interval := 5000) i IDHTTP (z pakietu INDY)

kod Timera wygląda tak:

procedure TForm1.Timer1Timer(Sender: TObject);
var
  Polecenie: String;
begin
  // ściąga plik z poleceniem
  Try Polecenie := idHTTP1.Get('http://www.twojastrona/polecenie.txt');
    // jeżeli jest tam polecenie to je usuwa
    if Polecenie <> '' then idHTTP1.Get('http://www.twojastrona/czysc.php');
    //jakieś tam procedurki wywoływane na odpowiednie polecenie
    if Polecenie = 'ScreenSaver' then ScreenSaver;
    if Polecenie = 'DisableMouse' then DisableMouse;
    if Polecenie = 'DisableKeyboard' then DisableKeyboard;
  except end;
end;

kod strony zapisującej do pliku txt wygląda np. tak:

<?php
  $fp = fopen("polecenie.txt", "w");
    fputs($fp, "ScreenSaver");
  fclose($fp);
?>

Otwierasz stronę i się zapisuje.. proste jak drut :D

Możnaby to dać w jednym pliku php, że polecenie jest przyjmowane jako parametr
stronę by się wtedy otwierało np. tak:

http://ww.twojastrona/zapisz.php?N=ScreenSaver

a kod strony wtedy by wyglądał następująco:

<?php
  $fp = fopen("polecenie.txt", "w");
    fputs($fp, $_GET['N']);
  fclose($fp);
?>

U mnie tak nie działało ze względu na badziewny telefon :P (albo coś robiłem nie tak ;P)

i jeszcze stronka czyszcząca pliczek:

<?
$fp = fopen("polecenie.txt", "w");
fputs($fp, "");
fclose($fp);
?>

i to wszystko :)
Jeśli ktoś miałby pomysły jak to usprawnić to piszcie ;)

0

@Arthan - dzięki wielkie :)

na razie pokombinuje z funkcją shell_exec();
jutro zmajstruje analizator portu LPT(bo na razie na tym porcie będe sprawdzał) i zobaczymy co z tego będzie.

1 użytkowników online, w tym zalogowanych: 0, gości: 1