viernes, 24 de febrero de 2017

pg_ctl failed to find server pid on vcenter

El vcenter del trabajo estaba dando el siguiente error cuando se prendia el postgres

pg_ctl failed to find server pid 

Lo que pasaba era que no perdía el servidor Postgres, y era por tema de espacio del servidor. chequie y el disco estaba al 100% . 


Entonces se ubico un archivo de log que estaba ocupando todo el espacio, era /var/log/ldapmessages-20170222

Lo vacie. 
cat /dev/null > /var/log/ldapmessages-20170222

Y prendí postgres con:
service vmware-vpostgres start

Y después encendí el vcenter desde la web VMware vCenter Server Appliance https://x.x.x.x:5480 

lunes, 13 de febrero de 2017

Error Bacula Network error with FD during Backup: ERR=Timeout connection

En bacula despues de 2 horas y 11 minutos de respaldo, me tiraba un error de timeout. Por lo visto la conexión demoraba mucho en traer el respaldo, pesa al rededor de 8gb. 

El error que tiraba era:
bacula-dir JobId 362: Fatal error: Network error with FD during Backup: ERR=Expiró el tiempo de conexión

Leyendo en internet encontre que hay que agregar esta linea:
Heartbeat Interval = 1 minutes

Esta linea activa el keepalive. Esto suele deberse a que algún router / firewall tiene un tiempo de espera de conexión, y mata las conexiones que están "inactivas" durante demasiado tiempo. 

En el server agregar lo siguiente:

vi /etc/bacula/bacula-dir.conf

Director {                            # define myself
  Name = bacula-dir
  DIRport = 9101
  ......
  Heartbeat Interval = 1 minutes
}

vi /etc/bacula/bacula-sd.conf

Storage {                             # definition of myself
  Name = BackupServer-sd
  SDPort = 9103                  # Director's port
  .......
  Heartbeat Interval = 1 minutes
}


En el cliente agregar lo siguiente:

vi /etc/bacula/bacula-fd.conf

FileDaemon {
  Name= sgeprodbd
  FDport = 9102
  ......
  Heartbeat Interval = 1 minutes
}



Fuente:

viernes, 10 de febrero de 2017

OBJETIVOS


    • Comprender el bus I2C.
    • Conectar un display I2C.
    • Enviando mensajes a la pantalla

MATERIAL REQUERIDO.

Imagen de Arduino UNO
Arduino Uno o similar. Esta sesión acepta cualquier otro modelo de Arduino.
Protoboard
Una Protoboard.
conexiones
Cables  de protoboard
componente
 Una resistencia de 330Ω.
Display LCD
Un display LCD, de 16×2 o LCD 20×4, I2C.

EL BUS I2C


A medida que la capacidad integración en un único chip aumentaba, el número de componentes comerciales disponibles, aumentaba exponencialmente. Cada vez era, y es, más sencillo fabricar bloques de construcción electrónicos integrados en un único chip, y pronto el grosor de los catálogos de los fabricantes, engordó peligrosamente.
Era relativamente fácil encontrar esos bloques de construcción pero cuando tu diseño requería usar una docena de esos bloques, ponerlos de acuerdo y conseguir que se comunicaran eficazmente, se convirtió en un problema.
Por eso, en los primeros 80, uno de los grandes fabricantes de electrónica (Phillips), propuso una norma de comunicación digital, entre los diferentes componentes de una sistema electrónico.
Una norma que especificaba la velocidad, niveles de tensión,  y el protocolo a seguir para conseguir esa comunicación y la hizo abierta.
Esa norma se llamó Inter Integrated Circuits bus, o IIC, y pronto se convirtió en un estándar de facto en la industria. Las especificaciones han ido mejorando con los años, pero la idea básica sigue siendo la misma:
  • Protocolo de dos hilos de control, uno para transmitir los datos, SDA y otro, el reloj asíncrono que indica cuando leer los datos SCL. Mas GND y 5V (cuando se requiera).
  • Cada dispositivo conectado al bus I2C y cada uno tiene su dirección exclusiva, de 7 bits, (Asi que, en teoría, podemos conectar 27 = 128, dispositivos).
  • Uno de estos componentes, debe actuar como master, es decir controla el reloj.
  • No se requiere una velocidad de reloj estricta, ya que es el master quien controla el Clock.
  • Es multi master, el master puede cambiar, pero solo uno puede estar activo a la vez, y proporciona un protocolo de arbitraje y detección de colisiones. (Si no has entendido esto, no te preocupes, todavía es pronto).
Puedes encontrar que a este bus se le llama I2C, IIC o I2C, y también, como TWI (Two Wire Interface, o interface de 2 hilos), pero siempre es lo mismo.
Arduino y el I2C
La idea es que todos los componentes se conecten en paralelo a las dos líneas del Bus, SDA y SCL. En cada momento solo puede haber un master, en este caso, nuestro Duino y los demás se configuran como esclavos.
  • Puede haber más de un master. La norma propone un sistema de arbitraje, para transferir el control de uno a otro, pero en un instante dado, solo uno puede ser el master.
  • Fijaros también que hay unas resistencias de Pullup conectadas a SDA y SCL. Son imperativas, ya que el bus es activo bajo (Esto es, la señal activa es un 0, no un 1. Pero tranquilo, que esto no te afecta)
  • Cuando vayas a conectar algo al busI2C, es imprescindible que leas el manual para saber si los pullups los tienes que poner tú, o vienen puestos en el componente.
  • En el caso del display I2C que vamos a usar, normalmente incluyen los pullups.
Y la buena noticia es que nuestro Arduino lo soporta de fábrica con una librería estándar, que utiliza dos de los pines analógicos para las funciones SDA (Datos) y SCL (Clock).
  • En el Arduino UNO, los pines I2C están en los pines analógicos A4 (SDA) y A5 (SCL).
  • En el Arduino Mega y DUE, son el 20 (SDA) y en el 21(SCL).
La librería I2C, en Arduino se llama Wire (para que no os confiéis), y gestiona el protocolo de comunicaciones completo, lo que es un detalle, pues nos ahorra la parte aburrida de estudiar el protocolo y escribir programas para ello.
  • Esto no es vagancia, sino construir sobre el trabajo de terceros. Es una de las muy grandes virtudes de la comunidad Arduino. Muchas librerías para incorporar a nuestros proyectos, sin necesidad de mancharte las manos de grasa.
En esta sesión vamos a conectar un display LCD de 16×2 con interface I2C, y así podréis comprobar porque en la última sesión os recomendé usarlo, en lugar del que se conecta directamente con 16 pines.
Pero antes, tenemos que asegúranos de otro asunto.

SCANNER DE I2C


Cada componente que conectamos al bus I2C tiene una dirección única, y cada mensaje y orden que transmitimos al bus, lleva anexa esta dirección, indicando cuál de los muchos posibles, es el receptor del mensaje.
Pero, claro, esto implica que sabemos la dirección del componente. Lo normal es comprobar la información técnica del fabricante del componente, y ahí suele decirnos cuál es la dirección por defecto.
Pero como ya sabemos, que en la vida las cosas rara vez son como en los cuentos, algún alma caritativa (y con mucho mundo a sus espaldas), hizo un programita para Arduino, que nos informa, de lo que hay en nuestro bus y con qué dirección. I2C scanner
Naturalmente, este programa, no tiene ni idea de quien responde y lo que hace, pero bastante es que nos informe de que hay alguien en la dirección xx.
Si no sabemos en qué dirección está un componente dado, basta con colocarlo solo en el bus, y ver qué dirección nos reporta el I2C scanner. EL resultado para el LCD que tengo es 0x27 Hexadecimal.
Informe I2C scan

Así que ya podemos pasar a hablar de como programar  el uso del display.

DIAGRAMA DE CONEXIÓN


La conexión es, nuevamente, trivial:
Img_34_2
Simplemente Arduino A4 a SDA (Datos) y A5 a SCL (Clock), más GND y alimentación. Vamos con el programa.

PROGRAMA DE CONTROL


Lo primero, es que descarguéis una nueva librería para maneja el display con I2C, Se llama LiquidCrystal_I2C y es un añadido para la librería estándar que viene con tu Duino (tranquilo no duele y debería ser automático).
No he encontrado información del autor o autores, y solo he visto que hacen referencia a que el nombre de la librería es Malpartida (A mí no me miréis).
Descarga la librería LiquidCrystal_I2C , y vamos a instalarla lo primero
\\Programa\ImportarLibreria\Añadir \Librería
Busca en tu directorio de descargas, la librería LiquidCrystal_I2C .zip y haz doble click, para que se instale en nuestro IDE.
Ahora vamos a incluir la librería I2c que en Arduino se llama Wire, y como es estándar la incluyes con:
\\Programa\ImportarLibreria\Wire
Ahora hay que incluir la librería LiquidCrystal normal y después la de LiquidCrystal_I2C.Deberiamos tener 3lineas como estas:
#include <Wire.h>
#include <LCD.h>
#include <LiquidCrystal_I2C.h>
Vamos ahora a definir una variable con la dirección de nuestro display. En mi caso la 0x27
byte dir = 0x27   // Ese 0x significa que es hexadecimal, no decimal
Y por último creamos una instancia del objeto LiquidCrystal_I2C:
LiquidCrystal_I2C             lcd( dir, 2, 1, 0, 4, 5, 6, 7);
Al que le pasamos la dirección dir del display y varios números que indican que pines debe usar la librería para el display, no de Arduino. Ignóralo y lo copias así para los displays. El resto queda así:
#include <Wire.h>
#include <LCD.h>
#include <LiquidCrystal_I2C.h>

#define I2C_ADDR    0x27

LiquidCrystal_I2C             lcd(I2C_ADDR,2, 1, 0, 4, 5, 6, 7);
void setup()
   {
       lcd.begin (16,2);    // Inicializar el display con 16 caraceres 2 lineas
       lcd.setBacklightPin(3,POSITIVE);
       lcd.setBacklight(HIGH);

       lcd.home ();                   // go home
       lcd.print("Prometec.net");
       lcd.setCursor ( 0, 1 );        // go to the 2nd line
       lcd.print("Malpartida lib");
   }
void loop() 
   {}
Aquí tenéis el resultado:
Display 16x2 I2C

RESUMEN DE LA SESIÓN


Tutorial LCD con I2C, controla un LCD con solo dos pines

Tutorial LCD con I2C, controla un LCD con solo dos pines
En este tutorial usaremos un módulo adaptador de LCD a I2C para poder controlar nuestro LCD con solo dos pines de nuestro Arduino

Este tutorial es similar a este otro (Tutorial LCD, conectando tu arduino a un LCD1602 y LCD2004) con la diferencia que usamos un módulo adaptador LCD a I2C, pero trabajaremos los mismo ejercicios y así ver que el modulo es fácil de usar como si trabajáramos directamente con el LCD.
EL Módulo adaptador LCD a I2C que usaremos está basado en el controlador I2C PCF8574, el cual es un expanzor de entrada y salidas digitales controlado por I2C, que en este módulo se usa para controlar un LCD.
La dirección del módulo I2C que viene por defeco es 0x27, pero podemos cambiarlo soldando los puentes A0,A1y A2; quedando la dirección en binario de la siguiente forma :0|0|1|0|0|A2|A1|A0. Por defecto A0,A2,A1 valen 1 pero si soldamos los puentes, estos se conectan a tierra teniendo un valor 0, por ejemplo si soldamos los tres puentes la dirección seria 0|0|1|0|0|0|0|0 (0x20).
Módulo adaptador LCD a I2C
Para controlar el contraste solo necesitamos variar el potenciómetro que se encuentra en el módulo.
La luz de fondo se controla por software, desde el Arduino; pero el modulo tiene un Jumper para desconectar el Led de la luz de fondo.

Conexiones entre Arduino y Módulo adaptador LCD a I2C

El adaptador LCD a i2C tiene los pines ordenados para solo conectar al LCD, esto lo podemos hacer a través de un protoboard o soldando directamente al LCD
conexion adaptador LCD a I2C
Para conectar con el Arduino solo utilizamos los pines I2C del Arduino y alimentación
Adaptador LCD a I2C
Arduino Uno, Nano, Mini.
Arduino Mega , DUE
Arduino Leonardo
  GND
GND
GND
GND
  VCC
5V
5V
5V
  SDA
A4
20
2
  SCL
A5
21
3
   
conexion arduino y LCD I2C
  
Las conexiones para el LCD de 20 x 4 son las mismas.



Librería LiquidCrystal_I2C para Arduino

Existen diferentes tipos y versiones de  la librería para LCD I2C, información más completa pueden encontrar en: http://playground.arduino.cc/Code/LCDi2c , nosotros usaremos la librería LiquidCrystal_I2C
Las funciones que utiliza esta librería son similares a la librería LiquidCrystal de Arduino, pero volveremos a explicaremos las funciones principales.

LiquidCrystal_I2C(lcd_Addr, lcd_cols, lcd_rows) 

Función constructor, crea una variable de la clase LiquidCrystal_I2C, con dirección, columnas y filas indicadas.

init()

Inicializa el modulo adaptador LCD a I2C, esta función internamente configura e inicializa el I2C y el LCD.

clear()

Borra la pantalla LCD y posiciona el cursor en la esquina superior izquierda (posición (0,0)).

setCursor(col, row)

Posiciona el cursor del LCD en la posición indicada por col y row(x,y); es decir, establecer la ubicación en la que se mostrará posteriormente texto escrito para la pantalla LCD.

print()

Escribe un texto o mensaje en el LCD, su uso es similar a un Serial.print

scrollDisplayLeft()

Se desplaza el contenido de la pantalla (texto y el cursor) un espacio hacia la izquierda.

scrollDisplayRight()

Se desplaza el contenido de la pantalla (texto y el cursor) un espacio a la derecha.

backlight();

Enciende la Luz del Fondo del LCD

noBacklight();

Apaga la Luz del Fondo del LCD

createChar (num, datos)

Crea un carácter personalizado para su uso en la pantalla LCD. Se admiten hasta ocho caracteres de 5x8 píxeles (numeradas del 0 al 7). Dónde: num es el número de carácter y datos es una matriz que contienen los pixeles del carácter. Se verá un ejemplo de esto más adelante.
Explicado la librería veamos unos ejemplos:

1. Un Hola mundo con Arduino y LCD

Mostraremos  texto y un valor numérico en el LCD, para esto cargamos el siguiente sketch:
#include <Wire.h> 
#include <LiquidCrystal_I2C.h>

//Crear el objeto lcd  dirección  0x27 y 16 columnas x 2 filas
LiquidCrystal_I2C lcd(0x27,16,2);  //

void setup() {
  // Inicializar el LCD
  lcd.init();
  
  //Encender la luz de fondo.
  lcd.backlight();
  
  // Escribimos el Mensaje en el LCD.
  lcd.print("Hola Mundo");
}

void loop() {
   // Ubicamos el cursor en la primera posición(columna:0) de la segunda línea(fila:1)
  lcd.setCursor(0, 1);
   // Escribimos el número de segundos trascurridos
  lcd.print(millis()/1000);
  lcd.print(" Segundos");
  delay(100);
}

Después de cargar, en su LCD deben obtener el siguiente resultado

 Hola mundo con LCD I2C

La programación es similar para un LCD de 20x4, solo  hay que modificar en:
 LiquidCrystal_I2C lcd(0x27,20,4);

2. Desplazando el texto en el LCD

En este ejemplo para desplazar el texto usaremos la función scrollDisplayLeft(). El codigo es el siguiente:
#include <Wire.h> 
#include <LiquidCrystal_I2C.h>

//Crear el objeto lcd  dirección  0x27 y 16 columnas x 2 filas
LiquidCrystal_I2C lcd(0x27,16,2);  //

void setup() {
  // Inicializar el LCD
  lcd.init();
  
  //Encender la luz de fondo.
  lcd.backlight();
  
  // Escribimos el Mensaje en el LCD en una posición  central.
  lcd.setCursor(10, 0);
  lcd.print("WWW.NAYLAMPMECHATRONICS.COM");
  lcd.setCursor(4, 1);
  lcd.print("Tutorial LCD, Test de desplazamiento  ");
}

void loop() {
  //desplazamos una posición a la izquierda
  lcd.scrollDisplayLeft(); 
  delay(500);
}

 EL resultado sera el texto desplazandose de derecha a izquierda.

desplazamiento de texto con LCD I2C

3. Mostrando datos de sensores o variables en el LCD

En este ejemplo mostramos en el LCD variables, que pueden representar valores de sensores u otros datos. Para simular los sensores usaremos potenciómetros conectados a los puertos analógicos.
#include <Wire.h> 
#include <LiquidCrystal_I2C.h>

//Crear el objeto lcd  dirección  0x27 y 16 columnas x 2 filas
LiquidCrystal_I2C lcd(0x27,16,2);  //

void setup() {
  // Inicializar el LCD
  lcd.init();
  
  //Encender la luz de fondo.
  lcd.backlight();
  
}

void loop() {
  int sen1=analogRead(A0);
  float sen2=analogRead(A1)*(5.0 / 1023.0);
  float sen3=analogRead(A2)*(100.0 / 1023.0);
  int tiempo=millis()/1000;
  // Cursor en la primera posición de la primera fila
  lcd.setCursor(0,0);
  lcd.print("ADC:");
  lcd.print(sen1);
  lcd.print("   ");
  // Cursor en la 11° posición de la primera fila
  lcd.setCursor(10,0);
  lcd.print("V:");
  lcd.print(sen2,1);//1 decimal
  lcd.print("V  ");
  // Cursor en la primera posición de la 2° fila
  lcd.setCursor(0,1);
  lcd.print("T:");
  lcd.print(sen3,1); //1 decimal
  lcd.print("337C  "); // "337" -> "°"
  // Cursor en la 11° posición de la 2° fila
  lcd.setCursor(10,1);
  lcd.print("t:");
  lcd.print(tiempo);
  lcd.print(" s  ");
  
  delay(200);
  
}

Su resultado debe ser el siguiente.

 Datos y variables en LCD I2C

4. Agregando nuevos caracteres a nuestro LCD

Explicaremos nuevamente como esta característica en caso no hayan revisado el tutorial anterior.
En algunos casos el LCD no tiene los caracteres que deseamos, o necesitamos dibujar caracteres personalizados, en este caso usamos la función createChar () pero antes expliquemos como está constituido un carácter:
Un carácter está formado  por 5x8 pixeles  los cuales se representan por 8 bytes, uno para cada fila, los 5 bits menos significativos representan los pixeles del carácter
  
caracter alfanuemrico LCD
  
Como máximo podemos crear 8 caracteres nuevos.
Para este ejemplo crearemos los siguientes caracteres:
 pixeles nuevos caracteres LCD
   
A continuación se muestra el código para implementar los nuevos caracteres.
#include <Wire.h> 
#include <LiquidCrystal_I2C.h>

//Crear el objeto lcd  dirección  0x27 y 16 columnas x 2 filas
LiquidCrystal_I2C lcd(0x27,16,2);  //
byte N[8] = {
B11111,
B10001,
B10001,
B10001,
B10001,
B10001,
B10001,
B00000,
};
byte A[8] = {
B11111,
B10001,
B10001,
B10001,
B10001,
B11111,
B10001,
B00000,
};
byte Y[8] = {
B10001,
B10001,
B10001,
B10001,
B11111,
B00100,
B00100,
B00000,
};
byte L[8] = {
B10000,
B10000,
B10000,
B10000,
B10000,
B10000,
B11111,
B00000,
};
byte M[8] = {
B11111,
B10101,
B10101,
B10101,
B10101,
B10101,
B10101,
B00000,
};
byte P[8] = {
B11111,
B10001,
B10001,
B10001,
B11111,
B10000,
B10000,
B00000,
};
byte cara[8] = {
B00000,
B10001,
B00000,
B00000,
B10001,
B01110,
B00000,
};
byte cuerpo[8] = {
B01110,
B01110,
B00100,
B11111,
B00100,
B01010,
B10001,
B00000,
};

void setup() {
  // Inicializar el LCD
  lcd.init();
  
  //Encender la luz de fondo.
  lcd.backlight();
  
  //creamos los nuevos caracteres
  lcd.createChar (0,N);
  lcd.createChar (1,A);
  lcd.createChar (2,Y);
  lcd.createChar (3,L);
  lcd.createChar (4,M);
  lcd.createChar (5,P);
  lcd.createChar (6,cara);
  lcd.createChar (7,cuerpo);
 // Escribimos el texto en el LCD
  lcd.setCursor(0, 0); 
  lcd.print("Tutorial LCD_I2C");
  lcd.setCursor(0, 1);
  lcd.write (byte (7));
  lcd.print(" ");
  lcd.write (byte (6));
  lcd.print(" ");
  lcd.write (byte (0));
  lcd.write (byte (1));
  lcd.write (byte (2));
  lcd.write (byte (3));
  lcd.write (byte (1));
  lcd.write (byte (4));
  lcd.write (byte (5));
  lcd.print(" ");
  lcd.write (byte (6));
  lcd.print(" ");
  lcd.write (byte (7));
  

  
}

void loop () {}

El resultado del ejemplo anterior es el siguiente:
  
nuevos caracteres LCD I2C
  
Los ejemplos anteriores se trabajan similar con un LCD2004

Pueden adquirir los materiales usados en este tutorial en nuestra tienda

Arduino Uno R3

Módulo adaptador LCD a I2C

LCD1602 Azul Backlight

LCD2004 Azul Backlight

 

Tutoriales Relacionados

Tutorial LCD, conectando tu arduino a un LCD1602 y LCD2004

Tutorial pantalla TFT táctil con Arduino


Fuente: