O que preciso fazer para que meu Raspberry Pi hospede uma página da Web com mostradores indicando a temperatura da CPU, carga da CPU, etc., em tempo real?

27

Eu sou bom com comandos e scripts do Unix, mas não tenho quase nenhuma experiência na web. Eu tenho um script que captura métricas de meu interesse, como carga da CPU ou temperatura do sistema, e atualiza um arquivo a cada 10 segundos. Gostaria de apontar meu iPad para um site local hospedado pelo meu Raspberry Pi, que possui uma representação gráfica da atualização em tempo real desses dados.

Eu trabalhei antes de configurar um servidor Web Apache simples e posso escrever HTML e JavaScript. Além disso, estou perdido e preciso de alguém para me apontar na direção certa.

jake9115
fonte
2
Sua pergunta é um pouco ampla demais. Deseja alguma solução rápida e suja ou deseja codificar um programa mínimo que se encaixe em pequenos sistemas embarcados no Linux?
Basile Starynkevitch
Inicialmente, eu estava procurando por algo rápido e sujo, mas a disponibilidade de ferramentas muito boas mencionadas abaixo agora me deixa mais interessado.
jake9115
Para sua informação, há também uma pilha do Raspberry Pi: raspberrypi.stackexchange.com
Todd Wilcox
O github.com/firehol/netdata é muito fácil de configurar. No entanto, não testei em um Pi
Der Hochstapler

Respostas:

30

Eu uso o Grafana com o InfluxDB para isso no meu Raspberry Pi 3. Eles são relativamente fáceis de configurar e se conectar. Eles até funcionam bem em contêineres Docker no Raspberry Pi.

Eu transmito todas as minhas atualizações no InfluxDB à medida que elas são geradas. Então Grafana faz todo o trabalho gráfico de exibi-los em um bom formato visual. Projetei um painel simples apenas para o meu iPad antigo, com sua tela menor.

Parece muita instalação e sobrecarga, mas com certeza parece bonito.

Digite a descrição da imagem aqui

0xACE
fonte
Muito legal. Você tem capturas de tela dos seus monitores Grafana? Apenas curioso.
jake9115
Sim. Pode não fazer muito sentido, este é um misto de coisas. Encaixei no meu computador, então não tenho o tamanho que parece no iPad.
0xACE
Parece incrível, mal posso esperar para configurar o meu! Eu tenho um servidor pi laranja de 16 nós para o qual será perfeito. Obrigado novamente.
jake9115
(off topic) Vi sua outra pergunta sobre juntar os Pi em algo que parecia uma única placa com vários núcleos. Estava prestes a enviar uma nota de que o funcionário da HPC na faculdade em que trabalho havia criado um sistema, mas lembrou que estava usando o "filho do mecanismo de grade", que não faz o que você estava procurando.
0xACE
1
@ 0xACE Considerando que é um pi, é uma péssima idéia enviar spam ao servidor apache com solicitações também. Os 10s também se referem à configuração atual dos solicitantes, enquanto eles querem algo mais rápido.
Jdwolf # 28/17
9

Por ter um painel de monitoramento da Web leve e muito fácil de configurar (e estender) a página de monitoramento no seu Raspberry, você tem o RPi Monitor .

Ele vem com alguns padrões e a configuração está principalmente editando alguns arquivos de texto simples. Eu o configurei facilmente para adicionar gráficos de umidade de um DTH21.

img_link img_link2

Rui F Ribeiro
fonte
2
Agradeço a contribuição; isso parece realmente leve e talvez uma boa opção gráfica, enquanto eu aprendo a configurar algumas das soluções mais envolvidas aqui. Obrigado!
precisa saber é o seguinte
Você é bem vindo. Eu o uso há quase 3 anos em casa. veja a pergunta relacionada electronics.stackexchange.com/questions/236530/…
Rui F Ribeiro
6

Para aplicativos em tempo real na Web, a melhor ferramenta é o WebSocket . Geralmente, eles são implementados no servidor de aplicativos, não no servidor da Web, mas o Apache fornece uma maneira de proxy WebSockets. Isso poderia facilmente fornecer atualizações por segundo ou subsegundo.

Qual biblioteca você usa no servidor de aplicativos depende de qual plataforma da Web você deseja usar, mas, por exemplo, uma biblioteca popular do Node.js é o Socket.IO.

No lado do cliente, você pode configurar uma conexão como esta:

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

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

No lado do servidor, com o Node.js, usando a biblioteca básica do WebSocket:

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);
  });
});
jdwolf
fonte
1
Obrigado pela ideia. Isso é muito útil, mas parece muito trabalho de base, o que é compreensível.
jake9115
2
@ jake9115 Heh, bem, sua pergunta parecia sugerir que você estava interessado em fazer esse aplicativo.
Jdwolf
2
Honestamente, eu realmente pretendia codificá-lo, mas essa grafana é tão elegante que eu não gostaria de reinventar a roda nessa. Obrigado embora!
jake9115
4

Você também pode olhar para Node-RED https://nodered.org Ele vem de ações em Raspbian

Aqui está um painel que eu construí insira a descrição da imagem aqui

jwygralak67
fonte
Vou dar uma olhada, obrigado pela contribuição.
precisa saber é o seguinte
1
Eu uso o Node-Red com minha configuração, mas os dados históricos são válidos apenas enquanto sua instância estiver em execução. Ou seja, se você reimplementar (ou perder energia) nenhuma das medidas históricas for mantida, seus gráficos começarão do nada. Esse recurso foi o que me levou a começar a realmente fazer login no InfluxDB.
0xACE
Ah, que bom saber. Dados históricos são importantes para mim. Eu realmente gosto de como seus gráficos incorporam outras informações baseadas na Web, como preços de bitcoin. Isso estava além do meu escopo inicial, mas não mais.
jake9115
Sim, esse exemplo inclui até dados de um aplicativo que tenho na iOS App Store (para escoteiros fazendo boas curvas) que armazena seus dados no Google Fire Base. Esse é o mapa na parte inferior. Eu uso o nó vermelho para extrair os dados da base de incêndio e empurrá-los para o influxo, para que nem todos sejam influx e grafana.
0xACE
2

Eu uso o phpSysInfo para monitorar todos os meus servidores / computadores Linux e gosto muito de como é simples. As configurações também são muito fáceis de entender e você pode definir sua própria taxa de atualização.

McMuffin
fonte
1

Se você deseja codificar em C ou C ++, pode usar alguma biblioteca de servidores HTTP como libonion ou Wt para codificar seu servidor HTTP especializado (talvez usando sqlite para banco de dados). Você deve entender bem o protocolo HTTP (incluindo cookies e cabeçalhos HTTP ) e o HTML5 .

Você pode querer usar as técnicas Ajax e WebSocket (os WebSockets são suportados pelo libonion & Wt, o Ajax fornece solicitações HTTP comuns iniciadas pelo código JavaScript em execução no navegador do cliente). Você pode usar a tela HTML5 e / ou SVG para gráficos. Você pode achar algumas estruturas da web em HTML5 úteis; a maioria deles usa Javascript, DOM, HTML5, ....

Basile Starynkevitch
fonte