PfSense y puerto paralelo (LPT)
-
Estimados buenos días, hace un tiempo había consultado como podía hacer para que dependiendo del estado de las gateways me encendiera un led conectado al puerto paralelo de la pc.
Pues bien he logrado hacer funcionar, el problema que tengo ahora es como hacer para ejecutar este script php como servicio en forma permanente, porque ahora si lo ejecuto desde el navegador funciona, pero no puedo hacer que lo ejecute el mismo pfsense.el script que hice es el siguiente (funciona bien desde el navegador):
require_once("guiconfig.inc"); require_once("pfsense-utils.inc"); require_once("functions.inc"); $a_gateways = return_gateways_array(); $gateways_status = array(); $gateways_status = return_gateways_status(true); $wan1 = "WAN_DHCP"; //Nombre de la wan 1 $wan2 = "WAN2_PPPOE"; //gateway wan2_pppoe arnet if ($gateways_status[$wan2]) { if (stristr($gateways_status[$wan2]['status'], "force_down")) { shell_exec("/usr/local/etc/lpt/pr23 3 on"); shell_exec("/usr/local/etc/lpt/pr23 2 off"); } elseif (stristr($gateways_status[$wan2]['status'], "down")) { shell_exec("/usr/local/etc/lpt/pr23 3 on"); shell_exec("/usr/local/etc/lpt/pr23 2 off"); } elseif (stristr($gateways_status[$wan2]['status'], "delay")) { shell_exec("/usr/local/etc/lpt/pr23 2 on"); shell_exec("/usr/local/etc/lpt/pr23 3 off"); } elseif ($gateways_status[$wan2]['status'] == "none") { shell_exec("/usr/local/etc/lpt/pr23 3 off"); shell_exec("/usr/local/etc/lpt/pr23 2 off"); } } else { shell_exec("/usr/local/etc/lpt/pr23 3 on"); shell_exec("/usr/local/etc/lpt/pr23 2 on"); } //gateway wan_dhcp gigared if ($gateways_status[$wan1]) { if (stristr($gateways_status[$wan1]['status'], "force_down")) { shell_exec("/usr/local/etc/lpt/pr23 5 on"); shell_exec("/usr/local/etc/lpt/pr23 4 off"); } elseif (stristr($gateways_status[$wan1]['status'], "down")) { shell_exec("/usr/local/etc/lpt/pr23 5 on"); shell_exec("/usr/local/etc/lpt/pr23 4 off"); } elseif (stristr($gateways_status[$wan1]['status'], "delay")) { shell_exec("/usr/local/etc/lpt/pr23 4 on"); shell_exec("/usr/local/etc/lpt/pr23 5 off"); } elseif ($gateways_status[$wan1]['status'] == "none") { shell_exec("/usr/local/etc/lpt/pr23 5 off"); shell_exec("/usr/local/etc/lpt/pr23 4 off"); } } else { shell_exec("/usr/local/etc/lpt/pr23 5 on"); shell_exec("/usr/local/etc/lpt/pr23 4 on"); }
Como hago para que esta pagina (gw_leds.php) ejecute desde el pfsense.
probé con Cron Jobs pero no funciona, o no logro hacer funcionar.
Probé con Curl instalando en pfsense pero tampoco funciona.
Probé con PHPservice instalando desde paquetes, pero tampoco.O puede ser que este haciendo mal algo en esta ultima parte.
Espero sus comentarios,
Saludos!! -
¡Curiosa aplicación!
Supongo que se trata de un problema de permisos y/o de entorno, env
Fíjate que los .inc los supones en un directorio en concreto. Si ejecutas esto desde un cron o desde consola seguramente tu PATH es incompleto.
env | grep PATH
¿Qué arroja en consola el comando?
php gw_leds.php
Espero haberme explicado…
En System: Advanced: Notifications: SMTP E-Mail puedes configurar alertas por e-mail. Cuando cambia el estado de una puerta te envía un correo. Evidentemente si sólo hay una puerta, mal asunto para recibir las notificaciones.
-
Hola, paso a contestar. Desde consola ejecutando php /usr/local/www/gw_leds.php me tira lo siguiente:
[2.2.1-RELEASE][root@pfsense.infoservi.local]/root: php /usr/local/www/gw_leds.php Expires: 0 Last-Modified: Sat, 04 Apr 2015 22:43:02 GMT Cache-Control: no-store, no-cache, must-revalidate Cache-Control: post-check=0, pre-check=0 Pragma: no-cache X-Frame-Options: SAMEORIGIN Content-type: text/html "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <title>501</title> [Potential DNS Rebind attack detected, see http://en.wikipedia.org/wiki/DNS_rebinding Try accessing the router by IP address instead of by hostname.](/index.php?logout) [](/index.php?logout) ``` [Si ejecuto env | grep /usr/local/www/gw_leds.php no me arroja nada. Ejecutando desde http://pfsense.infoservi.local/gw_leds.php, ejecuta bien los comandos que esta en el archivo php, o sea encienden los led correctamente. Saludos!](/index.php?logout)
-
Lo que te dije. Hay problemas con el entorno y/o inclusión de librerías.
Prueba:
fetch http://pfsense.infoservi.local/gw_leds.php
o
wget http://pfsense.infoservi.local/gw_leds.php
fetch es el comando por defecto en FreeBSD. Supongo que estará disponible.
wget no es el comando por defecto, pero igual está instalado.
A ver si ejecutando así te funciona.
-
Estimado bellera paso a exponer lo que me devuelve al ejecutar los dos comandos que me indicas.
el FETCH
[2.2.1-RELEASE][root@pfsense.infoservi.local]/root: fetch http://pfsense.infoservi.local:8100/gw_leds.php fetch: http://pfsense.infoservi.local:8100/gw_leds.php: size of remote file is not known gw_leds.php 6709 B 6221 kBps 00m00s
WGET
[2.2.1-RELEASE][root@pfsense.infoservi.local]/root: wget http://pfsense.infoservi.local:8100/gw_leds.php --2015-04-06 09:52:41-- http://pfsense.infoservi.local:8100/gw_leds.php Resolving pfsense.infoservi.local (pfsense.infoservi.local)... 192.168.99.20 Connecting to pfsense.infoservi.local (pfsense.infoservi.local)|192.168.99.20|:8100... connected. HTTP request sent, awaiting response... 200 OK Length: unspecified [text/html] Saving to: 'gw_leds.php.1' gw_leds.php.1 [ <=> ] 6.55K --.-KB/s in 0.001s 2015-04-06 09:52:41 (4.68 MB/s) - 'gw_leds.php.1' saved [6709]
Pero no ejecuta lada del script, no encienden los leds.
Ahora, si ejecuto con el path completo, podria llegar a funcionar? Poniendo el full path en todos los includes.
Saludos!
-
Pues tendrás que hacer eso, a ver si resulta suficiente.
Si eso no sirve igual lo mejor es que incluyas tu código dentro de gwib.inc
https://github.com/pfsense/pfsense/blob/23cb405565539c2fa0c3db9eba052afce343f8a8/etc/inc/gwlb.inc
En la línia 900 se llena el array gateways_status
$gateways_status = return_gateways_status(true);
Guarda el original y añade tu código por detrás de la línea 900. Creo que eso debería ser suficiente.
O modifica la función return_gateways_status justo antes de su return (línea 479), pues se la llama en varios sitios:
https://github.com/pfsense/pfsense/search?utf8=%E2%9C%93&q=%24gateways_status+%3D+return_gateways_status%28true%29%3B
-
Voy a hacer eso, después comento los resultados!
Muchas gracias por toda la ayuda!
Saludos.