Tôi cần làm gì để Raspberry Pi lưu trữ một trang web với các mặt số cho biết nhiệt độ CPU, tải CPU, v.v., trong thời gian thực?


27

Tôi tốt với các lệnh và kịch bản Unix, nhưng tôi gần như không có kinh nghiệm web. Tôi có một tập lệnh lấy các số liệu tôi quan tâm, như tải CPU hoặc tạm thời hệ thống và cập nhật tệp sau mỗi 10 giây. Tôi muốn trỏ iPad của mình đến một trang web địa phương được lưu trữ bởi Raspberry Pi, có biểu diễn đồ họa cập nhật theo thời gian thực của dữ liệu này.

Tôi đã làm việc trước khi thiết lập một máy chủ web Apache đơn giản và tôi có thể viết HTML và JavaScript. Bên cạnh đó, tôi đang lạc lối và cần một người chỉ cho tôi đi đúng hướng.


2
Câu hỏi của bạn hơi quá rộng. Bạn có muốn một số giải pháp nhanh chóng và bẩn thỉu, hoặc bạn muốn mã hóa một chương trình tối thiểu phù hợp với các hệ thống nhúng Linux nhỏ?
Basile Starynkevitch

Ban đầu tôi đang tìm kiếm thứ gì đó nhanh chóng và bẩn thỉu, nhưng sự sẵn có của các công cụ rất hay được đề cập dưới đây bây giờ khiến tôi quan tâm hơn.
jake9115

FYI cũng có một ngăn xếp Raspberry Pi: raspberrypi.stackexchange.com
Todd Wilcox

github.com/firehol/netdata rất dễ cài đặt. Chưa thử nghiệm trên Pi mặc dù
Der Hochstapler

Câu trả lời:


30

Tôi sử dụng Grafana với InfluxDB cho điều này trên Raspberry Pi 3. Cả hai đều tương đối dễ cài đặt và kết nối với nhau. Chúng thậm chí hoạt động tốt trong các container Docker trên Raspberry Pi.

Tôi truyền tất cả các cập nhật của mình vào InfluxDB khi chúng được tạo. Sau đó, Grafana thực hiện tất cả các công việc đồ họa hiển thị chúng ở định dạng trực quan đẹp. Tôi đã thiết kế một bảng điều khiển đơn giản chỉ dành cho iPad cũ của tôi với màn hình nhỏ hơn.

Nghe có vẻ như rất nhiều cài đặt và chi phí chung, nhưng nó chắc chắn trông khá đẹp.

Nhập mô tả hình ảnh ở đây


Rất tuyệt. Bạn có tình cờ có bất kỳ ảnh chụp màn hình nào của màn hình Grafana không? Chỉ tò mò thôi.
jake9115

Vâng Có thể không có nhiều ý nghĩa, đây là một mớ hỗn độn của mọi thứ. Chụp trên máy tính của tôi, vì vậy không có kích thước như trên iPad.
0xACE

Trông thật tuyệt, không thể chờ đợi để thiết lập của tôi! Tôi có một máy chủ pi màu cam 16 nút mà điều này sẽ hoàn hảo cho. Cảm ơn một lần nữa.
jake9115

(lạc đề) Tôi thấy câu hỏi khác của bạn về việc kết hợp Pi với nhau thành một thứ trông giống như một bảng có nhiều lõi. Đang định gửi một ghi chú rằng anh chàng HPC ở trường đại học tôi làm việc đã thiết lập một hệ thống nhưng sau đó nhớ rằng anh ta đang sử dụng "con trai của động cơ lưới điện" không làm những gì bạn đang tìm kiếm.
0xACE

1
@ 0xACE Xem xét trên pi của mình, một ý tưởng khá tệ là gửi thư rác cho máy chủ apache với các yêu cầu. Ngoài ra, số 10 đề cập đến thiết lập hiện tại của người hỏi trong khi họ muốn thứ gì đó nhanh hơn.
jdwolf

9

Để có bảng điều khiển giám sát web nhẹ và rất dễ dàng để thiết lập (và mở rộng) trang theo dõi trên Raspberry của bạn, bạn đã có RPi Monitor .

Nó đi kèm với một số mặc định và cấu hình chủ yếu là chỉnh sửa một vài tệp văn bản đơn giản. Tôi dễ dàng cấu hình nó để thêm đồ thị độ ẩm từ DTH21.

img_link img_link2


2
Tôi đánh giá cao sự đóng góp; điều này có vẻ rất nhẹ và có thể là một lựa chọn đồ họa đẹp trong khi tôi học cách thiết lập một số giải pháp liên quan hơn ở đây. Cảm ơn!
jake9115

Không có chi. Tôi đã sử dụng nó gần 3 năm ở nhà. xem câu hỏi điện tử
quan.stackexchange.com/questions/236530/ từ

6

Đối với các ứng dụng thời gian thực trên web, công cụ tốt nhất là WebSocket . Thông thường, những thứ này được triển khai trong máy chủ ứng dụng, không phải máy chủ web, nhưng Apache cung cấp một cách để websockets proxy. Điều này có thể dễ dàng cung cấp cập nhật mỗi giây hoặc giây.

Thư viện nào bạn sử dụng trên máy chủ ứng dụng phụ thuộc vào nền tảng web bạn muốn sử dụng, nhưng ví dụ: thư viện phổ biến cho Node.js là Socket.IO.

Về phía khách hàng, bạn có thể thiết lập kết nối như thế này:

socket = new WebSocket("ws://website.net:8282");

socket.addEventListener('message', function (event) {
    var message = event.data;
    // Code to update site
});

Về phía máy chủ với Node.js bằng thư viện WebSocket cơ bản:

const WebSocket = require('ws');
const wss = new WebSocket.Server({ port: 8282 });
wss.on('connection', function connection(ws) {
  dataOnUpdateEvent(function(event) {
    var data = event.getdata();
    var message = parseData(data);
    ws.send(message);
  });
});

1
Cảm ơn ý tưởng. Điều này rất hữu ích, nhưng có vẻ như rất nhiều nền tảng, đó là điều dễ hiểu.
jake9115

2
@ jake9115 Heh tốt câu hỏi của bạn dường như cho thấy bạn quan tâm đến việc tự làm ứng dụng này.
jdwolf

2
Thành thật mà nói, tôi thực sự đã nhắm đến việc tự viết mã cho nó, nhưng grafana đó trông thật lắt léo đến nỗi tôi sẽ không muốn phát minh lại cái bánh xe này. Cảm ơn mặc dù!
jake9115

4

Bạn cũng có thể xem Node-RED https://nodered.org Nó có sẵn trên Raspbian

Đây là bảng điều khiển tôi đã xây dựng nhập mô tả hình ảnh ở đây


Tôi sẽ xem xét nó, cảm ơn sự đóng góp.
jake9115

1
Tôi sử dụng Node-Red với thiết lập của mình, nhưng dữ liệu lịch sử chỉ hợp lệ miễn là phiên bản của bạn đang chạy. Đó là, nếu bạn triển khai lại (hoặc mất năng lượng), không có phép đo lịch sử nào được giữ lại, tất cả các biểu đồ của bạn bắt đầu lại từ không có gì. Tính năng đó là điều thôi thúc tôi bắt đầu thực sự đăng nhập vào InfluxDB.
0xACE

Ah, rất vui được biết. Dữ liệu lịch sử là quan trọng đối với tôi. Tôi thực sự thích cách đồ thị của bạn thậm chí kết hợp thông tin dựa trên web khác, như giá bitcoin. Điều đó vượt quá phạm vi ban đầu của tôi, nhưng không còn nữa.
jake9115

Có, ví dụ đó tôi thậm chí còn bao gồm dữ liệu từ một ứng dụng tôi có trên App Store của iOS (dành cho Hướng đạo sinh thực hiện các lượt tốt) lưu trữ dữ liệu của nó vào cơ sở chữa cháy của google. Đó là bản đồ ở phía dưới. Tôi sử dụng nút đỏ để kéo dữ liệu từ cơ sở lửa và đẩy nó vào dòng, vì vậy nó không phải là tất cả dòng và grafana.
0xACE

2

Tôi sử dụng phpSysInfo để giám sát tất cả các máy chủ / máy tính Linux của tôi và tôi thực sự thích nó đơn giản như thế nào. Các cài đặt cũng rất dễ hiểu và bạn có thể đặt tốc độ làm mới của riêng mình.


1

Nếu bạn muốn mã bằng C hoặc C ++, bạn có thể sử dụng một số thư viện máy chủ HTTP như libonion hoặc Wt để mã hóa máy chủ HTTP chuyên dụng của bạn (có thể sử dụng sqlite cho cơ sở dữ liệu). Sau đó, bạn nên hiểu rõ giao thức HTTP (bao gồm cookie HTTPtiêu đề HTTP ) và HTML5 .

Bạn có thể muốn sử dụng các kỹ thuật AjaxWebSocket (WebSockets được hỗ trợ bởi libonion & Wt, Ajax cung cấp các yêu cầu HTTP thông thường được khởi tạo bởi mã JavaScript chạy trong trình duyệt máy khách). Bạn có thể sử dụng canvas HTML5 và / hoặc SVG cho đồ họa. Bạn có thể thấy một số khung web HTML5 hữu ích; hầu hết trong số họ đang sử dụng Javascript, DOM, HTML5, ....

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.