Particiones y redimensionamiento de espacio en tarjetas SD (Raspberry Pi)

por | 27 marzo, 2020

En muchas ocasiones, tras la instalación de una imagen o distribución compatible con nuestra Raspberry Pi, nos encontraremos en la situación de que la imagen no usa el espacio total de la tarjeta SD que hemos comprado, es decir, solo utiliza entre 3,5 y 4Gb. Si nuestra tarjeta SD es de 16Gb estaremos perdiendo un aproximado a 12Gb.

Si la distribución o sistema operativo disponen de interfaz gráfica nos resultará relativamente sencillo reorganizar particiones tras la instalación de aplicaciones como gparted, sin embargo, si únicamente disponemos de la consola, se complicará un poco el asunto y tendremos que remangarnos un poco si no somos expertos en sistemas operativos o distribuciones linux.

La aplicación gparted en modo interfaz es muy parecida al menú de creación y formateo de discos de Windows y no entraremos en más detalle, iremos directamente a lo complicado que es el temido «modo consola«.

1. Instalación de ‘gparted’

Iniciaremos sesión como usuario ‘root‘ e instalaremos la aplicación con la siguiente instrucción en nuestra consola:

  • Debian/Ubuntu: sudo apt-get install parted
  • RHEL/Centos: yum install parted
  • Fedora 22+: dfn install parted

Nota: En nuestro ejemplo veréis que usamos una distro llamada raspbx destinada al uso de Raspberry como CTI. Sería el equivalente a un Ubuntu y deberíamos usar comandos de instalación de tipo ‘sudo apt-get install…’

2. Inicio y uso de ‘parted

Arrancaremos la aplicación escribiendo el siguiente comando en la consola:

parted

Una vez dentro de la aplicación escribiremos el comando ‘help‘ para que sean listadas las opciones disponibles:

help

Listaremos los dispositivos de almacenamiento disponibles en nuestro sistema para identificar cual se corresponde con nuestra tarjeta SD. En nuestro ejemplo nuestra tarjeta SD dispone de 32Gb y solo están en uso real aproximadamente 4Gb.

Para listar los dispositivos usaremos el comando que mostraremos a continuación y podréis ver en las últimas líneas que nuestra tarjeta SD tiene dos particiones. La primera con 268Mb y la segunda con 3750Mb, es decir, no aparecen o no veremos por ningún sitio los 28Gb restantes.

print all

Es necesario en este punto hacer foco o indicar que dispositivo de almacenamiento deseamos modificar, para ello usaremos el siguiente comando donde indicaremos como parte de la instrucción el nombre de nuestro dispositivo (en nuestro ejemplo la tarjeta SD es /dev/mmcblk0).

select /dev/mmcblk0

Aquí forzaremos el uso restante de la tarjeta SD creado una nueva partición, no obstante, debemos indicar desde que punto del SD comienza nuestra partición y donde acabará. Esto nos permite crear particiones con un tamaño personalizado o al gusto dependiendo del uso que vayamos a darle, en nuestro ejemplo simplemente crearemos una unidad o partición más con los 28Gb que no se están utilizando.

Ejecutaremos el comando mkpart donde los argumentos de entrada indicarán el tipo de partición (en nuestro ejemplo ‘primary‘),  el sistema de archivos (en nuestro ejemplo ‘ext2’ que luego cambiaremos a ext4), el inicio de la partición (como la anterior termina en la posición 4022Mb, en nuestro ejemplo empezaremos en ‘4023Mb’) y el fin de la partición (en nuestro caso 32.0Gb). El comando resultante será el siguiente:

mkpart primary ext2 4023Mb 32.0Gb

Para comprobar si se ha creado la partición ejecutaremos de nuevo el comando ‘print all’:

Tras esta última comprobación nuestro trabajo con ‘parted’ o ‘gparted’ ya habrá terminado, para salir de esta aplicación escribiremos el siguiente comando:

quit

3. Formateo y montaje de unidad

Tras los pasos anteriores ya podremos empezar a dar uso al espacio sobrante en nuestra tarjeta SD, sin embargo, es preciso darle formato y montarla en una ruta para que podamos tener acceso, esto sería similar a asignar una unidad a una nueva partición en windows (G: – F: – …).

Nuestra partición, debido al anterior apartado 2, se encuentra en sistema de archivos ext2, así pues, daremos formato a dicha unidad pasandola a sistema ext4 para superar futuras limitaciones en tamaños de archivos/ficheros y beneficiarnos de las mejoras de ext4 frente a ext2 ó ext3.

Antes del formateo necestitamos tener claras las particiones disponibles en nuestro sistema sin usar gparted, para ello usaremos este simple comando desde la consola:

lsblk

Este nos ofrece el listado de unidades, espacio total, usado, disponible,… e identificamos nuestra partición en nuestro ejemplo como la denominada mmcblk0p3.

Esto nos indica que nuestra partición existe con nombre mmcblk0p3 pero no tiene asignado un punto de montaje.

Antes de llevar a cabo el montaje, y para evitar errores posteriores en dicho proceso, debemos dar el formato de archivos a nuestra partición. Esto lo haremos con el siguiente comando ahora que sabemos el nombre de la partición.

mkfs.ext4 /dev/mmcblk0p3

En el siguiente paso crearemos un directorio que servirá como punto de montaje y montaremos la partición.

mkdir /raspbxfs

mount -t ext4 -v /dev/mmcblk0p3 /raspbxfs

Ahora solo quedaría listar de nuevo directorios desde la ruta raiz (ls -larth) o volver a usar el comando lsblk para ver el resultado 🙂

ls -larth

lsblk

Esperamos como siempre que os sea de ayuda este manual!

Comparte esta página! Email this to someone
email
Share on Facebook
Facebook
0Tweet about this on Twitter
Twitter
Share on LinkedIn
Linkedin

JavaScript 3 – Métodos para mostrar información

por | 9 abril, 2018

Métodos para mostrar información en JavaScript

Existen cuatro métodos comunes para mostrar información en JavaScript, existe algún método adicional que permite por ejemplo mostrar información y confirmar si el usuario de la web está conforme, no obstante, ya entraríamos en como crear condiciones,… y no tocaremos aún esa parte del lenguaje más avanzada. Los métodos que estudiaremos son los siguientes:

  • Escribir texto en un elemento HTML usando innerHTML.
  • Escribir un texto de salida en HTML usando document.write().
  • Mostrar texto en un mensaje emergente o alerta usando window.alert().
  • Escribir el texto en la consola del explorador (solo visible en modo desarrollador) usando console.log().

1. Uso de innerHTML

El uso de innerHTML requerirá del uso previo de document.getElementById(id) y de la existencia de un elemento con id único sobre el que reemplazar el contenido. Os mostramos un ejemplo con comentarios para que podáis distinguir un poco donde está cada argumento, recordad que todo aquello que sea escrito después de // es considerado un comentario y no código.

<!DOCTYPE html>
<html>
<body>
<p id=»EjemploInner»></p> //Aquí hemos definido un simple párrafo de texto que tendrá como id único «EjemploInner» para que document.getElementById pueda localizarlo.
<script>
document.getElementById(«EjemploInner»).innerHTML = 3 + 2; //Aquí innerHTML insertará el valor 5 (resultado de 3 + 2) sobre el elemento con identificador «EjemploInner».
</script>
</body>
</html>

2. Uso de document.write()

Este método document.write() escribirá directamente un texto o resultado de una operación por pantalla, normalmente se utiliza únicamente cuando se está desarrollando un portal para que el programador pueda comprobar que los resultados de operaciones intermedias se están realizando correctamente. Tras su uso suelen ser comentados o borrados directamente del código.

<!DOCTYPE html>
<html>
<body>
<script>
var x = 1;
var y = 14;
var resultado = x + y;
document.write(«El resultado de mi cuenta interna x + y es: » + resultado);
</script>
</body>
</html>

Nota: Borraremos todo el contenido HTML dejando solo el resultado de document.write() si lo usamos lo último tras cargar toda la página, es decir, si cargamos la página y lo usamos a posteriori con un botón solo se mostrará el contenido introducido en document.write() reemplazando todo el texto que ya tuviéramos.

<!DOCTYPE html>
<html>
<body>
<h1>Pongo una cabecera por aquí</h1>
<p>Pongo otra chorradeja por acá</p>
<script>
var TextoFinal = «Al carajo Todo!»
</script>
<button type=»button» onclick=»document.write(TextoFinal)»>Pulsa si tienes valor!</button>
<p>Esta línea de regalo al final</p>
</body>
</html>

3. Mostrar alertas o mensajes emergentes con window.alert()

Este método de mensajes emergentes es el que nos encontraremos en el dichoso spam de webs, aplicaciones,… que sirve sobre todo para darnos la brasa como usuarios :). Su función es mostrar un cuadro o mensaje emergente con un texto fijo. A continuación os mostramos un ejemplo educativo a la vez que ético:

<!DOCTYPE html>
<html>
<body>
<h1>Por la salud mental del mundo no abuses del SPAM</h1>
<script>
var sSPAM = «TOMA SPAM! TOMA SPAM! CHOCOSEXY! TOMA SPAM! TOMA SPAM!»;
window.alert(sSPAM);
</script>
</body>
</html>

4. Almacenar información de log con console.log()

Por último pero no menos importante! hablaremos del método console.log(). Este método almacenará un texto o resultado de cualquier operación que deseemos en la propia consola para desarrolladores de nuestro explorador. En nuestro ejemplo para ver el resultado usaremos Chrome para abrir nuestro HTML. Un ejemplo sencillo sería el siguiente:

<!DOCTYPE html>
<html>
<body>
<script>
var sLOG = «Este es mi texto de log y solo lo veo como desarrollador»;
console.log(sLOG);
</script>
</body>
</html>

Pero si no se ve nada! la pantalla está en blanco!…. nooo es que ya hemos dicho que solo se ve en la consola de explorador!, en Chrome tendréis que pulsar F12 y se abrirá una ventana lateral donde podréis seleccionar «Console» y ahí encontraréis vuestro texto.

 

 

Esto es todo amigos! continuaremos nuestros tutoriales con operadores aritméticos y lógicos!

JavaScript 2 – Declaración de variables, sintaxis y comentarios

por | 9 abril, 2018

Declaración de variables, sintaxis y comentarios en JavaScript

En este artículo explicaremos el modo en que deben ser declaradas las variables, la sintaxis básica de JavaScript y como aplicar comentarios internos en nuestro código. Los operadores son una de las bases más importantes en todo lenguaje de programación y es imprescindible tener claro su modo de empleo.

1.Declaración de variables

 Las variables, como creemos haber comentado en artículos sobre otros lenguajes, son contenedores de información como podría ser un nombre, un número, una fecha,… Estas variables pueden relacionarse entre si uniendo por ejemplo palabras, sumando o restando números, etc.

1.1 Conceptos generales

JavaScript es considerado un lenguaje bajamente tipado, así pues, no nos veremos obligados a definir manualmente el tipo de variable que estemos declarando. El tipo de valor que se asigna a la variable (Texto, número entero,…) se define automáticamente una vez asignemos un valor a la variable.

Para entender fácilmente como se declaran variables únicamente tendremos que pensar en matemáticas o álgebra, la forma de definirlas es exactamente igual pero agregando la palabra var antes de la asignación.

Ejemplo 1: Si queremos que la variable x tenga un valor inicial de 2 haremos lo siguiente:

var x = 2;

Ejemplo 2: Si queremos que la variable nombre tenga un valor inicial de Federico haremos lo siguiente:

var nombre = «Federico»;

Nota: El mismo código no debe contener declaraciones de variables con el mismo nombre, es decir, no se debería hacer lo siguiente:

var variableejemplo1= 2;

var variableejemplo1= 5;

1.2 Normas generales en declaración de variables

  • Los nombres de variables pueden contener letras, dígitos, barras bajas «_» y simbolo dollar «$«.
  • Los nombres de variables deben empezar por una letra.
  • Los nombres de variables pueden empezar también por el simbolo dollar «$«.
  • Los nombres de variables distinguen mayúsculas de minúsculas, así pues, no será lo mismo mivariable que MIVARIABLE.
  • Existen palabras reservadas que no pueden ser usados como variables

2. Sintaxis JavaScript

La sintaxis de JavaScript es el conjunto de reglas a través del cual este lenguaje define como los programas son construidos. A continuación os mostraremos las reglas existentes agrupadas:

2.1 Identificadores HTML en JavaScript

Elementos comunes de HTML como textos, links, botones, tablas, div,… pueden ser identificados de forma única incluyendo en nuestro html en cada objeto la propiedad id=»», encontraréis algunos ejemplos en los siguientes puntos de este mismo artículo.

2.2 Declaración de literales

Los literales son valores que no se encuentran asignados a variables y pueden ser de tipo Número o Texto. Los literales numéricos pueden ser declarados con o sin decimales y los literales de texto pueden ser definidos entre comillas dobles » o simples ‘.

Ejemplo con número:

<!DOCTYPE html>
<html>
<body>
<p>Numero con decimales.</p>
<p id=»Num»></p>
<script>
document.getElementById(«Num»).innerHTML = 20.3;
</script>
</body>
</html>

Ejemplo con texto:

<!DOCTYPE html>
<html>
<body>
<p>Texto con comillas simples.</p>
<p id=»Txt1″></p>
<script>
document.getElementById(«Txt1»).innerHTML = ‘Federico de los palotes’;
</script>
</body>
</html>

2.3 Declaración de variables

La asignación de valores a variables se lleva a cabo a través del operador «=».

<!DOCTYPE html>
<html>
<body>
<p>Mostramos valor de x: </p>
<p id=»var1″></p>
<p>Mostramos valor de y: </p>
<p id=»var2″></p>
<script>
var x;
x = 6;
var y = 10;
document.getElementById(«var1»).innerHTML = x;
document.getElementById(«var2»).innerHTML = y;
</script>
</body>
</html>

2.4 Uso de operadores

JavaScript usa operadores aritméticos (+, -, *,…) y el símbolo de igualación = para almacenar el resultado.

<!DOCTYPE html>
<html>
<body>
<p>Uso de operadores mostrando solo resultado</p>
<p id=»Oper1″></p>
<script>
document.getElementById(«Oper1»).innerHTML = (2 + 3) * 5;
</script>
</body>
</html>

2.5 Comentarios

Existe la posibilidad de usar comentarios u observaciones internos para clarificar a los programadores el uso de una función, variable o lógica usada. Para que una línea sea considerada como un comentario deberá ir precedida de //, en caso de desear comentar varias líneas usaremos /* e indicaremos el fin del comentario con */.

<!DOCTYPE html>
<html>
<body>
<p id=»Ejemplo1″></p>
<script>
/*Todo este comentario de varias líneas nos servirá
para agregar observaciones,…*/
var x;
x = 6;
// x = 10; Esta línea de asignación de variable tampoco se usará al estar comentada
document.getElementById(«Ejemplo1»).innerHTML = x;
</script>
</body>
</html>

 

Con esto terminamos esta segunda parte de programación con JavaScript. Esperamos que os haya gustado! practicad! practicad! 🙂

JavaScript 1 – ¿Dónde funciona?

por | 9 abril, 2018

¿Dónde funciona JavaScript?

JavaScript, aunque puede ser usado de otros modos, tradicionalmente se utiliza sobre páginas web HTML para realizar operaciones sobre la información disponible en la propia web (comprobar fechas, sumar dos valores,…). Este lenguaje es uno de los 3 lenguajes básicos que debe conocer todo programador web:

1. HTML es utilizado para definir el contenido de una página web (botones, textos, tablas, alineaciones,…)

2. CSS es utilizado para especificar formatos, temas o estilos uniformes en una web (color de la cabecera, ciertos textos en negrita, campos en gris o blanco dependiendo de su estado,…).

3. JavaScript es utilizado para programar el comportamiento de una web (mensajes de error si introduces una fecha de forma incorrecta, validación de textos, sumas automáticas de números,…).

Con esta introducción o aclaración pretendemos llegar a la siguiente conclusión, vamos a hacer funcionar JavaScript sobre HTML.

1. ¿Dónde funciona JavaScript?

1.1 Uso de métodos simples

Este lenguaje posee muchos métodos propios, en su gran mayoría son usados directamente sobre el propio código o texto HTML donde nos interese, no obstante, otros casos como las funciones son declaradas normalmente en la sección <header> aunque se podría utilizar en la sección <body>. En resumen ancha es castilla y podemos usar nuestro código de forma flexible, sin embargo, por seguir un orden recomendamos en principio declarar las funciones en la cabecera o <header> de nuestro HTML.

Comenzaremos con un ejemplo que modificará un texto. JavasScript, si existen por ejemplo tres textos en un HTML, no sabe por si solo que texto debe modificar o tratar, así pues, tendremos que asignar un nombre o identificador a cada texto y luego indicar a nuestro método de JavaScript cual de estos textos es el que nos interesa. A continuación mostraremos un ejemplo con tres textos en HTML.

<!DOCTYPE html>
<html>
<body>
<p id=»Texto1″>Texto número 1</p>
<p id=»Texto2″>Texto número 2</p>
<p id=»Texto3″>Texto número 3</p>
</body>
</html>

Nota: Para ver el resultado guardaremos el texto anterior en un fichero con extensión .html y lo abriremos en cualquier explorador (Internet Explorer, Chrome, Firefox,…).

Nuestro primer ejemplo con JavaScript será a través del método getElementById(), este método básicamente encontrará el texto o elemento con identificador «Texto1» y usaremos la operación innerHTML para modificar el contenido. Por último, para que modifique «Texto1» cuando nosotros queramos introduciremos la llamada a getElementById() dentro de un botón. El ejemplo quedaría del siguiente modo:

<!DOCTYPE html>
<html>
<body>
<p id=»Texto1″>Texto número 1</p>
<p id=»Texto2″>Texto número 2</p>
<p id=»Texto3″>Texto número 3</p>
<button type=»button» onclick=’document.getElementById(«Texto1»).innerHTML = «Acabas de modificar el texto ¡Enhorabuena!»‘>Pulsa aquí</button>
</body>
</html>

Esperamos no haberos liado mucho al usar tantas cosas a la vez como son los identificadores id, los botones button, el método getElementById() y la operación de cambio de contenido innerHTML tan rápido y en el primer ejemplo, entraremos en más detalle en los próximos artículos sobre esto, en este artículo únicamente queremos donde se puede usar y necesitábamos un ejemplo sencillo.

1.2 Uso de llamadas a funciones

En nuestro segundo ejemplo haremos lo mismo pero a través de una función que declararemos entre una sección <script></script> que indicará al HTML de que se trata de código JavaScript, esta función la declararemos en el <header> de nuestra página web y evitará que usemos continuamente el chorizo getElementById().innerHTML cada vez que queramos reemplazar un texto. El ejemplo es el siguiente:

<!DOCTYPE html>
<html>
<head>
<script>
function myFunction() {
document.getElementById(«Texto1»).innerHTML = «Acabas de modificar el texto!»;
}
</script>
</head>
<body>
<p id=»Texto1″>Texto numero 1</p>
<p id=»Texto2″>Texto numero 2</p>
<p id=»Texto3″>Texto numero 3</p>
<button type=»button» onclick=»myFunction()«>Pulsa aqui</button>
</body>
</html>

Nota: Marcamos en rojo los puntos importantes para que sea más fácil localizar como la declaración superior de la función es usada posteriormente en el botón que cambiará el texto.

Enlaces de interés: https://www.w3schools.com/js/js_intro.asp

Con este artículo damos por iniciada la colección de primavera/verano de JavaScript!. En los siguientes artículos comenzaremos con la declaración de variables y operadores disponibles!

 

Javascript (Introducción)

por | 7 julio, 2017

Introducción a Javascript

Javascript es un lenguaje de programación utilizado dentro del ámbito de páginas web, con este lenguaje podremos ejecutar código específico para validaciones de campos (comprobar si una fecha introducida es correcta), control de eventos (un clic en un botón) y otras interacciones en nuestra web. Los navegadores como Internet Explorer, Firefox, Chrome,… son por norma los encargados de interpretar y ejecutar las instrucciones que recibe de este lenguaje, así pues, en principio no necesitaríamos instalar ninguna aplicación para desarrollar con Javascript.

Antes de empezar a desarrollar en este lenguaje recomendaríamos como mínimo aprender unas nociones básicas de HTML y CSS, el primero nos ayudará a crear nuestras primeras webs básicas (aunque la verdad HTML5 da bastante de si) y el segundo nos mostrará como aplicar estilos a la misma (tipo de letra, listados, tablas, alineaciones,…).

1. Propósitos principales de Javascript:

1.1. Creación de contenidos dinámicos: Podría considerarse contenido dinámico todo aquel que sea variable como anuncios de publicidad o imágenes que cambian, cambios de color, listados dependientes de un filtro, gráficas, …

1.2. Creación de scripts personalizados: Los scripts de este lenguaje en principio serán sencillos y nos permitirán llevar a cabo una interacciones con el usuario como solicitar datos, mostrar resultados de cálculos,… pero también nos permitirá crear algoritmos o códigos algo más complejos para interactuar con el navegador y crear ficheros pdf, solicitar consultas a bases de datos,…

En nuestro caso, como muchos de nuestros artículos están relacionados con el proyecto de «Sistema de riego», el uso final será la creación de un pequeño portal web donde mostraremos las gráficas de temperatura, humedad ambiente, humedad en tierra e intensidad luminosa. Por último, en nuestro proyecto podremos activar y desactivar el riego conforme a patrones que el propio usuario administrador de la web defina al gusto.

2. Aclaración a confusión común entre Javascript y Java:

Es importante aclarar que Javascript y Java, aunque se parecen en el nombre, no son en absoluto lo mismo, a continuación os mostramos algunas de las muchas diferencias y aclaraciones que existen entre estos dos lenguajes:

  • Javascript es un lenguaje débilmente tipado y Java fuertemente tipado: Esto significa que en Javascript no es necesario definir si una variable que vamos a usar es un número, una cadena de texto, una fecha o un melocotón, sin embargo, en Java debemos indicar si una variable es una fecha, un entero,… y una vez hecho así se queda pa toa la vida, sin intentamos cambiarlo recibiremos un petardazo de código tan bonitos y comunes en Java 😛
  • Javascript es un lenguaje interpretado y Java un lenguaje compilado: Para que nos entendamos todos, javascript es un código almacenado en ficheros de texto legible por nosotros y por ordenadores, sin embargo, Java únicamente puede ser ejecutado por un ordenador que evidentemente tenga instalado Java.
  • Javascript no es una versión de Java para web.
  • Javascript es sigue un estándar y Java no: Javascript procede de un estándar público y Java procede actualmente de la empresa privada Oracle.
  • Saber Javascript no significa que sepas Java y saber Java no significa que sepas Javascript: Son lenguajes muy muy distintos y ambos pueden llegar a ser muy complejos si profundizamos un poco.
  • Java es un lenguaje de programación multiplataforma orientado a objetos: Esto significa que  se puede implementar en cualquier entorno (linux, windows, unix, etc) ya que lo único necesario para que ese lenguaje sea interpretado es que el sistema sobre el cual se van a correr las aplicaciones, webs, etc. posean la JVM (Java Virtual Machine), que es el interpretador de lenguaje java.
  • Javascript es un lenguaje que se implementa sobre plataforma web: Esto no resta potencia a Javascript pues, aunque su uso sea web, no solo sirve para hacer retoques en dichas web si no que también cuenta con programación de objetos para interactuar en las páginas, es decir, podríamos crear programas más complejos como calculadoras, agendas, juegos,…

 

En breve comenzará la acción de verdad con este lenguaje! preparaos para la marchaaaaa!

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

por | 28 mayo, 2017

Como siempre recomendamos antes de empezar dar un repaso artículos anteriores de instalación y configuración de una pequeña base de datos con PHPMyAdmin y MySQL.

En este artículo trabajaremos únicamente con la tabla ‘T_SENSOR_AUDIT‘ que contendrá información del muestreo de datos obtenidos con el paso del tiempo en distintos sensores de temperatura, humedad,… esta tabla pertenece al proyecto de creación de sistema de riego disponible también en el portal.

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.

1. Condiciones (WHERE) SQL

Partiremos de una base de datos donde ya existen registros como sería la tabla ‘T_SENSOR_AUDIT‘  en la siguiente imagen:

Las condiciones que se pueden introducir con la clausula ‘WHERE‘ son predicados lógicos que, en caso de satisfacerse en cierta fila o registro, harán que se muestre como resultado dicho registro o registros. En palabras más llanas, la condición ‘WHERE‘ nos permite filtrar entre toooooodos los registros de una tabla y obtener el listado de aquellos que estamos buscando.

A continuación mostramos varios ejemplos:

  • Si se quiere extraer todos los datos de auditoria de sensores para el sensor con id 1

SELECT * FROM T_SENSOR_AUDIT WHERE SENSOR_ID = ‘1’

  • Si se quiere extraer todos los datos de auditoria de sensores para el sensor con id 1 y valor mayor que 22

SELECT * FROM T_SENSOR_AUDIT WHERE SENSOR_ID = ‘1’ AND VALOR > 22

2. Operadores de condición

2.1. Operadores básicos de condición:

  • Igual: =
  • Mayor: >
  • Mayor o igual: >=
  • Menor: <
  • Menor o igual: <=
  • Distinto: <>

2.2. Operador ‘between’:

El operador ‘between‘ permite definir rangos. Por ejemplo, los datos de los sensores cuyo valor se encuentre entre 18 y 120 son:

SELECT * FROM T_SENSOR_AUDIT WHERE VALOR BETWEEN 18 AND 120

2.3. Operadores lógicos ‘AND’, ‘OR’ y ‘NOT’:

Para unir varias condiciones se pueden usar los operadores lógicos ‘AND’, ‘OR’ y ‘NOT’. Así podríamos extraer los mismos datos de auditoria de sensores donde el valor es mayor que 18 y menor que 120.

SELECT * FROM T_SENSOR_AUDIT WHERE VALOR > 18 AND VALOR < 120

Combinando operadores lógicos con ‘between‘ podríamos buscar los sensores que NO ESTÉN en un rango de valores  dado

SELECT * FROM T_SENSOR_AUDIT WHERE VALOR NOT BETWEEN 25 AND 130

También podríamos hacer condiciones más complejas como buscar los sensores con valor entre 100 y 120 (incluyendo ambos) o estado ‘Activo’. La sentencia sería similar a la siguiente

SELECT * FROM T_SENSOR_AUDIT WHERE (VALOR >= 100 AND VALOR =< 200) OR ESTADO = ‘Activo’

Nota: Para diferenciar condiciones, sobre todo cuando se usa ‘OR’, es común separar o aislar ambas expresiones con paréntesis.

2.4. Operador ‘LIKE’:

Cuando se trata de establecer condiciones sobre cadenas de caracteres , resulta de gran utilidad el operador ‘LIKE‘, que busca cadenas conforme a alguna de combinación de caracteres establecida con ayuda de:

  • %: Substituye a un número indefinido de caracteres indeterminados.
  • _: Substituye a un carácter indeterminado.

A continuación mostramos varios ejemplos:

  • Los registros de nuestra tabla ‘T_SENSOR_AUDIT‘ donde el estado comienzo por ‘Ac’

SELECT * FROM `T_SENSOR_AUDIT` WHERE ESTADO LIKE ‘Ac%’

  • Los registros de nuestra tabla ‘T_SENSOR_AUDIT‘ donde el estado comienzo por ‘In’

SELECT * FROM `T_SENSOR_AUDIT` WHERE ESTADO LIKE ‘In%’

  • Los registros de nuestra tabla ‘T_SENSOR_AUDIT‘ donde el estado contenga la cadena ‘ctiv’

SELECT * FROM `T_SENSOR_AUDIT` WHERE ESTADO LIKE ‘%ctiv%’

  • Los registros de nuestra tabla ‘T_SENSOR_AUDIT‘ que tienen una ‘n’ como segunda letra

SELECT * FROM `T_SENSOR_AUDIT` WHERE ESTADO LIKE ‘_n%’

Nota: Admitimos que esta tabla da poco juego, una tabla que contuviera por ejemplo nombres de personas sería mejor para practicar 😛

 

Hasta aquí el artículo, continuaremos en nuestro próximo artículo con expresiones aritméticas en SQL.

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

por | 27 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.

1. Consultas (SELECT DISTINCT) SQL

Partiremos de una base de datos donde ya existen algunos registros con repeticiones como sería la tabla ‘T_SENSOR_AUDIT‘  en la siguiente imagen:

En este caso es relativamente fácil distinguir el número de sensores que están registrando datos, no obstante, si tuviéramos 500 registros sería más difícil saber cuantos sensores o registros con ‘SENSOR_ID‘ distintos existen, es decir, puede que no fueran visibles registros del sensor  4 hasta que hubiéramos recorrido 200 registros y nos diera por pensar que no funciona.

Existe un modo de extraer un listado de los distintos Ids quitando duplicados, esta opción únicamente requiere añadir la palabra ‘DISTINCT‘ tras la sentencia ‘SELECT‘ e indicar a continuación el campo del cual deseamos averiguar los distintos valores existentes.

  • A continuación os mostramos una consulta ‘SELECT‘ con el resultado normal:

 

  • En este ejemplo damos uso al ‘SELECT DISTINCT‘ para que observéis su comportamiento no mostrando duplicados:

 

Esta sentencia ‘SELECT DISTINCT‘ en conjunto con algún criterio de búsqueda nos puede proporcionar información bastante interesante, un ejemplo sería buscar el listado de los sensores activos en una fecha concreta, sensores con errores en un rango de fecha,…

 

Hasta aquí el artículo, continuaremos en nuestro próximo artículo con la construcción de condiciones de búsqueda en SQL.

Búsqueda de cadenas de texto con Python – Find()

por | 23 mayo, 2017

1. Búsqueda de cadenas de texto con Python – Find()

1.1 Introducción

Es bastante común llevar a cabo la búsqueda de cadenas de texto en ficheros o simplemente en variables de tipo texto, en nuestro caso leeremos un fichero y buscaremos un trozo de texto como por ejemplo un nombre en el contenido de un fichero.

Antes de comenzar este manual recomendamos echar un ojo al anterior manual ‘Leer ficheros con Python – Línea a línea

1.2 Crear fichero de ejemplo

El primer paso será crear un fichero con el que trabajaremos este ejemplo, para llevar a cabo este paso asumiremos que trabajamos en un entorno Linux (como Raspbian de Raspbery Pi), en este entorno ejecutaremos los siguientes comandos en nuestra consola:

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

cd /home/pi
mkdir EjemplosTextos
cd EjemplosTextos

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

echo «Antonio Fenandez Martinez» >> Ejemplo.txt
echo «Jose Torres Contreras» >> Ejemplo.txt
echo «Ana Sanjuan Leyva» >> Ejemplo.txt

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

more /home/pi/EjemplosTextos/Ejemplo.txt

1.3 Búsqueda de cadena por línea – find()

El método o función que usaremos se denomina ‘find()‘, esta función busca un trozo de cadena y nos devuelve como resultado su posición numérica conforme a la línea de texto analizada, el modo de empleo es tan sencillo como almacenar la línea de texto en una variable y usar el método find() indicando entre los paréntesis el texto que queremos buscar. A continuación os dejamos un ejemplo del modo en que se declara:

VariableTexto = «Este es el texto donde quiero buscar»
PosicionTexto = VariableTexto.find(«quiero»)
print(PosicionTexto)

Hay modos más fáciles de explicar pero por suerte para nuestros lectores nos mola el riesgo y el gustito que darnos cabezazos con las paredes, así pues, haremos lo siguiente… definiremos en el propio código el nombre a buscar, leeremos línea a línea el fichero creado en el punto 1.2 e imprimiremos el número de línea donde encontremos la primera coincidencia.

Esta sería la estructura del código resultante de nuestro reto:

TextoABuscar = «Torres»

PosicionTexto = -1

NumeroLinea = 0

with open(“/home/pi/EjemplosTextos/Ejemplo.txt”, ‘r’) as ObjFichero:

for line in ObjFichero:

NumeroLinea = NumeroLinea + 1

PosicionTexto = line.find(TextoABuscar)

if PosicionTexto >= 0:

print («El texto se encuentra en la línea %i» % NumeroLinea)

break

Nota: Si os surgen dudas con respecto a tipos de datos recomendamos dar un repaso al artículo ‘Python (Parte 3) – Tipos de datos

Vamos avanzado! de aquí a nada seremos cracks de la programación! 😀

Leer ficheros con Python – Línea a línea

por | 23 mayo, 2017

1. Leer ficheros con Python – Línea a línea

1.1 Introducción

Muchas serán las ocasiones en las que necesitaremos leer un fichero de texto línea a línea, el fichero contendrá un listado de nombres, productos, URLs,… o quizá datos sobre nuestro sistema de riego para hacer cargas de datos o copias de seguridad.

Antes de comenzar este manual recomendamos echar un ojo al anterior manual ‘Leer ficheros con Python – Función Open()

1.2 Leer fichero y validar contenido

El primer paso evidentemente es leer el fichero y comprobar que su contenido es correcto imprimiendolo por pantalla, este paso de lectura e impresión lo eliminaremos en pasos posteriores pues solo queremos ver con nuestros ojitos si el fichero tiene más de una línea, en caso contrario no nos servirá para nuestras pruebas. Para llevar a cabo este paso crearemos el siguiente código:

ObjFichero = open(“NombreFichero.txt”)
TextoFichero = ObjFichero.read(5)
print (TextoFichero)
ObjFichero.close()

1.3 Lectura línea a línea

Existen varios modos de leer línea a línea y almacenar los resultados en listas y otros tipos de datos, a continuación veremos tres opciones completas que distinguirán cada línea usando como separador de líneas el salto de carro/línea también identificado como ‘\n‘:

  • Opción 1:

with open(«NombreFichero.txt») as ObjFichero:

VariableListado = ObjFichero:.readlines()

print(VariableListado[0])

  • Opción 2:

VariableListado = [line.rstrip(‘\n’) for line in open(«NombreFichero.txt»)]
print(VariableListado[0])

  • Opción 3:

with open(«NombreFichero.txt», «r») as ObjFichero:

VariableArray = []

for line in ObjFichero:

VariableArray.append(line)

print (VariableArray[0])

Nota: Si os surgen dudas con respecto a tipos de datos recomendamos dar un repaso al artículo ‘Python (Parte 3) – Tipos de datos

Todas las opciones son perfectamente válidas, en las dos primeras ahorraremos líneas de código, no obstante, aunque la tercera opción sea mucho más explicita, nos permite tratar cada línea en el momento de su lectura. El uso de cada opción lo dejamos al gusto de cada cual y dependiendo de las circunstancias existentes alrededor de la aplicación que estéis desarrollando.

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«.

Este artículo ha sido cortito pero esperamos que quede claro el concepto 🙂

Editar ficheros con Python – función Write()

por | 17 mayo, 2017

1. Editar ficheros con Python – función Write()

1.1 Introducción

La función ‘open‘ nos permitirá abrir ficheros y leer su contenido, no obstante, si deseamos editar su contenido a posteriori deberemos elegir una de los siguientes modos.

  • w‘ : Modo escritura. Hay que tener mucho ojo con este modo pues sobrescribiremos el texto original del fichero con el nuevo texto que nosotros introduzcamos. Podríamos usar este modo si estamos seguros de que es un fichero totalmente nuevo o bien si no nos importa perder el contenido anterior.
  • a : Modo añadir o agregar. Este modo abrirá archivos y agregará el contenido o texto que deseemos al final del mismo. Recomendamos empezar a practicar con este modo para evitar sorpresas y perdidas de contenido o texto en los ficheros de prueba con los que estemos trabajando.
  • r+‘ : Modo especial lectura/escritura: Este modo combina la lectura y escritura, no obstante, nos posicionará por defecto en el primer carácter del fichero, así pues, deberemos tener buen ojo para no borrar o reemplazar sin querer el contenido ya existente.

1.2 Editar ficheros < función write() >

Los pasos a seguir para aprender como trabaja esta función serán los siguientes:

  • Carga de fichero en objeto de tipo fichero con función ‘open()‘ en un modo que permita la posterior edición (‘w’, ‘a’, ‘r+’):

ObjFichero = open(«NombreFichero.txt», ‘w’)

  • Uso de función ‘write()‘ para carga o inserción del texto deseado en el fichero de texto:

MiNuevoTexto = «Este es el nuevo texto que quiero insertar»
ObjFichero.write(MiNuevoTexto)

  • Cierre de archivo para guardar el contenido:

ObjFichero.close()

  • Cargaremos un nuevo objeto de tipo archivo para evitar comportamientos no esperados, leeremos el nuevo contenido y confirmaremos que nuestro cambio o inserción fue aplicado correctamente:

ObjFichero2 = open(“NombreFichero.txt”)
TextoFichero = ObjFichero2.read()
print (TextoFichero)
ObjFichero2.close()

1.3 Caso práctico

Para nuestro caso práctico sea 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 ‘Ejemplo2.txt‘ donde introduciremos nuestro nombre y apellidos. Recomendamos usar el siguiente ejemplo:

echo «» >> Ejemplo.txt

  • Comprobaremos el contenido del fichero ‘Ejemplo2.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 ‘Ejemplo2.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:  Almacenaremos un nuevo texto en nuestro fichero ‘Ejemplo2.txt‘ sobrescribiendo cualquier contenido o texto anterior, para ello abriremos el fichero con el modo ‘w‘.

ObjFichero = open(“home/pi/Ejemplo2.txt”,’w’)
MiNuevoTexto = «Este es el nuevo texto que quiero insertar»
ObjFichero.write(MiNuevoTexto)
ObjFichero.close()
ObjFichero2 = open(“home/pi/Ejemplo2.txt”)
TextoFichero = ObjFichero2.read()
print (TextoFichero)
ObjFichero2.close()

  • Ejemplo 2:  Nos basaremos en el mismo ejemplo pero en esta ocasión veremos como se agrega el texto al final del contenido previamente existente, para ello abriremos el fichero con el modo ‘a‘.

ObjFichero = open(“home/pi/Ejemplo2.txt”,’a’)
MiNuevoTexto = «Este es el nuevo texto que quiero insertar»
ObjFichero.write(MiNuevoTexto)
ObjFichero.close()
ObjFichero2 = open(“home/pi/Ejemplo2.txt”)
TextoFichero = ObjFichero2.read()
print (TextoFichero)
ObjFichero2.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«.

 

Y con esto terminamos este manual básico requetebásico de tratamiento de ficheros en lenguaje Python!