Archive for Februari 2016
Websocket: A Simple Example For IOT Project
By : M yunus
Websocket is bi-directional
communication protocol which emerged recently, with the introduction of
HTML5. It enables full-duplex message based communication between client
and server. After connection is established, messages can be
transmitted, either client or server initiated. This means that you can
make a dynamic web page where changes occur in real time. In that way
Websockest communication presents a suitable protocol for IoT world
where changes are usually asynchronously occuring and number of clients
can be very large. Ok, sounds cool but what do I need to develop such
web pages? To implement Websocket communication in your app there are
some prerequisites on your server that has to be done. Apart from that,
clients have to run browsers that support Webosckets. In this article, a
simple example which includes Websocket is presented. The example is
tested on Raspbian (kernel ver. 3.12.21) and Debian (kernel ver.
2.6.39). In both cases Apache web server was used to deliver html pages
to the clients.
Server side
First thing to do is to choose webserver
implementation with Websocket protocol support. Among different
solutions such as Node.js (Socket.IO, WebSocket-Node, ws), Java (Jetty),
Ruby (EventMachine), Python (pywebsocket, Tornado), C++
(libwebsockets), .NET (SuperWebSocket) we have decided to pick Tornado,
an asynchronous webserver for python which is capable to simultaneously
handle more than 10k connections. To install Tornado we recommend to
use some package manager like pip or EasyInstall. We used pip, so get
it:
sudo apt-get install pip
After successful installation of pip package manager you can execute the following command to install Tornado:
pip install tornado
Alternatively, you can install Tornado manually (see here). Now your system is ready to use Websocketprotocol.
The next step is to write a simple Tornado web server app. Run your favorite text editor (we like nano):
sudo nano ws.py
and write some code:
import tornado.httpserver import tornado.websocket import tornado.ioloop import tornado.web class WSHandler(tornado.websocket.WebSocketHandler): def open(self): print 'user is connected.\n' def on_message(self, message): print 'received message: %s\n' %message self.write_message(message + ' OK') def on_close(self): print 'connection closed\n' application = tornado.web.Application([(r'/ws', WSHandler),]) if __name__ == "__main__": http_server = tornado.httpserver.HTTPServer(application) http_server.listen(8888) tornado.ioloop.IOLoop.instance().start()
As you can see, code consists of four parts:
- import of necessary modules,
- Websocket handler class,
- Initialization of Tornado app – web app configuration (websocket request handler) and
- Main program – setting up Tornado server, port definition and service start.
In WSHandler class we have defined three event handlers for basic communication:
- open – occurs when the connection is established,
- on_message – executed on every incomming message and
- on_close – handler triggered on the connection close event.
Here we are connecting appropriate event handler (WSHandler) with the URI to listen to (/ws’):
application = tornado.web.Application([(r'/ws', WSHandler),])
In the main, after defining the port number, we will call the start method of the Tornado server:
if __name__ == "__main__": http_server = tornado.httpserver.HTTPServer(application) http_server.listen(8888) tornado.ioloop.IOLoop.instance().start()
You can finally start the server in the background:
python ws.py &
Now, your server is up and running, or
more precisely waiting for websocket connection. If you are connecting
over SSH, the server will be killed once you exit the session. To avoid
that, use
nohup
command to ignore hang up signal at the end of SSH connection:nohup python ws.py &
(Note: Make sure that port 8888 is
opened on your machine. Additionally, if you are running Tornado on a
machine in your local network which is behind the router, you have to
make port forwarding for websockets (port 8888). Otherwise this example
won't work for clients that connect from outside).
Client app
To implement websocket protocol all you
need is s a simple HTML web page with some JavaScript code. Well, we
used JQuery to enable websockets on the client side. Body of HTML
document has
<label>
element for connection status text, <textbox>
to input text and <button>
for sending messages:<!doctype html> <html> <head> <title>Websockets</title> <script src="http://code.jquery.com/jquery-2.0.0.js"></script> </head> <body> <h1>Websockets</h1> <label id="conn_text"></label><br /> <input type="text" id="input_text"/> <input type="submit" id="button" value="Send" /> <div id="messages_txt" />
Javascript code should be executed after
the page loads, i.e. after loading of JQuery script so it will be
placed inside anonymous function which is called when document.ready
event occurs:
<script> $(document).ready(function () { //script goes here }); </script> </body> </html>
We will create an instance of WebSocket class to handle all requests for our app:
var ws = new WebSocket("ws://example.com:8888/ws"); //change example.com with your host
We will define three event handlers:
onopen
, onmessage
and onclose
and they are invoked respectively: when connection is opened, when new
message arrives from server and when the websocket connection is closed.
onopen
notifies and onclose
alerts client about the connection status while onmessage
writes message from the server to the client’s web page:ws.onopen = function(evt) { var conn_status = document.getElementById('conn_text'); conn_status.innerHTML = "Connection status: Connected!" }; ws.onmessage = function(evt) { var newMessage = document.createElement('p'); newMessage.textContent = "Server: " + evt.data; document.getElementById('messages_txt').appendChild(newMessage); }; ws.onclose = function(evt) { alert ("Connection closed"); };
and message sending is performed when user clicks the button:
$("#button").click(function(evt) { evt.preventDefault(); var message = $("#input_text").val(); ws.send(message); var newMessage = document.createElement('p'); newMessage.textContent = "Client: " + message; document.getElementById('messages_txt').appendChild(newMessage); });
If you save the whole document on your
server you are ready to test websockets. Write address of your webpage
into the web browser’s address bar and you will be informed if
connecting to server was successful with the message inside the web
page: “Connection status: Connected!". Similar information, ”Connection
closed”, is alerted after closing the connection (for example if you
kill ws.py). On every message sent to the server, the server echoes back
that message but with “OK” in the end. You can see every message sent
from client or server in your web page:
The whole code of the web page should look like this:
<!doctype html> <html> <head> <title>Websocket</title> <script src="http://code.jquery.com/jquery-2.0.0.js"></script> </head> <body> <h1>Websocket</h1> <label id="conn_text"></label><br /> <input type="text" id="input_text"/> <input type="submit" id="button" value="Send" /><br /> <div id="messages_txt" /> <script> $(document).ready(function () { //change example.com with your IP or your host var ws = new WebSocket("ws://example.com:8888/ws"); ws.onopen = function(evt) { var conn_status = document.getElementById('conn_text'); conn_status.innerHTML = "Connection status: Connected!" }; ws.onmessage = function(evt) { var newMessage = document.createElement('p'); newMessage.textContent = "Server: " + evt.data; document.getElementById('messages_txt').appendChild(newMessage); }; ws.onclose = function(evt) { alert ("Connection closed"); }; $("#button").click(function(evt) { evt.preventDefault(); var message = $("#input_text").val(); ws.send(message); var newMessage = document.createElement('p'); newMessage.textContent = "Client: " + message; document.getElementById('messages_txt').appendChild(newMessage); }); }); </script> </body></html>
source: http://iot-projects.com/index.php?id=websocket-a-simple-example
PHYSICS FOREVER
By : M yunusKenalin, gua Yunus. Mahasiswa jurusan Fisika murni di IPB (Institut Pertanian Bogor). Gua sekarang semester 8 dan dihadapkan banyak persoalan "rumit" haha...., ya setidaknya lumayan mendramatisir.
Sepanjang gua kuliah jurusan Fisika murni pada banyak yang nanya, "nanti emang kerja dimana?", "di IPB ada jurusan Fisika?", "kalo Fisika kenapa gak ngambil Fisika di UPI aja?", "Nggk takut nganggur lu entar kalo ngandelin dari lulus Fisika doank?"............... Super dahhh tu orang-orang udah kaya dukun aja pake nebak-nebak takdir orang -__- (emoticon BT).
Asli,, gua kesel banget kalo denger pertanyaan jenis, rupa, wujud, onggokan macem itu.... bodo amat dah sama yang nanya.. rasanya mau nyelupin tuh orang ke aspal panas sambil gua kecapin terus kasih bumbu masako biar brasa idup lo :v (emoticon Evil)...... Astagfirullah :( maapin ya esmosi...
Di tahun-tahun sebelumnya kalo ada yang nanya kayak gitu gua selalu bilang (walaupun gua sendiri jujur kurang yakin) kalo jurusan fisika murni itu dapat kerja dimanapun, di industri, di bidang riset, bisnis, perbangkan, pemerintahan, dan banyak lagi. Woooowww..... dan gua yakin orang yang denger itu pasti gak percaya meskipun gua tereak - tereak pake speker mesjid sekalipun. iyalahh gua sendiri aja kagak percaya (untuk saat itu vrohh.... :v)........... yahh lumayan buat nenangin hati sendiri..... walaupun gak dipungkiri saat semester demi semester bertambah gua makin gusar ...... mau jadi apa setelah gua lulus dari jurusan yang supppppppppeeeeeeerrrrrrrrr bikin rantai karbon tiap kali nilai ujian keluar.. (-C-C-C-C-C-C-C-C-C......)???????
Setelah itu gua rajin nyari cerita-cerita sukses dari orang yang dulunya punya latar belakang fisika murni.... yang kerja di prusahaan apalah, peneliti dimanalah, punya bisnis apalah, jadi mentri lah, dan lah lah lah lah yang lainya.... sejak saat itu pola pikir gua jadi laen dari biasanya... selalu saja berfikir ............ " Gua harus lulus cepet, IPK gua gede kalo bisa cumlaude, Kerja diperusahaan ternama, Minimal BUMN, Gaji Minimal 10 juta, belum termasuk tunjangan, dapet bonus 2 kali lipat total gaji satu tahun dan di bayar saat menjelang idulfitri" ............. gua gak ngerti entah dorongan apa sampe punya pandangan macem gitu.......
Jujur waktu itu di tingkat 2 gua pengen kerja sebagai Engginer Nuklir. kenapa nuklir?? karena dari namanya aja udah bombastis.... dan itu pasti menyedot perhatian,,, kenapa Engginer?? karena waktu itu gua pikir lebih keren jadi Engginer dari pada Saintis. Superrrrrr dah..... Pea :v
Tapi vrohhhh, lu harus tau,...........
IPK Just Number, Cumlaude Just Name, But Skill Prove Everything.....
Semenjak gua masuk semster 6 gua sadar...... buat semua ambisi, mimpi ngawang-ngawang, nganyal kaga ada duanya, dan harap-harap gak jelas...... gua harus tinggalin...... lo harus mulai realistis dan belajar dengan baik...
Gua sadar, udah melewatkan begitu banyak harta karun......
Mekanika, Fisika Matematik, Elektronika, Termodinamika, Kuantum (terimakasih om schrodinger buat persamaanya) , Listrik Magnet yang supeeeerr mengerikan (terimakasih om Maxwell buat 4 persamaannya), fisika zat padat, sensor dan transduser, fisika komputasi, ekperimen fisika, instrumentasi fisika, biofisika dannn semuanyaaa.... semua ilmu yang udah gua dapet di departemen yg selama hampir 4 tahun membawa gua ke dunia yang luar biasa..... gua dapet banyak hal selama hampir 4 tahun ini.... semua ilmu diatas yang semula gua kira "yahhh sama aja kayak di SMA".... kaga vrohh.... ini jurusan yang menurut gua (dan bodo amat sama semua orang yang kaga ngerti fisika) bisa membawa gua memahami apapun diluar sains fisika.... dengan sangat mudah,,,,,,,, Gua gak pake tanda petik di kata mudah , karena memang semuanya akan terlihat mudah, ini berlaku buat apapun.....
mahasiswa fisika di desain untuk "Learn How To Think"
Dan satu lagi yang paling berkesannn buat gua.. terutama 1 tahun kebelakang... saat gua belajar betapa tajamnya fisika, yup.... di PRC (Physics Research Club). Waktu yang sangat berharga... lo di beri kesempatan dan fasilitas buat belajar apapun yang lo mau.... dan di saat itulah gua, dengan matakepala gua sendiri, tanpa ngibul, tanpa pemanis... gua bilang........... " Gua bersyukur kuliah S1 jurusan Fisika".......
Gua bangga, nunjukin ke siapapun kalo gua kuliah jurusan fisika murni, di Departemen Fisika, Fakultas Matematika dan Ilmu Pengetahuan Alam, Institut Pertanian Bogor.
Mengerjakan proyek Embeded System, mengunakan puluhan sensor untuk banyak keperluan, Membuat Robot beroda, Robot Berkaki, Robot Lengan, memprogram Chip, Merancang Instrumen, belajar sistem kontrol, Belajar Internet Of Things, mengembangkan Smart City, membuat rancangan Wireless Sensor Network, Membuat Buku tutorial Robotik sendiri, turun ke sekolah-sekolah untuk share tentang dunia robotika dan memprogram robot linefollower, sharing dan diskusi perkembangan sains dan teknologi di grup PRC, dan banyak hal luar bisa lainya.........
Terimakasih buat siapapun yang sudah sampai detik ini memberikan banyak inspirasi yang tak bisa diukur dengan uang.
Jangan pernah berhenti belajar, jangan pernah lelah untuk terus membuka buku dan bereksperimen.... sekarang bukan waktu yang tepat untuk menghawatirkan "berapa gaji yang saya akan terima jika saya bekerja????" ..... Kita harus mulai khawatir "berapa banyak waktu kita di sisa umur yang ada untuk dapat belajar.............??"
Mahasiswa fisika tidak lahir untuk hari ini dan memikirkan perutnya sendiri, Mahasiwa Fisika lahir untuk menciptakan masa depan bukan hanya untuk hadir di masa depan.
tak ada satu cintapun tanpa landasan keyakinan..... cinta terhadap fisika timbul karena keyakinan yang kuat bahwa fisika selalu untuk semua....
Alam semesta bisa dan akan sangat mampu berdiri tegap tanpa ilmu sastra, ilmu sejarah, ilmu ekonomi, ilmu farmasi, ilmu kedokteran, ilmu keteknikan, ilmu biologi, ilmu matematika sekalipun..... tapi tak akan mampu berdiri tegap walau hanya 1 detikpun tanpa hukum fisika.
Salam jabat erat tangan sahabat fisika.
Bogor, 10 Februari 2016
Muhammad Yunus
- CEO Legendre -
#Legendre_Electronic_Instrumentation