{"id":87,"date":"2010-05-22T00:13:03","date_gmt":"2010-05-21T22:13:03","guid":{"rendered":"http:\/\/pinguino.walii.es\/archives\/87"},"modified":"2010-10-09T21:00:56","modified_gmt":"2010-10-09T18:00:56","slug":"network-status-check-pinguinofoneracshell","status":"publish","type":"post","link":"https:\/\/pinguino.walii.es\/?p=87","title":{"rendered":"NETWORK STATUS CHECK (ping\u00fcino+fonera+Cshell)"},"content":{"rendered":"

Hoy se me ha ocurrido hacer algo para quitarme tareas de encima, no les ha ocurrido que su mujer los llama diciendo \u00abno funciona internet, \u00bfQu\u00e9 le pasa?\u00bb J<\/span> y nosotros a 20kilometros de distancia deber\u00edamos saber lo que ocurre por telepat\u00eda 2.0 J<\/span><\/p>\n

Por eso se me ocurri\u00f3 un indicador que nos informe con levantar la mirada, si el problema el local o de internet, por ejemplo me ha pasado que el proveedor hace modificaciones y se corta, en esos caso es bueno saberlo para no tocar o modificar nada sin estar seguro que el problema es nuestro.<\/p>\n

O quiz\u00e1s para ver el estado de la red en todo momento. Saber si nuestra conexi\u00f3n a internet se encuentra saturada o ca\u00edda, o tenemos alg\u00fan servidor de internet que nos interesa saber cu\u00e1ndo se cae.<\/p>\n

He realizado un dise\u00f1o con PING\u00dcINO un programa simple y un script en el equipo a donde conectemos el puerto serie del PING\u00dcINO.<\/p>\n

Es b\u00e1sicamente la misma configuraci\u00f3n del proyecto RGB wifi, que utilizando la comunicaci\u00f3n RS232 puede ordenar a PING\u00dcINO que encienda uno u otro color o led.<\/p>\n

En este caso controlaremos dos leds RGB, un BUZZER y si queremos tambi\u00e9n un servo (esto \u00faltimo no lo tengo terminado en cuanto a hardware, pero si el c\u00f3digo)<\/p>\n

<\/embed><\/object><\/p>\n

<\/p>\n

El script que pongo en la fonera (pueden utilizar un linux cualquiera, corrigiendo las compatibilidades de los devices)<\/p>\n

Lo he puesto en el directorio \/sbin y lo he llamado check.sh, lo he realizado como para que cada 20 segundos controle la conexi\u00f3n a internet y el router de salida. Esta es la versi\u00f3n funcional, ahora estoy en una con controles de TTL y calidad de conexi\u00f3n. Para que seg\u00fan la congesti\u00f3n nos informe o no.
\n<\/code><\/address>\n
Este script le dice al PING\u00dcINO via puerto serie, que controle dos servidores y que encienda la puerta 7 cada vez que recibe mensajes, y que se vean los puertos 4 y 1 cuando los servidores se encuentran online, y 6 y 3 cuando el ICMP no regresa. O sea, cuando se cae internet.<\/code><\/p>\n

[sourcecode language=\u00bbc\u00bb]
\nwhile [ 0 ]; do
\nsleep 20
\ninternet=www.google.com
\nsr1=192.168.99.1
\ncountint=$(ping -c 1 -W 2 $internet | grep ‘received’ | awk -F’,’ ‘{ print $2 }’ | awk ‘{ print $1 }’)
\ncountsr1=$(ping -c 1 -W 2 $sr1 | grep ‘received’ | awk -F’,’ ‘{ print $2 }’ | awk ‘{ print $1 }’)
\necho 7 > \/dev\/ttyS0
\nif [ "$countint" = "0" ]; then
\necho "$internet PING [FAILED]"
\necho 6 > \/dev\/ttyS0
\nelse
\necho "$internet PING [OK]"
\necho 4 > \/dev\/ttyS0
\nfi
\nif [ "$countsr1" = "0" ]; then
\necho "$sr1 PING [FAILED]"
\necho 3 > \/dev\/ttyS0
\nelse
\necho "$sr1 PING [OK]"
\necho 1 > \/dev\/ttyS0
\nfi
\ndone
\n[\/sourcecode]<\/p>\n

Ahora hay que ponerlo en el inicio y que se ejecute solo cuando inicia el equipo.<\/p>\n

Creando otro archivo en el directorio \/etc\/init.d con el nombre check.sh y con lo siguiente dentro, tendremos nuestro inicio automatico.<\/p>\n

[sourcecode language=\"c\"]
\n#!\/bin\/sh \/etc\/rc.common
\n#
\nSTART=87
\nstart()
\n{
\n\/sbin\/check.sh &
\n}
\nstop()
\n{
\nkillall check.sh
\n}
\n[\/sourcecode]<\/p>\n

Recordemos ejecutar \"\/etc\/init.d\/check.sh enable\" para que se guarde entre los RC de inicio.
\n<\/code><\/address>\n

CODIGO PING\u00dcINO<\/p>\n

[sourcecode language=\"py\"]
\n#define PIC18F4550
\n#define tempo 250
\n#define buzer 2000
\n#define RUNLED PORTAbits.RA4
\nint counter=0;
\nint i;
\nint key;
\nvoid setup()
\n{
\nfor (i=0;i<8;i++) {
\npinMode(i,OUTPUT);
\ndigitalWrite(i,LOW);
\n}
\nSerial.begin(9600);
\n}
\nvoid loop()
\n{
\nRUNLED=1;delay(500);RUNLED=0;delay(500);
\nif Serial.available()
\n{
\nint count=0;
\nkey=Serial.read();
\nSerial.print("Puerto serie Listo!!!\\n\\r");
\nif (key=='1') digitalWrite(2,1),digitalWrite(1,0),digitalWrite(0,0);
\nif (key=='2') digitalWrite(2,0),digitalWrite(1,1),digitalWrite(0,0);
\nif (key=='3') {for (count=0;count<10;count++){digitalWrite(1,0),digitalWrite(2,0);digitalWrite(0,1);delay(tempo);digitalWrite(0,0);delay(tempo);}}
\nif (key=='4') digitalWrite(5,1),digitalWrite(4,0),digitalWrite(3,0);
\nif (key=='5') digitalWrite(5,0),digitalWrite(4,1),digitalWrite(3,0);
\nif (key=='6') {for (count=0;count<10;count++){digitalWrite(4,0),digitalWrite(5,0);digitalWrite(3,1);delay(tempo);digitalWrite(3,0);delay(tempo);}}
\nif (key=='6') digitalWrite(6,1), delay(buzer),digitalWrite(6,0);
\nif (key=='7') {for (count=0;count<5;count++){digitalWrite(7,1);delay(100);digitalWrite(7,0);delay(100);}}
\n}
\n}
\n[\/sourcecode]<\/p>\n

<\/address>\n
<\/address>\n
<\/address>\n
Si queremos agregar un servo controlado por alg\u00fan car\u00e1cter solo deber\u00edamos agregar los siguiente.<\/code><\/address>\n
\n

[sourcecode language=\"py\"]<\/p>\n

#define PIC18F4550
\n#define tempo 250
\n#define buzer 2000
\n#define RUNLED PORTAbits.RA4
\nint control_pin=0; \/\/servo
\nint position=0; \/\/posici\u00f3n servo
\nint counter=0;
\nint i;
\nint key;
\nint pulseWidth = 20; \/\/pulso de servo
\nvoid setup()
\n{
\nfor (i=0;i<8;i++) {
\npinMode(i,OUTPUT);
\ndigitalWrite(i,LOW);
\n}
\nSerial.begin(9600);
\n\/\/servo config
\npinMode(control_pin,OUTPUT);
\nT1CON=0x01;
\nPIE1bits.TMR1IE=1;
\nINTCON|=0xA0;
\n}
\n\/\/control de angulo del servo
\nvoid UserInterrupt()
\n{
\nif (PIR1bits.TMR1IF)
\n{
\nTMR1H=0xFF;
\nTMR1L=0x9C;
\nPIR1bits.TMR1IF=0;
\ncounter++;
\nif (counter==1500) counter=0;
\nif (counter>position+51) PORTBbits.RB0=0;
\nelse PORTBbits.RB0=1;
\n}
\n}
\nvoid loop()
\n{
\nRUNLED=1;delay(500);RUNLED=0;delay(500);
\nif Serial.available()
\n{
\nint count=0;
\nkey=Serial.read();
\nSerial.print("Puerto serie Listo!!!\\n\\r");
\nif (key=='1') digitalWrite(2,1),digitalWrite(1,0),digitalWrite(0,0);
\nif (key=='2') digitalWrite(2,0),digitalWrite(1,1),digitalWrite(0,0);
\nif (key=='3') {for (count=0;count<10;count++){digitalWrite(1,0),digitalWrite(2,0);digitalWrite(0,1);delay(tempo);digitalWrite(0,0);delay(tempo);}}
\nif (key=='4') digitalWrite(5,1),digitalWrite(4,0),digitalWrite(3,0);
\nif (key=='5') digitalWrite(5,0),digitalWrite(4,1),digitalWrite(3,0);
\nif (key=='6') {for (count=0;count<10;count++){digitalWrite(4,0),digitalWrite(5,0);digitalWrite(3,1);delay(tempo);digitalWrite(3,0);delay(tempo);}}
\nif (key=='6') digitalWrite(6,1), delay(buzer),digitalWrite(6,0);
\nif (key=='7') {for (count=0;count<5;count++){digitalWrite(7,1);delay(100);digitalWrite(7,0);delay(100);}}
\nif (key=='n') position=75; \/\/control del servo
\nif (key=='m') position=0; \/\/control del servo
\nif (key=='b') position=150; \/\/control del servo
\n}
\n}<\/p>\n

[\/sourcecode]<\/p>\n<\/address>\n

<\/address>\n
<\/address>\n
<\/address>\n

Aqu\u00ed vemos el PING\u00dcINO 18f2550 con los 3 leds RGB conectados a los puertos 0 a 7. Solo 8 colores. El 9\u00ba puede ser de piloto.<\/p>\n

\"\"<\/p>\n

Aqu\u00ed vemos los mismos por fuera de la caja, luego les pondre una etiqueta para identificarlos.<\/p>\n

\"\"<\/p>\n

Aqu\u00ed vemos la conexi\u00f3n serie de la fonera (con el adaptador de voltajes) que se conecta al puerto serie del PINGUINO<\/p>\n

\"\"<\/p>\n

Mas de cerca?!<\/p>\n

\"\"<\/p>\n

Una vista general con la salida serie y el puerto USB conectado, este \u00faltimo no es necesario ya que una vez programado la alimentaci\u00f3n la provee el puerto serie, ya que tiene una l\u00ednea de 5volts, que proviene de la fonera.<\/p>\n

\"\"<\/p>\n","protected":false},"excerpt":{"rendered":"

Hoy se me ha ocurrido hacer algo para quitarme tareas de encima, no les ha ocurrido que su mujer los llama diciendo \u00abno funciona internet,…<\/p>\n","protected":false},"author":2,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":[],"categories":[3,4],"tags":[],"_links":{"self":[{"href":"https:\/\/pinguino.walii.es\/index.php?rest_route=\/wp\/v2\/posts\/87"}],"collection":[{"href":"https:\/\/pinguino.walii.es\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/pinguino.walii.es\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/pinguino.walii.es\/index.php?rest_route=\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/pinguino.walii.es\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=87"}],"version-history":[{"count":2,"href":"https:\/\/pinguino.walii.es\/index.php?rest_route=\/wp\/v2\/posts\/87\/revisions"}],"predecessor-version":[{"id":307,"href":"https:\/\/pinguino.walii.es\/index.php?rest_route=\/wp\/v2\/posts\/87\/revisions\/307"}],"wp:attachment":[{"href":"https:\/\/pinguino.walii.es\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=87"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/pinguino.walii.es\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=87"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/pinguino.walii.es\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=87"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}