Computer >> Máy Tính >  >> Lập trình >> Cơ sở dữ liệu

Xây dựng hệ thống cảnh báo quy mô thùng

Xây dựng hệ thống cảnh báo quy mô thùng

Trong một blog trước đây, tôi đã trình bày chi tiết cách tôi sử dụng trọng lượng của thùng cà phê pha lạnh trong văn phòng của chúng tôi để gửi cảnh báo Slack cho chúng tôi biết khi nào chúng tôi sắp hết và cần nạp đầy thùng cà phê pha lạnh.

Trong phần thứ hai này trong loạt bài gồm hai phần của chúng tôi, tôi sẽ chỉ cho bạn cách tôi xây dựng quy mô. Về cơ bản, tôi muốn thứ gì đó mà không cần đầu tư nhiều thời gian và tiền bạc, cũng như không có bất cứ thứ gì sẵn có đáp ứng được nhu cầu của chúng tôi.

Yêu cầu thiết lập két Elasticsearch

Trước hết, tôi cần chia nhỏ các yêu cầu cho dự án:

  • Giá rẻ (<$ 100)
  • Chăm sóc và cho ăn ở mức tối thiểu
  • Được quản lý từ xa
  • Dễ dàng báo cáo mức thùng
  • Xác định thời điểm có nước lạnh được lấy từ thùng (một mục tiêu căng)
  • Quan trọng nhất, nó cần đầu tư thời gian tối thiểu *

* Tôi có một công việc hàng ngày và việc xây dựng cân keg không có trong mô tả công việc của tôi.

Nghiên cứu ban đầu

Thách thức đầu tiên là không chỉ tìm ra cách thu thập dữ liệu trên thùng mà còn phải thu thập dữ liệu nào.

Một số dự án mã nguồn mở cung cấp các thùng giám sát và sau khi nghiên cứu một chút, hai cách chính để đo lường là

  • trọng lượng
  • sử dụng đồng hồ đo tốc độ dòng chảy

Hầu hết những gì đã có đều sử dụng đồng hồ đo tốc độ dòng chảy. Sẽ phức tạp hơn một chút để xác định xem thùng có "rỗng" hay không với tốc độ dòng chảy và bạn cần một số hình thức can thiệp của người dùng để xác định thời điểm thùng đã được thay đổi. Thêm vào đó, nó yêu cầu đặt một thiết bị trong dây chuyền cà phê thực tế, điều này có những vấn đề tiềm ẩn riêng.

Vì vậy, mặc dù thiếu các ví dụ để mượn, chúng tôi đã thực hiện cuộc gọi bắt đầu với một cái cân và sử dụng trọng lượng để xác định mức thùng.

Thang thùng

Đối với phần cứng quy mô thực tế, tôi đã tìm kiếm các giải pháp có sẵn có thể kết nối với một máy tính nhỏ như Raspberry Pi. Có rất nhiều thang đo WIFI và Bluetooth, nhưng hầu hết không được đọc liên tục; hoặc được cung cấp năng lượng từ pin; hoặc một rắc rối lớn với giao diện. Có một vài loại cân cụ thể về keg, nhưng chúng quá đắt.

Một lần nữa, tôi cần phải tự làm.

Tôi đã có kinh nghiệm xây dựng với Raspberry Pi, vì vậy tôi cần phần cứng để xây dựng quy mô với Raspberry Pi. Tôi đã tìm thấy một bộ cảm biến lực 50kg với bộ khuếch đại HX711 trên Amazon cho chính xác trường hợp sử dụng này.

Có rất nhiều tài liệu tham khảo trên mạng để xây dựng thang đo Arduino với HX711 nhưng ít có sẵn hơn cho Pi. May mắn thay, tôi đã tìm thấy các hướng dẫn từ Guiductables cùng với repo Github từ người dùng tatobari, bao gồm một số tiện ích python HX711 phù hợp với hóa đơn.

Kiến trúc tổng thể

Trước hết, tôi cần tạo một giản đồ đơn giản về hệ thống tổng thể sẽ trông như thế nào:

Xây dựng hệ thống cảnh báo quy mô thùng

Bản dựng phần cứng

Thử thách đầu tiên là tìm một chiếc cân đủ mỏng để đặt dưới thùng hàng và vẫn vừa với thùng đựng đồ đủ chắc chắn để không bị uốn cong dưới sức nặng của một thùng hàng 150lb.

Tôi đã thử nhiều thiết kế và phương pháp để củng cố quy mô, nhưng chúng không ổn định hoặc thêm quá nhiều độ dày khiến cuối cùng gây áp lực lên các ống trên cùng.

Bản dựng cuối cùng bao gồm tấm lưới nướng cũ, một số mảnh thép c kênh nhỏ từ cửa hàng đồ gia dụng để gia cố tấm lưới, và một loạt băng keo và dây buộc zip.
Xây dựng hệ thống cảnh báo quy mô thùng Xây dựng hệ thống cảnh báo quy mô thùng

Nó không hoàn hảo nhưng cuối cùng nó đã đáp ứng được tất cả các yêu cầu thiết kế của chúng tôi (có ai ngoài đó nghĩ đến giải pháp ổn định hơn một chút không?)

Nối dây

Chúng tôi cần kết nối bo mạch HX711 với Raspberry pi qua 4 chân GPIO và thang đo với bo mạch HX711 qua bốn dây từ cầu Wheatstone (xem Hướng dẫn).

Kegerator siêu hạn chế về không gian và nó có thể trở nên khá thô khi các thùng được tải và dỡ xuống, vì vậy, có vẻ như không phải là một quyết định đúng đắn để xác định vị trí của HX711 và mâm xôi pi cùng với thùng. Thay vào đó, chúng tôi đặt Raspberry Pi và HX711 ngay bên cạnh nó, bên ngoài kegerator, sử dụng cáp tiêu chuẩn (cat 5 hoặc 6 cũ tốt) để chạy lâu hơn từ quy mô thực đến HX711. Thêm đầu nối RJ45 theo thang đo ở một đầu và HX711 ở đầu kia. Giờ đây, chúng tôi có thể sử dụng bất kỳ cáp Ethernet cũ nào để kết nối cả hai.

Giữa HX711 và raspberry pi, vì chúng nằm ngay cạnh nhau, chúng tôi đã sử dụng dây jumper tiêu chuẩn.

Phần mềm

Sử dụng Raspberry Pi có nghĩa là tôi có thể sử dụng khá nhiều thứ chạy trên Linux cho phần mềm.

Phần đầu tiên là mã để giao tiếp với bộ khuếch đại HX711 thông qua GPIO.

Mặc dù hầu hết các dự án HX711 hiện có đều dành cho Arduino, bạn vẫn có thể tìm thấy một số lượng lớn các kho lưu trữ GitHub có sẵn với mã HX711 cho Raspberry Pi, chẳng hạn như dự án này được viết bằng Python.

Sử dụng mã ví dụ HX711, tôi đã viết một tiện ích Python nhỏ chỉ đơn giản là ghi các kết quả đo trọng lượng định kỳ vào một tệp mà chúng tôi có thể gửi đến Elasticsearch. Tôi đã mở rộng nó để hoạt động từ một tệp cấu hình và bao gồm một vài chế độ thử nghiệm, nhưng ngoài ra, nó là mã khá đơn giản.

Chuyển dữ liệu đến Elasticsearch

Tiếp theo, tôi cần chuyển dữ liệu đến Elasticsearch.

Tôi đã sử dụng Filebeat để đọc các tệp trọng lượng và sau đó gửi dữ liệu đến Elasticsearch. Bạn có thể viết trực tiếp cho Elasticsearch từ tập lệnh Python; hoặc sử dụng Logstash để đọc các tệp; hoặc gọi trực tiếp kịch bản để nhận bài đọc một cách nhanh chóng. Filebeat siêu nhẹ và đơn giản chỉ cần ít công việc nhất.

Sự phức tạp nhỏ duy nhất khi sử dụng Filebeat là Elastic không cung cấp các tệp nhị phân cho Raspberry Pi / ARM theo mặc định. Tôi đã phải xây dựng nó.

May mắn thay, các hướng dẫn trên trang Elastic khá rõ ràng. Miễn là bạn chọn đúng phiên bản Go phù hợp với phiên bản Filebeat mà bạn muốn sử dụng, thì quá trình xây dựng sẽ khá đơn giản. (Mặc dù nó thường được gọi trong hướng dẫn dành cho nhà phát triển, hãy đảm bảo rằng bạn chọn đúng phiên bản Beat ở phía bên phải của trang đó.)

Khi tất cả các thành phần đều hoạt động, bước cuối cùng là định cấu hình các tập lệnh của trình đọc quy mô và Filebeat dưới dạng dịch vụ systemd và khởi động chúng khi khởi động.

Lập chỉ mục dữ liệu

Tôi cần lập chỉ mục dữ liệu cân nặng đó trong Elasticsearch. Sử dụng Filebeat, tôi quyết định phân tích cú pháp dữ liệu ở phía Elasticsearch bằng cách sử dụng một đường dẫn nhập. Một lần nữa, Logstash là một tùy chọn, nhưng mục tiêu là tạo ra tải tối thiểu tuyệt đối trên Raspberry Pi để tôi có thể sử dụng nó như một bảng điều khiển cục bộ và có khả năng mở rộng nó sau này với nhiều cảm biến hơn (như nhiệt độ).

Cứ sau vài giây, đầu đọc trọng lượng đơn giản sẽ xuất ra các dòng nhật ký như sau:“2018-06-22T20:57:02 + 0000 - 134.0”. Điều này cực kỳ đơn giản để phân tích cú pháp vì nó chỉ là một dấu thời gian theo sau là “-” và giá trị đọc, do đó, đường dẫn nhập cũng đơn giản như nhau.


{
  "description" : "Parse the readings from the keg scale",
  "processors" : [
	{
  	"grok": {
    	"field": "message",
    	"patterns": ["^%{TIMESTAMP_ISO8601:readtime}\\s+-\\s+%{BASE10NUM:weight}$"]
  	}
	},
	{
  	"convert": {
    	"field" : "weight",
    	"type": "float"
  	}
	},
	{
  	"date" : {
    	"field" : "readtime",
                                            	"formats" : ["ISO8601"]
                                	}
	}
  ],
  "on_failure" : [
	{
  	"set" : {
    	"field" : "ingest_error",
    	"value" : "{{ on_failure_processor_type }} - Error processing message - {{ _ingest.on_failure_message }} : {{ message }}"
  	}
	}
  ]
}

Kết quả là một tài liệu cứ sau vài giây có dấu phẩy động “trọng số” và dấu thời gian, cùng với các siêu dữ liệu khác nhau mà Filebeat bao gồm (chúng tôi có thể sử dụng sau này nếu chúng tôi mở rộng nó thành nhiều thùng).

Cụm Elasticsearch

ObjectRocket làm cho phần này rất dễ dàng, vì tôi có thể tạo một cụm cơ bản, mở một vài ACL, thiết lập một vài người dùng và sau đó chỉ cần bắt đầu vận chuyển dữ liệu. Ngoài ra, yêu cầu thực sự duy nhất ở đây là một cụm Elasticsearch chức năng với Kibana.

Kết thúc

Với mọi thứ đã được thiết lập và đúng vị trí, tất cả những gì tôi cần làm là cắm nó vào.

Thì đấy! Nó chỉ chạy.

Bạn có thể tự mình xem kết quả ban đầu:

Xây dựng hệ thống cảnh báo quy mô thùng

Chúng tôi đã kết thúc với một thước đo đơn giản để cho chúng tôi thấy:

  • Phần trăm bia lạnh còn lại trong thùng
  • Đường xu hướng theo thời gian
  • Ngày nạp tiền gần đây nhất

Hệ thống có chỗ cho nhiều tiện ích bổ sung khác, với các dự án mới thú vị như Canvas và Vega, nhưng hiện tại, nó đã hoàn thành công việc.