linux - RRDTool, ¿Cómo obtener png-files por medio de os-execute-call desde lua-script?
bash shell (0)
Texto largo, pero sin los extractos de guiones, etc. probablemente sea difícil de explicar y comprender el trasfondo de las preguntas.
Introducción:
Utilizando RRDTool en Raspberry & Domoticz, puedo crear archivos RRD y actualizarlos según sea necesario por medio de un lua-script y un archivo sh relacionado, pero hacer gráficos con la misma construcción tiene algunos problemas.
Hace diferencia si y cómo se realizan las llamadas con archivos sh generadores de gráficos, ya sea desde la línea de comandos, o desde dentro de la secuencia de comandos lua por medio de os.execute
También he intentado ejecutar estos sh-files de los crones, pero a veces el comportamiento errático es menos visible. Debido a las instalaciones de depuración que prefieren lua-script o una solución similar para ejecutar la prueba con sh-files.
Sospecho que los ''problemas'' están relacionados con sutilezas en la definición de rutas en los archivos sh para las guiones 2, respectivamente 3, pero no puedo poner mi dedo sobre los ''culpables''. Empíricamente han encontrado alguna salida práctica, pero se agradecen las indirectas explicando el ''¿Por qué?'' en las 4 preguntas.
Pregunta 1:
¿Cuál es el motivo de las diferentes respuestas (como se describe a continuación) para las 4 llamadas, que se ejecutan desde la línea de comandos frente a ejecutarse desde os.execute?
Descripción de las pruebas y resultados
El directorio de trabajo es / home / pi
La carpeta con RRDTool-files es usr / bin /
Todos los archivos sh y rrd se encuentran en la carpeta / home / pi con propiedades establecidas en 755
Script create_ pitemp1 _graph.sh para crear pitemp1.png desde pitemp1.rrd
Tiene una segunda secuencia de comandos activa para llamar al gráfico de rrdtool y para poner el archivo png en la carpeta [¿qué?]. Si la 2da línea se cambia a / usr / bin / rrdtool graph /home/pi/pitemp1.png / el resultado es un mensaje de error ''permission denied''.
#!/bin/bash
/usr/bin/rrdtool graph pitemp1.png /
#rrdtool graph pitemp1.png /
DEF:temp_1h=/home/pi/pitemp1.rrd:temp1H:AVERAGE /
DEF:temp_2l=/home/pi/pitemp1.rrd:temp2L:AVERAGE /
DEF:temp_3s=/home/pi/pitemp1.rrd:temp3S:AVERAGE /
LINE1:temp_1h#5fd00b:Temp_tuin_hoog /
LINE1:temp_2l#0000ff:Temp_tuin_laag /
LINE1:temp_3s#ff0000:Temp_tuin_bodem /
COMMENT:"/t/t/t/t/t/t/l" /
COMMENT:"/t/t/t/t/t/t/l" /
GPRINT:temp_1h:LAST:"Temp_tuin_hoog Laatste/: %2.1lf" /
GPRINT:temp_1h:MAX:" Max./: %2.1lf" /
GPRINT:temp_1h:MIN:" Min./: %2.1lf" /
COMMENT:"/t/t/t/t/t/t/l" /
GPRINT:temp_2l:LAST:"Temp_tuin_laag Laatste/: %2.1lf" /
GPRINT:temp_2l:MAX:" Max./: %2.1lf" /
GPRINT:temp_2l:MIN:" Min./: %2.1lf" /
COMMENT:"/t/t/t/t/t/t/l" /
GPRINT:temp_3s:LAST:"Temp_tuin_bodem Laatste/: %2.1lf" /
GPRINT:temp_3s:MAX:" Max./: %2.1lf" /
GPRINT:temp_3s:MIN:" Min./: %2.1lf" /
COMMENT:"/t/t/t/t/t/t/l" /
--width 700 --height 400 /
--title="Temperatuur van laatste 24 uur" /
--vertical-label="Temp.(C)"
# Copy picture to directory of local website
# cp /home/pi/pitemp1.png /var/www/html
Script create_ pitemp1A _graph.sh para crear pitemp1.png desde pitemp1.rrd
Idéntico al archivo sh anterior, pero ahora tiene la tercera línea de script activa para llamar al gráfico rrdtool y para poner el archivo png en la carpeta / home / pi. Cuando este archivo sh se ejecuta desde la línea de comandos, se ejecuta sin ningún mensaje de error y el png-file que llega a / home / pi como se esperaba
#!/bin/bash
#/usr/bin/rrdtool graph pitemp1.png /
rrdtool graph /home/pi/pitemp1.png /
DEF:temp_1h=/home/pi/pitemp1.rrd:temp1H:AVERAGE /
DEF:temp_2l=/home/pi/pitemp1.rrd:temp2L:AVERAGE /
DEF:temp_3s=/home/pi/pitemp1.rrd:temp3S:AVERAGE /
LINE1:temp_1h#5fd00b:Temp_tuin_hoog /
LINE1:temp_2l#0000ff:Temp_tuin_laag /
LINE1:temp_3s#ff0000:Temp_tuin_bodem /
COMMENT:"/t/t/t/t/t/t/l" /
COMMENT:"/t/t/t/t/t/t/l" /
GPRINT:temp_1h:LAST:"Temp_tuin_hoog Laatste/: %2.1lf" /
GPRINT:temp_1h:MAX:" Max./: %2.1lf" /
GPRINT:temp_1h:MIN:" Min./: %2.1lf" /
COMMENT:"/t/t/t/t/t/t/l" /
GPRINT:temp_2l:LAST:"Temp_tuin_laag Laatste/: %2.1lf" /
GPRINT:temp_2l:MAX:" Max./: %2.1lf" /
GPRINT:temp_2l:MIN:" Min./: %2.1lf" /
COMMENT:"/t/t/t/t/t/t/l" /
GPRINT:temp_3s:LAST:"Temp_tuin_bodem Laatste/: %2.1lf" /
GPRINT:temp_3s:MAX:" Max./: %2.1lf" /
GPRINT:temp_3s:MIN:" Min./: %2.1lf" /
COMMENT:"/t/t/t/t/t/t/l" /
--width 700 --height 400 /
--title="Temperatuur van laatste 24 uur" /
--vertical-label="Temp.(C)"
# Copy picture to directory of local website
# cp /home/pi/pitemp1.png /var/www/html
Respuestas para 4 llamadas desde la línea de comando
Llamando a los sh-files desde Commandline hasta PuttySSH, las 2 llamadas con script-versión pitemp1A ponen el archivo png relacionado en / home / pi / sin reporte de errores, pero las 2 llamadas con script-versión pitemp1 lanzan errores, refiriéndose a file /home/pi/pitemp1.rrd que, sin embargo, está presente [?] según lo probado por las dos primeras llamadas que tuvieron éxito.
pi@raspberrypi:~$ sudo /home/pi/create_pitemp1A_graph.sh
797x529
pi@raspberrypi:~$ ./create_pitemp1A_graph.sh
797x529
pi@raspberrypi:~$ sudo /home/pi/create_pitemp1_graph.sh
/home/pi/create_pitemp1_graph.sh: line 5: DEF:temp_1h=/home/pi/pitemp1.rrd:temp1H:AVERAGE: No such file or directory
pi@raspberrypi:~$ ./create_pitemp1_graph.sh
./create_pitemp1_graph.sh: line 5: DEF:temp_1h=/home/pi/pitemp1.rrd:temp1H:AVERAGE: No such file or directory
Respuesta cuando en la secuencia de comandos 1A la línea de fondo está ''activa'' durante la llamada desde la línea de comando
pi@raspberrypi:~$ ./create_pitemp1A_graph.sh
797x529
cp: cannot create regular file ‘/var/www/html/pitemp1.png’: Permission denied
Pregunta relacionada 2: se genera un gráfico, pero ¿por qué se deniega el permiso para copiar?
A continuación se muestra la configuración exitosa para llamar a los sh-files en un lua-script, en la sección del script entre commandArray {} y return commandArray, como se cita a continuación.
-- Line 259, Export of data = update of rrd database(s) and generation of graph
-- Line 260, Extract current date as date.year, date.month, date.day, date.hour, date.min, date.sec
date = os.date("*t")
-- Line 262, Update RRDs
-- The RRDs have internal setting for update within 5 minutes
os.execute (''rrdtool update /home/pi/pitemp1.rrd N:''..temp1H..'':''..temp1D..'':''..temp2L..'':''..temp2D..'':''..temp3S)
print (''Script temp_hum_fill_rrd 1st database updated!'')
-- Line 273, Graph info from the RRDs
if (date.min % Interval1 == Offset1) then
os.execute (''sudo /home/pi/create_pitemp1A_graph.sh'')
print (''Script create_pitemp1A_graph completed!'')
end
De acuerdo con Domoticz-log y los resultados, las líneas de scripts anteriores no contienen errores, y el script completo está libre de errores: los archivos rrd relacionados y los archivos png relacionados se encuentran en / home / pi con la marca de tiempo según la actualización- intervalo y desplazamiento.
2017-11-11 12:30:00.539 LUA: Script temp_hum_fill_rrd 1st database updated!
2017-11-11 12:30:00.582 LUA: Script create_pitemp1A_graph completed!
2017-11-11 12:30:00.583 LUA: End of temp_hum rrd-script
Sin embargo, pregunta 3: ¿Por qué es necesario usar ''sudo /home/pi/create_pitemp1A_graph.sh''? Porque si / home / pi / es el directorio de trabajo del usuario, parece suficiente usar ''./create_pitemp1A_graph.sh''
La carga posterior de los archivos se realiza mediante un archivo Python que copia los archivos del directorio de trabajo / home / pi hacia mi servidor. Un método alternativo de carga es ''agarrar de forma remota'' los archivos por medio de un programa de sincronización como Allway Sync.
Como se dijo en la introducción: funciona, pero ;-) ¿por qué?