Thứ Sáu, 21 tháng 7, 2017

IOT qua Messenger phần 2: Xây dựng server

Xin chào các bạn, hôm nay chúng ta sẽ bắt tay vào làm hệ thống điều khiển thiết bị điện bằng Messenger. Phần này mình sẽ hướng dẫn các bạn tạo một Fanpage, một NodeJS server, và kết nối chúng lại với nhau. Bắt đầu thôi nào!
Hướng dẫn xây dựng server.


Tạo một Fanpage và Facebook App

Việc tạo fanpage đã có rất nhiều hướng dẫn rồi nên mình không làm dài dòng nữa. Hãy vào trang này và tạo một Fanpage theo nhu cầu của bạn: https://www.facebook.com/pages/create/
Sau đây là các bước tạo một Facebook App liên kết với Fanpage của bạn:
  1. Vào trang Facebook for Developers.
  2. Đăng nhập vào bằng tài khoản Facebook của bạn.
  3. Nhấn nút Tạo ứng dụng.
  4. Nhập vào Tên hiển thịEmail liên hệ. Ấn nút Tạo ID ứng dụng và nhập captcha.
  5. Trong trang Thêm sản phẩm, bạn hãy chọn Messenger và nhất Set up.
Các bạn có thể làm theo video hướng dẫn của anh Hoàng code dạo dưới đây:



Tạo một NodeJS server

Đăng ký tài khoản Codeanywhere:

Giới thiệu một chút về CodeAnyWhere nhé, đây là một trình Cloud IDE dành cho các lập trình viên. Với một tài khoản miễn phí bạn có thể tạo một Container (server) miễn phí, tuy nhiên server này không chạy suốt, mà chỉ chạy khi bạn đăng nhập vào mà thôi. Như vậy là đã đủ cho các bạn thử nghiệm hệ thống. Ngoài ra thì còn một dịch vụ Cloud IDE khác là Cloud9 mà mình đang sử dụng để học các ngôn ngữ lập trình. 
Việc đăng ký rất đơn giản, chỉ việc điền vào email, password và vào mail xác nhận.

Tạo một Server và cho chạy thử:

Ấn vào nút Editor để vào trang quản lý, hoặc vào bằng link này.
Trong bảng Connection Wizard hãy chọn tab Container hãy điền vào tên tùy thích, ở phần server hãy chọn Node.js - Ubuntu 14.04.
Tạo server.
Ấn Create để bắt đầu quá trình tự thiết lập server, sau khi xong ta có một giao diện điều khiển như sau:
IDE.
Các bạn hãy chú ý cái tên miền của server, lúc sau ta sẽ cần nó để thiết lập ở App và ESP8266.
Ví dụ của mình: https://server-controller-nhokcodon0406661283.codeanyapp.com (nhớ là phải có https)
Bây giờ hãy tắt tab này đi, chuyển sang tab SSH Console ở IDE (số 2 trên ảnh). Lần lệnh nhập các lệnh sau:
[[mcode]]$ git clone https://github.com/bongma007/controller-via-messenger.git[[ecode]]
Lệnh này sẽ tải một bản sao (clone) các file trên repository về và đặt trong một thư mục có tên là tên của repository.
[[mcode]]$ mv controller-via-messenger/* ~/workspace[[ecode]]
[[mcode]]$ rmdir controller-via-messenger[[ecode]]
Di chuyển các file ra thư mục [[scode]]workspace[[escode]] để làm việc cho dễ.
Bạn hãy mở file [[scode]]server.js[[escode]] ra để chỉnh sửa cấu hình một số thứ nhé. Mở từ thanh quản lý bên trái (số 3 trên ảnh).
[[lcode]]var senderId = '000000000000'; //ID Facebook mặc đinh nhận tin nhắn[[ecode]]
Bạn hãy thay dãy số 0 thành ID Facebook của bạn để giới hạn server chỉ phản hồi về một người dùng nhất định. Còn nếu không cần giới hạn có thể bỏ dòng này, server sẽ tự động phản hồi về người dùng ra lệnh.
[[lcode]]if (req.query['hub.verify_token'] === '0inter3home6net9')[[ecode]]
Bạn hãy thay [[scode]]0inter3home6net9[[escode]] thành một chuỗi ký tự tùy ý bạn, đây là chuỗi ký tự mà ta sẽ cung cấp cho facebook để gửi dữ liệu vào webhook của ta.
[[lcode]]...
socket.on("*", function(packet) {
console.log('Nhận dữ liệu từ ESP: ', packet.data)
var eventName = packet.data[0]
var eventJson = packet.data[1] || {}
// code xử lý ở đây
})
...[[ecode]]
Trong đây bạn sẽ viết code để xử lý xự kiện được ESP8266 gửi lên. Và bạn có thể dùng phương thức emit() để gửi lại, ví dụ:
[[lcode]]esp8266_nsp.emit(name, json)[[ecode]]
[[scode]]name[[escode]] là một chuỗi chứa tên, đặt không quá 10 ký tự, đưa về Arduino còn xử lý.
[[scode]]json[[escode]] là một chuỗi json chứa các tham số, để đưa về Arduinio xử lý.
[[lcode]]...
app.post('/webhook', function(req, res) {
  var entries = req.body.entry;
  for (var entry of entries) {
    var messaging = entry.messaging;
    for (var message of messaging) {
      var senderId = message.sender.id
      if (message.message) {
        if (message.message.text) {
          var text = message.message.text
          var cmder = text.toLowerCase()
          console.log(cmder);
          var eventName
          var eventJson
          var msgGuidi
          // code xử lý ở đây
        }
      }
    }
  }
  res.status(200).send('OK');
});
...[[ecode]]
Đoạn này sẽ nhận tin nhận nội dung tin nhắn vào biến [[scode]]text[[escode]], bạn hãy viết code xử lý ở trong này. Trong code của mình thì mình dùng [[scode]]switch(){}[[escode]] để xử lý.
Trong đây, nếu bạn muốn gửi lại một tin nhắn thì dùng hàm
[[lcode]]sendMessage(senderId, message)[[ecode]]
với tham số [[scode]]senderId[[escode]] là số ID Facebook của người nhận, tham số [[scode]]message[[escode]] là nội dung tin nhắn.

Bây giờ cho chạy thử server xem nào, mở lại SSH Console lên:
[[mcode]]$ npm install[[ecode]]
Lệnh này sẽ cài đặt các module cần thiết để chạy server, sau đó cho chạy server:
[[mcode]]$ node server.js[[ecode]]
Rồi bạn hãy vào https://app-user.codeanyapp.com (tên miền của bạn) xem web có hoạt động không? Nếu thấy câu "Home page. Server running okay." thì chúc mừng!

Kết nối Server và App:

Quay lại trang quản lý App của bạn lúc nãy, chọn Messenger > Cài đặt

Tạo mã token:

Để server có quyền gửi tin nhắn thì FB sẽ cấp cho ta một mã xác thực để server xác minh, gọi là token. Để lấy được token, ở phần Lấy mã bạn hãy chọn fanpage của bạn tạo lúc nãy và lấy mã token hiện ra:
Tạo mã token.
Sau đó quay lại [[scode]]server.js[[escode]] tìm dòng:
[[lcode]]access_token: "dien_token_vao_day",[[ecode]]
thay [[scode]]dien_token_vao_day[[escode]] thành mã token của bạn, ví dụ:
[[lcode]]access_token: "EAAUT0IGCQ7cBAPNHMHeCiVW4paERMzVVtXN71FNCr8R5q5ZBmlSVOXzcOUSUuXIdNtPwrsZBlp3eZAPVZA3NzcVa9QYrsyCmGU1U6EiQr6mluXelIlduHMs14g2rcVaX4Jf9ZBGTa4x0QOf7EZC7MUjnKJoBBE8nRtk2bh35GhuwZDZD",[[ecode]]

Thiết lâp webhooks:

Ở phần Webhook, các bạn ấn vào nút Thiết lập webhooks ở trên góc phải, và điền vào:
URL gọi lại: điền vào https://app-user.codeanyapp.com/webhook (nhớ thay lại nha, nói hoài :)))
Mã xác minh: điền vào cái chuỗi khóa ở trên do bạn đặt. Mặc định [[scode]]0inter3home6net9[[escode]]
Còn phần Trường gửi các bạn chọn messages, messaging_postbacks, messaging_optins, message_deliveries.
Sau khi đăng ký thành công webhook, bạn sẽ thấy một trường mới hiện ra:
Webhook.
Select a page to subscribe your webhook to the page events: ở đây bạn sẽ chọn cái Fanpage mà bạn muốn sử dụng. Ấn Đăng ký.

Như vậy là xong, hãy thử gửi tin nhắn cho Fanpage bằng chính tài khoản Facebook của bạn, nếu nhận được phản hồi, tức là bạn đã cấu hình thành công.
Tin nhắn với page.
Ở phía server.

Lời kết:

Ở phần sau chúng ta sẽ bắt đầu xây dựng và cấu hình ở cục bộ để kết nối được với server nhé.


Không có nhận xét nào:

Đăng nhận xét

Thông tin

Tự Học Linux là blog hướng dẫn người dùng sử dụng các hệ điều hành mã nguồn mở nhân Linux. Blog gồm các bài viết hướng dẫn sử dụng, thủ thuật cũng như sửa lỗi gặp phải trong quá trình sử dụng. Bài viết có thể được dịch hoặc tham khảo từ nhiều nguồn (xem cuối bài viết), vui lòng dẫn nguồn Tự Học Linux nếu bạn phát hành lại bài viết của Blog. Cảm ơn các bạn đọc đã ủng hộ!

Người đóng góp cho blog