Leer ficheros con Python – Función Open ()

por | 17 mayo, 2017

Cuando trabajas con Python no es necesario importar librerías o un gran conocimiento en programación para la lectura, escritura y tratamiento de ficheros. Python soporta este tipo de acciones con ficheros de forma nativa, simple y de fácil comprensión.

El primer paso, antes de entrar en artículos de creación, modificación y borrado de ficheros, es aprender a leer el contenido de un fichero y almacenarlo temporalmente en variables de nuestro código en Python.

1. Lectura de ficheros con Python

1.1 Introducción

La función ‘open‘ nos permitirá abrir ficheros y leer su contenido, el contenido devuelto por la función ‘open‘ no es una simple cadena de texto si no un tipo de dato algo más complejo denominado ‘objeto de tipo fichero‘. Un objeto de tipo fichero por supuesto almacenará el contenido del propio fichero, no obstante, también pondrá a nuestra disposición otros atributos del fichero como el nombre y modo en que se ha abierto (solo lectura, editable,…). La información contenida en el ‘objeto de tipo fichero‘ nos será de gran utilidad y en ciertos casos incluso podremos modificarla para por ejemplo copiar y renombrar ficheros.

Es muy importante saber que existen dos tipos de ficheros y la diferencia entre ambos:

  • Ficheros de texto:
    • Estructurados como una secuencia de líneas donde cada línea almacena una secuencia de caracteres.
    • Es delimitado el fin de una línea con un carácter especial denominado EOL (End Of Line).

Nota: En resumen, para que nos entendamos todos, al leer un fichero de tipo texto obtendremos todas las líneas del fichero a la vez y sabremos donde termina una y empieza otra a través de un carácter especial como la coma simple o el salto de línea.

Este es el contenido de la primera línea,
Este es el contenido de la segunda línea y se separa de la primera con la última coma,

  • Ficheros binarios: Un fichero binario es cualquier tipo de fichero que no es de texto (imágenes, audio,…), poseen una estructura distinta a los de texto y podrán ser procesados únicamente por aplicaciones que conozcan la estructura del archivo. Si intentamos abrir un fichero binario como texto lo único que veremos será un batiburrillo de caracteres incomprensible a simple vista.

1.2 Abrir ficheros < función open ( ) >

Para usar esta función debemos informar dos argumentos:

  • Nombre del fichero: Nombre del archivo de texto que deseamos abrir incluyendo ruta completa en caso de no encontrarse en la misma carpeta donde ejecutamos nuestro programa en Python.
  • Modo: Este argumento es opcional, no obstante, es recomendable su uso. Este argumento nos servirá para abrir archivos de las siguiente formas o modos:
    • r‘ : Modo solo lectura. Al abrir un archivo en solo lectura protegeremos su contenido y por tanto no podremos guardar cambios o modificaciones. Si no declaramos ningún modo este será el que se aplique por defecto.
    • w‘ : Modo escritura. Al abrir en modo escritura será creado un nuevo fichero sobre el que podremos modificar el contenido y guardar los cambios, no obstante, será borrado cualquier fichero que tenga el mismo nombre y reemplazado por nuestro nuevo archivo.
    • a : Modo añadir o agregar. Este modo abrirá archivos y agregará el contenido que deseemos al final del mismo, este modo es muy usado para añadir continuamente nueva información a ficheros ya existentes.
    • r+‘ : Modo especial lectura/escritura: Este modo combina los dos primeros permitiendo leer contenido existente y escribir nuevo contenido.

1.3 Leer ficheros < función read() >

Una vez abierto el fichero y almacenado el objeto de tipo fichero podemos continuar con la lectura del texto que este contiene, recordad que un objeto de tipo fichero no solo contiene el texto en si, también contiene otros atributos y para obtener el contenido del texto deberemos aislarlo en otra variable a parte. Para leer el texto deberemos usar la función ‘read()‘ sobre el objecto de tipo fichero.

Los siguientes casos serían los más sencillos y los que usaremos en la gran mayoría de los códigos en nuestros manuales.

  • Si deseamos leer todo el contenido:

ObjFichero = open(«NombreFichero.txt»)
Objfichero.read()
ObjFichero.close()

  • Si deseamos leer únicamente los cinco primeros caracteres del texto:

ObjFichero = open(«NombreFichero.txt»)
Objfichero.read(5)
ObjFichero.close()

NotaTras la lectura de un fichero es recomendable el uso de la función ‘close()‘ para la liberación del objeto de tipo fichero y la memoria en uso por el mismo.

1.4 Caso práctico

Para nuestro caso práctico sean de más fácil comprensión prepararemos el entorno del siguiente modo:

  • Crearemos la siguiente carpeta ‘Ejemplos‘ con los siguientes comandos en la consola de nuestra Raspberry Pi:

cd /home/pi
mkdir Ejemplos

  • Crearemos un fichero llamado ‘Ejemplo1.txt‘ donde introduciremos nuestro nombre y apellidos. Recomendamos usar el siguiente ejemplo:

echo «Nombre Apellido1 Apellido2» >> Ejemplo.txt

  • Comprobaremos el contenido del fichero ‘Ejemplo1.txt‘ usando en la consola el siguiente comando:

more Ejemplo1.txt

  • Usaremos, como es costumbre en este blog, Python 3 (IDLE) en nuestra Raspberry Pi y crearemos un nuevo fichero con nuestro código llamado ‘Ejemplo1.py‘.

Nota: Recordad que en nuestros manuales siempre trabajamos con Python 3 para seguir una versión concreta. Las diferencias entre Python 2 y 3 son salvables pero en muchas ocasiones unas simples comillas o paréntesis de más funcionan en uno y en otro no.

  • Ejemplo 1:  Leeremos el contenido de nuestro fichero en modo solo lectura e imprimemos por pantalla el contenido, para esto crearemos un fichero llamado ‘Ejemplo1.py‘,   introduciremos el código mostrado a continuación y ejecutaremos dicho fichero como hemos mostrado en manuales anteriores. Recordad que si no definimos modo por defecto se aplicará el modo lectura ‘r‘.

ObjFichero = open(“home/pi/Ejemplo1.txt”)
TextoFichero = ObjFichero.read()
print (TextoFichero)
ObjFichero.close()

  • Ejemplo 2:  Nos basaremos en el mismo ejemplo pero en esta ocasión únicamente extraeremos los diez primeros caracteres o letras y añadiremos al texto que mostraremos por pantalla el texto «Hola».

ObjFichero = open(“home/pi/Ejemplo1.txt”)
TextoFichero = ObjFichero.read(10)
print («Hola » + TextoFichero)
ObjFichero.close()

Nota: Para ejecutar nuestro código recomendamos abrir el shell de Python, crear nuestro fichero y ejecutar el contenido con F5 o desde el menú «Run > Run Module«.

 

Con estos ejemplos concluimos nuestro manual de lectura de ficheros con Python, esperamos que os haya gustado y veros pronto 😀

Comandos SQL básicos en bases de datos (SELECT)

por | 16 mayo, 2017

En nuestros anteriores artículos mostramos como instalar y configurar una pequeña base de datos con PHPMyAdmin y MySQL, así pues, recomendamos dar un repaso a dichos artículos para tener clara la base sobre la que trabajaremos en este manual de SQL.

Para hacer más sencillo nuestro manual trabajaremos únicamente con dos tablas que serán ‘T_SENSOR‘ y ‘T_SENSOR_AUDIT‘, la primera representarán un listado de los sensores disponibles y conectados a nuestra Raspberry Pi, de la segunda obtendremos el muestreo de datos obtenidos con el paso del tiempo en dichos sensores.

Nota: Evidentemente todos los datos que usaremos de prueba serán de ejemplo, ni que decir que no disponemos aún de tomas de datos reales ni conexión directa a una Raspberry Pi conectada.

Antes de empezar queremos dar tres consejos sencillos:

  • No hay mejor consulta que la que no se ejecuta, es decir, una consulta en base de datos requiere cálculos, uso de memoria,… y hay que tener claro cuando necesitamos ejecutarla. Ejecutar la misma consulta o consultas semejantes muchas veces sin necesidad real afectará directamente al rendimiento de nuestro portal web o aplicación.
  • Simplificad las consulta en vuestro coco y construidlas poco a poco (vaya rima molona eh!), una consulta compleja puede tener más de 10, 20 y 100 líneas, si creáis dicha consulta de una sola atacada os complicará mucho la vida si hay algún simple error.
  • El lenguaje SQL puede ser complejo, así pues, traducid en vuestra mente la consulta en palabras sencillas como por ejemplo «Quiero saber cuales eran los sensores de temperatura que estaban activos el día 1 de enero de 2016».

Comenzamos pues con el manual megapropowerohmygodsoyelmasterdeluniverso de SQL:

1. Consultas (SELECT) SQL

1.1 Como construir una consulta

Todos los comandos SQL siguen un patrón fijo con parámetros obligatorios y opcionales, en el caso de la consulta la estructura es la siguiente:

SELECT <DATOS_DE_SALIDA> FROM <NOMBRE_TABLA> WHERE <EXPRESIÓN_DE_CONDICIÓN> ORDER BY <CAMPOS_DE_ORDENACIÓN> <TIPO_ORDENACIÓN>

  • Los argumentos del ejemplo marcados en rojo son siempre obligatorios en cualquier consulta
  • Los argumentos del ejemplo marcados en verde son opcionales
  • Los argumentos en negrita son comandos propios de SQL fijos e invariables, es decir, cualquier letra que agreguemos antes o después producirán un error en el comando (SSELECT, SELECTS, SELETS,…)
  • Los argumentos marcados entre <> serán variables, no obstante, deben seguir un patrón también definido en el lenguaje SQL para que puedan ser interpretados por la base de datos.
  • La definición de cada parámetro es el siguiente:
    • SELECT: Con este parámetro al principio del comando indicamos a la base de datos que deseamos hacer una consulta. En palabras llanas y traduciendo a lo loco en nuestra mente deberíamos interpretarlo como «Quiero selecciona» o «quiero buscar».
    • <DATOS DE SALIDA>: En esta parte del comando indicaremos que deseamos obtener ¿queremos un nombre, un apellido, la edad?… o en nuestras tablas de ejemplo ¿queremos el identificador del sensor, que tipo es, su estado,…?. En caso de querer obtener información de todos los campos de la tabla usaremos el carácter asterisco (*) como si de un comodín se tratara.
    • FROM: Este parámetro precederá al nombre de la tabla o tablas donde deseamos buscar, su traducción llana sería algo así como «buscando en…»
    • <NOMBRE_TABLA>: Como tengamos que explicar esto apaga y vámonos 😛 …. es broma … aquí indicaremos el nombre de la tabla o tabla donde buscar, en caso de tratarse de más de una tabla separaremos los nombres con una coma.
    • WHERE: Argumento opcional pero de uso casi obligatorio pues precede a las condiciones que deben cumplir los registros de buscamos y rara vez será la que ejecutemos una consulta sin buscar algo muy concreto.
    • <EXPRESIÓN_DE_CONDICIÓN>: Aquí está uno de los puntos fuertes de SQL, existen multitud de operadores para comparara, sumar, agrupar,… tantos que mostraremos en este artículo lo más básico básico y adjuntaremos un enlace a webs oficiales con más información. No es solo pereza… es que hay tantos que nos llevaría páginas y páginas explicarlos.
    • ORDER BY: Este comando opcional precederá al nombre del campo o campos por los que deseamos ordenar el listado resultante de la consulta.
    • <CAMPOS_DE_ORDENACIÓN>: Existe la opción de indicar varios campos en la ordenación separando estos con comas, en la mayoría de los casos únicamente ordenaremos por un único campo.
    • <TIPO_ORDENACIÓN>: La ordenación normalmente de aplica ascendente o descendente usando las palabras ASC y DESC. La ordenación nos permitirá listar los resultados de la A a la Z o viceversa en caso de textos, de números menores a mayores y viceversa, por fechas,…

1.2 Consulta básica en SQL

Denominaremos consulta básica a aquella que únicamente consulta en una tabla sin exceso de complicación en las condiciones de búsqueda

Un ejemplo claro sería el siguiente:

SELECT * FROM T_SENSOR_AUDIT

El resultado mostraría TODOS los registros de la tabla ‘T_SENSOR‘ sin excepción, no obstante, no suele ser lo común buscar todos los resultados sin ton ni son. A continuación mostraremos más consultas básicas y una «frase» con la que podríamos hacernos una idea de lo que buscamos.

  • Quiero saber el identificador de todos los sensores con estado ‘Activo’.

SELECT ROW_ID FROM T_SENSOR WHERE ESTADO = ‘Activo’

  • Quiero saber el identificador y el estado de todos los sensores de tipo ‘Temperatura’.

SELECT ROW_ID, ESTADO FROM T_SENSOR WHERE TIPO= ‘Temperatura’

  • Quiero saber el identificador, tipo de sensor y estado de todos los sensores de tipo ‘Humedad’ y ‘Temperatura’ ordenados por identificador de forma ascendente.

SELECT ROW_ID, TIPO, ESTADO FROM T_SENSOR WHERE TIPO IN (‘Humedad’, ‘Temperatura’) ORDER BY ROW_ID ASC

1.3 Consulta compleja en SQL:

Consideraremos una consulta compleja aquella que utilice dos o más tablas, expresiones de agrupación, operaciones como sumas,… Las consultas complejas siguen exactamente el mismo patrón que las anteriores, las diferencias esenciales serán las siguientes:

  • Podemos solicitar resultados combinados de todas las tablas
  • Las múltiples tablas se definen de forma consecutiva separándolas por comas
  • Es preciso definir «como vamos a asociar las distintas tablas» en las condiciones de búsqueda tras el parámetro WHERE, estas definiciones de relación son denominadas ‘JOIN‘.

En el siguiente ejemplo mostraremos como construir estas consultas:

SELECT <TABLA1>.<CAMPO_SALIDA_TABLA1>, <TABLA2>.<CAMPO_SALIDA_TABLA2> FROM <TABLA1>, <TABLA2> WHERE <TABLA1>.<PK_TABLA1> = <TABLA2>.<FK_TABLA2>

  • Los argumentos del ejemplo marcados en azul son obligatorios en cualquier consulta compleja
  • Los argumentos del ejemplo marcados en verde son las referencias correspondientes a la primera tabla
  • Los argumentos del ejemplo marcados en rojo son las referencias correspondientes a la segunda tabla
  • La definición de cada parámetro es el siguiente:
    • SELECT: Primer parámetro requerido en consultas.
    • <TABLA1>: Nombre de la primera tabla de la consulta.
    • <CAMPO_SALIDA_TABLA1>: Nombre del campo perteneciente a la primera tabla de la consulta.
    • <TABLA2>:  Nombre de la segunda tabla de la consulta
    • <CAMPO_SALIDA_TABLA2>: Nombre del campo perteneciente a la segunda tabla de la consulta.
    • FROM: Este parámetro precederá al nombre de la tabla o tablas donde deseamos buscar, su traducción llana sería algo así como «buscando en…»
    • WHERE: Argumento obligatorio en consultas compleja, tras este argumento como mínimo debe ser informada la relación o asociación entre ambas tablas (‘JOIN‘).
    • JOIN: Asociación de la ‘Primary key‘ de la tabla principal con la ‘Foreign key‘ de la segunda tabla.

Como podréis observar en la estructura anterior, es preciso definir en los campos de salida y en la expresión ‘WHERE’ de donde procede cada campo, este formato nos ayudará a distinguir mejor de donde procede un campo en caso de que ambas tablas tengan campos con el mismo nombre (véase el ROW_ID).

A continuación mostraremos un ejemplo real distinguiendo con colores de que tabla procede cada argumento:

SELECT T_SENSOR.ROW_ID, T_SENSOR.TIPO, T_SENSOR_AUDIT.ESTADO, T_SENSOR_AUDIT.FECHA, T_SENSOR_AUDIT.TIPO FROM T_SENSOR, T_SENSOR_AUDIT WHERE T_SENSOR.ROW_ID = T_SENSOR_AUDIT.SENSOR_ID

La consulta del ejemplo mostraría en palabras llanas lo siguiente – «Quiero para cada sensor su identificador, tipo, estado en el instante de la auditoria, fecha de auditoria y tipo de auditoria». El resultado nos mostraría toooodas las capturas de datos que hemos hecho sobre todos nuestros sensores a lo largo del tiempo, en caso de que deseemos acotar un poco más la búsqueda deberíamos ampliar las condiciones o criterios de búsqueda tras la sentencia ‘WHERE‘.

La siguiente consulta mostrará los mismos resultados pero únicamente para sensores de temperatura, en palabras llanas sería «Quiero para cada sensor de ‘Temperatura‘ su identificador, tipo, estado en el instante de la auditoria, fecha de auditoria y tipo de auditoria»

SELECT T_SENSOR.ROW_ID, T_SENSOR.TIPO, T_SENSOR_AUDIT.ESTADO, T_SENSOR_AUDIT.FECHA, T_SENSOR_AUDIT.TIPO FROM T_SENSOR, T_SENSOR_AUDIT WHERE T_SENSOR.ROW_ID = T_SENSOR_AUDIT.SENSOR_ID AND T_SENSOR.TIPO = ‘Temperatura’

Fijaos que simplemente en una consulta cruzando dos tablas el texto es cada vez más largo y tedioso, podríamos evitar algo de texto usando los que se denominan ‘ALIAS’ sobre nuestras tablas. Un alias sería algo así como un nombre corto que reemplazaría al nombre de nuestra tabla, para usar un alias simplemente añadimos el nombre que queremos usar como alias tras el nombre de la tabla en la sentencia ‘FROM’. Un ejemplo sería el siguiente:

SELECT T1.ROW_ID, T1.TIPO, T2.ESTADO, T2.FECHA, T2.TIPO FROM T_SENSOR T1, T_SENSOR_AUDIT T2 WHERE T1.ROW_ID = T2.SENSOR_ID AND T1.TIPO = ‘Temperatura’

Personalmente, para aclararme las ideas, suelo escribir las consultas complejas dividiéndolas por partes de la siguiente forma:

SELECT
T1.ROW_ID,
T1.TIPO,
T2.ESTADO,
T2.FECHA,
T2.TIPO
FROM
T_SENSOR T1,
T_SENSOR_AUDIT T2
WHERE
T1.ROW_ID = T2.SENSOR_ID
AND T1.TIPO = ‘Temperatura’

Nota: Es posible que en esta consulta no tenga mucho sentido esta forma de organizarla, sin embargo, pensad que cuando trabajas con consulta sobre más de 20 tablas a la vez es preferible molestarse un poco e invertir un minuto en organizar la consulta y que sea mucho más comprensible y visual al ojo humano.

Hasta aquí el artículo de introducción a consultas SQL, continuaremos en nuestro próximo artículo afinando un poco las consultas para no mostrar datos duplicados.

Creación de relaciones entre tablas con MySQL y PHPMyAdmin

por | 9 mayo, 2017

En nuestro proyecto ‘Sistema de riego‘ necesitaremos interrelacionar las tablas o entidades existentes para dar consistencia a los datos almacenados y facilitar tanto su gestión como el acceso posterior a los mismos, poco sentido tendría toda la información en una única tabla a modo cajón desastre o almacenar la información en múltiples tablas a lo loco y sin sentido.

Usaremos como ejemplo las tablas ‘T_SENSOR‘ y ‘T_SENSOR_AUDIT‘ existentes en nuestro modelo de base de datos.

  • T_SENSOR: Contendrá información básica y características de cada sensor, es decir, identificador único de sensor, tipo y estado. Puede que no le veamos sentido ahora pero tendrá su utilidad, a futuro por ejemplo usaremos esta tabla para comprobar si un sensor está activado y que tipo de información esperamos de él.
  • T_SENSOR_AUDIT: Esta tabla almacenará la información que nos proporcionará cada sensor (valor en grados centígrados, valor en nivel de humedad,…) en un momento dado, es decir, el valor registrado por un sensor concreto en una fecha, hora, minuto y segundo concreto.

Imaginemos la siguiente situación:

En la tabla ‘T_SENSOR_AUDIT‘ vemos como se almacena el histórico de valores en temperatura, humedad, intensidad luminosa,… de cada sensor siempre y cuando en ese instante estuviera activo, así mismo, también almacenamos el estado de ese sensor en un momento dado para saber si estaba activo o no, es decir, ‘T_SENSOR_AUDIT‘ guarda el estado/valor de un sensor en una fecha, minuto y segundo concretos, sin embargo, ‘T_SENSOR‘ nos muestra el estado activo/inactivo ahora mismo.

Estas informaciones son útiles dependiendo de que queramos hacer, ‘T_SENSOR‘ nos servirá para controlar un sensor concreto en el presente y ‘T_SENSOR_AUDIT‘ nos servirá más bien para hacer estudios, análisis y cruces de datos, gráficas bonitas,… o como comúnmente llaman ahora a esto las grandes empresas chachiguays ‘Reporting’.

Para que los datos almacenados tengan consistencia debemos establecer relaciones entre ambas tablas que eviten introducir datos erróneos, es decir, poco sentido tendría intentar almacenar información de un sensor identificado con el número ‘5’ sobre ‘T_SENSOR_AUDIT‘ si no existe realmente dado de alta en la tabla principal ‘T_SENSOR‘. Estas referencias entre tablas se llevan a cabo a través de lo que comúnmente se denominan ‘Llaves foráneas‘ o ‘Foreign keys‘ que mola más y queda más pro.

En nuestro ejemplo el campo ‘SENSOR_ID‘ de la tabla ‘T_SENSOR_AUDIT‘ sería una llave foránea, foreign key, referencia, link,… o como queramos llamarlo al campo ‘ROW_ID‘ de la tabla ‘T_SENSOR‘.

Una vez comentado lo anterior, nos gustaría hacer un par de anotaciones para facilitar la comprensión, fijar ciertas siglas o acrónimos y seamos sinceros para escribir menos palabrejos raros 🙂

  • Se denomina ‘Primary Key‘ al campo que identifica de forma única e inequívoca a un registro en una tabla de base de datos. Haremos referencia a este concepto con las siglas ‘PK‘.
  • Se denomina ‘Foreign Key‘ al campo de la tabla hija que hará referencia al campo que ejerce como ‘PK‘ de la tabla padre para establecer una relación entre ambas tablas. Haremos referencia a este concepto con las siglas ‘FK‘.
  • El método más común para hacer referencia a un campo concreto de una tabla utilizando el nombre de la tabla y el nombre del campo separados por un punto de este modo ‘NombreTabla.NombreCampo‘, en nuestro caso un par de ejemplos claros serían ‘T_SENSOR.ROW_ID‘, ‘T_SENSOR_AUDIT.ESTADO‘ o  ‘T_SENSOR_AUDIT.FECHA‘.

Dicho esto podemos continuar dando un ejemplo sobre PHPMyAdmin, para ello usaremos la base de datos ‘BD_AUTORIEGO‘ creada en el artículo anterior del proyecto.

Estableceremos el foco en PHPMyAdmin sobre la tabla ‘T_SENSOR_AUDIT‘ y la pestaña ‘Estructura‘ tal como mostramos en la siguiente imagen.

En esta pantalla pulsaremos sobre el icono ‘Vista de relaciones‘ para poder establecer relaciones, enlaces o asociaciones entre esta y otras tablas de la base de datos.

Al pulsar dicho botón nos dirigirá a la siguiente pantalla

En esta pantalla cumplimentaremos los datos tal cual se muestra en la siguiente imagen y pulsaremos ‘Guardar‘.

Esta configuración significa lo siguiente:

  • El campo ‘T_AUDIT_SENSOR.SENSOR_ID‘ está directamente asociado al campo ‘T_SENSOR.ROW_ID‘, así pues, no podremos insertar un valor en el primero que no exista o se haya dado de alta previamente en la tabla ‘T_SENSOR‘.
  • En caso de ser borrado un registro en la tabla  ‘T_SENSOR‘ todos los registros de la tabla ‘T_AUDIT_SENSOR‘ relacionados con dicho ‘T_SENSOR.ROW_ID‘ serán borrados en cascada.
  • En caso de ser actualizado un registro en la tabla  ‘T_SENSOR‘ todos los registros de la tabla ‘T_AUDIT_SENSOR‘ relacionados con dicho ‘T_SENSOR.ROW_ID‘ serán actualizados en cascada.

Para hacer una prueba sencilla y demostrar que esto es verdad navegaremos a la pantalla ‘SQL‘ a través de la botonera superior de PHPMyAdmin.

Esta ventana nos permite construir comandos de consulta, actualización, inserción,… en lenguaje SQL. No entraremos en detalle de SQL pues es un lenguaje que explicaremos con más detalle en otros manuales, en esta ocasión únicamente facilitaremos los comandos básicos para nuestra prueba.

1. Creación de registros en tabla ‘T_SENSOR’:

Introduciremos el siguiente comando en SQL:

INSERT INTO `t_sensor`(`ROW_ID`, `TIPO`, `ESTADO`) VALUES (1,’Temperatura’,’Activo’);

INSERT INTO `t_sensor`(`ROW_ID`, `TIPO`, `ESTADO`) VALUES (2,’Humedad’,’Activo’);

2. Consulta de registros en tabla ‘T_SENSOR_AUDIT’:

Para llevar a cabo consultas generales utilizaremos el siguiente comando:

SELECT * FROM `t_sensor` WHERE 1

Tras la inserción de registros en el paso 1 el resultado debería ser el siguiente:

3. Creación de registros en tabla ‘T_SENSOR_AUDIT’:

Esta segunda creación de registros será dependiente de la primera, es decir, no podremos insertar un identificador de sensor en la columna ‘T_AUDIT_SENSOR.SENSOR_ID‘ si no existe previamente en ‘T_SENSOR.ROW_ID‘.

Para demostrar esto intentaremos crear dos registros con los siguientes comandos SQL:

INSERT INTO `t_sensor_audit`(`ROW_ID`, `SENSOR_ID`, `ESTADO`, `VALOR`, `FECHA`, `TIPO`) VALUES (1,1,’Activo’,24,CURRENT_TIMESTAMP,’Lectura’)

INSERT INTO `t_sensor_audit`(`ROW_ID`, `SENSOR_ID`, `ESTADO`, `VALOR`, `FECHA`, `TIPO`) VALUES (2,4,’Activo’,24,CURRENT_TIMESTAMP,’Lectura’)

¡QUE NO PANDA EL CUNICO!, si os aparece el siguiente error rojo chillón es totalmente normal y precisamente lo que buscábamos.

Este error lo que nos viene a decir es que no podemos crear un registro para auditar en la tabla T_AUDIT_SENSOR’  por que no hemos dado de alta el sensor que deseamos auditar en la tabla ‘T_SENSOR

¿Empieza a coger forma la idea?, esperamos que toda esta traca os ayude tanto a aprender teoría de base de datos como a comprender poco a poco como vamos construyendo los cimientos de nuestro sistema de riego.

Nos vemos en el siguiente manual!!

Configuración no-ip (Raspbian)

por | 20 abril, 2017

En este manual os mostraremos como llevar a cabo una configuración de «no-ip» sobre nuestra Raspberry Pi, de este modo podremos acceder a ella desde cualquier lugar aunque no nos encontremos en la misma red donde está conectada la Raspberry, es decir, podremos acceder desde el trabajo o cualquier otro lugar a la red de nuestra casa.

Las operadoras de servicios de telecomunicaciones (Movistar, Vodafone Ono,…) nos asignan una IP externa con la que nos identificaremos en internet, en palabras más comprensibles es como si nos asignaran un número de teléfono desde el que podemos llamar y recibir llamadas, así pues, nuestra IP externa sería el equivalente a nuestro número de tlfno (91-0000000) y cada teléfono inalámbrico de la casa equivaldría a uno de nuestros dispositivos (PC sobremesa, portátil, móvil, Raspberry Pi,…).

Deberemos seguir los siguientes paso, no obligatoriamente en el orden aquí definido, para completar esta configuración y acceder desde el exterior a nuestra Raspberry con no-ip y sin necesidad de saber nuestra ip externa.

1. Asignación de IP estática en Raspberry Pi.

2. Configuración NO-IP o DNS:

2.1. Creación de cuenta en servicio NO-IP: Abriremos la siguiente dirección no-ip.com en nuestro navegador de Internet y pulsaremos el botón «Sign Up» situado en la esquina superior derecha.

no_ip1

2.2. Cumplimentar datos de creación de cuenta: mmm… ¿de verdad hay que explicar este punto? 😛

no_ip2

2.3. Confirmación de creación de cuenta gratuita: Recibiremos por pantalla un mensaje de confirmación y en paralelo un correo electrónico donde deberemos pulsar el botón «Activate Account».

Nota: Es muy importante que anotéis o recordéis vuestros datos de usuario y contraseña pues los usaremos en pasos posteriores.

no_ip3

no_ip4

2.4. Pasos iniciales en configuración de cuenta: Tras la activación seremos redirigidos a una página de bienvenida donde nos recomendarán seguir tres pasos. El primero habrá sido completado por defecto, el segundo no es necesario y el tercero nos informará sobre como configurar nuestro router para redirigir puertos sobre distintos modelos de router. Este último punto nos será de gran ayuda, así pues, os dejamos también el enlace «Configuración router no-ip» en este artículo.

Para continuar con la configuración pulsaremos el botón «Get started with Dynamic DNS».no_ip5

2.5. Configuración de Hostname: Para no liarnos aclararemos que, para los que no son megacracks en informática, un host, hostname, DNS o no-ip son como decir un burro, un pollino o un asno, es decir, no son lo mismo pero en este caso para nosotros como si lo fueran :D. Seguimos… por defecto tendremos creado el Hostname que indicamos en nuestra alta y tendremos la opción de crear dos más de forma gratuita. Podremos consultar nuestros Hostname activos pulsando la sección «Hostname Count» situada a la derecha y marcada en la siguiente imagen.

no_ip6

Esta sección nos redirigirá a otra ventana con la información de nuestro Hostname e IP externa.

no_ip7

2.6. Comprobación de Hostname: En nuestro caso de ejemplo la hemos llamado ‘manualvpnchoco’, así pues, la dirección resultante será ‘manualvpnchoco.ddns.net‘. Nuestro nuevo Hostname ya está apuntando a la puerta de nuestra red aunque aún nadie la ha abierto, para comprobar que llegamos a nuestra red únicamente debemos copiar el Hostname en nuestro explorador y veremos como se abre la ventana de acceso a nuestro router :D.

3. Instalación de no-ip DUC en Raspberry Pi: En este paso final usaremos los datos de alta en el portal no-ip.com para configurar la aplicación ‘no-ip DUC‘ en nuestra Raspberry Pi. Para esta instalación llevaremos a cabo los siguientes puntos:

3.1. Descarga y descompresión de archivos:  Crearemos una nueva carpeta, descargaremos el paquete de archivos necesarios en dicha carpeta temporal y ,una vez descargados, los descomprimiremos. Para hacer todo esto ejecutaremos los siguientes comandos en nuestra consola:

mkdir /home/pi/dowloadnoip
cd /home/pi/dowloadnoip
wget http://www.no-ip.com/client/linux/noip-duc-linux.tar.gz
tar vzxf noip-duc-linux.tar.gz

3.2. Instalación de no-ip DUC:  Tras la descompresión nos dirigiremos a la carpeta nueva carpeta generada y ejecutaremos la instalación con los siguientes comandos:

cd noip-2.1.9-1
sudo make
sudo make install

3.3. Configuración no-ip DUC:  El último de instalación será configurar la cuenta no-ip y el intevalo de refresco (en nuestro caso hemos indicado 10 minutos)


Nota: El último paso nos indicará si deseamos configurar algún script o código antes de la actualización, en este caso para no complicarnos la vida indicamos ‘N‘.

3.4. Arranque de aplicación y comprobación de instalación:  Ahora si que si podremos probar si todo ha funcionado correctamente, solo necesitaremos seguir los pasos descritos a continuación.

3.4.1. Inicio de aplicación: Ejecutaremos en consola el siguiente comando ‘sudo /usr/local/bin/noip2

3.4.2. Comprobación de ejecución: Ejecutaremos en consola el siguiente comando ‘sudo /usr/local/bin/noip2 -S‘, este comando nos indicará si realmente el proceso está siendo ejecutado y datos como cuenta, hostname,…

 

Y con esto terminamos nuestro manual, a futuro nos será de gran uso esta configuración ¡ya lo veréis!

 

Creación de usuarios, tablas y columnas en PHPMyAdmin

por | 13 diciembre, 2016

Esta guía, además de ser un manual de iniciación en PHPMyAdmin, formará parte de nuestro proyecto de riego automático, así pues, los ejemplos en creación de usuarios, tablas y columnas nos servirán para probar en posteriores artículos y nuestra aplicación final.

El resultado buscado es el siguiente:

  • Creación de usuario administrador con acceso total sobre la nueva base de datos.
  • Creación de las siguientes tablas:
    • T_RASP: Contendrá información básica de todos los dispositivos Raspberry Pi conectados al sistema de riego. En principio solo será necesario uno pero prepararemos la base de datos para aceptar más a futuro.
    • T_SENSOR: Información de tipo de sensor y estado.
    • T_RASP_SENSOR: Esta tabla nos indicará que sensores están conectados directamente a cada Rasp Pi.
    • T_SENSOR_AUDIT: Esta tabla será donde almacenaremos el grueso de la información, en ella se registrará el valor de cada sensor activo en una hora, minuto y segundo concretos.
  • Creación de campos sobre las tablas existentes.

Mostramos en la siguiente imagen cual sería la estructura final buscada en este manual.

 

Una vez aclarados los objetivos con esta introducción nos ponemos manos a la obra como Manolo y Benito.

1. Acceso inicial a PHPMyAdminEn nuestro primer acceso deberemos hacer login en nuestro portal de PHPMyAdmin a través del usuarioroot, ni que decir que es altamente recomendable por seguridad la contraseña de este usuario en cuanto nos sea posible.

Una vez hagamos login seremos redirigidos directamente al menú de inicio.

 

2. Creación de base de datosLa instancia de base de datos agrupará y contendrá la estructura de tablas, columnas, usuarios, permisos de acceso para los mismo y el grueso de información que iremos almacenando en la misma a modo de registros.

Para crear la nueva base de datos navegaremos a la pestaña ‘Bases de datos‘ (madre mía soy un crack de la deducción!), introduciremos el nombre que deseemos darle en campo que vemos bajo el texto ‘Crear nueva base de datos‘ (en nuestro caso de ejemplo ‘BD_AUTORIEGO‘) y pulsaremos el botón ‘Crear‘.

Una vez creada seremos redirigidos a la siguiente ventana con el listado de bases de datos disponibles en nuestro servidor.

3. Creación de usuario administradorPartiremos  de la ventana anterior y haremos clic sobre el enlace a nuestra base de datos ‘BD_AUTORIEGO‘.

  • Una vez llevemos a cabo esta navegación será mostrada la siguiente ventana donde pulsaremos el enlace inferior ‘Agregar un nuevo usuario‘.

  • En el siguiente paso introduciremos la información básica de nuestro nuevo usuario. Recomendamos completar la información de forma similar a la mostrada en la siguiente imagen.

  • En las siguientes ventanas podremos indicar si dicho usuario tendrá acceso a todas las bases de datos, tablas, permisos de escritura, eliminación o borrado, consulta,… recomendamos dar todos los permisos posibles a nuestro usuario administrador tal cual lo marcamos en nuestros siguientes ejemplos.

  • Al finalizar esta configuración y aceptar los cambios recibiremos un mensaje de confirmación.

 

4. Creación de tablasPodríamos definir una tabla como una entidad única de almacenaje de información, para facilitar la comprensión aprovecharemos este apartado para aclarar conceptos con un ejemplo. En nuestro ejemplo vamos a comparar nuestra base de datos con una habitación amueblada de tal modo que:

  • La habitación representa nuestra base de datos y contiene X muebles.
  • Cada mueble representa una tabla con contenidos únicos que solo puede almacenar ese mueble, es decir, tendremos un mueble para ropa, un mueble para herramientas, un mueble para productos higiénicos,… podrían mezclarse pero lo lógico es mantener un orden y que cada cosa esté en su sitio.
  • Cada propiedad que diferencia a un producto almacenado de otro sería representado con una columna, estas propiedades podrían ser color, tamaño,… aunque existen propiedades comunes, un mueble/tabla que almacene ropa no podría compararse con uno que almacene fruta, en uno necesitaríamos saber por ejemplo caducidad, sabor (dulce, salado,…) y en otro no.
  • Cada producto, pieza o unidad que almacenemos en uno de nuestros muebles/tablas se consideraría un registro que debería identificar de forma inequívoca dicho producto del resto.

Una vez hecha esta introducción, que puede que puede que os líe más que ayudaros, continuamos con la creación de tablas.

  • Para navegar a la ventana inicial de creación de tablas seleccionaremos nuestra base de datos ‘BD_AUTORIEGO‘ en el menú de la izquierda desde la página de inicio de PHPMyAdmin.
  • Pulsaremos sobre el botón’Crear tabla‘ y completaremos los datos de los siguientes campos con los valores que os indicaremos más abajo:
    • Nombre de la tabla: T_SENSOR
    • Columna: ROW_ID
    • Tipo: INT
    • Cotejamiento: utf8_bin
    • Índice: PRIMARY

Nota: Si os fijáis hemos creado por defecto una columna autonumérica que usaremos como identificador de registros llamado ‘ROW_ID‘. Esta columna nos servirá posteriormente para identificar cada registro que creemos en nuestra BBDD de forma individual.

  • Aplicaremos la creación pulsando el botón ‘Guardar’ situado en la parte inferior de la ventana y recibiremos un mensaje de confirmación.

 

5. Creación de columnas de tablasUna vez creada nuestra tabla, incluyendo el campo ‘ROW_ID‘ como identificador único, podremos empezar a crear tantos campos o nuevas columnas consideremos necesarias. En nuestro caso crearemos exactamente la misma estructura que definimos en la imagen inicial de este artículo.

  • Posicionandonos en nuestra tabla de ejemplo ‘T_SENSOR‘ tendremos la opción de crear una o varias columnas a la vez. Para crear columnas indicaremos el número de ellas en la caja de texto situada a la derecha del texto ‘Agregar‘, indicaremos que deseamos crearla ‘despues de ROW_ID‘ y pulsaremos el botón ‘Continuar‘.

  • La acción anterior nos conducirá a la ventana de creación de campos donde cumplimentaremos las características del nuevo campo/columna a crear.

  • Si nos fijamos bien observaremos que en este caso de ejemplo no hemos marcado ningún valor sobre las propiedades ‘Índice’ y ‘AUTO_INCREMENT‘, no será necesario salvo en el campo ‘ROW_ID‘ pues campos de tipo nombre, tipo,… no son un número entero incremental y tampoco serán primarios al poder duplicarse su valor X veces.

Con esta guía podremos crear la estructura definida al principio del artículo, esperamos que no habernos extendido demasiado y que os sirva de ayuda en el futuro 🙂

Proyecto «Sistema de riego» en Raspberry Pi

por | 30 noviembre, 2016

Sistema de riego en Raspberry Pi

Para hacer interesante el aprendizaje vamos a plantear un caso práctico común entre varios artículos que posteriormente podremos usar en la vida real, en este proyecto crearemos un sistema de regadío automático controlando sensores de temperatura, humedad, intensidad luminosa y humedad de tierra para activar manual/automáticamente bombas de agua que regaran nuestras plantas.

Como una imagen vale más que 1000 palabras (aunque ocupa más espacio en disco duro), explicaremos la idea en la siguiente imagen.

riego11

 

Nota: En la imagen mostramos un ejemplo con 3 Raspberry Pi pues el resultado final de nuestro proyecto aceptará un número ilimitado de dispositivos conectados, sin embargo, para empezar el proyecto y probar, con una Raspberry Pi tendremos más que de sobra.

En este artículo enlazaremos con el resto de manuales necesarios para ir avanzando en nuestro proyecto personal, no obstante, esta serie de manuales nos llevará un tiempo (hay que trabajar para comer) e iremos activando los enlaces conforme estén disponibles.

Bienvenidos a nuestro primer proyecto basado en IoT (Internet of Things). Confiamos en que os guste la idea y sigáis nuestro avance!

logo03

Instalación MySQL y PHPMyAdmin

por | 24 noviembre, 2016

Antes de comenzar la instalación de MySQL + PHPMyAdmin haremos una breve introducción a los mismos:

MySQL es un sistema de gestión de base de datos desarrollado bajo licencia dual GPL/Licencia comercial por Oracle Corporation y está considerada como la base datos open source más popular del mundo. Este sistema nos permitirá crear bases de datos locales totalmente personalizadas que podremos enlazar con multitud de aplicaciones y lenguajes de programación.

PHPMyAdmin es una herramienta escrita en PHP con la intención de manejar la administración de MySQL a través de páginas web. Esta herramienta nos permitirá crear nuevas bases de datos, usuarios,… y personalizar/parametrizar dichas bases de datos sin la necesidad poseer un conocimiento muy extenso en esta rama informática.

 herramienta requerirá una instalación previa de Apache y PHP que encontraréis en esta misma web en el siguiente enlace ‘Instalación Apache + PHP‘.

1. Instalación de MySQL y PHPMyAdmin:

  • Un punto importante pre-instalación será activar la intefaz loopback para evitar errores en la instalación de MySQL, para ello ejecutaremos el comando sudo ifup lo en nuestra consola.
  • Ejecutaremos el siguiente comando en nuestra consola para descargar e instalar MySQL
    sudo apt-get install mysql-server mysql-client php5-mysql phpmyadmin
  • El propio instalador de ‘MySQLnos consultará el web server a usar como base, seleccionaremos ‘Apache‘ y pulsaremos ‘Ok‘.

1

  • En siguientes pasos de instalación configuraremos y confirmaremos la contraseña del usuario ‘root‘ de nuestra base de datos.

2

  • La instalación ‘PHPMyAdmin nos ofrecerá la opción de preconfigurar nuestra base de datos sobre el fichero ‘dbconfig-common‘, aceptaremos esta opción para evitar configuraciones complejas que requerirían mayor conocimiento en bases de datos.

3

  • Finalizaremos la instalación asignando de nuevo contraseñas para el administrador de base de datos ‘MySQL‘, administrador de ‘PHPMyAdmin y confirmando esta última.

4

5

6

 

2. Configuración y validación de instalación: Será necesario llevar a cabo los siguientes pasos manuales para finalizar la instalación en nuestro sistema.

2.1. Modificación de fichero php.ini:

– Ejecutaremos el comando sudo nano /etc/php5/apache2/php.in para abrir el fichero con el editor de texto nano.

– Crearemos un enlace simbólico (o acceso directo como queráis llamarlo) al fichero de configuración ejecutando el comando sudo ln -s /etc/phpmyadmin/apache.conf /etc/apache2/conf.d/phpmyadmin.conf en nuestra consola.

– Accederemos a la consola con el usuario ‘root‘ (por defecto la contraseña es ‘root‘) ejecutando el comando su – 

– Crearemos un nuevo fichero de prueba ‘testversion.php‘ para llevar a cabo un test de conexión, para ello ejecutaremos el siguiente comando como root echo «<?php phpinfo(); ?>» >> testversion.php

– Abriremos un nuevo explorador de internet y comprobaremos si el servidor web y PHP funcionan correctamente navegando a la URL ipdemiraspberry/testversion.php 

phptest


3. Prueba de acceso a PHPMyAdminAccederemos a esta aplicación web de gestión de bases de datos a través de la URL mostrada más abajo en nuestro navegador web de Raspbian.

  • http://ipdemiraspberry/phpmyadmin (es posible que por defecto funcione la URL http://localhost/phpmyadmin/)

Si la instalación ha sido correcta será mostrada la siguiente ventana de login

phpmyadmin

 

En nuestro siguiente manual os mostraremos como crear nuevas bases de datos en nuestro servidor ‘MySQL‘, crear usuarios, tablas y ejecutar consultas simples para extraer muestras de datos.

Esperamos que os sea de gran utilizar y no haber aburrido al personal en el proceso! 😀

logo_choco

Instalación y configuración (Parte 3)

por | 24 noviembre, 2016

En este manual de configuración utilizaremos el menú de configuración embebido sobre el propio sistema Raspbian, así pues, comenzaremos accediendo a dicho menú utilizando el siguiente comando sudo raspi-config en un terminal.

1. Menú principal: Este menú nos permitirá navegar para llevar a cabo configuraciones sencillas sobre nuestra Raspberry Pi, para navegar entre las distintas opciones usaremos las propias flechas de dirección de nuestro teclado y la tecla de tabulación para los botones inferiores <Select><Finish>.

1

El menú dependerá de la versión de Raspbian instalada, en nuestro caso, sobre la versión que trabajamos, las opciones disponibles son las siguientes:

1.1. info: Esta opción es muy cachonda, si la seleccionáis únicamente os mostrará un texto indicando que raspi-config es una herramienta de configuración… definitivamente es un crack el haya creado el menú 😀

1.2. expand_rootfs: Ejecuta una comprobación del sistema de ficheros o podríamos decir que el disco duro de nuestra raspberry que será nuestra tarjeta SD, por defecto si instalamos a través de NOOBs no llevará a cabo ninguna acción al ya haber sido expandido el espacio disponible por defecto

1.3. overscan: Esta opción nos permitirá ajustar resoluciones y ajustar los bordes de nuestra Raspberry en caso de estar conectada a un monitor o TV.

1.4. configure_keyboard: En caso de no haber configurado el idioma de nuestro teclado durante la instalación podremos ajustar dicha configuración regional en este apartado. Para ello seguiremos los siguientes pasos:

1.4.1. Selección de modelo de teclado: Seleccionaremos el modelo genérico de 105 teclas.

2

1.4.2. Selección de plantilla de teclado: En caso de mostrarse únicamente formatos en inglés seleccionaremos la opción ‘Other‘.

3

1.4.3. Selección de país: Selección del país de origen del teclado, en nuestro caso seleccionaremos ‘Spanish‘.

4

1.4.4. Configuración de tecla de función AltGr: Dependiendo del modelo de teclado del que distingamos seleccionaremos una opción, en nuestro caso hemos seleccionado el valor por defecto ‘The default for the keyboard layout‘.

6

1.4.5. Configuración de plantilla de teclado: Existe gran diversidad de teclados incluso en español (incluyendo teclados específicos de maquinas Apple), no obstante, para no entrar en una configuración más compleja seleccionaremos el valor ‘Spanish‘.

5

1.4.6. Configuración de teclas multifunción: El configurador volverá a la carga en esta ocasión con las teclas especiales de función, así pues, salvo que usemos un teclado semejante al de un portátil, seleccionaremos el valor por defecto ‘No compose key‘.

7

1.4.7. Activación de combinación Ctrl+Alt+Borrar: En caso de seleccionar <Y> dispondremos de opción de salir del modo ventana de Raspbian pulsando la combinación de teclas ‘Ctrl+Alt+Borrar‘.

8

1.5. change_pass: Cambio de contraseña para el usuario por defecto ‘pi‘. En este caso no tomaremos capturas de pantalla pues realmente solo es necesario informar y confirmar la nueva contraseña.

1.6. change_locale: Menú de configuración regional o configuración local, esta opción nos permitirá modificar parámetros como el juego de caracteres a usar por nuestra Raspberry Pi. Por defecto mantendremos formato UTF-8 y no deberíamos aplicar cambios en esta sección.

1.7. change_timezone: En esta sección modificaremos la configuración de zona horaria, este cambio únicamente será necesario si no configuramos correctamente dicha zona horaria en la instalación de nuestra Rasp Pi.

1.7.1. Selección de area geográfica: Seleccionaremos ‘Europa‘.

9_time

1.7.2. Selección de ciudad: Localizaremos y seleccionaremos la zona horaria correspondiente a nuestro país, en el caso de ‘España‘ sería ‘Madrid‘.

10_time

1.8. memory_split: Esta sección es algo compleja y dependerá mucho del tipo de uso que demos a nuestra Rasp Pi, por explicarlo de un modo sencillo podríamos decir que la GPU (unidad de procesamiento gráfico) de nuestra Rasp Pi no posee RAM propia, así pues, si deseamos sacar algo más de provecho a gráficos (juegos,…) debemos asignar un extra de RAM a la GPU.

Recomendamos asignar aproximadamente 64Mb, con esa cantidad debería tener suficiente salvo que deseemos decodificar videos HD en 1080p.

No entraremos en más detalle pues requeriría un artículo completo y podemos hacer pupita de forma de momento innecesaria.

1.9. ssh: Para poder establecer una conexión remota desde otro PC y  a través de ssh debemos habilitar esta opción, para habilitar el ssh server llevaremos a cabo estos sencillos pasos:

1.9.1. Activación de ssh: Seleccionaremos la opción ‘<Enable>‘.

ssh1

1.9.2. Confirmación de activación: El menú nos mostrará un mensaje de confirmación en la activación de nuestro SSH server.

ssh1

1.10. boot_behaviour: Esta sección nos permitirá arrancar nuestra Rasp Pi en modo ventana o consola, en caso de seleccionar la opción de consola deberemos ejecutar el comanto ‘startx‘ para iniciar el modo ventana.

Si deseamos por defecto arrancar en modo ventana seleccionaremos la opción ‘<Yes>‘.

11_boot

1.11. update: Al seleccionar esta opción nuestra Rasp Pi descargará la última versión se raspi-config para el sistema operativo Raspbian concreto que tengamos instalado.

Esperamos que esta guía os sirva de ayuda!

logo_late

Configuración de proxy (Raspberry Pi)

por | 23 noviembre, 2016

En este manual os indicaremos como configurar un proxy en nuestra Raspberry Pi, este proceso será únicamente necesario si nos encontramos en una red segura donde un servidor proxy ejerce como intermediario para gestionar las peticiones de entrada/salida de los dispositivos conectados a la red.

En caso de conectar nuestra Raspberry a una red con proxy y no configurarlo correctamente no podremos llevar a cabo instalaciones, actualizaciones,… sobre la misma.

El sistema operativo de nuestra Raspberry se basa en distribuciones Debian, así pues, este manual también nos serviría para otros sistemas operativos como Ubuntu y similares.

Para configurar el proxy abriremos un nuevo terminal y llevaremos a cabo los siguiente pasos:

  • sudo nano /etc/apt/apt.conf
  • Una vez dentro del editor insertaremos la siguiente línea indicando la ip y puerto de nuestro servidor proxy.

Acquire::http::Proxy «http://IP_DEL_SERVER_PROXY:PUERTO»;

  • Para guardar los cambios en el editor nano pulsaremos simultáneamente las teclas Ctrl+O para guardar (aprobaremos el cambio pulsando Enter) y Ctrl+X para salir del editor de texto.
  • Podemos comprobar el contenido del fichero con el comando more /etc/apt/apt.conf en nuestra consola.
  • Para validar la conexión actualizaremos nuestro repositorio ejecutando el comando sudo apt-get update en nuestra consola.

 

Esperamos que este tutorial rápido os sirva de ayuda!

logo_sexy

Instalación Apache + PHP en Raspbian

por | 15 noviembre, 2016

En este artículo vamos a llevar a cabo una instalación básica de un servidor HTTP Apache y PHP. Esta instalación podremos usarla a posteriori para la creación de un portal web privado de pruebas y aprendizaje.

Para llevar a cabo estas instalaciones seguiremos los siguientes pasos:

1. Asignación de permisos a grupo ‘www-data’: Por defecto Apache necesitará que exista el grupo de usuarios ‘www-data‘ y que dicho grupo tenga ciertos permisos en nuestro sistema para la posterior instalación.

Para crear dicho grupo y asignar los permisos ejecutaremos los siguientes comandos en nuestra consola.

  • sudo addgroup www-data
  • sudo usermod -a -G www-data www-data

2. Actualización de repositorio: Es siempre recomendable actualizar el repositorio de nuestro sistema operativo Raspbian previa descarga de nuevas aplicaciones o librerías, para ello ejecutaremos en nuestra consola el comando ‘sudo apt-get update‘.

3. Instalación de Apache y PHP:  Una vez actualizado el repositorio, instalaremos las aplicaciones y librerías requeridas para Apache y PHP ejecutando el comando ‘sudo apt-get install apache2 php5 libapache2-mod-php5‘ en nuestra consola.

4. Reinicio de servidor Apache: Por ultimo, para validar si la instalación ha sido correcta procederemos a reiniciar nuestro servidor Apache ejecutando el comando ‘sudo /etc/init.d/apache2 restart‘ en la consola. En caso de ser correcta la instalación y el reinicio recibiremos la siguiente respuesta.

apache_restart

5. Comprobación de instalación: Para comprobar la correcta instalación abriremos un nuevo explorador de Internet e introduciremos la siguiente dirección http://localhost

El resultado en caso de éxito será el siguiente:

apache_restart2

Hemos reducido este manual únicamente a la instalación para no complicar en exceso el artículo, en posteriores artículos mostraremos como crear nuestra primera web de ejemplo.

Esperamos que os sea de utilidad!

logo_late