Revista 100% Verde

Estacion grafica multimedia con Raspberry Pi

Por Soloelectronicos @soloelectronico
En el post de hoy vamos a demostrar gracias a MagdiBlog como hoy en día se pueden hacer interfaces gráficas muy potentes mostrando información util simplemente usando una Raspberry conectada a un monitor de forma permanente gracias al bajisimo consumo de esta estupenda placa. En efecto a todos nos gustan las estaciones meteorológicas que muestran una gran cantidad de información, si es posible ,incluso sensible a la ciudad donde se viva. Ademas si , añade relojes de alta tecnología que hagan de calendario ,muestren sonido cuando reciba un correo, sirva de marco digital, etcétera..mucho mejor ¿verdad?. Sin embargo, no es fácil encontrar cualquiera de estos dispositivos (o casi). De hecho,soluciones comerciales que existen hoy en día son mucho mas limitadas ,y de todos modos, ,también son emasiado costosas ... Pues en el proyecto de hoy veremos como gracias a una Raspberry esto es posible añadiendo ademas múltiples funciones tan solo limitadas por la imaginación pues ,por ejemplo el autor ademas de todo lo anterior ,quería tener tener una visión global sobre lo que está pasando en su red de hogar, su ancho de banda, el estado de servidores y del NAS, saber quién está conectado a su servidor TeamSpeak o VPN, etcetera..todo ello ademas mostrando la fase de la luna y el sol a la tierra durante el día, la hora del amanecer y el atardecer. Así que este proyecto relativamente simple (pero muy divertido) aporta una espectacular consola gráfica que agrupa todos estos datos de una forma realmente espectacular . Estacion grafica multimedia con Raspberry Pi

A diferencia de otros proyectos, con una Raspberry Pi y una pantalla son suficientes.. Además, puede utilizar algo que no sea una Pi, incluyendo un viejo eeePC ,un PC portátil en desuso ,una torre estándar ,etc.

Simplemente necesita agregar un soporte de pared para colgar la pantalla en la pared, así como un canal extra plana para ocultar los cables de alimentación (s i decide disponer su pantalla por encima de la nevera por ejemplo, ahorrará comprando estos dos accesorios).

Para la pantalla,una opción es elegir la más barata de tipo LED, pues son pantallas más delgadas,y consumen menos energia ofreciendo un ángulo más amplio (conveniente cuando caminas en la habitación), así como un mayor brillo. Si quiere colgar la pantalla en la pared, debe tener claro el tipo que VESA monta que depende del del TV monitor qeu vaya a colgar. Tenga en cuenta, sin embargo, que una pantalla de más de 20 - 22″ pantalla se convierte en rápidamente voluminosa... Por ultimo seria recomendable una pantalla de entre 16 y 20, en formato 16: 9 (más estética de 4/3), con un borde fino (siempre por el bien de estética ).

Aquí se muestra el detalle del hardware necesario :

  • Un modelo de Raspberyy Pi B 512 MB ( o superior)
  • Una tarjeta de memoria SDHC 8 GB
  • Un adaptador WiFi USB NetGear WNA1000M ( no es necesario con la Raspberry Pi 3)
  • Una pantalla LCD (por ejemplo una de8, 5 pulgadas , pero cualquier pantalla puede ser conveniente)
  • Soporte de pared VESA para pantalla
  • Una canaleta de pvc para esconder los cables

Esta es la lista de información que el autor decidió mostrar en la pantalla conectada a una Raspberry :

  • Fase de la tierra con el trazado de las nubes en tiempo real
  • Fase de la luna
  • Hora
  • Fecha
  • El tiempo en hoy
  • Previsión del tiempo para 3 días
  • Estado de servidores y NAS
  • TeamSpeak clientes conectados
  • Clientes VPN conectados
  • Ancho de banda de Internet
  • etc

Incluso es posible añadir alguna característica pues todavía hay espacio para mostrar la información: lo importante es que sea visible y legible desde cualquier lugar en la sala.

A continuación el árbol de archivos necesarios para mostrar los diferentes módulos.

  • index.php: página principal que es llamada por el navegador
  • ajax.php: contiene el código que se ejecuta cuando se hacen peticiones AJAX
  • .inc.php contiene las funciones de PHP
  • javascript.js contiene las funciones de JavaScript
  • hoja de estilo style.css

La estructura es muy fácil como vemos siendo l a página "index.php" la llamada por el navegador.Esta es la encargada de cargar mediante una función JavaScript para ver el contenido de cada módulo en el lugar correcto en la página ,la cual pide actualizaciones automáticamente de la pantalla a intervalos regulares de 3600s gracias a la sentencia meta incluida en la cabecera :

<Meta http-equiv = "refresh" content = "3600; url = index.php"> 

Nota: Puede descargar todos los archivos en un archivo en el último artículo del proyecto.

La página de índice se contenta con la posición de laz etiquetas<div> que se mostrarán en cada módulo.

En la etiqueta <head>, hay una etiqueta <meta> que tiene como objetivo actualizar la página cada 3600 segundos (cada hora). De este modo, se volverá a cargar la página entera, los contadores de JavaScript de reposición, código actualizadas son tomadas en cuenta, etc ...

Para los módulos que se muestran las imágenes (fases de la tierra y de la luna ancho de banda, gráficos), es apropiado insertar una imagen en blanco " blank.png " para evitar mostrar un error en la página hasta que el petición AJAX responsable de la visualización de la imagen se ha completado.

Este es el archivo que se llama por peticiones AJAX y es responsable de llamar a la función derecho a ejecutar.

Un bloque de código para cada módulo. Dependiendo del bloque de $ variable pasada como parámetro a la consulta AJAX, llamada la función objetivo.

Este archivo contiene las funciones llamadas por el archivo ajax.php. Sigue el mismo principio que los anteriores: un bloque de código para cada módulo.

Básicamente, incluye una función por módulo cuyos detalles seria complejo explicar .

Este archivo contiene las funciones de JavaScript que pondrá en marcha peticiones AJAX a un intervalo regular .

  / * Inicializar las funciones de todos los módulos a cargar la página * /
 $ (Document) ready (function () {
    fonction_nom_du_module_1 ();
    fonction_nom_du_module_2 ();
    ...
 });

 / * Inicializar las variables de tiempo de espera para cada módulo * /
 timeout_nom_du_module_1 var; 
 timeout_nom_du_module_2 var;
 ...

 / * Definición de la función para la nom_du_module_1 módulo * /

 función nom_du_module_1 ()
 {
   $ .ajax ({
     asíncrono: falso,
     del tipo: "GET"
     url: "./ajax.php"
     datos "bloque = nom_du_module_1"
     el éxito: function (html) {
       . $ ( "# Nom_du_module_1") HTML (HTML);
     }
   });

   g = setTimeout ( "nom_du_module_1 ()", 10000);
 }

No se pone la estructura de archivos aquí gobal para explicar el principio. El expediente completo estará disponible para su descarga en el final del artículo.

Este archivo contiene la hoja de estilo de página, que es la que contiene todas las opciones gráficas de formato de elementos de la página (posición, tamaño, colores, etc ...).

  / * * Init /

 cuerpo
 {
   background-color: RGBA (0, 0, 50, 1);
   font-family: Verdana "Courier New", "Lucida Console";
   font-size: 14px;
   font-weight: normal;
   padding: 0px;
   margen: 0px;
   overflow: hidden;
 }

 div, tabla, tr, td, TH, h1, h2, h3, a, lapso, p, pre, fieldset, de entrada, área de texto, la forma, img, seleccionar
 {
   font-family: Verdana "Courier New", "Lucida Console";
   font-size: 14px;
   font-weight: normal;
   padding: 0px;
   margen: 0px;
   Color: #FFF;
 }

 / * Inicio * /

 div mano #
 {
   anchura: 1366px;
   altura: 768px;
   position: relative;
   overflow: hidden;
   background-color: RGBA (0, 0, 0, 1);
   Color: #FFF;
 }

El div id cuya mano es el div contiene todos los demás div de cada módulo. Aquí se fija tamaño en píxeles de resolución nativa de la pantalla 1366 x 768 px.

El color de fondo (background-color) está unido al negro, pero se puede elegir lo que le guste

Volvamos en el meollo de las cosas con este primer módulo que muestra la fecha y la hora.

Estacion grafica multimedia con Raspberry Pi

Este módulo es muy simple, completamente en JavaScript. El módulo se llama: Reloj

La etiqueta se queda vacía, y se "llena" por medio de la función de JavaScript.

Al igual que con todos los módulos, se debe crear un div cuyo id es el nombre del módulo (aquí reloj) que contendrá la información a mostrar y, a continuación, establezer su tamaño y posición en la pantalla.

Esta función simple se basa en la hora del sistema, y muestra las horas y 24 minutos más o menos, a continuación, justo por debajo del día a día que en el mes, el nombre de mes y año .

Cada 1000 ms, o cada segundo, el contenido del div reloj se actualiza con el contenido de la horloge_content variable. También puede mostrar segundos en la pantalla si lo desea

Esto en cuanto a este primer módulo muy simple, pero entre los más útiles para visualizar en la pantalla

Esta es la utilidad más vistosas que mereceria una pantalla por sí misma:l a pantalla de la tierra con el mapa fase nubes sol en tiempo real, así como la fase de la luna Este módulo se basa en el software Xplanet para generar imágenes de todos los planetas y satélites del sistema solar. Puede representar en tiempo real cada vez, todo el sistema solar con la posición de las estrellas y planetas, hacer zoom sobre una o más planetas, etc ...

En cuanto a la tierra, se puede ver la posición de las ciudades y una gran cantidad de información, incluyendo el clima. También es posible representar nuestros satélites artificiales con su posición real, órbita, etc ...

instalación

Xplanet es una aplicación que ha sido ... muy larga! Está disponible en los repositorios de Debian, por lo que instalarlo, es simple:

  apt-get install xplanet

Aquí se pueden encontrar muchos mapas de la tierra y todos los otros planetas del sistema solar:

Xplanet trabajará para crear una combinación de las dos imágenes para representar la parte soleada de la tierra y la parte en oscuridad.

La generación de imágenes

De hecho, genera dos imágenes diferentes, una para la tierra y otra para la luna. Aquí está el archivo de configuración xplanet.conf:

En el [la tierra] por la tierra y [Luna] a la luna, que vea las rutas de acceso a los mapas para el día de "mapa" y "night_map" modo noche.

También vimos el mapa "cloud_map" por la tierra. De hecho, Xplanet permite emular una imagen o mapa de las nubes en la tierra para obtener un resultado muy realiza con la cobertura de nubes visto casi en tiempo real.

Se puede conseguir esta tarjeta nubes o Según las fuentes, que se actualizan entre 1 y 10 veces al día: "cloud_map" en diversos sitios. http://xplanet.sourceforge.net/clouds.php

Debe ser un pequeño script que descarga el último mapa publicado nubes. Una tarea cron se encargará de ejecutar el script a intervalos regulares. Xplanet_cloud.sh es mi guión:

Recuerde hacer el script ejecutable con chmod 755 xplanet_cloud.sh

Y eso es tarea CRON asociado que se pueden configurar con el comando crontab -e:

  0 * / 4 * * * /home/jarvis/xplanet/xplanet_cloud.sh

Cada 4 horas, la secuencia de comandos se ejecuta y un nuevo mapa se descargan las nubes

generar imágenes

El último paso, se inicia xplanet iniciar el sistema para generar imágenes de la tierra y la luna cada N minutos,lo cual se consigue con un pequeño script llamado Xplanet.sh que contiene dos controles (uno para la imagen de la tierra y para la imagen de la luna).

Este es el contenido del script:

  #! / Bin / sh

 TIERRA #
 xplanet -conf /home/jarvis/xplanet/xplanet.conf -output /home/jarvis/xplanet/img/xplanet_earth.png -wait 120 tierra -cuerpo -latitud -Longitude 40 10 500x500 y -geometry

 LUNA #
 xplanet -conf /home/jarvis/xplanet/xplanet.conf -output /home/jarvis/xplanet/img/xplanet_moon.png -wait 600 -cuerpo luna -geometry 250x250 y

Veamos al comando xplanet ,el cual soporta los siguientes parámetros:

  • -conf: xplanet.conf el archivo de configuración
  • -output: el archivo de salida
  • -wait: el intervalo de tiempo, en segundos, de espera entre cada uno de generación de imágenes (120 segundos o 2 minutos a la tierra, para poder observar el sol durante todo el día 600 segundos o 10 minutos son. suficiente para la luna, cuya fase varía muy lentamente).
  • -cuerpo: nombre del cuerpo celeste para ver, establecido en el archivo de configuración
  • -geometry: tamaño en píxeles, de la imagen generada
  • -latitud y -Longitude: fija el punto central de la imagen de la tierra. Al elegir la latitud y longitud 40 10, la imagen será más o menos centrado en Italia. No vemos ninguna afinidad particular con este país, es simplemente un ángulo que revela Francia y en Europa, el conjunto de África, gran parte de Rusia, las Américas y el polo norte es bastante! También puede elegir la vista del sol, por ejemplo, para ver siempre el lado soleado de la tierra, que recorrerá un poco y no siempre ver la misma parte del globo

Entonces sólo tiene que colocar la secuencia de comandos en el directorio /etc/init.d y ejecutar el siguiente comando a ejecutar en cada inicio del sistema:

  update-rc.d xplanet.sh defaults

Hemos hecho la mitad del trabajo Cada 2 minutos, se genera a partir de la tierra con un mapa nubes actualizados cada 4 horas una nueva imagen (500 x 500 píxeles). Cada 10 minutos, la imagen de la fase de la luna (250 x 250 píxeles) se actualiza.

Para evitar mostrar un error al cargar la página se debe inicializar las fuentes de <img> etiquetas con un blank.png imagen en blanco.

La hoja de estilo para este módulo es muy simple, ya que sólo tiene que definir la posición y el tamaño de la div que contiene las imágenes que se muestran.

Es simplemente para reemplazar la imagen mostrada por la nueva imagen generada. El problema es que el nombre del archivo no cambia, el navegador tenderá a mostrar la imagen que ya está almacenada en su caché. Para superar este problema vamos a añadir una marca de tiempo (fecha y hora expresada en número de segundos transcurridos desde el primer Janver 1970) en la ruta de la imagen. De esta manera, el navegador va a pensar que se trata de una nueva imagen cada vez.

En aras de la fluidez, también es necesario para precargar las imágenes antes de sustituto en la pantalla. y la imagen se evita cargar cuanto a su pantalla.

La función se ejecuta cada 120000ms (es decir, cada 2 minutos) que en última instancia se desplaza sol de la tierra y de la luna durante todo el día 🙂

Ahora veremos el módulo de tiempo que muestra el tiempo actual y la previsión de 3 a 5 días.

Estacion grafica multimedia con Raspberry Pi
Este módulo es particularmente difícil porque es muy difícil de personalizar. De hecho, es el uso de "widgets" puestos a disposición por los sitios especializados que ofrecen opciones de configuración limitadas.

Al menos tres sitios que ofrecen widgets de tiempo más o menos completa y más o menos bonita: my-meteo.fr , tameteo.com y meteocity.com

Todas las ofertas para personalizar la información que se muestra, el número de días pronosticar, colores de los elementos y estilos de iconos Una vez que las opciones seleccionadas, el sitio genera el código HTML para copiar / pegar en su página.

Aquí se muestran algunos sites que ofrecen este tipo de servicios:

Como todos los módulos de este dashscreen es una función de JavaScript que cargará insertar el contenido que se mostrará en el div del módulo.

Caso particular de este módulo, no tiene la posibilidad de actuar directamente sobre el código CSS proporcionada por el sitio de tiempo. Así que sólo tenemos que colocar el div que contendrá información sobre el clima.

La función JavaScript de este módulo es feliz de enviar una petición AJAX e introduzca el resultado de la consulta en el div adecuado.

la información del tiempo cada hora (cada ms 3600000) es más que suficiente.

En este módulo necesitamos una función PHP que devuelve el código generado por el widget. Esto nos da una función muy sencilla en la que simplemente copiar / pegar el código HTML que ha generado el sitio Tiempo

 /////////////////////////////////////////////////
 // tiempo
 /////////////////////////////////////////////////

 función meteo () {
   $ Tiempo = 'pegar aquí el código HTML generado por el sitio de tiempo';
   devolver $ meteo;
 }

Si desea ocultar cierta información proporcionada por el widget, simplemente añadir un <div> en negro por encima de los elementos que desea ver desaparecer.

Añadir un <div> en el archivo index.php justo por debajo del tiempo div:

 div # meteo_black
 {
   derecha: 0px;
   top: 420px;
   anchura: 600px;
   altura: 100px;
   position: absolute;
   z-index: 9999;
   background-color: RGBA (0, 0, 0, 1);
 }

Por supuesto, tendrá que ajustar la posición y el tamaño del div para satisfacer sus necesidades pero e l resultado, es muy fácil de leer y el diseño es muy elegante

Con estos primeros tres módulos de reloj , xplanet y el tiempo, ya es posible hacer una hermosa pantalla con todos estos elementos. Esta información puede ser valiosa y útil para todo el mundo todos los días

Como extra aparte de todos los módulos de hora ,el tiempo y las fases lunares el diseñador decidió añadir algunas funciones de "monitoreo", cuya función es supervisar los servidores y redes..

Si usted no sabe TeamSpeak , se trata de un software de conferencia de audio que permite a varias personas chatear a través de Internet (para más información http://fr.wikipedia.org/wiki/TeamSpeak ). Este módulo se utiliza para mostrar el estado del servidor de TeamSpeak (on / off) y la lista de las personas que están conectados a él.

Para obtener esta información se utiliza TeamSpeak 3 framework PHP que es una descarga gratuita. Esta gran libreria PHP proporciona acceso a todas las funciones del servidor de TeamSpeak3.

Sólo tiene que descargar y descomprimir TeamSpeak 3 framework PHP a su directorio web raíz.

Al igual que con otros módulos, sólo un <div> suficientes. Se empieza a acostumbrarse

La etiqueta se queda vacía, y se "llena" de la función de JavaScript ...

Es la hoja de estilo minimalista para este módulo:

Una vez más, una aplicación AJAX fácil de recuperar información a mostrar.

El período de actualización se establece en 10 segundos para ver rápidamente los cuales conecta / desconecta el servidor.

Eso habla por sí mismo ...

Aquí se utiliza TeamSpeak 3 framework PHP .

Primero se abre un socket en el puerto 30033 (como para el módulo 4 - Servidor de ping ) para verificar que el servidor de TeamSpeak esta funcionando bien. Si es así, entonces se puede mostrar la bandera del servidor (la imagen triton_ts3.png), entonces se usa TeamSpeak 3 Marco de PHP para recuperar la lista y el estado de los usuarios conectados .

 /////////////////////////////////////////////////
 // TS3
 /////////////////////////////////////////////////

 función TS3 () {

 $ Host_ip = '10 .0.0.1 ';
 $ Host_port = '30033';
 $ Zócalo = 0;
 $ Socket = @fsockopen ($ host_ip, $ host_port, $ errno, $ errstr, 3);
 $ Html = '';

 if ($ socket &! $ errno) {
 require_once ( "./ TS3_PHP_Framework-1.1.12 / bibliotecas / TeamSpeak3 / TeamSpeak3.php");
 $ Ts3_ServerInstance = TeamSpeak3 :: factory ( "ServerQuery: // nombre de usuario:  $ = $ Ts3_VirtualServer ts3_ServerInstance-> serverGetById (1);

 $ Html = '<img width = "200 px" src = "/ triton_ts3.png PICT" estilo = "margin-bottom: 10px;">' ;.
 . $ Html = '<table cellspacing = "0px" cellpadding = "0px">';
 foreach ($ ts3_VirtualServer-> clientList () como cliente $) {
 if ($ cliente [ "client_unique_identifier"] == 'serveradmin') {continúe;}
 $ Html = '<tr>'.
 $ Html = '<td valign = "middle">'.
 $ Html = '<estilo img =. "Width: 20px;"  src = "./ TS3_PHP_Framework-1.1.12 / images / espectador /'.$ cliente-> getIcon () 'png" alt = "">';
 $ Html = '</ td>.';
[email protected]: 10011 /"); $ Html = '<td valign = "middle">'. $ Html = '' .htmlspecialchars ($ cliente). $ Html = '</ td>.'; $ Html = '</ tr>'. } $ Html = '</ table>'. } devolver $ html; }

Este módulo es muy fácil de conseguir con la lib TeamSpeak 3 framework PHP

Si tiene servidores, NAS, o cualquier otro tipo de máquina que desee conocer el estado (encendido / apagado, o disponible / no disponible), este tipo de módulo, de nuevo es muy simple pero de gran uso

La idea es mostrar los s ervidores verdes que responden correctamente al módulo solicitaciones, y en rojo los que no responden. Para enfatizar la naturaleza alarmante de una máquina que no responde, vamos a añadir una animación para resaltar este resultado:

Estacion grafica multimedia con Raspberry Pi

Al igual que con otros módulos, sólo un <div> suficientes.

La etiqueta se queda vacía, y se "llena" de la función de JavaScript.

Para este módulo, la hoja de estilo es un poco más larga:

Los nombres de la máquina se muestran en una tabla <table> que cada célula <td> puede o bien utilizar el estilo "ping_up" si la máquina cumple o "ping_down" si la máquina no responde. En este último caso, vamos a utilizar una imagen de un gif animado, a modo de "flash" en un cuadro rojo con el mes,para dar un mayor resalte

Javascript función de este módulo hace sólo una petición AJAX, y muestra el resultado en el index.php div:

Es importante tener una visión en tiempo real del estado de las máquinas, por lo que estamos estableciendo el tiempo de refresco a 30 segundos. Se puede reducir este tiempo para que se adapte a sus necesidades, pero asegúrese de que sigue siendo mayor que el tiempo que tarda la función de PHP para poner a prueba todas sus máquinas. En promedio, se puede tardar de 4 a 5 segundos para poner a prueba todas las máquinas. Sin embargo, no es raro que se tarde hasta 20 segundos! Así que si se ajusta a 30 segundos ,esta puede ser una buena opción para el tiempo de espera entre cada actualización del módulo.

Sólo tiene que añadir unas pocas líneas a ajax.php archivo para la función correcta se llama:

En este archivo vamos a declarar la función de ping () que es responsable del lanzamiento de las aplicaciones en diferentes servidores, y luego construir la tabla HTML que se mostrará.

En general, para supervisar el estado de un servidor, se utiliza el comando ping que simplemente indica si la máquina objetivo satisface las peticiones ICMP. Esto plantea varios problemas. De hecho, es probable que el tráfico ICMP está bloqueado por un servidor cortafuegos por arriba que distorsione el resultado. Además, si desea supervisar un servidor web, por ejemplo, es muy posible que la máquina responda bien a los pings, pero que el servicio web no está disponible. Haciendo ping por lo tanto tienen poco interés ...

La idea es bastante sencilla si los servicios que se ejecutan en nuestras máquinas están disponibles. Para ello, sólo tendremos que abrir un socket con la función de PHP fsockopen () . Si la abertura del pipe no es posible eso significara que el servicio no está disponible

El $ hosts_ip variable contiene la lista de equipos para poner a prueba y la pantalla. El nombre que se muestra, la dirección IP y el puerto TCP servicio a ensayar se almacena allí. Debe adaptar los nombres, direcciones IP y número de puerto para sus necesidades.

Como se puede ver en los comentarios de código, dependiendo de la máquina de prueba, abro un zócalo en servicios tales como SSH, NFS y TeamSpeak. Esto también funciona muy bien en FTP, HTTP, POP3, etc ... hasta que el servicio a prueba de escucha en un puerto TCP, que funcionará

Nota: Es posible optimizar esta función PHP paralelización de sockets abiertos en cada máquina. De hecho, esta función prueba las máquinas de uno en uno, que puede ser largo ... En "bifurcan" la tarea con la función pcntl_fork PHP (), es posible ejecutar todas las peticiones a la vez, reduciendo así el tiempo total que se pone la función para devolver la tabla HTML que se vea. Siéntase libre de dejar un comentario si quieres más detalles sobre este procedimiento

Optimización mediante el fork

El resto permanece sin cambios, construimos la tabla HTML para mostrar como en la función inicial El principio es simple: Para cada máquina a ensayar, vamos a crear un proceso a través del hijo función de PHP fork_pcntl () que pondrá en marcha de ping () A saber, el fork sólo es posible desde la línea de comandos, será necesario adaptar el archivo ajax.php de esta manera: fsockopen (). A medida que el proceso hijo y el proceso padre no puede compartir las variables (por lo menos el uso de técnicas de memoria compartida ...), debe almacenar los resultados en una pequeña base de datos SQLite El proceso padre espera a todos proceso hijo se completa ir a leer el contenido de la base de datos SQLite (que contiene el estado de cada máquina).

  /////////////////////////////////////////////////
   // PING
   /////////////////////////////////////////////////

   if ($ == bloque de 'ping') {
     eco shell_exec ( 'php5 fork.php');  // fork.php es el archivo en el que se encuentra la función ping_fork ();
   }

El tiempo de espera En la versión no fork del Con mis 6 máquinas, si nadie contesta, él tendría que esperar fsockopen () aquí se establece en 3 segundos, lo que significa que uno debe esperar por lo menos tres segundos antes de declarar el equipo de destino como "abajo" (no disponible). ping () si un equipo no contesta, tuvo que esperar 3 segundos antes de probar la máquina siguiente, y así sucesivamente. 6 x 3 = 18 segundos antes de que el resultado final. Con la versión 6 fork solicitudes se envían simultáneamente. Cualquiera que sea el número de máquinas a ensayar, vamos a tener una respuesta dentro de 3 segundos como máximo

Este módulo es el más complicado de todo por la borda. Por un lado, tenemos que recuperar el caudal instantáneo utilizado por la interfaz de red de la pasarela que está conectado al router. A continuación, tendrá que pasar estos datos en Pi para ejecutarlos en el dashscreen. Por último, se creará un gráfico para representar esta información ...

De hecho,se ha optado por no utilizar suave tipo mrtg que se especializan en este tipo de cosas instalando el software mínimo y utilizando algunos comandos básicos. Para hacer algo simple (como el ancho de banda de visualización en el gráfico), sin necesidad de sacar la gran artillería Y entonces ... si no nos complicamos la vida, que sería mucho menos divertido, ¿verdad?

ifstat es una pequeña herramienta desde la línea de comandos que muestra las estadísticas de uso de una interfaz de red. En un terminal, escriba el siguiente comando:

  ifstat -n -i eth0

Y se obtiene continua, algo en el género:

Como vemos se obtiene cada segundo el flujo instantáneo (casi) en Kbytes / s, es decir, en KB / s Esto es exactamente lo que necesitamos ahora debe enviar esta información continuamente a nuestra pantalla.

A continuación, en una máquina B que actúa como un cliente, hacer:

  n -p 8888 -u 10.0.0.1 12345

Para transmitir los datos devueltos por el comando ifstat través netcat, vamos a utilizar una tubería . Aquí hay dos scripts completos (cliente / servidor) para realizar esta operación:

    servidor de secuencia de comandos para ejecutar en el nc_ifstat_srv.sh Pi:
  ### COMENZAR INIT INFO 
 # Proporciona: nc_ifstat_srv 
 # Required-Start: 
 # Requerido-Stop: 
 # Default-Start: 2 3 4 5 
 # Default-Stop: 0 1 6 
 # Corto Descripción: ifstat para Jarvis 
 # Descripción: Habilitar el servicio proporcionado por el demonio. 
 ### END INIT INFO

 dst_port = 12,345
 dst_dir = / home / Jarvis / ifstat
 dst_file = eth0.log

 nc -l -u $ dst_port >> dst_dir $ / $ & dst_file
    script de cliente para funcionar en su nc_ifstat_clt.sh gateway / router de:

Para ejecutar el script en el arranque de la máquina, colocarlo en /etc/init.d continuación, ejecute el comando:

  incumplimientos update-rc.d nom_du_script.sh

En este punto, usted debe tener un archivo en el Pi en la que, cada segundo, el ancho de banda instantáneo se anexa al archivo Sigue siendo para nosotros leer este archivo con un script PHP, y dibujar el gráfico para representar los datos que contiene

Aquí está mi función imagickHisto ():

En resumen, la función toma tres parámetros:

  • Así que se ha seleccionado $ Max: máximo (en KB) para limitar el gráfico. Por ejemplo, un rendimiento máximo real alcanza 1.800 KB / s. max = $ de 2000.
  • $ ETH: Nombre de la interfaz (por ejemplo, eth0)
  • $ UP_DOWN "arriba" o "abajo" para especificar el color del gráfico y los datos que se mostrará después de ifstat

La función lee una matriz de datos devuelto por la función parseData (), a continuación, se representa el gráfico una barra ancha de 1 píxel por datos. Con un ancho de 300 px, para que puedas ver 5 minutos de datos históricos

Esta función tiene dos parámetros:

  • $ Stat_file: analizador de archivos
  • $ UP_DOWN "arriba" o "abajo" para distinguir la carga de datos y descarga,

En lo que sigue, reprensenta el mismo enfoque que para los otros módulos

Se necesita un div por gráfico; Así que agregamos dos para el archivo index.php, uno para subir y otro para su descarga.

En cuanto al módulo de Xplanet , es conveniente iniciar la fuente de las etiquetas de imagen <img> con un blank.png imagen en blanco.

Basta con colocar nuestros dos <div>:

Una simple petición AJAX para recuperar la pantalla gráfica.

Igual que para el módulo Xplanet , debe pre-cargar las imágenes y las muestra.En este caso el tiempo de actualización es de 5 segundos, lo cual es suficiente.

El código para agregar este archivo permanece tan elemental para los otros módulos. Sin embargo, no se olvide de tener en cuenta los parámetros de la imagickHisto () Función:

Esta es la representación final de primer plano, cuando el ancho de banda es de alta demanda

Estacion grafica multimedia con Raspberry Pi

Si usa un pequeño servidor VPN PPTP para sus amigos para poder intercambiar fácilmente archivos o jugar juegos en red , es muy fácil de configurar tanto en el lado del servidor mediante la instalación del paquete de pptpd que el lado del cliente, ya que ' se forma nativa compatible con Windows.

Este módulo permite mostrar una lista de personas que están conectadas con el servidor PPTP VPN.

No se detalla en este artículo cómo instalar y configurar PGWP. Aquí hay un tutorial para ayudarle a implementar este tipo de VPN https://help.ubuntu.com/community/PPTPServer

El servidor pptpd está instalado en el router , proceda de la misma manera que el módulo de ancho de banda de gráficos para transferir datos utilizando netcat Pi. Lo único nuevo aquí es el comando last permitiendo recuperar información de conexión de cliente VPN.

lado Pi (servidor netcat):

lado de puerta de enlace (cliente netcat):

Ejecute estas secuencias de comandos en el inicio del sistema en la compactación en el directorio /etc/init.d a continuación, ejecutar el siguiente comando:

  update-rc.d nom_du_script.sh defaults

Un simple <div> Simplemente porque sólo queremos mostrar una lista de usuarios:

Un poco de formato de mirar bastante

Una simple petición AJAX para recuperar los datos a mostrar.

Nada específico para este módulo:

Se requieren dos funciones de este módulo:

  • vpn_parseData (): analizar el archivo enviado a través netcat
  • VPN (): crear una tabla HTML con los nombres de usuarios conectados

Esto en cuanto a este último módulo es muy simple

Como vemos el trabajo de MagdiBlog es impresionante mostrando en una pantalla de forma espectacular la hora y la fecha de una forma fácil de leer La visualización del tiempo es también información útil todos los días. En cuanto a la tierra y la luna , resulta muy agradable (s i eso no es lo suyo, puede reemplazar fácilmente estas imágenes con fotografías, añadir una función de "marco de fotos digital" integrado a los dashscreen ,etc)

Otros módulos como ping , TeamSpeak , ancho de banda y VPN pueden ser útiles para controlar lo que está sucediendo en cualquier red y recibir avisos de averías y otros problemas que puedan surgir.

Justo por encima del módulo de gráficos de ancho de banda,el autor incluso añadió un gráfico del número de visitas diarias usando GAPI para recuperar las estadísticas de Google Analytics y JSAPI (Gráficos de Google) para crear el gráfico.

Como vemos las posibilidades son inmensas sujetas tan solo a la creatividad de cada persona. Para los módulos, el principio es siempre el mismo:

  1. una hoja de estilo style.css para colocar el div en cuestión y gestionar el formato de los datos que
  2. una función de JavaScript en el archivo javascript.js que se ejecuta una petición AJAX a intervalos regulares
  3. una línea en el archivo para llamar ajax.php buena función de PHP
  4. función de PHP en el archivo .inc.php para generar el código HTML para que se muestren las imágenes

Puede descargar todas las fuentes aquí: PiHomeDashScreen

Nota: tendrá que adaptar el código a sus necesidades.

Fuente http://www.magdiblog.fr/boa-pi-homedashscreen/3-principe-de-base/


Volver a la Portada de Logo Paperblog