Gìn giữ nguồn nước bằng ứng dụng Internet of Things, Phần 1 Xây dựng giải pháp giám sát Raspberry Pi trên IBM Bluemix bằng Bộ khởi động nền tảng IoT, Node-RED và Cloudant Bram Havers (http://www.ibm.com/ developerworks/community/profiles/html/ profileView.do?key=b275c5f8-4e62-4a4f-9ea9cd48466cc1bd&tabid=dwAboutMe) Kiến trúc sư phần mềm IBM 01 04 2015 Kai Robbin Weller (http://www.ibm.com/ developerworks/community/profiles/html/ profileView.do?key=14e86bb7-68b8-415c-8089b778152ff494&tabid=dwAboutMe) Chuyên gia CNTT IBM Robert-Jan Sips (http://www.ibm.com/ developerworks/community/profiles/html/ profileView.do?key=0ef775c1-8db8-496a-8679da06561c8bec&tabid=dwAboutMe) Lãnh đạo Center for Advanced Studies Research IBM Bill Hymas (http://www.ibm.com/developerworks/ community/profiles/html/profileView.do?key=d52ee7f1bd53-4141-949b-e8cc63eca07d&tabid=dwAboutMe) Chuyên gia IT, IBM IBM Hướng dẫn đầu tiên trong loạt hướng dẫn gồm ba phần này sẽ trình bày cách xây dựng một giải pháp giám sát cây trồng trong nhà với chi phí thấp dựa trên Raspberry Pi. Giải pháp này dùng © Copyright IBM Corporation 2015 Gìn giữ nguồn nước bằng ứng dụng Internet of Things, Phần 1 Nhẫn hiệu đăng ký Trang 1 của 13 developerWorks® ibm.com/developerWorks/vn/ IBM Bluemix để thu thập và hiển thị dữ liệu của cảm biến và đăng các cập nhật lên mạng xã hội của bạn. Dự án Poseidon là một sáng kiến tự nguyện, nhằm giảm việc sử dụng nước trên thế giới. Trước tiên, dự án phát triển tài liệu hướng dẫn việc giám sát lượng nước có trong đất của cây trồng trong nhà bằng một ứng dụng xem dữ liệu cảm biến từ cây trồng để biết được khi nào thì cần tưới nước cho cây. Mục tiêu là để xây dựng một cộng đồng hăng hái tập trung vào việc tìm ra các giải pháp làm giảm việc sử dụng nước bằng cách áp dụng các công nghệ như Internet of Things (IoT), điện toán đám mây, di động và phân tích. Trong loạt hướng dẫn gồm ba phần này, bạn sẽ xây dựng một giải pháp tưới cây có chi phí thấp và tìm cách để cùng nhau cải thiện nó. Giải pháp dựa trên Raspberry Pi và dùng IBM Bluemix để thu thập và hiển thị dữ liệu của cảm biến và đăng các cập nhật lên mạng xã hội của bạn. Bạn có thể xem thiết bị đang được sử dụng tại đây: Và đây là thông điệp mà giải pháp đã đăng lên Twitter: Kiến trúc của giải pháp có dạng như sau: Gìn giữ nguồn nước bằng ứng dụng Internet of Things, Phần 1 Trang 2 của 13 ibm.com/developerWorks/vn/ developerWorks® Hệ thống dùng: • Một Raspberry Pi có bo mạch mở rộng GrovePi, cảm biến nhiệt độ/khí áp và cảm biến độ ẩm của đất. • Một điểm trung gian dịch vụ đám mây IoT. Đây là dịch vụ miễn phí, có trên Internet, nhận dữ liệu cảm biến và tái phân phối dữ liệu đến tất cả các máy khách có đăng ký. Bạn sẽ dùng giao thức MQTT mở để thay đổi dữ liệu cảm biến. • IBM Bluemix làm nền tảng đám mây để chạy ứng dụng. Bạn sẽ dùng Bộ khởi động nền tảng Internet of Things để lưu và hiển thị dữ liệu cảm biến cho máy bàn và các thiết bị di động. Bộ khởi động IoT dùng các dịch vụ Bluemix sau đây: • Node.js: Nền tảng máy chủ để chạy các ứng dụng JavaScript. • Node-RED: Dịch vụ giúp bạn nối dây các nút theo chức năng hiển thị trong một trình duyệt. Bạn sẽ dùng Node-RED để nối dây dữ liệu cảm biến đến một cơ sở dữ liệu để lưu dữ liệu, và đến một nút tweet để gửi dữ liệu đến Twitter. • Cloudant: Một cơ sở dữ liệu đám mây NoSQL dựa theo CouchDB. • Các dịch vụ ngoài như Twitter để đăng các thông báo khi cây trồng của bạn cần nước. ĐỌC: Bắt đầu với Nền tảng Internet of Things ĐỌC: Tạo ứng dụng bằng bộ khởi động Internet of Things ĐỌC: Nền tảng Internet of Things của IBM Gìn giữ nguồn nước bằng ứng dụng Internet of Things, Phần 1 Trang 3 của 13 developerWorks® ibm.com/developerWorks/vn/ “ Bộ khởi động nền tảng Internet of Things của IBM cung cấp thời gian chạy Node.js, ứng dụng Node-RED và tạo ra một thực thể cơ sở dữ liệu Cloudant NoSQL. ” Bạn cần có gì để xây dựng giải pháp • Một tài khoản Bluemix và một tài khoản Dịch vụ DevOps, cả hai đều được liên kết với ID IBM của bạn. (Bạn sẽ dùng tài khoản Dịch vụ DevOps trong Phần 2 và 3.) • Quen thuộc với các hệ điều hành Linux và Python, nhưng không bắt buộc. Phần cứng yêu cầu Bạn có thể đặt mua Raspberry Pi, bo mạch mở rộng GrovePi và các cảm biến từ Seeed Studio hoặc Dexter Industries. Tổng chi phí các bộ phận phần cứng yêu cầu này là khoảng 100USD. • Raspberry Pi Model B (SKU: 800025001). (Model B+ đã được phát hành sau đó và có thể cũng phù hợp.) • Bo mạch mở rộng GrovePi cho Raspberry Pi (SKU: 830004001) • Grove - Máy đo khí áp (Độ chính xác cao) (bao gồm đo nhiệt độ) (SKU: 811027001) • Grove - Cảm biến độ ẩm (SKU: SEN92355P) • 2 cáp đa năng 4 chân có khóa của Grove (SKU ACC90453O) • Thẻ SD 4GB Phần cứng tùy chọn • • • • Bộ cấp nguồn Raspberry Pi (hoặc bộ cấp nguồn USB mini khác) Cáp HDMI để kết nối Pi với tivi hoặc màn hình của bạn Cáp mạng ethernet USB dùng cho chuột và bàn phím để cấu hình (một lần) cho Pi của bạn Chạy ứng dụng Lấy mã Bước 1. Cài đặt Raspberry Pi Nền tảng Raspberry giúp việc cài đặt hệ điều hành cho Raspberry Pi trở nên dễ dàng nhất có thể bằng cách cung cấp trình cài đặt hệ thống quản lý NOOBS (New Out Of The Box). 1. Cài đặt Raspberry Pi để sẵn sàng cho việc cài đặt hệ điều hành: a. Kết nối Pi với cáp HDMI đến màn hình hoặc tivi. b. Kết nối cáp mạng Ethernet. c. Kết nối USB chuột và bàn phím. 2. Cài đặt Pi với hệ điều hành Raspian theo hướng dẫn trong Bắt đầu với NOOBS. 3. Kiểm tra xem bạn có thể kết nối và đăng nhập vào Pi qua SSH hay không. Gìn giữ nguồn nước bằng ứng dụng Internet of Things, Phần 1 Trang 4 của 13 ibm.com/developerWorks/vn/ 4. developerWorks® Ở bước 8 của hướng dẫn Dexter Industries, khi bạn tắt nguồn Raspberry Pi để kết nối bo mạch mở rộng GrovePi, hãy kết nối đồng thời các cảm biến: máy đo khí áp vào cổng I2C-1 trên GrovePi và cảm biến độ ẩm vào cổng A0. Tạm thời chưa kết nối bo mạch mở rộng GrovePi. Theo hướng dẫn trong Kết nối Raspberry Pi và các cảm biến Grove của Dexter Industries (nhà sản xuất GrovePi). Phần cứng bây giờ đã được cấu hình. Bây giờ bạn cần cài đặt tập lệnh dùng để gửi dữ liệu từ cảm biến đến dịch vụ trung tâm của đám mây để xử lý thêm. Bước 2. Cài đặt tập lệnh máy khách Poseidon Bạn sẽ dùng MQTT— giao thức gửi thông điệp theo dạng phát hành/đăng ký nhanh — để gửi dữ liệu cảm biến đến đám mây IoT của IBM. Máy khách MQTT có sẵn nhiều ngôn ngữ lập trình từ dự án Paho. Bạn sẽ dùng một máy khách Python. 1. Thay đổi thư mục gốc của bạn (cd ~) và tạo một bản sao kho lưu trữ PoseidonProject Git: git clone https://hub.jazz.net/git/bbhavers/PoseidonProject 2. Sao chép các mô-đun và tập tin phụ thuộc: cd PoseidonProject/Tutorial1/PoseidonClient cp ~/GrovePi/Software/Python/grove_barometer_lib.py cp ~/GrovePi/Software/Python/grovepi.py 3. Chỉnh sửa tập tin cấu hình config.py (bằng cách dùng vi hoặc nano): Nhập tên cảm biến trong trường clientID và kinh độ, vĩ độ của bạn trong trường location . 4. Cài đặt thư viện máy khách MQTT: sudo pip install paho-mqtt 5. Kiểm tra mã: sudo python PoseidonClient.py 6. Tự động khởi động PoseidonClient khi khởi động: a. Sao chép tập tin lệnh vào thư mục khởi động: sudo cp poseidon.sh /etc/init.d b. Thay đổi quyền: sudo chmod 755 /etc/init.d/poseidon.sh c. Kiểm tra tập lệnh khởi động: sudo /etc/init.d/poseidon.sh start Bạn sẽ thấy thông điệp "Khởi động PoseidonClient". d. Kiểm tra tập lệnh có chạy hay không: ps -ef |grep Poseidon Bạn sẽ thấy hai mục nhập. e. Kiểm tra tập lệnh có đăng ký hay không: tail /home/pi/PoseidonProject/Tutorial1/PoseidonClient/poseidon.log Nhật ký chứa tất cả dữ liệu gửi đi và ghi đè mỗi khi máy khách được khởi động lại. f. Kiểm tra ngừng tập lệnh (việc này sẽ dừng tất cả quy trình Python đang chạy): sudo /etc/init.d/poseidon.sh stop Gìn giữ nguồn nước bằng ứng dụng Internet of Things, Phần 1 Trang 5 của 13 developerWorks® ibm.com/developerWorks/vn/ g. Kiểm tra tập lệnh đã dừng hay chưa: ps -ef |grep Poseidon Mục nhập mà bạn đã thấy ở bước 6d bây giờ sẽ mất. 7. Nếu đến đây mọi thứ đều diễn ra đúng như vậy, hãy kích hoạt tập lệnh để khởi động tự động (bỏ qua cảnh báo về việc thiếu tag LSB): sudo update-rc.d poseidon.sh defaults 8. Kiểm tra xem tập lệnh có khởi động lại khi khởi động lại hay không: sudo shutdown -r now Sau khi khởi động, kiểm tra các lệnh mà bạn đã chạy trước đó trong phần này. 9. Cắm cảm biến độ ẩm vào đất xung quanh cây trồng của bạn để bắt đầu giám sát. Bây giờ Raspberry Pi của bạn đã được cấu hình và đang gửi dữ liệu đến điểm trung gian vi mô trên Internet. Mỗi máy khách MQTT đăng ký với chủ đề như cấu hình trong config.py có thể thấy dữ liệu mà bạn đang phát hành. Tiếp theo, bạn sẽ thiết lập môi trường đám mây dựa trên Bluemix để thu nhận dữ liệu này, lưu nó vào cơ sở dữ liệu và phát hành dữ liệu lên Twitter. Bước 3. Thiết lập môi trường Bluemix Bây giờ, bạn sẽ tạo một ứng dụng trong Bluemix dùng Bộ khởi động nền tảng Internet of Things. Bộ khởi động IoT cung cấp thời gian chạy Node.js, ứng dụng Node-RED và tạo một thực thể cơ sở dữ liệu Cloudant NoSQL. 1. Đăng nhập vào Bluemix. Trong bảng điều khiển, nhấp vào nút CREATE AN APP. Tìm và chọn Internet of Things Foundation Starter từ phần Bản mẫu (Boilerplates) của catalog: 2. Nhập tên và tên máy chủ của ứng dụng. Để nguyên các lựa chọn khác theo như mặc định và nhấp CREATE: Gìn giữ nguồn nước bằng ứng dụng Internet of Things, Phần 1 Trang 6 của 13 ibm.com/developerWorks/vn/ developerWorks® dụng sẽ tự động khởi động khi việc phân bổ hoàn tất. 3. Nhấp vào đường dẫn ĐỊNH TUYẾN của ứng dụng để duyệt đến trang web của ứng dụng: Ứng 4. Nhấp Go to your Node-RED flow editor. 5. Trong Node-RED flow editor (trình sửa luồng Node-RED), bạn có thể thấy một biểu đồ luồng IoT mặc định: Gìn giữ nguồn nước bằng ứng dụng Internet of Things, Phần 1 Trang 7 của 13 developerWorks® ibm.com/developerWorks/vn/ Bên trái là danh sách các nút có sẵn ("cổng nối" đầu vào và đầu ra và chức năng thao tác trên dữ liệu đầu vào hoặc cung cấp đầu ra). Bên phải là các thuộc tính của nút được chọn trong bảng công việc. 6. Chọn tất cả nút trong bảng công việc (bằng cách ấn giữ phím Shift và chọn từng nút) và nhấn Delete để xóa chúng khỏi bảng. Bước 4. Cấu hình Bluemix để lưu dữ liệu Trong bước này, bạn sẽ cấu hình môi trường Bluemix để nhận dữ liệu cảm biến và lưu nó vào cơ sở dữ liệu Cloudant. 1. Trong Node-RED flow editor, kéo nút đầu vào mqtt lên bảng công việc để tạo nút nhận dữ liệu từ điểm trung gian MQTT mà máy khách trên Raspberry sẽ phát hành dữ liệu cảm biến đến. 2. Nhấp kép vào nút đầu vào mqtt trong bảng công việc và nhập cài đặt sau: • Điểm trung gian: realtime.ngi.ibm.com (không có ID máy khách, không có ID và mật khẩu người dùng) • ClientID: Chọn ID duy nhất của bạn, như MyPoseidon23. • Chủ đề: /org/dutchcourage/poseidon/client/sensor • Tên: Receive Sensor Data Gìn giữ nguồn nước bằng ứng dụng Internet of Things, Phần 1 Trang 8 của 13 ibm.com/developerWorks/vn/ 3. developerWorks® Một vòng tròn màu xanh dương gắn với nút biểu hiện đã được thêm (hoặc được thay đổi) nhưng chưa được triển khai. Thêm nút debug vào luồng và kết nối với nút đầu vào Receive Sensor Data. Nút debug sẽ hiển thị các thông điệp nhận được trong thẻ gỡ lỗi nằm bên phải trình sửa: 4. Triển khai luồng để kiểm tra. (Ở phía trên bên phải của trình sửa, nhấp Deploy.) 5. Xem thẻ debug (gỡ lỗi) để biết các thông điệp đến: Bạn có thể cần khởi động lại máy khách Poseidon trên Raspberry Pi để kích hoạt nó gửi các giá trị mới. (Theo mặc địch, nó sẽ gửi thông điệp mỗi giờ một lần.) Xem Bước 2 để biết chi tiết về việc khởi động lại máy khách. 6. Sau khi đã kiểm tra thành công có dữ liệu đến, hãy thêm dữ liệu này vào cơ sở dữ liệu Cloudant bằng cách thêm nút đầu ra cloudant cho luồng và kết nối với nút Receive Sensor Data . 7. Nhấp kép vào nút đầu ra cloudant để sửa tham số của nó: • Dịch vụ: Chọn thực thể Bluemix Cloudant của bạn. • Cơ sở dữ liệu: poseidonsensors • Chỉ lưu dự án msg.payload?: Đánh dấu ô chọn. • Tên: Save to Cloudant 8. Nhấp Deploy trong trình sửa để kích hoạt luồng và lưu dữ liệu trong cơ sở dữ liệu Cloudant. Gìn giữ nguồn nước bằng ứng dụng Internet of Things, Phần 1 Trang 9 của 13 developerWorks® ibm.com/developerWorks/vn/ 9. Để xem dữ liệu đã lưu trong Cloudant, duyệt trở lại tài khoản Bluemix của bạn. Trong bảng điều khiển, bạn có thể thấy thực thể Cloudant được liệt kê trong phần Dịch vụ: Nhấp vào thực Cloudant và sau đó LAUNCH. Bây đang Cloudant, thể nhấp giờ, bạn ở bảng điều khiển nơi bạn có thể tạo cơ sở dữ liệu mới, tạo tác vụ sao chép, xem và sửa các mục nhập của cơ sở dữ liệu. 10. Nhấp vào cơ sở dữ liệu poseidonsensors (được tạo bởi nút Save to Cloudant ). Để xem dữ liệu cảm biến thực tế, di chuyển con trỏ chuột lên tài liệu và nhấp Edit doc nằm ở góc trên bên phải của tài liệu: Bây giờ bạn có thể xem cấu trúc dữ liệu JSON và nội dung của tài liệu: Dữ liệu của bạn hiện đang được lưu trong cơ sở dữ liệu. Bước 5. Cấu hình Bluemix để gửi tweet Bây giờ, thực thể Node-RED đã mở và đang chạy, bạn có thể mở rộng luồng để phát hành các thông điệp MQTT đã nhận trên Twitter: Gìn giữ nguồn nước bằng ứng dụng Internet of Things, Phần 1 Trang 10 của 13 ibm.com/developerWorks/vn/ developerWorks® 1. Duyệt đến trình sửa luồng Node-RED. 2. Nhấp vào nút biểu tượng "hamburger" ở phía trên bên phải của trình sửa luồng và chọn Import > Clipboard: 3. Nhập mã nguồn của luồng Node-RED đầy đủ: a. Trong một cửa sổ duyệt riêng biệt, duyệt đến kho lưu trữ mã PoseidonProject và chọn Tutorial1/Nodered/NodeRedFlow.txt. b. Sao chép nội dung của NodeRedFlow.txt vào bản ghi tạm. c. Về lại trình sửa Node-RED. Dán nội dung của bản ghi tạm vào ô nhập văn bản và nhấp Ok: d. Đặt luồng lên bảng làm việc. 4. Kết nối các nút mới với luồng Node-RED hiện tại: a. Gỡ bỏ khỏi luồng đã nhập các nút mà bạn đã tạo (Receive Sensor Data, Save to Cloudantvà debug). b. Nối dây nút Receive Sensor Data vào nút JSON to JSOBJECT . Gìn giữ nguồn nước bằng ứng dụng Internet of Things, Phần 1 Trang 11 của 13 developerWorks® ibm.com/developerWorks/vn/ Luồng Node-RED của bạn hiện giờ sẽ như sau: 5. Nhấp kép nút Tweet Sensor Values và nhấp vào biểu tượng cây bút để xác thực tài khoản Twitter của bạn với Node-RED: 6. Nhấp Deploy để lưu các thay đổi. 7. Dừng và khởi động máy khách Poseidon trên Raspberry Pi để khởi tạo việc gửi lại dữ liệu, và xem tài khoản Twitter của bạn về thông điệp báo cáo dữ liệu cảm biến: Bạn đang gửi dữ liệu đến Twitter. Kết luận Phần 1 Trong hướng dẫn này, bạn đã học cách thiết lập một Raspberry Pi có các cảm biến để giám sát độ ẩm của đất, áp suất khí áp và nhiệt độ. Bạn đã cấu hình máy khách để gửi dữ liệu qua MQTT đến điểm trung gian đám mây IoT của IBM. Với Bluemix, bạn có thể thu nhận dữ liệu này, lưu nó vào một cơ sở dữ liệu Cloudant và phát hành dữ liệu lên Twitter. Bạn đã học cách tạo một luồng từ đầu đến cuối từ cảm biến để chia sẻ dữ liệu lên mạng xã hội, và bây giờ bạn có thể bắt đầu mở rộng chức năng của giải pháp — ví dụ, với các ứng dụng di động và bằng cách phân tích dữ liệu để dự báo khi nào cây trồng cần nước Bây giờ, tiếp tục sang Phần 2 để tìm hiểu cách bảo mật thực thể Node-RED và triển khai tự động các thay đổi cho ứng dụng. Và sau đó, trong Phần 3, bạn sẽ nâng cao giải pháp bằng cách xây dựng một ứng dụng dành cho máy khách để hiển thị dữ liệu cảm biến ở dạng đồ thị. Gìn giữ nguồn nước bằng ứng dụng Internet of Things, Phần 1 Trang 12 của 13 ibm.com/developerWorks/vn/ developerWorks® Đôi nét về các tác giả Bram Havers Kiến trúc sư phần mềm, công ty IBM Kai Robbin Weller Chuyên gia công nghệ thông tin, công ty IBM Robert-Jan Sips Lãnh đạo Center for Advanced Studies Research / University Relations Manager, IBM Bill Hymas Chuyên gia IT, IBM © Copyright IBM Corporation 2015 (www.ibm.com/legal/copytrade.shtml) Nhẫn hiệu đăng ký (www.ibm.com/developerworks/vn/ibm/trademarks/) Gìn giữ nguồn nước bằng ứng dụng Internet of Things, Phần 1 Trang 13 của 13